"""
Plain vanilla Fibonacci Numbers but with the ability
to reset the initial pair mid-course

Kirby Urner (c) MIT License
"""

import unittest

def fibs(a, b):
    while True:
        d = yield a  # send to a, b
        if d:
            a, b = d[0], d[1]
            continue
        b, a = a + b, b

class Test_Fib(unittest.TestCase):

    def test_basics(self):
        thegen = fibs(0, 1)
        self.assertEqual(next(thegen), 0)
        self.assertEqual(next(thegen), 1)
        self.assertEqual(next(thegen), 1)
        self.assertEqual(next(thegen), 2)
        self.assertEqual(next(thegen), 3)
        self.assertEqual(next(thegen), 5)
        self.assertEqual(next(thegen), 8)
        self.assertEqual(next(thegen), 13)
        self.assertEqual(next(thegen), 21)

    def test_updating(self):
        thegen = fibs(0, 1)
        self.assertEqual(next(thegen), 0)
        self.assertEqual(next(thegen), 1)
        self.assertEqual(thegen.send((20, 21)), 20)  # update pairing
        self.assertEqual(next(thegen), 21)
        self.assertEqual(next(thegen), 41)
        self.assertEqual(next(thegen), 62)
        self.assertEqual(next(thegen), 103)

if __name__ == "__main__":
    unittest.main()

"""
/Library/Frameworks/Python.framework/Versions/3.2/bin/python3
/Users/kurner/Documents/anyproject.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

Process finished with exit code 0
"""
_______________________________________________
Edu-sig mailing list
Edu-sig@python.org
http://mail.python.org/mailman/listinfo/edu-sig

Reply via email to