EP3 unit test

EP3 unit test

por João Gabriel Loureiro de Lima Lembo -
Número de respostas: 2

Bom dia!

Estou com uma dúvida quanto ao funcionamento do unit test: Ao realizar o primeiro teste, o iterador pega as 10 primeiras permutações. Dessa forma, ao chamar nextovo novamente, ele daria o décimo-primeiro elemento. No entanto, no segundo teste as permutações são reiniciadas, isto é, o programa gera as 10 primeiras permutações novamente. Eu posso fazer alterações na main para garantir esse reinício, ou devo fazer de outra forma? Obrigado,

 

João G.

Em resposta à João Gabriel Loureiro de Lima Lembo

Re: EP3 unit test

por Felipe Castro de Noronha -

Olá,

 

O que acontece é que ao realizar o primeiro teste uma nova instancia da classe iteradora é criada, a partir dessa instância são geradas as próximas 10 permutações. Já no segundo teste, uma nova instância da classe iteradora é criada, dando inicio á um novo ciclo da tarefa. Ou seja, o "reinicio" na verdade é a inicialiazação da classe iteradora.

 

Eu falei classe iteradora mas deve ser metodo iterador, mas whatever

Em resposta à João Gabriel Loureiro de Lima Lembo

Re: EP3 unit test

por José Coelho de Pina -

Ois,

João, muito obrigado por compartilhar a sua dúvida!

O unit test abaixo é apenas um exemplo do que Felipe explicou.


import java.util.Iterator; // para criarmos um iterador
import edu.princeton.cs.algs4.StdOut;

public class Cliente {
    
    public static void main(String[] args) {
        String s = args[0];
        Arrangements arr = new Arrangements(s);

        StdOut.println("Teste 1: imprime no máximo os 5 primeiros arranjos; usa iterador t1");
        Iterator<String> it1 = arr.iterator();
        int i1 = 0; // contador para o iterador it1
        while (it1.hasNext() && i1 < 5) {
            StdOut.println(i1 + " : " + it1.next());
            i1++;
        }

        StdOut.println("Teste 2: imprime no máximo os 3 primeiros arranjos; usa iterador t2");
        Iterator<String> it2 = arr.iterator();
        int i2 = 0; // contado  para o iterador it2
        while (it2.hasNext() && i2 < 3) {
            StdOut.println(i2 + " : " + it2.next());
            i2++;
        }
        
        StdOut.println("Teste 3: imprime todos os arranjos; usa iterador do 'for each'");
        int i = 0;
        for (String arranjo: arr) { // o iterador está implicito
            StdOut.println(i + " : " + arranjo);
            i++;
        }

        StdOut.println("Teste 4: imprime todos os arranjos restante usando o it1");        
        while (it1.hasNext()) {
            StdOut.println(i1 + " : " + it1.next());
            i1++;
        }

        StdOut.println("Teste 4: imprime todos os arranjos restante usando o it2");        
        while (it2.hasNext()) {
            StdOut.println(i2 + " : " + it2.next());
            i2++;
        }
    }
}

% java Cliente ABCa
Teste 1: imprime no máximo os 5 primeiros arranjos; usa iterador t1
0 : ABCa
1 : ABaC
2 : ACBa
3 : ACaB
4 : AaBC
Teste 2: imprime no máximo os 3 primeiros arranjos; usa iterador t2
0 : ABCa
1 : ABaC
2 : ACBa
Teste 3: imprime todos os arranjos; usa iterador do 'for each'
0 : ABCa
1 : ABaC
2 : ACBa
3 : ACaB
4 : AaBC
5 : AaCB
6 : BACa
7 : BAaC
8 : BCAa
9 : BCaA
10 : BaAC
11 : BaCA
12 : CABa
13 : CAaB
14 : CBAa
15 : CBaA
16 : CaAB
17 : CaBA
18 : aABC
19 : aACB
20 : aBAC
21 : aBCA
22 : aCAB
23 : aCBA
Teste 4: imprime todos os arranjos restante usando o it1
5 : AaCB
6 : BACa
7 : BAaC
8 : BCAa
9 : BCaA
10 : BaAC
11 : BaCA
12 : CABa
13 : CAaB
14 : CBAa
15 : CBaA
16 : CaAB
17 : CaBA
18 : aABC
19 : aACB
20 : aBAC
21 : aBCA
22 : aCAB
23 : aCBA
Teste 4: imprime todos os arranjos restante usando o it2
3 : ACaB
4 : AaBC
5 : AaCB
6 : BACa
7 : BAaC
8 : BCAa
9 : BCaA
10 : BaAC
11 : BaCA
12 : CABa
13 : CAaB
14 : CBAa
15 : CBaA
16 : CaAB
17 : CaBA
18 : aABC
19 : aACB
20 : aBAC
21 : aBCA
22 : aCAB
23 : aCBA