@@ -20,24 +20,24 @@ class FxInterventionSpec extends AnyFlatSpec with Matchers:
2020 // p.flags.nbpFxIntervention defaults to false
2121 val result = Nbp .fxIntervention(p.forex.baseExRate * 1.5 , 1e10 , 1e9 , enabled = false )
2222 result.erEffect shouldBe 0.0
23- result.eurTraded shouldBe 0.0
24- result.newReserves shouldBe 1e10
23+ result.eurTraded shouldBe PLN . Zero
24+ result.newReserves shouldBe PLN ( 1e10 )
2525 }
2626
2727 it should " return zero effect when ER within band" in {
2828 // ER deviation = 5% < default band of 10%
2929 val er = p.forex.baseExRate * 1.05
3030 val result = fxEnabled(er, 1e10 , 1e9 )
3131 result.erEffect shouldBe 0.0
32- result.eurTraded shouldBe 0.0
32+ result.eurTraded shouldBe PLN . Zero
3333 }
3434
3535 it should " return zero effect when ER just inside band boundary" in {
3636 // Use 9.9% deviation (just inside default 10% band) to avoid FP edge case
3737 val er = p.forex.baseExRate * 1.099
3838 val result = fxEnabled(er, 1e10 , 1e9 )
3939 result.erEffect shouldBe 0.0
40- result.eurTraded shouldBe 0.0
40+ result.eurTraded shouldBe PLN . Zero
4141 }
4242
4343 it should " intervene when PLN depreciates beyond band (sell EUR)" in {
@@ -46,9 +46,9 @@ class FxInterventionSpec extends AnyFlatSpec with Matchers:
4646 val er = p.forex.baseExRate * 1.20 // 20% depreciation
4747 val reserves = 1e10
4848 val result = fxEnabled(er, reserves, 1e9 )
49- result.eurTraded should be < 0.0 // sold EUR
49+ result.eurTraded should be < PLN . Zero // sold EUR
5050 result.erEffect should be < 0.0 // dampens upward ER deviation
51- result.newReserves should be < reserves
51+ result.newReserves should be < PLN ( reserves)
5252 }
5353
5454 it should " intervene when PLN appreciates beyond band (buy EUR)" in {
@@ -57,17 +57,17 @@ class FxInterventionSpec extends AnyFlatSpec with Matchers:
5757 val er = p.forex.baseExRate * 0.80 // 20% appreciation
5858 val reserves = 1e10
5959 val result = fxEnabled(er, reserves, 1e9 )
60- result.eurTraded should be > 0.0 // bought EUR
60+ result.eurTraded should be > PLN . Zero // bought EUR
6161 result.erEffect should be > 0.0 // dampens downward ER deviation
62- result.newReserves should be > reserves
62+ result.newReserves should be > PLN ( reserves)
6363 }
6464
6565 it should " not sell more EUR than available reserves" in {
6666 val er = p.forex.baseExRate * 1.50 // massive depreciation
6767 val reserves = 100.0 // tiny reserves
6868 val result = fxEnabled(er, reserves, 1e9 )
69- result.newReserves should be >= 0.0
70- Math .abs( result.eurTraded) should be <= reserves
69+ result.newReserves should be >= PLN . Zero
70+ result.eurTraded.abs should be <= PLN ( reserves)
7171 }
7272
7373 it should " produce erEffect opposing the deviation direction" in {
@@ -87,31 +87,31 @@ class FxInterventionSpec extends AnyFlatSpec with Matchers:
8787 val reserves = 1e10
8888 val result = fxEnabled(er, reserves, 1e9 )
8989 // newReserves = max(0, reserves + eurTraded)
90- result.newReserves shouldBe Math .max(0.0 , reserves + result.eurTraded) +- 1e-6
90+ result.newReserves.toDouble shouldBe Math .max(0.0 , reserves + result.eurTraded.toDouble ) +- 1e-6
9191 }
9292
9393 it should " produce zero erEffect when gdp is zero (no div-by-zero)" in {
9494 val er = p.forex.baseExRate * 1.25
9595 val result = fxEnabled(er, 1e10 , 0.0 )
9696 result.erEffect shouldBe 0.0
9797 // But intervention still occurs (reserves change)
98- result.eurTraded should be < 0.0
98+ result.eurTraded should be < PLN . Zero
9999 }
100100
101101 it should " produce no intervention when ER equals baseER (Eurozone scenario)" in {
102102 // In EUR regime, ER = baseER → erDev = 0 → within any band
103103 val result = fxEnabled(p.forex.baseExRate, 1e10 , 1e9 )
104104 result.erEffect shouldBe 0.0
105- result.eurTraded shouldBe 0.0
105+ result.eurTraded shouldBe PLN . Zero
106106 }
107107
108108 // --- FxInterventionResult ---
109109
110110 " FxInterventionResult" should " be constructable with all fields" in {
111- val r = Nbp .FxInterventionResult (0.01 , - 5e8 , 9.5e9 )
111+ val r = Nbp .FxInterventionResult (0.01 , PLN ( - 5e8 ), PLN ( 9.5e9 ) )
112112 r.erEffect shouldBe 0.01
113- r.eurTraded shouldBe - 5e8
114- r.newReserves shouldBe 9.5e9
113+ r.eurTraded shouldBe PLN ( - 5e8 )
114+ r.newReserves shouldBe PLN ( 9.5e9 )
115115 }
116116
117117 // --- NbpState FX fields ---
0 commit comments