diff --git a/testing_project/logistic.py b/testing_project/logistic.py index 5e7a44d..a58ad5b 100644 --- a/testing_project/logistic.py +++ b/testing_project/logistic.py @@ -1,4 +1,12 @@ + def f(x,r): return r * x * (1-x) - \ No newline at end of file +def iterate_f(it, x, r): + result = [x] + + for i in range(it): + x = f(x, r) + result.append(x) + + return result \ No newline at end of file diff --git a/testing_project/test_logistic.py b/testing_project/test_logistic.py index b66d476..e55e3ee 100644 --- a/testing_project/test_logistic.py +++ b/testing_project/test_logistic.py @@ -1,6 +1,6 @@ from numpy.testing import assert_allclose - -from logistic import f +from logistic import f, iterate_f +import pytest def test_f_corner_cases(): @@ -19,17 +19,11 @@ def test_f_corner_cases(): # x=0.2, r=3.4 => f(x, r)=0.544 # x=0.5, r=2 => f(x, r)=0.5 +@pytest.mark.parametrize('x, r, expected', [(0.1, 2.2, 0.198), (0.2, 3.4, 0.544), (0.5, 2, 0.5)]) -def test_f_other_cases(): - # Test cases are (x, r, expected) - cases = [ - (0.1, 2.2, 0.198), - (0.2, 3.4, 0.544), - (0.5, 2, 0.5) - ] - for x, r, expected in cases: - result = f(x, r) - assert_allclose(result, expected) +def test_f_other_cases(x, r, expected): + result = f(x, r) + assert_allclose(result, expected) # Hands on 2: # parametrize the above test using @pytest.mark.parametrize @@ -39,4 +33,11 @@ def test_f_other_cases(): # Implement a function iterate_f that runs f for it iterations. Write tests for the following cases: # x=0.1, r=2.2, it=1 => iterate_f(it, x, r)=[0.1, 0.198] # x=0.2, r=3.4, it=4 => iterate_f(it, x, r)=[0.2, 0.544, 0.843418, 0.449019, 0.841163] -# x=0.5, r=2, it=3 => iterate_f(it, x, r)=[0.5, 0.5, 0.5] +# x=0.5, r=2, it=3 => iterate_f(it, x, r)=[0.5, 0.5, 0.5, 0.5] + +@pytest.mark.parametrize('x, r, it, expected', [(0.1, 2.2, 1, [0.1, 0.198]), (0.2, 3.4, 4, [0.2, 0.544, 0.843418, 0.449019, 0.841163]), ( + 0.5, 2, 3, [0.5, 0.5, 0.5, 0.5])]) + +def test_iterate_f(x, r, it, expected): + result = iterate_f(it, x, r) + assert_allclose(result, expected, rtol=5e-07, atol=5e-07) \ No newline at end of file