/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.util.amount;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
import org.testng.annotations.Test;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.tuple.Pair;
import com.opengamma.util.tuple.Pairs;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class ReferenceAmountTest {
private static final double TOLERANCE = 1.0E-10;
private static final String STR1 = "Name 1";
private static final String STR2 = "Name 2";
private static final Currency USD = Currency.USD;
private static final Currency EUR = Currency.EUR;
private static final Pair<String, Currency> STR1_USD = Pairs.of(STR1, USD);
private static final Pair<String, Currency> STR1_EUR = Pairs.of(STR1, EUR);
private static final Pair<String, Currency> STR2_USD = Pairs.of(STR2, USD);
private static final Pair<String, Currency> STR2_EUR = Pairs.of(STR2, EUR);
@Test
public void constructor() {
final ReferenceAmount<Pair<String, Currency>> surf0 = new ReferenceAmount<>();
assertEquals("ReferenceAmount - constructor", 0, surf0.getMap().size());
}
@Test
public void plusAdd() {
final double value1 = 2345.678;
final ReferenceAmount<Pair<String, Currency>> surf1 = new ReferenceAmount<>();
surf1.add(STR1_USD, value1);
assertEquals("ReferenceAmount - add", 1, surf1.getMap().size());
final double value2 = 10 * Math.E;
final ReferenceAmount<Pair<String, Currency>> surf2 = new ReferenceAmount<>();
surf2.add(STR2_EUR, value2);
final ReferenceAmount<Pair<String, Currency>> surf3 = surf1.plus(surf2);
assertEquals("ReferenceAmount - plus", 2, surf3.getMap().size());
assertTrue("ReferenceAmount - plus", surf3.getMap().containsKey(STR1_USD));
assertTrue("ReferenceAmount - plus", surf3.getMap().containsKey(STR2_EUR));
assertEquals("ReferenceAmount - plus", value1, surf3.getMap().get(STR1_USD), TOLERANCE);
assertEquals("ReferenceAmount - plus", value2, surf3.getMap().get(STR2_EUR), TOLERANCE);
final ReferenceAmount<Pair<String, Currency>> surf4 = surf2.plus(surf1);
assertEquals("ReferenceAmount - plus", surf3, surf4);
final ReferenceAmount<Pair<String, Currency>> surf5 = new ReferenceAmount<>();
final double value3 = 10.01;
surf5.add(STR2_EUR, value3);
assertEquals("ReferenceAmount - plus", value2 + value3, surf3.plus(surf5).getMap().get(STR2_EUR), TOLERANCE);
}
@Test
public void multipliedBy() {
final double value1 = 2345.678;
final ReferenceAmount<Pair<String, Currency>> surf1 = new ReferenceAmount<>();
surf1.add(STR1_EUR, value1);
surf1.add(STR2_USD, value1);
final double factor = 3;
final ReferenceAmount<Pair<String, Currency>> surf2 = surf1.multiplyBy(factor);
final ReferenceAmount<Pair<String, Currency>> surf3 = surf1.plus(surf1).plus(surf1);
assertEquals("ReferenceAmount - multipliedBy", surf2, surf3);
}
}