|
| 1 | +#!python |
| 2 | + |
| 3 | +from recursion import fibonacci |
| 4 | +import unittest |
| 5 | + |
| 6 | + |
| 7 | +class RecursionTest(unittest.TestCase): |
| 8 | + def test_fibonacci_with_small_integers(self): |
| 9 | + # Known fibonacci numbers with small integer arguments |
| 10 | + assert fibonacci(0) == 0 # base case |
| 11 | + assert fibonacci(1) == 1 # base case |
| 12 | + assert fibonacci(2) == 1 |
| 13 | + assert fibonacci(3) == 2 |
| 14 | + assert fibonacci(4) == 3 |
| 15 | + assert fibonacci(5) == 5 |
| 16 | + assert fibonacci(6) == 8 |
| 17 | + assert fibonacci(7) == 13 |
| 18 | + assert fibonacci(8) == 21 |
| 19 | + assert fibonacci(9) == 34 |
| 20 | + assert fibonacci(10) == 55 |
| 21 | + |
| 22 | + def test_fibonacci_with_large_integers(self): |
| 23 | + # These could run for a long time, depending on your implementation... |
| 24 | + assert fibonacci(15) == 610 |
| 25 | + assert fibonacci(20) == 6765 |
| 26 | + assert fibonacci(25) == 75025 |
| 27 | + # TODO: Improve the runtime of your fibonacci function for these cases |
| 28 | + # If you're not careful, you may need to be very patient for these... |
| 29 | + # assert fibonacci(30) == 832040 |
| 30 | + # assert fibonacci(35) == 9227465 |
| 31 | + # assert fibonacci(40) == 102334155 |
| 32 | + |
| 33 | + def test_fibonacci_with_negative_integers(self): |
| 34 | + # Should raise a ValueError for n < 0 |
| 35 | + with self.assertRaises(ValueError): |
| 36 | + fibonacci(-1) |
| 37 | + with self.assertRaises(ValueError): |
| 38 | + fibonacci(-5) |
| 39 | + |
| 40 | + def test_fibonacci_with_floating_point_numbers(self): |
| 41 | + # Should raise a ValueError for non-integer n |
| 42 | + with self.assertRaises(ValueError): |
| 43 | + fibonacci(2.0) |
| 44 | + with self.assertRaises(ValueError): |
| 45 | + fibonacci(3.14159) |
| 46 | + with self.assertRaises(ValueError): |
| 47 | + fibonacci('5') |
| 48 | + |
| 49 | + |
| 50 | +if __name__ == '__main__': |
| 51 | + unittest.main() |
0 commit comments