package com.nurkiewicz.lazyseq.samples;
import com.nurkiewicz.lazyseq.AbstractBaseTestCase;
import com.nurkiewicz.lazyseq.LazySeq;
import org.testng.annotations.Test;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
/**
* @author Tomasz Nurkiewicz
* @since 5/12/13, 3:30 PM
*/
public class FibonacciTest extends AbstractBaseTestCase {
@Test
public void shouldGenerateFibonacciSequence() throws Exception {
final LazySeq<Integer> fib = lastTwoFib(0, 1);
assertThat(fib.startsWith(asList(0, 1, 1, 2, 3, 5, 8, 13, 21)));
}
private static LazySeq<Integer> lastTwoFib(int first, int second) {
return LazySeq.cons(
first,
() -> lastTwoFib(second, first + second)
);
}
@Test
public void shouldReturnGreaterFibonacciNumber() throws Exception {
final LazySeq<Integer> fib = lastTwoFib(0, 1);
assertThat(fib.get(5)).isEqualTo(5);
assertThat(fib.get(45)).isEqualTo(1_134_903_170);
}
}