מעלה טסטים לתרגיל 4.
הערות:
- הסבר על איך להריץ את הטסטים תוכלו למצוא פה
- בטסטים test_rw_stats ו-test_win_mem יש אלמנט רנדומי אז יש סיכוי מאוד נמוך שהם יכשלו מדי פעם
- השתמשי בספרייה mock בשביל הטסטים, יכולים להתקין אותה עם הפקודה pip install mock
- אם יש שאלות מוזמנים לכתוב פה ואני אנסה לענות כשאוכל:)
import time from mock import mock from hw4_<insert_id> import acc, myProd, compose, profit, profit2, profit3, win, win2, walk, rw_stats,test class MockFunc(object): def __init__(self, values): self._values = values[::-1] def __call__(self, *args, **kwargs): return self._values.pop() def test_acc(): assert acc(lambda x, y: x + y, 0, [2, 3, 7]) == sum([2, 3, 7]) assert acc(lambda x, y: x + y, -12, [2, 3, 7]) == 0 assert acc(lambda x, y: x + y, 0, []) == 0 assert acc(lambda x, y: x * y, 1, [2, 3, 7]) == 2 * 3 * 7 assert acc(lambda x, y: x * y, 1, []) == 1 assert acc(lambda x, y: x + y, 0, range(100)) == sum(range(100)) def test_myprod(): def assert_myprod(lst): value = 1 for i in lst: value *= i assert myProd(lst) == value assert_myprod(range(1, 100)) assert_myprod(range(100)) assert_myprod(range(1, 50, 2)) assert_myprod(range(-100, 0)) assert myProd([]) == 0 assert myProd([3, 4, 5]) == 60 assert myProd([10, 10, 10]) == 1000 assert myProd([10, -1, -1]) == 10 def test_compose(): assert compose([lambda x: x - 1, lambda x: x * 2, lambda x: x + 1])(5) == 11 assert compose([])(5) == 5 assert compose([lambda x: x - 1, lambda x: x + 1])(5) == 5 assert compose([lambda x: x, lambda x: x])(5) == 5 assert compose([lambda x: x + 1, lambda x: x * 0])(5) == 1 assert compose([lambda x: x + 1, lambda x: x * 0, lambda x: x + 1])(5) == 1 assert compose([lambda x: x + 1, lambda x: x + 1, lambda x: x + 1])(5) == 8 def test_profit(): assert profit([1, 5, 8, 9], 4) == 10 assert profit([2, 3, 7, 8, 9], 5) == 11 assert profit([1, 2, 3, 4, 5], 5) == 5 assert profit([1, 2, 4, 5, 6, 7], 6) == 8 assert profit([i + 1 for i in range(10)], 10) == 10 assert profit([2] + [i + 3 for i in range(9)], 10) == 20 assert profit([1, 3] + [i + 1 for i in range(8)], 10) == 15 assert profit([0, 2], 2) == 2 assert profit([1], 1) == 1 def test_profit2(): assert profit2([1, 5, 8, 9], 4) == 10 assert profit2([2, 3, 7, 8, 9], 5) == 11 assert profit2([1, 2, 3, 4, 5], 5) == 5 assert profit2([1, 2, 4, 5, 6, 7], 6) == 8 assert profit2([i + 1 for i in range(100)], 100) == 100 assert profit2([2] + [i + 3 for i in range(9)], 10) == 20 assert profit2([1, 3] + [i + 1 for i in range(8)], 10) == 15 assert profit2([0, 2], 2) == 2 assert profit2([1], 1) == 1 def test_profit3(): assert profit3([1, 5, 8, 9], 4) == 10 assert profit3([2, 3, 7, 8, 9], 5) == 11 assert profit3([1, 2, 3, 4, 5], 5) == 5 assert profit3([1, 2, 4, 5, 6, 7], 6) == 8 assert profit3([i + 1 for i in range(10)], 10) == 10 assert profit3([2] + [i + 3 for i in range(9)], 10) == 20 assert profit3([1, 3] + [i + 1 for i in range(8)], 10) == 15 assert profit3([0, 2], 2) == 2 assert profit3([1], 1) == 1 def test_win(): assert win(9, [1, 4, 2]) == False assert win(5, [3, 1]) == True assert win(1, [1]) == True assert win(2, [1]) == False assert win(2, [1, 2]) == True assert win(5, [1, 2, 3]) == True assert win(5, [1, 3]) == True assert win(7, [1, 4, 2]) == True def test_win2(): assert win2(9, [1, 4, 2]) == False assert win2(5, [3, 1]) == True assert win2(1, [1]) == True assert win2(2, [1]) == False assert win2(2, [1, 2]) == True assert win2(5, [1, 2, 3]) == True assert win2(5, [1, 3]) == True assert win2(7, [1, 4, 2]) == True def test_win_mem(): a = time.clock() win(40, [1, 3, 5]) b = time.clock() t1 = b - a a = time.clock() win2(40, [1, 3, 5]) b = time.clock() t2 = b - a assert t2 < t1 def test_walk(): with mock.patch("random.choice", lambda _: 1): assert walk(10, 2) == ((10 ** 2 + 10 ** 2) ** 0.5, False) assert walk(0, 3) == (0, False) with mock.patch("random.choice", MockFunc([ 1, 0, 0, 0, 1, 0, 0, 0, 1 ])): assert walk(3, 3) == (3 ** 0.5, False) with mock.patch("random.choice", MockFunc([ 1, 0, 1, 0, -1, 0, -1, 0, 0, 0, 1, 0 ])): assert walk(3, 4) == (1, True) with mock.patch("random.choice", MockFunc([ 1, 0, 1, 0, 0, 1, 0, 1, -1, 0, -1, 0, 0, -1, 0, -1 ])): assert walk(4, 4) == (0, True) with mock.patch("random.choice", MockFunc([ 1, 0, 1, 0, 0, 1, 0, 1, -1, 0, -1, 0, 0, -1, 0, -1, 1, 1, 1, 1, ])): assert walk(5, 4) == (2, True) def test_rw_stats(): run_length, average_dist, average_dist_divided, \ min_dist, max_dist, origin_frequency = rw_stats(100, 3, 10 ** 3) assert run_length == 100 assert 1.5 <= average_dist_divided <= 1.8 assert 0.2 <= origin_frequency <= 0.3 def test_tester(): test()