Torna indietro   Hardware Upgrade Forum > Software > Programmazione

MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi
Abbiamo provato MSI PRO MAX EDGE AI+, un mini-PC professionale progettato per eseguire modelli di intelligenza artificiale in locale, senza dipendere dal cloud. Il sistema abbina il processore AMD Ryzen AI Max+ 395, 128 GB di memoria unificata e un telaio in alluminio da appena 4 litri, con l'obiettivo di offrire capacità di elaborazione elevate in un formato compatto.
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista
Il nuovo top di gamma vivo punta su un comparto fotografico particolarmente articolato, con un teleobiettivo da 200 megapixel e teleconvertitori esterni capaci di arrivare a 400 mm equivalenti. Lo abbiamo provato a Tenerife, mettendo alla prova fotocamere, prestazioni, autonomia e accessori. Ecco come si è comportato.
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
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: 12113
[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: 12113
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: 12113
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: 12113
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: 12113
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: 12113
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: 12113
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: 12113
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


MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB per far girare in locale anche i modelli più grandi MSI PRO MAX EDGE AI+, Ryzen AI Max+ 395 e 128 GB...
Recensione vivo X500 Pro Max: la fotografia mobile ha un nuovo protagonista Recensione vivo X500 Pro Max: la fotografia mobi...
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Rosstat hackerato: 23TB rubati, dentro a...
L'idropulitrice Cecotec da 2400W e fino ...
49€ sono davvero pochi per HP Envy 6120e...
SpaceX sceglie Qualcomm per la rete 5G t...
AMD mette la freccia e si prepara allo s...
Sony Santa Monica posticipa God of War L...
Il telescopio spaziale Swift è ri...
Black Friday HONOR, prezzi giù fi...
AliExpress sfida Amazon sui prezzi: e-bi...
Gemini sotto accusa in Ungheria: per l'a...
Windows 11 può girare sulla NPU invece d...
MediaWorld diventa cinese: l'UE dice s&i...
Akamai potenzia il proprio cloud con due...
Steam, Valve cambia le regole: le revisi...
Canva licenzia (anche) per colpa dell'IA...
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: 08:15.


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