From 458a24d09f95eefb161728d9676ecdfca30e3f5e Mon Sep 17 00:00:00 2001 From: xengineering Date: Sun, 8 Sep 2024 17:02:33 +0200 Subject: Split flow.py to simulate.py and model.py model.py should be a file containing only dataclasses to model finance. simulate.py should take care of the simulation of that finance data to create a financial forecast. --- finance/test_simulate.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 finance/test_simulate.py (limited to 'finance/test_simulate.py') diff --git a/finance/test_simulate.py b/finance/test_simulate.py new file mode 100644 index 0000000..3b79c99 --- /dev/null +++ b/finance/test_simulate.py @@ -0,0 +1,48 @@ +from datetime import datetime +from decimal import Decimal + +from finance.model import Flow +from finance.simulate import simulate, integrate + + +def test_flow_integration() -> None: + fl = Flow( + amount=Decimal(3000.0), + since=datetime(2023, 1, 1), + until=datetime(2026, 1, 5), + ) + + tests = ( + (datetime(2024, 3, 12), datetime(2024, 4, 2), Decimal(3000.0)), + (datetime(2024, 3, 1), datetime(2024, 3, 15), Decimal(3000.0)), + (datetime(2024, 2, 25), datetime(2024, 3, 1), Decimal(3000.0)), + (datetime(2024, 2, 25), datetime(2024, 6, 12), Decimal(12000.0)), + (datetime(2022, 1, 5), datetime(2022, 9, 14), Decimal(0.0)), + (datetime(2022, 1, 5), datetime(2023, 1, 1), Decimal(3000.0)), + (datetime(2022, 7, 4), datetime(2024, 12, 8), Decimal(72000.0)), + (datetime(2025, 11, 4), datetime(2026, 5, 9), Decimal(6000.0)), + (datetime(2026, 1, 5), datetime(2027, 1, 1), Decimal(0.0)), + (datetime(2027, 5, 28), datetime(2028, 7, 7), Decimal(0.0)), + ) + + for test in tests: + assert integrate(fl, start=test[0], end=test[1]) == test[2] + + +def test_simulate() -> None: + flows = (Flow(amount=Decimal(100.0), since=None, until=None),) + + simulated = simulate( + start=datetime(2024, 1, 1), + end=datetime(2024, 4, 1), + flows=flows, + ) + + expected = [ + (datetime(2024, 1, 1), Decimal(100.0)), + (datetime(2024, 2, 1), Decimal(200.0)), + (datetime(2024, 3, 1), Decimal(300.0)), + (datetime(2024, 4, 1), Decimal(400.0)), + ] + + assert simulated == expected -- cgit v1.2.3-70-g09d2