Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare
Realizzato da Lenovo e installato presso il Cineca di Casalecchio di Reno, Pitagora offre circa 44 PFlop/s di potenza di calcolo ed è dedicato alla simulazione della fisica del plasma e allo studio dei materiali avanzati per la fusione, integrandosi nell’ecosistema del Tecnopolo di Bologna come infrastruttura strategica finanziata da EUROfusion e gestita in collaborazione con ENEA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Rullo di lavaggio dei pavimenti abbinato a un potente motore da 28.000 Pa e a bracci esterni che si estendono: queste, e molte altre, le caratteristiche tecniche di Z60 Ultra Roller Complete, l'ultimo robot di Mova che pulisce secondo le nostre preferenze oppure lasciando far tutto alla ricca logica di intelligenza artificiale integrata
Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-12-2005, 21:01   #1
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Pair Programming b0l vs ufo13[TASK2.1]

Ciao!

Qua iniziamo il task per inserire 2 gemme in grid.
Di questo se ne occupera gridController, che contterra anche i riferimenti alla coppia di gemme(come voluto da fek).

Per ora lasciamo cmq a grid la propietà di gemUnderControl(per compatibilta), poi vedremo se è il caso di toglierla)
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2005, 21:03   #2
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
primo test
testare inserimento della coppia di gemme

Codice:
    public void testInsertGemsPair(){
        controller.insertNewGemsPair();
        
        assertTrue(grid.isGemAt(0, 4));
        assertTrue(grid.isGemAt(1, 4));
        
    }
il test sarà nella nuova classe di test TestGemsPair

Ultima modifica di thebol : 22-12-2005 alle 21:27.
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2005, 21:39   #3
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Ovviamente non compila perchè manca la definizione del metodo insertNewGemsPair()

Inizio usando il quickfix di eclipse e lancio i test:

fallisce testInsertGemsPair

Inserisco il codice che mi fa passare i test:

Codice:
    public void insertNewGemsPair()
    {
        Gem pivotGem = gemQueue().extract();
        Gem slaveGem = gemQueue().extract();
        
        grid.insertGem(0, 4, slaveGem);
        grid.insertGem(1, 4, pivotGem);
    }
Build Successfull!

Preparo il nuovo test
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2005, 21:56   #4
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Per continuare abbiamo bisogno di spostare il concetto di gemUnderControl dentro GridController... Procediamo col refactoring...
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2005, 22:48   #5
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
prima di questo refactoring, ne farei un altro

la insertGem di grid fa 2 cose:
inserisce la gemma
la setta come gemUnderControll

visto che dobbiamo portare fuori gemUnderControll conviene separare le 2 logiche

Codice:
    public void insertGem(int row, int column, Gem gem)
    {
        if(isGemAt(row, column))
        {
            throw new IllegalArgumentException();
        }

        if(gem.isAttachedToGrid())
        {
            throw new IllegalArgumentException();
        }

        empty = false;

        gem.setCellPosition(row, column);

        addGemToGrid(gem);
        alignGemToCellUpperBound(gem);
        setGemUnderControl(gem);
    }

diventerebbe

Codice:
    
   public void insertGemUnderControll(int row, int column, Gem gem)
    {
        insertGem(row, column, gem);
        setGemUnderControl(gem);
    }


    public void insertGem(int row, int column, Gem gem)
    {
        if(isGemAt(row, column))
        {
            throw new IllegalArgumentException();
        }

        if(gem.isAttachedToGrid())
        {
            throw new IllegalArgumentException();
        }

        empty = false;

        gem.setCellPosition(row, column);

        addGemToGrid(gem);
        alignGemToCellUpperBound(gem);
    }
si introduce una nuova funzione che non è testata esplicitamente, ma lo è da insertGemUnderControll.

bisognerebbe cambiare un po di test per far si che testino direttamente insertGem e non insertGemUnderControll..
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2005, 23:11   #6
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
l'ultimo refactoring proposto lo facciamo dopo se ne abbiamo bisogno

per ora portiamo tutta la logica di gemundercontrol in gridController
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 22-12-2005, 23:53   #7
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
riretifica lo faccio subito, commito e per stasera ci fermiamo qua.

per l'altro refactoring(portare gemUnderControl in gridController) preferirei avere un coach o cmq uno che tiene d'occhio il design, che è un refactoring che porta molti cambiamenti(alcuni metodi in grid dovranno diventare pubblici, vorrei sapere se questo e un problema, o se qualcuno ha altre soluzioni) e cambiamenti nei test.

ciau
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 23-12-2005, 00:25   #8
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
fatto lo sdoppiamento e committato.

i 2 nuovi metodi sono gia testati, per fare questo ho diviso la funzione e fatto girare i test. Quelli legati alla insertGem che non giravano li ho modificati sostituendo insertGem con insertGemUnderControll e hanno ricominciato a funzionare testando la funzione.

in piu ho aggiunto il test

Codice:
    public void testInsertGemUnderControll()
    {
        grid.insertGem(4, 2, gem1);
        assertSame("Wrong gem under control", gem1, grid.getGemUnderControl());
    }
mo faccio il commit
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 23-12-2005, 09:16   #9
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
A me e` venuta un'idea che semplificherebbe il task e richiederebbe un numero minimo di modifiche... Quando (se ) torno a casa spiego tutto
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2005, 11:56   #10
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Aggiungo il test:

Codice:
    public void testGemsPairUnderGravity()
    {
        MockTimer timer = new MockTimer();
        
        gridController.insertNewGemsPair();
        grid.setGravity(1.0f);
        
        timer.advance(config.getInteger("UpdateRate")+1);
        gridController.update(timer);
        
        assertTrue("slaveGem didn't move correctly after gravity applied", grid.isGemAt(1, 4));
        assertTrue("pivotGem didn't move correctly after gravity applied", grid.isGemAt(2, 4));
    }
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2005, 12:03   #11
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Il test compila ma non va:

NullPointerException in update di gridController...

insertNewGemsPair non setta gemUnderControl

cambio di conseguenza in

Codice:
    public void insertNewGemsPair()
    {
        Gem slaveGem = gemGenerator.extract();
        grid.insertGem(0, 4, slaveGem);
        
        Gem pivotGem = gemGenerator.extract();
        grid.insertGem(1, 4, pivotGem);
        
        setGemUnderControl(pivotGem);
    }
ora lancio i test...

Failure... La slaveGem non si è spostata... La update va solo su gemUnderControl... Lo cambio di conseguenza


Codice:
        grid.update(timer, getGemUnderControl());
        grid.update(timer, slaveGem);
aggiungo il campo privato slaveGem...

Funziona!
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2005, 12:07   #12
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
ormai mi rendo conto che non stiamo andando in pair ma non riusciamo proprio ad avere gli stessi orari pare con queste feste in mezzo... Poi con i refactoring mio e di cionci il task si è semplificato assai...
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2005, 12:20   #13
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
thebol ti propongo questi:

Codice:
    public void testGemsPairMoveLeft()
    {
        gridController.insertNewGemsPair();
        
        gridController.moveLeft();
        
        assertTrue("slaveGem didn't move correctly after moveLeft", grid.isGemAt(0, 3));
        assertTrue("pivotGem didn't move correctly after moveLeft", grid.isGemAt(1, 3));
    }

    public void testGemsPairMoveRight()
    {
        gridController.insertNewGemsPair();
        
        gridController.moveRight();
        
        assertTrue("slaveGem didn't move correctly after moveRight", grid.isGemAt(0, 5));
        assertTrue("pivotGem didn't move correctly after moveRight", grid.isGemAt(1, 5));
    }
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2005, 16:17   #14
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
faccio io

Codice:
    public void moveLeft()
    {
        grid.moveGemLeft(gemUnderControl);
        grid.moveGemLeft(slaveGem);
    }


    public void moveRight()
    {
        grid.moveGemRight(gemUnderControl);
        grid.moveGemRight(slaveGem);
    }
Verde, preparo nuovi test
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2005, 17:05   #15
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Due nuovi test

Codice:
    public void testGemsPairReactingToMoveLeftEvent()
    {
        input.generateKey(Input.KeyCode.vk_Left);
        
        gridController.reactToInput(new MockTimer());
        
        assertTrue("slaveGem didn't move correctly after MoveRight Event", grid.isGemAt(0, 3));
        assertTrue("pivotGem didn't move correctly after MoveRight Event", grid.isGemAt(1, 3));
    }
    
    public void testGemsPairReactingToMoveRightEvent()
    {
        input.generateKey(Input.KeyCode.vk_Right);
        
        gridController.reactToInput(new MockTimer());
        
        assertTrue("slaveGem didn't move correctly after MoveRight Event", grid.isGemAt(0, 5));
        assertTrue("pivotGem didn't move correctly after MoveRight Event", grid.isGemAt(1, 5));
    }
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2005, 17:15   #16
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Entrambi i test falliscono su slaveGem...

Per fare funzionare i test cambio MoveLeftCommandHandler e MoveRightCommandHandler dove in handleEvent chiamaeranno moveLeft e moveRight di GridController

Lancio i test...

NullPointerException in testReactToInput... Perchè? Beh ovviamente moveLeft e moveRight danno per scontato che slaveGem non sia null... Basta modificare il codice in questo modo:

Codice:
    public void moveLeft()
    {
        grid.moveGemLeft(gemUnderControl);
        
        if(slaveGem != null)
        {
            grid.moveGemLeft(slaveGem);
        }
    }


    public void moveRight()
    {
        grid.moveGemRight(gemUnderControl);
        
        if(slaveGem != null)
        {
            grid.moveGemRight(slaveGem);
        }
    }
Lancio i test...
Funziona!
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2005, 18:01   #17
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
A questo punto direi che ci vuole il test per vedere che la coppia non si separi mai anche in condizioni limite (la gemma di sotto non può muoversi a sinistra ma quella di sopra sì).

Il test è il seguente:

Codice:
    public void testGemsPairDoesntSplit()
    {
        Gem gem = Gem.createForTesting();
        grid.insertGem(1, 3, gem);
        
        gridController.moveLeft();
        
        assertTrue("slaveGem must not move left", gridController.getSlaveGem().getCellColumn() == 4);
    }
Per compilare devo testare ed implementare anche la getSlaveGem() (test talmente banale che non posto neanche )

Eseguo i test...
Rosso... La gemma si muove...

Ho bisogno di sapere dentro gridController se le gemme possono muoversi a sinistra o a destra...

Preparo due test da aggiungere in testGrid:
Codice:
    public void testGemCanMoveLeft()
    {
        grid.insertGem(3, 3, gem1);
        
        assertTrue("gem1 can move left", grid.gemCanMoveLeft(gem1));
        
        grid.insertGem(3, 2, gem2);
        
        assertFalse("gem1 cannot move left", grid.gemCanMoveLeft(gem1));
    }
    
    public void testGemCanMoveRight()
    {
        grid.insertGem(3, 2, gem1);
        
        assertTrue("gem1 can move right", grid.gemCanMoveRight(gem1));
        
        grid.insertGem(3, 3, gem2);
        
        assertFalse("gem1 cannot move right", grid.gemCanMoveRight(gem1));
    }
uso quick fix per implementare gli stub e lancio i test... azz si ferma al testGemsPair... Allora commento un secondo quel test e rilancio i test... Rosso...

Implemento questo codice:
Codice:
    public boolean gemCanMoveLeft(Gem gem)
    {
        return canMove(gem, -1);
    }


    public boolean gemCanMoveRight(Gem gem)
    {
        return canMove(gem, +1);
    }
Rilancio i test... Verde! Decommento il test in TestGemsPair e rilancio i test... Ancora rosso (certamente )...

Cambio moveLeft()
Codice:
    public void moveLeft()
    {
        if(slaveGem == null)
        {
            grid.moveGemLeft(gemUnderControl);
        }
        else
        if(grid.gemCanMoveLeft(gemUnderControl) && grid.gemCanMoveLeft(slaveGem))
        {
            grid.moveGemLeft(gemUnderControl);
            grid.moveGemLeft(slaveGem);
        }
    }
Lancio i test... Verde! Oggi son fortunato

Ora rifaccio il test e l'implementazione per il movimento a destra... Verde
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2005, 18:10   #18
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Le gemme in posizione verticale non sono previste in questo task quindi non preparerò i test per lo split delle gemme in posizione orizzontale quando una delle due per effetto della gravità incontra un'ostacolo...

Ora non mi rimane che fare il refactoring per la creazione di oggetti GemsPair invece che singole gemme...
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2005, 19:03   #19
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Ok, il task è completo
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Cineca inaugura Pitagora, il supercomputer Lenovo per la ricerca sulla fusione nucleare Cineca inaugura Pitagora, il supercomputer Lenov...
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA Mova Z60 Ultra Roller Complete: pulisce bene gra...
Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Una parte dei Galaxy S26 avrà chi...
Amazon permetterà agli autori ind...
Il caso Zuckerberg a Palo Alto: una scuo...
Texas contro Roblox: il procuratore gene...
Offerte auto da urlo su Amazon: da CarPl...
Windows 11 26H1 in arrivo fra pochi mesi...
Un Black Friday continuo a rilascio lent...
Redmi Pad Pro da 12,1" 2560x2600 pi...
Tesla Roadster rinviata (di nuovo): ora ...
Il nuovo TV premium 2025 Samsung OLED 4K...
Ecco una TV QLED da 55'' che costa 303€:...
Doppia offerta per le soundbar Samsung: ...
Nubia Z80 Ultra con Snapdragon 8 Elite G...
Google Pixel, è svendita di tutti...
Nuovo Tesla Semi: telaio rivisto, fari r...
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: 15:17.


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