public void fxRate() { FxRateScenarioArray rates = FxRateScenarioArray.of(CurrencyPair.of(Currency.EUR, Currency.USD), DoubleArray.of(1.07, 1.08, 1.09)); assertThat(rates.fxRate(Currency.EUR, Currency.USD, 0)).isEqualTo(1.07); assertThat(rates.fxRate(Currency.EUR, Currency.USD, 1)).isEqualTo(1.08); assertThat(rates.fxRate(Currency.EUR, Currency.USD, 2)).isEqualTo(1.09); assertThat(rates.fxRate(Currency.USD, Currency.EUR, 0)).isEqualTo(1 / 1.07); assertThat(rates.fxRate(Currency.USD, Currency.EUR, 1)).isEqualTo(1 / 1.08); assertThat(rates.fxRate(Currency.USD, Currency.EUR, 2)).isEqualTo(1 / 1.09); }
private static void assertArraysEqual(FxRateScenarioArray a1, FxRateScenarioArray a2) { assertThat(a1.getScenarioCount()).isEqualTo(a2.getScenarioCount()); assertThat(a1.getPair()).isEqualTo(a2.getPair()); for (int i = 0; i < a1.getScenarioCount(); i++) { assertThat(a1.fxRate(Currency.GBP, Currency.USD, i)).isEqualTo(a2.fxRate(Currency.GBP, Currency.USD, i), offset(TOLERANCE)); } } }
@Override public double fxRate(Currency baseCurrency, Currency counterCurrency) { if (baseCurrency.equals(counterCurrency)) { return 1; } if (baseCurrency.equals(rates1.getPair().getBase())) { return rates1.fxRate(baseCurrency, counterCurrency, scenarioIndex); } else if (baseCurrency.equals(rates2.getPair().getBase())) { return rates2.fxRate(baseCurrency, counterCurrency, scenarioIndex); } else { return rates3.fxRate(baseCurrency, counterCurrency, scenarioIndex); } } };
public void unknownCurrencyPair() { FxRateScenarioArray rates = FxRateScenarioArray.of(Currency.EUR, Currency.USD, DoubleArray.of(1.07, 1.08, 1.09)); assertThrowsIllegalArg(() -> rates.fxRate(Currency.AED, Currency.ARS, 0)); }