From 78b0f1159d229c2dcd21300321eab94951fd85b8 Mon Sep 17 00:00:00 2001 From: tal66 <77445020+tal66@users.noreply.github.com> Date: Wed, 15 Nov 2023 12:08:09 +0000 Subject: [PATCH 1/2] TEST: Parametrize tests --- tests/test_financial.py | 70 ++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/tests/test_financial.py b/tests/test_financial.py index 671b937..83108dc 100644 --- a/tests/test_financial.py +++ b/tests/test_financial.py @@ -234,39 +234,45 @@ def test_pmt_decimal_broadcast(self): class TestMirr: - def test_mirr(self): - val = [-4500, -800, 800, 800, 600, 600, 800, 800, 700, 3000] - assert_almost_equal(npf.mirr(val, 0.08, 0.055), 0.0666, 4) - - val = [-120000, 39000, 30000, 21000, 37000, 46000] - assert_almost_equal(npf.mirr(val, 0.10, 0.12), 0.126094, 6) - - val = [100, 200, -50, 300, -200] - assert_almost_equal(npf.mirr(val, 0.05, 0.06), 0.3428, 4) + @pytest.mark.parametrize("values,finance_rate,reinvest_rate,expected", [ + ([-4500, -800, 800, 800, 600, 600, 800, 800, 700, 3000], 0.08, 0.055, 0.0666), + ([-120000, 39000, 30000, 21000, 37000, 46000], 0.10, 0.12, 0.126094), + ([100, 200, -50, 300, -200], 0.05, 0.06, 0.3428), + ([39000, 30000, 21000, 37000, 46000], 0.10, 0.12, None) + ]) + def test_mirr(self, values, finance_rate, reinvest_rate, expected): + result = npf.mirr(values, finance_rate, reinvest_rate) - val = [39000, 30000, 21000, 37000, 46000] - assert_(numpy.isnan(npf.mirr(val, 0.10, 0.12))) - - def test_mirr_decimal(self): - val = [Decimal('-4500'), Decimal('-800'), Decimal('800'), - Decimal('800'), Decimal('600'), Decimal('600'), Decimal('800'), - Decimal('800'), Decimal('700'), Decimal('3000')] - assert_equal(npf.mirr(val, Decimal('0.08'), Decimal('0.055')), - Decimal('0.066597175031553548874239618')) - - val = [Decimal('-120000'), Decimal('39000'), Decimal('30000'), - Decimal('21000'), Decimal('37000'), Decimal('46000')] - assert_equal(npf.mirr(val, Decimal('0.10'), Decimal('0.12')), - Decimal('0.126094130365905145828421880')) - - val = [Decimal('100'), Decimal('200'), Decimal('-50'), - Decimal('300'), Decimal('-200')] - assert_equal(npf.mirr(val, Decimal('0.05'), Decimal('0.06')), - Decimal('0.342823387842176663647819868')) - - val = [Decimal('39000'), Decimal('30000'), Decimal('21000'), - Decimal('37000'), Decimal('46000')] - assert_(numpy.isnan(npf.mirr(val, Decimal('0.10'), Decimal('0.12')))) + if expected: + decimal_part_len = len(str(expected).split('.')[1]) + assert_almost_equal(result, expected, decimal_part_len) + else: + assert_(numpy.isnan(result)) + + @pytest.mark.parametrize( + "args, expected", + [ + ({'values': [Decimal('-4500'), Decimal('-800'), Decimal('800'), Decimal('800'), + Decimal('600'), Decimal('600'), Decimal('800'), Decimal('800'), + Decimal('700'), Decimal('3000')], + 'finance_rate': Decimal('0.08'), 'reinvest_rate': Decimal('0.055')}, + Decimal('0.066597175031553548874239618')), + ({'values': [Decimal('-120000'), Decimal('39000'), Decimal('30000'), Decimal('21000'), + Decimal('37000'), Decimal('46000')], + 'finance_rate': Decimal('0.10'), 'reinvest_rate': Decimal('0.12')}, + Decimal('0.126094130365905145828421880')), + ({'values': [Decimal('100'), Decimal('200'), Decimal('-50'), Decimal('300'), Decimal('-200')], + 'finance_rate': Decimal('0.05'), 'reinvest_rate': Decimal('0.06')}, + Decimal('0.342823387842176663647819868')), + ({'values': [Decimal('39000'), Decimal('30000'), Decimal('21000'), Decimal('37000'), + Decimal('46000')], + 'finance_rate': Decimal('0.10'), 'reinvest_rate': Decimal('0.12')}, + numpy.nan), + ], + ) + def test_mirr_decimal(self, args, expected): + result = npf.mirr(**args) + assert_equal(result, expected) def test_mirr_no_real_solution_exception(self): # Test that if there is no solution because all the cashflows From 78559d167be63dacad83928e6ec85eaeeaccf6f8 Mon Sep 17 00:00:00 2001 From: tal66 <77445020+tal66@users.noreply.github.com> Date: Fri, 17 Nov 2023 16:03:49 +0000 Subject: [PATCH 2/2] parametrize number_type --- tests/test_financial.py | 44 +++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/tests/test_financial.py b/tests/test_financial.py index 83108dc..af7aded 100644 --- a/tests/test_financial.py +++ b/tests/test_financial.py @@ -249,30 +249,36 @@ def test_mirr(self, values, finance_rate, reinvest_rate, expected): else: assert_(numpy.isnan(result)) + @pytest.mark.parametrize('number_type', [Decimal, float]) @pytest.mark.parametrize( "args, expected", [ - ({'values': [Decimal('-4500'), Decimal('-800'), Decimal('800'), Decimal('800'), - Decimal('600'), Decimal('600'), Decimal('800'), Decimal('800'), - Decimal('700'), Decimal('3000')], - 'finance_rate': Decimal('0.08'), 'reinvest_rate': Decimal('0.055')}, - Decimal('0.066597175031553548874239618')), - ({'values': [Decimal('-120000'), Decimal('39000'), Decimal('30000'), Decimal('21000'), - Decimal('37000'), Decimal('46000')], - 'finance_rate': Decimal('0.10'), 'reinvest_rate': Decimal('0.12')}, - Decimal('0.126094130365905145828421880')), - ({'values': [Decimal('100'), Decimal('200'), Decimal('-50'), Decimal('300'), Decimal('-200')], - 'finance_rate': Decimal('0.05'), 'reinvest_rate': Decimal('0.06')}, - Decimal('0.342823387842176663647819868')), - ({'values': [Decimal('39000'), Decimal('30000'), Decimal('21000'), Decimal('37000'), - Decimal('46000')], - 'finance_rate': Decimal('0.10'), 'reinvest_rate': Decimal('0.12')}, - numpy.nan), + ({'values': ['-4500', '-800', '800', '800', '600', '600', '800', '800', '700', '3000'], + 'finance_rate': '0.08', 'reinvest_rate': '0.055' + }, '0.066597175031553548874239618' + ), + ({'values': ['-120000', '39000', '30000', '21000', '37000', '46000'], + 'finance_rate': '0.10', 'reinvest_rate': '0.12' + }, '0.126094130365905145828421880' + ), + ({'values': ['100', '200', '-50', '300', '-200'], + 'finance_rate': '0.05', 'reinvest_rate': '0.06' + }, '0.342823387842176663647819868' + ), + ({'values': ['39000', '30000', '21000', '37000', '46000'], + 'finance_rate': '0.10', 'reinvest_rate': '0.12' + }, numpy.nan + ), ], ) - def test_mirr_decimal(self, args, expected): - result = npf.mirr(**args) - assert_equal(result, expected) + def test_mirr_decimal(self, number_type, args, expected): + values = [number_type(v) for v in args['values']] + result = npf.mirr(values, number_type(args['finance_rate']), number_type(args['reinvest_rate'])) + + if expected is not numpy.nan: + assert_almost_equal(result, number_type(expected), 15) + else: + assert numpy.isnan(result) def test_mirr_no_real_solution_exception(self): # Test that if there is no solution because all the cashflows