@Override public String toString() { return "FxMatrix[" + Joiner.on(", ").join(getCurrencies()) + " : " + Stream.of(rates.toArrayUnsafe()).map(Arrays::toString).collect(Collectors.joining(",")) + "]"; }
public void emptyMatrixCanHandleTrivialRate() { FxMatrix matrix = FxMatrix.empty(); assertThat(matrix.getCurrencies()).isEmpty(); assertThat(matrix.fxRate(USD, USD)).isEqualTo(1.0); assertThat(matrix.toString()).isEqualTo("FxMatrix[ : ]"); }
public void emptyMatrixCannotDoConversion() { FxMatrix matrix = FxMatrix.builder().build(); assertThat(matrix.getCurrencies()).isEmpty(); assertThrowsIllegalArg(() -> matrix.fxRate(USD, EUR)); }
public void singleRateMatrixCannotDoConversionForUnknownCurrency() { FxMatrix matrix = FxMatrix.builder() .addRate(GBP, USD, 1.6) .build(); assertThat(matrix.getCurrencies()).containsOnly(GBP, USD); assertThrowsIllegalArg(() -> matrix.fxRate(USD, EUR)); }
public void rateCanBeUpdatedWithDirectionSwitched() { FxMatrix matrix1 = FxMatrix.builder() .addRate(GBP, USD, 1.6) .build(); assertThat(matrix1.getCurrencies()).hasSize(2); assertThat(matrix1.fxRate(GBP, USD)).isEqualTo(1.6); FxMatrix matrix2 = matrix1.toBuilder() .addRate(USD, GBP, 0.625) .build(); assertThat(matrix2.getCurrencies()).hasSize(2); assertThat(matrix2.fxRate(GBP, USD)).isEqualTo(1.6); }
public void singleRateMatrixByOfCurrencyPairFactory() { FxMatrix matrix = FxMatrix.of(CurrencyPair.of(GBP, USD), 1.6); assertThat(matrix.getCurrencies()).containsOnly(GBP, USD); assertThat(matrix.fxRate(GBP, USD)).isEqualTo(1.6); assertThat(matrix.fxRate(USD, GBP)).isEqualTo(0.625); assertThat(matrix.toString()).isEqualTo("FxMatrix[GBP, USD : [1.0, 1.6],[0.625, 1.0]]"); }
public void singleRateMatrixByOfCurrenciesFactory() { FxMatrix matrix = FxMatrix.of(GBP, USD, 1.6); assertThat(matrix.getCurrencies()).containsOnly(GBP, USD); assertThat(matrix.fxRate(GBP, USD)).isEqualTo(1.6); assertThat(matrix.fxRate(USD, GBP)).isEqualTo(0.625); }
public void ratedCanBeUpdatedAndAddedViaBuilder() { FxMatrix matrix1 = FxMatrix.builder() .addRate(GBP, USD, 1.5) .build(); assertThat(matrix1.getCurrencies()).containsOnly(GBP, USD); assertThat(matrix1.fxRate(GBP, USD)).isEqualTo(1.5); FxMatrix matrix2 = matrix1.toBuilder() .addRate(GBP, USD, 1.6) .addRate(EUR, USD, 1.4) .build(); assertThat(matrix2.getCurrencies()).containsOnly(GBP, USD, EUR); assertThat(matrix2.fxRate(GBP, USD)).isEqualTo(1.6); assertThat(matrix2.fxRate(EUR, USD)).isEqualTo(1.4); }
public void singleRateMatrixByBuilder() { FxMatrix matrix = FxMatrix.builder() .addRate(GBP, USD, 1.6) .build(); assertThat(matrix.getCurrencies()).containsOnly(GBP, USD); assertThat(matrix.fxRate(GBP, USD)).isEqualTo(1.6); assertThat(matrix.fxRate(USD, GBP)).isEqualTo(0.625); }
public void rateCanBeUpdatedInBuilder() { FxMatrix matrix = FxMatrix.builder() .addRate(GBP, USD, 1.5) .addRate(GBP, USD, 1.6) .build(); assertThat(matrix.getCurrencies()).containsOnly(GBP, USD); assertThat(matrix.fxRate(GBP, USD)).isEqualTo(1.6); assertThat(matrix.fxRate(USD, GBP)).isEqualTo(0.625); }
public void canAddRateUsingCurrencyPair() { FxMatrix matrix = FxMatrix.builder() .addRate(CurrencyPair.of(GBP, USD), 1.6) .build(); assertThat(matrix.getCurrencies()).containsOnly(GBP, USD); assertThat(matrix.fxRate(GBP, USD)).isEqualTo(1.6); assertThat(matrix.fxRate(USD, GBP)).isEqualTo(0.625); }
public void matrixCalculatesCrossRates() { FxMatrix matrix = FxMatrix.builder() .addRate(GBP, USD, 1.6) .addRate(EUR, USD, 1.4) .addRate(EUR, CHF, 1.2) .build(); assertThat(matrix.getCurrencies()).containsOnly(GBP, USD, EUR, CHF); assertThat(matrix.fxRate(GBP, USD)).isEqualTo(1.6); assertThat(matrix.fxRate(USD, GBP)).isEqualTo(1 / 1.6); assertThat(matrix.fxRate(EUR, USD)).isEqualTo(1.4); assertThat(matrix.fxRate(USD, EUR)).isEqualTo(1 / 1.4); assertThat(matrix.fxRate(EUR, GBP)).isEqualTo(1.4 / 1.6, TOL); assertThat(matrix.fxRate(GBP, EUR)).isEqualTo(1.6 / 1.4, TOL); assertThat(matrix.fxRate(EUR, CHF)).isEqualTo(1.2); }
public void mergeAddsInAdditionalCurrencies() { FxMatrix matrix1 = FxMatrix.builder() .addRate(GBP, USD, 1.6) .addRate(EUR, USD, 1.4) .build(); FxMatrix matrix2 = FxMatrix.builder() .addRate(EUR, CHF, 1.2) .addRate(CHF, AUD, 1.2) .build(); FxMatrix result = matrix1.merge(matrix2); assertThat(result.getCurrencies()).contains(USD, GBP, EUR, CHF, AUD); assertThat(result.fxRate(GBP, USD)).isEqualTo(1.6); assertThat(result.fxRate(GBP, EUR)).isEqualTo(1.6 / 1.4, TOL); assertThat(result.fxRate(EUR, CHF)).isEqualTo(1.2); assertThat(result.fxRate(CHF, AUD)).isEqualTo(1.2); assertThat(result.fxRate(GBP, CHF)).isEqualTo((1.6 / 1.4) * 1.2, TOL); assertThat(result.fxRate(GBP, AUD)).isEqualTo((1.6 / 1.4) * 1.2 * 1.2, TOL); }
assertThat(matrix1.getCurrencies()).hasSize(3); assertThat(matrix1.fxRate(GBP, USD)).isEqualTo(1.5); assertThat(matrix1.fxRate(EUR, USD)).isEqualTo(1.4);