Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
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


Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Ford: l'elettrico genera una perdita di ...
Ayaneo Next 2: la console portatile Wind...
Il WiFi può vederti senza telecam...
Linux sotto assedio: SSHStalker riporta ...
Stellantis: dopo il crollo di venerd&igr...
Combat Liquid 360 HUD: raffreddamento AI...
Tornano le EVO Sessions della Formula E:...
Moltbook, il social network per AI: i po...
Cina: eseguito il test della navicella M...
Mistral, il rivale europeo di OpenAI, in...
Libri piratati, allarme rosso: 722 milio...
Ayaneo svela quasi tutte le specifiche d...
Sony chiude definitivamente con i regist...
Renault Twingo E-Tech Electric sotto i 2...
Auto elettriche, il freddo non fa pi&ugr...
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: 19:35.


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