32 lines
1.1 KiB
Python
32 lines
1.1 KiB
Python
"""Tests for Sheet 5: Sovereign debt and spread (Part V)."""
|
|
|
|
from fqbm.state import FQBMState
|
|
from fqbm.sheets.sovereign_debt import (
|
|
spread_model,
|
|
debt_sustainable,
|
|
sovereign_debt_step,
|
|
SovereignParams,
|
|
)
|
|
|
|
|
|
def test_spread_model():
|
|
s = spread_model(0.8, 0.1, 0.2, -0.01)
|
|
assert s > 0
|
|
# higher debt_gdp -> higher spread; higher reserves_gdp -> lower spread
|
|
assert spread_model(0.9, 0.1, 0.1, 0) > spread_model(0.5, 0.1, 0.1, 0)
|
|
assert spread_model(0.5, 0.3, 0.1, 0) < spread_model(0.5, 0.1, 0.1, 0)
|
|
|
|
|
|
def test_debt_sustainable():
|
|
assert debt_sustainable(0.03, 0.05, 0.02, 0.6) is True # 0.03 >= 0.018
|
|
assert debt_sustainable(0.01, 0.05, 0.02, 0.6) is False
|
|
assert debt_sustainable(0.0, 0.05, 0.02, 0.5) is False
|
|
|
|
|
|
def test_sovereign_debt_step():
|
|
state = FQBMState(Spread=0.0)
|
|
params = SovereignParams(debt_gdp=0.7, reserves_gdp=0.2, fx_vol=0.1)
|
|
out = sovereign_debt_step(state, params)
|
|
assert out.Spread >= 0
|
|
assert out.Spread != state.Spread or (params.debt_gdp == 0.6 and params.reserves_gdp == 0.2 and params.fx_vol == 0.1)
|