package funkcje;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class FibTest {

	@Test
	public void test0() {
		long wynik = Funkcje.fib(0);
		assertEquals(0, wynik);
	}

	@Test
	public void test1() {
		long wynik = Funkcje.fib(1);
		assertEquals(1, wynik);
	}

	@Test
	public void test2() {
		long wynik = Funkcje.fib(2);
		assertEquals(1, wynik);
	}

	@Test
	public void test10() {
		long wynik = Funkcje.fib(10);
		assertEquals(55, wynik);
	}

	@Test(timeout=1000)
	public void testFib40() {
		long wynik = Funkcje.fib(40);
		assertEquals(102334155L, wynik);
	}

	// Ograniczamy czas działania do 1 sek. Jeśli funkcja się nie skończy, to jest przerywana siłowo i kończy się błędem.
	@Test(timeout=1000)
    public void testFib80() {
        long wynik = Funkcje.fib(80);
        assertEquals(23416728348467685L, wynik);
    }

	// Wywołanie POWINNO zakończyć się wyjątkiem podanego typu
	// Teraz brak wyjątku jest traktowany jako porażka testu
	@Test(expected=IllegalArgumentException.class)
	public void testUjemna() {
		Funkcje.fib(-1);
	}
	
}
