Skip to content

Instantly share code, notes, and snippets.

@gabrielrubens
Last active December 30, 2015 22:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gabrielrubens/7892629 to your computer and use it in GitHub Desktop.
Save gabrielrubens/7892629 to your computer and use it in GitHub Desktop.
import java.util.Iterator;
public class FibonacciIteratorFinal implements Iterator<FibonacciIteratorFinal> {
private final Integer n1;
private final Integer n2;
private final Integer result;
public FibonacciIteratorFinal() {
this.n1 = 0;
this.n2 = 1;
this.result = 0;
}
private FibonacciIteratorFinal(Integer n1, Integer n2, Integer result) {
this.n1 = n1;
this.n2 = n2;
this.result = result;
}
public boolean hasNext() {
return true;
}
public FibonacciIteratorFinal next() {
if(result==0)
return new FibonacciIteratorFinal(n1, n2, result+1);
else if(result==1 && n1==0)
return new FibonacciIteratorFinal(n1+1, n2, result);
return new FibonacciIteratorFinal(n2, result, result+n2);
}
@Deprecated
public void remove() {
throw new RuntimeException("Operação não permitida!");
}
public Integer value(){
return result;
}
}
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
public class FibonacciIteratorFinalAcopladaTest {
@Test
public void deveRetonarZeroComoPrimeiroElementoEHasnextIgualATrue() {
FibonacciIteratorFinal fibonacci = new FibonacciIteratorFinal();
assertEquals(0, fibonacci.value(), 0);
assertTrue(fibonacci.hasNext());
}
@Test
public void deveRetonarZeroUmeUmComoPrimeirosElementos() {
List<Integer> esperado = Arrays.asList(0,1,1);
List<Integer> recebido = new ArrayList<Integer>();
FibonacciIteratorFinal fibonacci = new FibonacciIteratorFinal();
recebido.add(fibonacci.value());
fibonacci = fibonacci.next();
recebido.add(fibonacci.value());
fibonacci = fibonacci.next();
recebido.add(fibonacci.value());
assertEquals(esperado, recebido);
assertTrue(fibonacci.hasNext());
}
@Test
public void deveRetonarOsOitoPrimeirosElementos() {
List<Integer> esperado = Arrays.asList(0,1,1,2,3,5,8,13);
List<Integer> recebido = new ArrayList<Integer>();
FibonacciIteratorFinal fibonacci = new FibonacciIteratorFinal();
recebido.add(fibonacci.value());
fibonacci = fibonacci.next();
recebido.add(fibonacci.value());
fibonacci = fibonacci.next();
recebido.add(fibonacci.value());
fibonacci = fibonacci.next();
recebido.add(fibonacci.value());
fibonacci = fibonacci.next();
recebido.add(fibonacci.value());
fibonacci = fibonacci.next();
recebido.add(fibonacci.value());
fibonacci = fibonacci.next();
recebido.add(fibonacci.value());
fibonacci = fibonacci.next();
recebido.add(fibonacci.value());
assertEquals(esperado, recebido);
assertTrue(fibonacci.hasNext());
}
@Test(expected=RuntimeException.class)
public void deveRetornarExceptionCasoRemoveSejaChamado(){
FibonacciIteratorFinal fibonacci = new FibonacciIteratorFinal();
fibonacci.remove();
}
}
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
public class FibonacciIteratorFinalTest {
private List<Integer> esperado;
private List<Integer> recebido;
private FibonacciIteratorFinal fibonacci;
@Before
public void setUp(){
recebido = new ArrayList<Integer>();
fibonacci = new FibonacciIteratorFinal();
}
@Test
public void deveRetonarZeroComoPrimeiroElementoEHasnextIgualATrue() {
assertEquals(0, fibonacci.value(), 0);
assertTrue(fibonacci.hasNext());
}
@Test
public void deveRetonarZeroUmeUmComoPrimeirosElementos() {
esperado = Arrays.asList(0,1,1);
recebido = retornaQuantidadeDeElementos(3);
/*recebido.add(fibonacci.value());
fibonacci = fibonacci.next();
recebido.add(fibonacci.value());
fibonacci = fibonacci.next();
recebido.add(fibonacci.value());*/
assertEquals(esperado, recebido);
assertTrue(fibonacci.hasNext());
}
@Test
public void deveRetonarOsOitoPrimeirosElementos() {
esperado = Arrays.asList(0,1,1,2,3,5,8,13);
recebido = retornaQuantidadeDeElementos(8);
assertEquals(esperado, recebido);
assertTrue(fibonacci.hasNext());
}
@Test(expected=RuntimeException.class)
public void deveRetornarExceptionCasoRemoveSejaChamado(){
fibonacci.remove();
}
private List<Integer> retornaQuantidadeDeElementos(int qtd) {
qtd--;
recebido.add(fibonacci.value());
for(int i=0; i < qtd; i++){
fibonacci = fibonacci.next();
recebido.add(fibonacci.value());
}
return recebido;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment