Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
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


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...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
Funzionalità top a un prezzo acce...
Lo strumento per gli aggiornamenti autom...
Imperdibile sconto sul roborock Saros Z7...
Google Pixel 10, altri 100€ di sconto su...
Chip sotto i 2 nanometri, l'Europa alza ...
La smart meno smart di tutte: #6 in azio...
Red Hat Enterprise Linux sbarca su AWS E...
Addio alle migliaia di cicli e anni di t...
Colpo di STMicroelectronics, un'intesa d...
La Ferrari elettrica si chiama Luce: ecc...
Proseguono le riparazioni in vista del l...
Cinema domestico low cost: proiettore Fu...
Sharp porta a ISE 2026 i nuovi display i...
Casa più sicura senza lavori: Arl...
Batterie esauste, l'Italia raccoglie sol...
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: 01:17.


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