summaryrefslogtreecommitdiff
path: root/finance/test_simulate.py
diff options
context:
space:
mode:
Diffstat (limited to 'finance/test_simulate.py')
-rw-r--r--finance/test_simulate.py48
1 files changed, 48 insertions, 0 deletions
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