Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Cos'è la bolla dell'IA e perché se ne parla
Cos'è la bolla dell'IA e perché se ne parla
Si parla molto ultimamente di "bolla dell'intelligenza artificiale", ma non è sempre chiaro perché: l'IA è una tecnologia molto promettente e che ha già cambiato molte cose dentro e fuori le aziende, ma ci sono enormi aspettative che stanno gonfiando a dismisura i valori delle azioni e distorcendo il mercato. Il che, com'è facile intuire, può portare a una ripetizione della "bolla dotcom", e forse anche di quella dei mutui subprime. Vediamo perché
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-11-2005, 19:07   #1
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
[CICLO 5 STORIA 2] Test Driven Development (Cover - TigerShark)

Iniziamo questa sessione di TDD in pair programming.
Al solito NON COMMITTATE perchè lo stato del repository sarà precario dopo quello che faremo!
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 19:55   #2
cover
Senior Member
 
L'Avatar di cover
 
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
Ok, proviamo ^^

Anche aggiungendo noi la gemma, ci serve comunque un test che ci dica quando ne è presente un'altra subito sotto la posizione corrente del diamante. Noi sappiamo che è presente perchè la aggiungiamo tramite insertGemAt, però quando la gemma scende deve poter controllare se il blocco successivo sia libero per poter scendere ancora. Quindi il primo test è di aggiungere due gemme e controllare che sotto la prima ci sia la seconda. Ecco il test (speriamo in bene ):

Codice:
    public void testGemInNextRow()
    {
        grid.insertGem(4, 3, gem1);
        grid.insertGem(5, 3, gem2);
        assertTrue("another gem in next row,in same column", grid.thereIsGemBelow(gem1));
    }
__________________
.:. NEONISI .:. a new island for online auctions. It's worldwide, safe, simple and free. Join Us!
cover è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 20:07   #3
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Prima dovevo finire il 5.2.1

Ora lo committo...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 20:14   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Perchè i test nuovi o aggiunti non li mettete in it.diamonds.test.ignore ? Almeno la build machine non fa una build rossa...

Ancora un attimo epr il mio commit... Vi devo togliere il test che avete fatto...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 20:16   #5
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Perfetto.
il test fallisce correttamente
per farlo passare basta scrivere questo codice:
Codice:
public boolean isGemBelow(Gem gem)
    {
        return true;
    }
ho preferito chiamare il test isGemBelow() al posto di thereIsGemBelow() e ho aggiornato conseguentemente la classe TestGrid.
Ma ora posso anche pingermi un pochino avanti e controllare effettivamente se ci sia o meno una gemma nella casella sottostante....
per questo:
Codice:
public boolean isGemBelow(Gem gem)
    {
        Cell currentCell = findGemCell(gem);
        return isGemAt(currentCell.row() + 1, currentCell.column());
    }
bene Build verde.....
ovviamente questo codice ancora "puzza" un pò.... ma dato che fa passare i test fa il suo compito e per ora può andare
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 20:18   #6
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Ragazzi, quando fate il commit di un test che fallisce, mettetelo in tests.ignore cosi' la build non si rompe.

Grazie
fek è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 20:25   #7
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
si sistemato..
ho lasciato il test che passa in TestGrid ma ora ho creato TestGrid sotto ignore per poter lavorare tranquillamente là
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 20:26   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
NON FATE COMMITTTTTTTT !!!
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 20:33   #9
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ora potete lavor4arci, attenzione che ho rimosso il vostro codice...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 20:56   #10
cover
Senior Member
 
L'Avatar di cover
 
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
Fek, mea culpa ^^

Ho modificato il test in questo modo:

Codice:
    public void testGemInNextRow()
    {
        grid.insertGem(4, 3, gem1);
        assertFalse("Cell under current position is not empty", grid.isGemBelow(gem1));
        grid.insertGem(5, 3, gem2);
        assertTrue("Cell under current position is empty", grid.isGemBelow(gem1));
    }
Per avere una certezza in più del suo funzionamento (ovviamente ora passa perchè hai già fatto la modifica prima)
__________________
.:. NEONISI .:. a new island for online auctions. It's worldwide, safe, simple and free. Join Us!
cover è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 21:32   #11
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
si in effetti mi sono fatto prendere un pò la mano
però mi sentivo abbastanza sicuro da scrivere 2 righe di codice (letterlamente ) senza test.
Ora grazie a te abbiamo pure il test che ci assicura il corretto funzionamento del codice da me scritto

Torniamo a noi...
A questo punto direi di verificare che la gemma continui la sua caduta se la cella sottostante è libera:
Codice:
public void testGemIsMovingWhenNextCellIsEmpty()
    {
        grid.insertGem(4, 3, gem1);
        grid.setGemUnderControl(gem1);
        grid.setGravity(1.0f);
        float oldPosY = gem1.getY();
        grid.update();
        assertEquals("Gem is not moving when cell under current position is empty", gem1.getY(), oldPosY + 1.0, 0.0000001);
    }
il test passa dopo aver aggiunto la precisione.... suppongo sia un errore di arrotondamento.....

a te
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 21:34   #12
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da ^TiGeRShArK^
si in effetti mi sono fatto prendere un pò la mano
però mi sentivo abbastanza sicuro da scrivere 2 righe di codice (letterlamente ) senza test.
Riprovaci e ti sego entrambe le mani

Si scrive nuovo codice solo in presenza di un test che fallisce.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 21:38   #13
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da fek
Riprovaci e ti sego entrambe le mani

Si scrive nuovo codice solo in presenza di un test che fallisce.

mi è scappato kiedo venia!
cmq me ne sono reso conto subito e ho detto a cover d aggiungere il test corrispondente
(e ci aveva pensato pure lui contemporaneamente )
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 22:02   #14
cover
Senior Member
 
L'Avatar di cover
 
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
Bene, ora direi di controllare che la gemma non effettui alcun movimento in caso di una gemma presente nella riga sotto.

Test:

Codice:
    public void testGemIsStopWhenNextCellIsFull()
    {
        grid.insertGem(5, 2, gem1);
        grid.insertGem(6, 2, gem2);
        grid.setGemUnderControl(gem1);
        grid.setGravity(1.0f);
        grid.update();
        assertTrue("Gem has overlapped one already present", gem1.notMoved);
    }
Però sono indeciso per:

Codice:
        assertTrue("Gem has overlapped one already present", gem1.notMoved);
si potrebbe anche fare:

Codice:
        assertFalse("Gem has overlapped one already present", gem1.Moved);
Alla fine il concetto è uguale, però in questo caso qual'è meglio e più adatta?
Forse assertFalse, tu che dici ?
__________________
.:. NEONISI .:. a new island for online auctions. It's worldwide, safe, simple and free. Join Us!
cover è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 22:08   #15
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
personalmente preferirei l'assertFalse in combinazione con moved....
comunque ora scrivo il codice e vedo quale suona meglio per sicurezza
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 22:15   #16
cover
Senior Member
 
L'Avatar di cover
 
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
Ricordati di scrivere il minimo ed indispensabile per compilare il programma, ed in seguito per far passare il test, nulla di più.
Sempre se tieni alle mani
__________________
.:. NEONISI .:. a new island for online auctions. It's worldwide, safe, simple and free. Join Us!
cover è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 22:18   #17
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Allora...
piccolo refactoring:
Codice:
public void testGemIsMovingWhenLowerCellIsEmpty()
    {
        grid.insertGem(4, 3, gem1);
        grid.setGemUnderControl(gem1);
        grid.setGravity(1.0f);
        float oldPosY = gem1.getY();
        grid.update();
        assertEquals("Gem is not moving when cell under current position is empty", gem1.getY(), oldPosY + 1.0, 0.0000001);
    }
    
    
    public void testGemIsStoppedWhenLowerCellIsFull()
    {
        grid.insertGem(5, 2, gem1);
        grid.insertGem(6, 2, gem2);
        grid.setGemUnderControl(gem1);
        grid.setGravity(1.0f);
        grid.update();
        assertFalse("Gem has overlapped one already present", gem1.moved());
    }
ho cambiato il nome dei test perchè credo che LowerCell renda meglio l'idea di NextCell e ho creato il codice minimo per farlo passare
Codice:
public boolean moved()
    {
        return false;
    }
avanti così che mi inizia a piacere!
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 22:27   #18
cover
Senior Member
 
L'Avatar di cover
 
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
Ma...ma...ma cosa vedo, che bello! Questo metodo non è male, ci serve anche per il test precedente, infatti possiamo usare direttamente .moved per controllare che effettivamente la gemma si sia mossa, senza utilizzare direttamente le coordinate nel test
Quindi cambierei il test precedente da:

Codice:
public void testGemIsMovingWhenLowerCellIsEmpty()
    {
        grid.insertGem(4, 3, gem1);
        grid.setGemUnderControl(gem1);
        grid.setGravity(1.0f);
        float oldPosY = gem1.getY();
        grid.update();
        assertEquals("Gem is not moving when cell under current position is empty", gem1.getY(), oldPosY + 1.0, 0.0000001);
    }

A questa nuova versione:

Codice:
    public void testGemIsMovingWhenLowerCellIsEmpty()
    {
        grid.insertGem(4, 3, gem1);
        grid.setGemUnderControl(gem1);
        grid.setGravity(1.0f);
        grid.update();
        assertTrue("Gem is not moving when cell under current position is empty", gem1.moved());
    }
__________________
.:. NEONISI .:. a new island for online auctions. It's worldwide, safe, simple and free. Join Us!
cover è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 22:46   #19
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
oh che bello!
il test appena modificato fallisce!
per farlo passare aggiungo:
Codice:
    private boolean moved;

    public boolean moved()
    {
        return moved;
    }
    
    
    public void setMoved(boolean moved)
    {
        this.moved = moved;
    }
e ovviamente setto moved a true quando viene spostata la gemma ovvero:
Codice:
private void applyGravity(Gem gem, Cell cell)
    {
        if(gemHasCollidedWithBottom(gem))
        {
            final float heightFromGround = bounds.bottom() - gem.getHeight()
                - gem.getY();

            gem.move(0, heightFromGround);
            if(!gem.wasDropped())
            {
                gem.drop();
            }
        }
        else
        {
            gem.move(0, actualGravity);
            gem.setMoved(true);
        }
    }
indovina un pò quale test fallisce ora?
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2005, 23:27   #20
cover
Senior Member
 
L'Avatar di cover
 
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
Per la serie: Notte Horror, questa sera presentiamo in prima visione: "Code Horror", un film tratto da una storia vera

Non mi è venuto in mente niente a parte questa modifica ( ) di applyGravity:

Codice:
    private void applyGravity(Gem gem, Cell cell)
    {
        boolean isGemBelow = false;
        if(!gemHasCollidedWithBottom(gem))
        {
            try
            {
            isGemBelow = isGemBelow(gem);
            }
            catch(IllegalArgumentException e)
            {
            
            }          
        }
        if(gemHasCollidedWithBottom(gem) || isGemBelow)


Però i test passano tutti, il gioco funziona...anche se le gemme vengono disegnate in fondo le celle vengono occupate, da diamanti "fantasma"
__________________
.:. NEONISI .:. a new island for online auctions. It's worldwide, safe, simple and free. Join Us!

Ultima modifica di cover : 16-11-2005 alle 23:30.
cover è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
SpaceX: un satellite ha fotografato il s...
36 idee regalo con offerte Amazon sotto ...
Sony assume il controllo dei Peanuts: Sn...
DJI Neo scende a 149€ su Amazon, in vers...
Scoperto un nuovo esopianeta che orbita ...
Blue Origin NS-37: successo per la missi...
Potrebbe essere stata rilevata una super...
La cometa interstellare 3I/ATLAS è...
Xiaomi 17 Ultra: l'autonomia non sarà un...
Il processo produttivo a 2 nm di TSMC è ...
L'atteso aggiornamento dei driver della ...
The Elder Scrolls VI nel 2029 e Fallout ...
Il Ryzen 7 9850X3D appare nel catalogo d...
Weekend pre natalizio Amazon, ecco tutte...
Prezzi giù su Oral-B iO: spazzolini elet...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:42.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v