Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme e Aston Martin Aramco F1 Team si sono (ri)unite dando alla vita un flagship con chip Snapdragon 8 Elite Gen 5 e design esclusivo ispirato alle monoposto di Formula 1. La Dream Edition introduce la nuova colorazione Lime Essence abbinata al tradizionale Aston Martin Racing Green, decorazioni intercambiabili personalizzate e una confezione a tema F1, intorno a uno smartphone dall'ottima dotazione tecnica con batteria da 7000mAh ricaricabile a 120W e isola fotografica intercambiabile
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
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


Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
Il veicolo riutilizzabile ESA Space Ride...
Un Mousepad per mirare meglio: uno youtu...
Tokyo Electron sotto accusa: Taiwan cont...
L'ESA sta cercando alternative all'utili...
iliad TOP 250 PLUS e TOP 300 PLUS: valan...
FRITZ! a Sicurezza 2025: connessioni WiF...
I 18enni di oggi non fanno più la...
Super offerte Apple: iPhone 16e a 529€ e...
Torres EVT arriva in Italia con listino ...
Microsoft Flight Simulator 2024 provato ...
Offerte Amazon ancora attive: Kindle, Fi...
Caldaie a gas, colpo di scena: l'UE valu...
Altro che 'scandalo De Martino', in Core...
Meta leggerà i tuoi messaggi dal ...
OpenAI entra in Thrive Holdings: nasce u...
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: 18:03.


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