File size: 990 Bytes
36dada9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from datetime import date

from TerraFin.analytics.analysis.fundamental.dcf.engine import (
    build_linear_growth_rates,
    discount_explicit_cash_flows,
)


def test_build_linear_growth_rates_interpolates_horizon() -> None:
    growth_rates = build_linear_growth_rates(12.0, 4.0, 5)
    assert [round(value, 2) for value in growth_rates] == [12.0, 10.0, 8.0, 6.0, 4.0]


def test_discount_explicit_cash_flows_clamps_terminal_growth_and_anchors_dates() -> None:
    result = discount_explicit_cash_flows(
        [10.0, 11.0, 12.0],
        [10.0, 8.0, 6.0],
        [9.0, 9.5, 10.0],
        terminal_growth_pct=10.0,
        terminal_discount_rate_pct=10.5,
        as_of=date(2026, 4, 5),
    )

    assert result.projected_cash_flows[0].forecast_date == "2027-04-05"
    assert result.projected_cash_flows[-1].forecast_date == "2029-04-05"
    assert result.terminal_growth_pct == 9.5
    assert result.intrinsic_value > sum(row.present_value for row in result.projected_cash_flows)