/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.currency; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertNull; import static org.testng.AssertJUnit.assertTrue; import org.testng.annotations.Test; import com.opengamma.core.value.MarketDataRequirementNames; import com.opengamma.engine.target.ComputationTargetType; import com.opengamma.engine.value.ValueRequirement; import com.opengamma.financial.currency.CurrencyMatrixValue.CurrencyMatrixValueRequirement; import com.opengamma.id.ExternalId; import com.opengamma.util.money.Currency; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class SimpleCurrencyMatrixTest { private final Currency currencyUSD = Currency.of ("USD"); private final Currency currencyGBP = Currency.of ("GBP"); private final Currency currencyEUR = Currency.of ("EUR"); private final Currency currencyCHF = Currency.of ("CHF"); @Test public void testFixedConversion () { final SimpleCurrencyMatrix matrix = new SimpleCurrencyMatrix (); matrix.setFixedConversion (currencyUSD, currencyGBP, 1.6); assertEquals (CurrencyMatrixValue.of (1.6), matrix.getConversion(currencyUSD, currencyGBP)); assertEquals(CurrencyMatrixValue.of(1.0 / 1.6), matrix.getConversion(currencyGBP, currencyUSD)); assertNull(matrix.getConversion(currencyUSD, currencyEUR)); assertNull(matrix.getConversion(currencyEUR, currencyUSD)); assertEquals(2, matrix.getSourceCurrencies().size()); assertEquals(2, matrix.getTargetCurrencies().size()); } @Test public void testIdentityInsert() { final SimpleCurrencyMatrix matrix = new SimpleCurrencyMatrix(); assertEquals(CurrencyMatrixValue.of(1.0), matrix.getConversion(currencyUSD, currencyUSD)); matrix.setFixedConversion(currencyUSD, currencyUSD, 1.0); assertEquals(CurrencyMatrixValue.of(1.0), matrix.getConversion(currencyUSD, currencyUSD)); assertTrue(matrix.getSourceCurrencies().isEmpty()); assertTrue(matrix.getTargetCurrencies().isEmpty()); } @Test(expectedExceptions = IllegalArgumentException.class) public void testIllegalIdentityInsert() { final SimpleCurrencyMatrix matrix = new SimpleCurrencyMatrix(); matrix.setFixedConversion(currencyUSD, currencyUSD, 2.0); } @Test public void testCrossConversion() { final SimpleCurrencyMatrix matrix = new SimpleCurrencyMatrix(); matrix.setFixedConversion(currencyUSD, currencyEUR, 1.4); matrix.setFixedConversion(currencyCHF, currencyEUR, 10.0); assertNull(matrix.getConversion(currencyUSD, currencyCHF)); matrix.setCrossConversion(currencyUSD, currencyCHF, currencyEUR); assertEquals(CurrencyMatrixValue.of(currencyEUR), matrix.getConversion(currencyUSD, currencyCHF)); assertEquals(CurrencyMatrixValue.of(currencyEUR), matrix.getConversion(currencyCHF, currencyUSD)); assertEquals(3, matrix.getSourceCurrencies().size()); assertEquals(3, matrix.getTargetCurrencies().size()); } @Test(expectedExceptions = IllegalArgumentException.class) public void testIllegalCrossConversion1() { final SimpleCurrencyMatrix matrix = new SimpleCurrencyMatrix(); matrix.setFixedConversion(currencyUSD, currencyEUR, 1.4); matrix.setFixedConversion(currencyGBP, currencyEUR, 10.0); matrix.setCrossConversion(currencyUSD, currencyCHF, currencyEUR); } @Test(expectedExceptions = IllegalArgumentException.class) public void testIllegalCrossConversion2() { final SimpleCurrencyMatrix matrix = new SimpleCurrencyMatrix(); matrix.setFixedConversion(currencyUSD, currencyGBP, 1.6); matrix.setFixedConversion(currencyCHF, currencyEUR, 10.0); matrix.setCrossConversion(currencyUSD, currencyCHF, currencyEUR); } @Test public void testLiveData () { final SimpleCurrencyMatrix matrix = new SimpleCurrencyMatrix (); matrix.setLiveData(currencyUSD, currencyGBP, new ValueRequirement(MarketDataRequirementNames.MARKET_VALUE, ComputationTargetType.PRIMITIVE, ExternalId.of("Test", "USD_GBP"))); CurrencyMatrixValue val = matrix.getConversion(currencyUSD, currencyGBP); assertTrue(val instanceof CurrencyMatrixValueRequirement); assertFalse(((CurrencyMatrixValueRequirement) val).isReciprocal()); val = matrix.getConversion(currencyGBP, currencyUSD); assertTrue(val instanceof CurrencyMatrixValueRequirement); assertTrue(((CurrencyMatrixValueRequirement) val).isReciprocal()); assertEquals(2, matrix.getSourceCurrencies().size()); assertEquals(2, matrix.getTargetCurrencies().size()); } }