Skip to content

Commit 671d2d7

Browse files
authored
Merge pull request #75 from tal66/parametrize-tests
TST: Parametrize MIRR tests
2 parents cd724f0 + 78559d1 commit 671d2d7

File tree

1 file changed

+43
-31
lines changed

1 file changed

+43
-31
lines changed

Diff for: tests/test_financial.py

+43-31
Original file line numberDiff line numberDiff line change
@@ -234,39 +234,51 @@ def test_pmt_decimal_broadcast(self):
234234

235235

236236
class TestMirr:
237-
def test_mirr(self):
238-
val = [-4500, -800, 800, 800, 600, 600, 800, 800, 700, 3000]
239-
assert_almost_equal(npf.mirr(val, 0.08, 0.055), 0.0666, 4)
240-
241-
val = [-120000, 39000, 30000, 21000, 37000, 46000]
242-
assert_almost_equal(npf.mirr(val, 0.10, 0.12), 0.126094, 6)
237+
@pytest.mark.parametrize("values,finance_rate,reinvest_rate,expected", [
238+
([-4500, -800, 800, 800, 600, 600, 800, 800, 700, 3000], 0.08, 0.055, 0.0666),
239+
([-120000, 39000, 30000, 21000, 37000, 46000], 0.10, 0.12, 0.126094),
240+
([100, 200, -50, 300, -200], 0.05, 0.06, 0.3428),
241+
([39000, 30000, 21000, 37000, 46000], 0.10, 0.12, None)
242+
])
243+
def test_mirr(self, values, finance_rate, reinvest_rate, expected):
244+
result = npf.mirr(values, finance_rate, reinvest_rate)
243245

244-
val = [100, 200, -50, 300, -200]
245-
assert_almost_equal(npf.mirr(val, 0.05, 0.06), 0.3428, 4)
246+
if expected:
247+
decimal_part_len = len(str(expected).split('.')[1])
248+
assert_almost_equal(result, expected, decimal_part_len)
249+
else:
250+
assert_(numpy.isnan(result))
246251

247-
val = [39000, 30000, 21000, 37000, 46000]
248-
assert_(numpy.isnan(npf.mirr(val, 0.10, 0.12)))
249-
250-
def test_mirr_decimal(self):
251-
val = [Decimal('-4500'), Decimal('-800'), Decimal('800'),
252-
Decimal('800'), Decimal('600'), Decimal('600'), Decimal('800'),
253-
Decimal('800'), Decimal('700'), Decimal('3000')]
254-
assert_equal(npf.mirr(val, Decimal('0.08'), Decimal('0.055')),
255-
Decimal('0.066597175031553548874239618'))
256-
257-
val = [Decimal('-120000'), Decimal('39000'), Decimal('30000'),
258-
Decimal('21000'), Decimal('37000'), Decimal('46000')]
259-
assert_equal(npf.mirr(val, Decimal('0.10'), Decimal('0.12')),
260-
Decimal('0.126094130365905145828421880'))
261-
262-
val = [Decimal('100'), Decimal('200'), Decimal('-50'),
263-
Decimal('300'), Decimal('-200')]
264-
assert_equal(npf.mirr(val, Decimal('0.05'), Decimal('0.06')),
265-
Decimal('0.342823387842176663647819868'))
266-
267-
val = [Decimal('39000'), Decimal('30000'), Decimal('21000'),
268-
Decimal('37000'), Decimal('46000')]
269-
assert_(numpy.isnan(npf.mirr(val, Decimal('0.10'), Decimal('0.12'))))
252+
@pytest.mark.parametrize('number_type', [Decimal, float])
253+
@pytest.mark.parametrize(
254+
"args, expected",
255+
[
256+
({'values': ['-4500', '-800', '800', '800', '600', '600', '800', '800', '700', '3000'],
257+
'finance_rate': '0.08', 'reinvest_rate': '0.055'
258+
}, '0.066597175031553548874239618'
259+
),
260+
({'values': ['-120000', '39000', '30000', '21000', '37000', '46000'],
261+
'finance_rate': '0.10', 'reinvest_rate': '0.12'
262+
}, '0.126094130365905145828421880'
263+
),
264+
({'values': ['100', '200', '-50', '300', '-200'],
265+
'finance_rate': '0.05', 'reinvest_rate': '0.06'
266+
}, '0.342823387842176663647819868'
267+
),
268+
({'values': ['39000', '30000', '21000', '37000', '46000'],
269+
'finance_rate': '0.10', 'reinvest_rate': '0.12'
270+
}, numpy.nan
271+
),
272+
],
273+
)
274+
def test_mirr_decimal(self, number_type, args, expected):
275+
values = [number_type(v) for v in args['values']]
276+
result = npf.mirr(values, number_type(args['finance_rate']), number_type(args['reinvest_rate']))
277+
278+
if expected is not numpy.nan:
279+
assert_almost_equal(result, number_type(expected), 15)
280+
else:
281+
assert numpy.isnan(result)
270282

271283
def test_mirr_no_real_solution_exception(self):
272284
# Test that if there is no solution because all the cashflows

0 commit comments

Comments
 (0)