"""
Implementa Fibonacci.
"""
def fib(n):
"""Fibonacci:
Se n <= 1, fib(n) = 1
Se n > 1, fib(n) = fib(n - 1) + fib(n - 2)
Exemplos de uso:
>>> fib(0)
1
>>> fib(1)
1
>>> fib(10)
100
>>> [ fib(x) for x in xrange(10) ]
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
>>> fib('')
Traceback (most recent call last):
File "", line 1, in ?
File "", line 19, in fib
TypeError
>>>
"""
if not type(n) is int:
raise TypeError
if n > 1:
return fib(n - 1) + fib(n - 2)
else:
return 1
def _doctest():
"""
Evoca o doctest.
"""
import doctest
doctest.run_docstring_examples(fib, globals())
if __name__ == "__main__":
_doctest()
"""
Usa unittest para testar fib.py.
"""
import fib
import unittest
class TestSequenceFunctions(unittest.TestCase):
def setUp(self):
self.seq = range(10)
def test0(self):
self.assertEqual(fib.fib(0), 1)
def test1(self):
self.assertEqual(fib.fib(1), 1)
def test10(self):
self.assertEqual(fib.fib(10), 89)
def testseq(self):
fibs = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
for x, y in zip(fibs, [ fib.fib(x) for x in self.seq ]):
self.assert_(x is y)
def testtype(self):
self.assertRaises(TypeError, fib.fib, '')
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions)
unittest.TextTestRunner(verbosity=2).run(suite)