public void crossRates() { FxRateScenarioArray eurGbp = FxRateScenarioArray.of(Currency.EUR, Currency.GBP, DoubleArray.of(0.76, 0.75)); FxRateScenarioArray eurUsd = FxRateScenarioArray.of(Currency.EUR, Currency.USD, DoubleArray.of(1.11, 1.12)); FxRateScenarioArray gbpEur = FxRateScenarioArray.of(Currency.GBP, Currency.EUR, DoubleArray.of(1 / 0.76, 1 / 0.75)); FxRateScenarioArray usdEur = FxRateScenarioArray.of(Currency.USD, Currency.EUR, DoubleArray.of(1 / 1.11, 1 / 1.12)); FxRateScenarioArray expectedGbpUsd = FxRateScenarioArray.of(Currency.GBP, Currency.USD, DoubleArray.of(1.460526315789474, 1.4933333333333334)); assertArraysEqual(eurGbp.crossRates(eurUsd), expectedGbpUsd); assertArraysEqual(eurGbp.crossRates(usdEur), expectedGbpUsd); assertArraysEqual(gbpEur.crossRates(eurUsd), expectedGbpUsd); assertArraysEqual(gbpEur.crossRates(usdEur), expectedGbpUsd); assertArraysEqual(eurUsd.crossRates(eurGbp), expectedGbpUsd); assertArraysEqual(usdEur.crossRates(eurGbp), expectedGbpUsd); assertArraysEqual(eurUsd.crossRates(gbpEur), expectedGbpUsd); assertArraysEqual(usdEur.crossRates(gbpEur), expectedGbpUsd); }
public void crossRatesInvalidInputs() { // Argument has both currencies the same assertThrowsIllegalArg(() -> FxRateScenarioArray.of(Currency.GBP, Currency.USD, DoubleArray.of(1)) .crossRates(FxRateScenarioArray.of(Currency.EUR, Currency.EUR, DoubleArray.of(1)))); // Receiver has both currencies the same assertThrowsIllegalArg(() -> FxRateScenarioArray.of(Currency.GBP, Currency.GBP, DoubleArray.of(1)) .crossRates(FxRateScenarioArray.of(Currency.EUR, Currency.USD, DoubleArray.of(1)))); // No currency in common assertThrowsIllegalArg(() -> FxRateScenarioArray.of(Currency.GBP, Currency.CHF, DoubleArray.of(1)) .crossRates(FxRateScenarioArray.of(Currency.EUR, Currency.USD, DoubleArray.of(1)))); // Both pairs the same assertThrowsIllegalArg(() -> FxRateScenarioArray.of(Currency.GBP, Currency.CHF, DoubleArray.of(1)) .crossRates(FxRateScenarioArray.of(Currency.GBP, Currency.CHF, DoubleArray.of(1)))); // Different length arrays assertThrowsIllegalArg(() -> FxRateScenarioArray.of(Currency.GBP, Currency.CHF, DoubleArray.of(1)) .crossRates(FxRateScenarioArray.of(Currency.EUR, Currency.CHF, DoubleArray.of(1, 2)))); }