/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.ircurve.calcconfig;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import java.util.Collections;
import java.util.LinkedHashMap;
import org.testng.annotations.Test;
import org.testng.internal.junit.ArrayAsserts;
import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.financial.analytics.ircurve.StripInstrumentType;
import com.opengamma.financial.fudgemsg.FinancialTestBase;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class MultiCurveCalculationConfigTest extends FinancialTestBase {
private static final String DEFAULT_USD_CONFIG_NAME = "Default";
private static final String[] DEFAULT_USD_YIELD_CURVE_NAMES = new String[] {"FUNDING", "FORWARD_3M" };
private static final ComputationTargetSpecification DEFAULT_USD_ID = ComputationTargetSpecification.of(Currency.USD);
private static final String DEFAULT_USD_CALCULATION_METHOD = "Present Value";
private static final String EXTRA_USD_CONFIG_NAME = "Extra";
private static final String[] EXTRA_USD_YIELD_CURVE_NAMES = new String[] {"FORWARD_6M", "FORWARD_12M", "FORWARD_1M" };
private static final ComputationTargetSpecification EXTRA_USD_ID = ComputationTargetSpecification.of(Currency.USD);
private static final String EXTRA_USD_CALCULATION_METHOD = "Par Rate";
private static final String DEFAULT_INR_CONFIG_NAME = "Default";
private static final String[] DEFAULT_INR_YIELD_CURVE_NAMES = new String[] {"FUNDING" };
private static final ComputationTargetSpecification DEFAULT_INR_ID = ComputationTargetSpecification.of(Currency.of("INR"));
private static final String DEFAULT_INR_CALCULATION_METHOD = "FXImplied";
private static final MultiCurveCalculationConfig DEFAULT_USD_CONFIG;
private static final MultiCurveCalculationConfig EXTRA_USD_CONFIG;
private static final MultiCurveCalculationConfig DEFAULT_INR_CONFIG;
private static final LinkedHashMap<String, CurveInstrumentConfig> CURVE_EXPOSURES;
private static final LinkedHashMap<String, String[]> EXOGENOUS_CURVES;
static {
EXOGENOUS_CURVES = new LinkedHashMap<String, String[]>();
EXOGENOUS_CURVES.put(DEFAULT_USD_CONFIG_NAME, new String[] {"FUNDING" });
CURVE_EXPOSURES = new LinkedHashMap<String, CurveInstrumentConfig>();
CURVE_EXPOSURES.put("FUNDING", new CurveInstrumentConfig(Collections.singletonMap(StripInstrumentType.CASH, new String[] {"FUNDING" })));
DEFAULT_USD_CONFIG = new MultiCurveCalculationConfig(DEFAULT_USD_CONFIG_NAME, DEFAULT_USD_YIELD_CURVE_NAMES, DEFAULT_USD_ID,
DEFAULT_USD_CALCULATION_METHOD, CURVE_EXPOSURES);
EXTRA_USD_CONFIG = new MultiCurveCalculationConfig(EXTRA_USD_CONFIG_NAME, EXTRA_USD_YIELD_CURVE_NAMES, EXTRA_USD_ID, EXTRA_USD_CALCULATION_METHOD,
CURVE_EXPOSURES, EXOGENOUS_CURVES);
DEFAULT_INR_CONFIG = new MultiCurveCalculationConfig(DEFAULT_INR_CONFIG_NAME, DEFAULT_INR_YIELD_CURVE_NAMES, DEFAULT_INR_ID, DEFAULT_INR_CALCULATION_METHOD,
CURVE_EXPOSURES, EXOGENOUS_CURVES);
}
@Test
public void test() {
assertFalse(DEFAULT_USD_CONFIG.equals(EXTRA_USD_CONFIG));
assertFalse(DEFAULT_USD_CONFIG.equals(DEFAULT_INR_CONFIG));
final String name = "Extra";
final String[] curveNames = new String[] {"FORWARD_6M", "FORWARD_12M", "FORWARD_1M" };
final ComputationTargetSpecification target = ComputationTargetSpecification.of(Currency.USD);
final LinkedHashMap<String, String[]> exogenousCurves = new LinkedHashMap<String, String[]>();
exogenousCurves.put(DEFAULT_USD_CONFIG_NAME, new String[] {"FUNDING" });
final MultiCurveCalculationConfig config = new MultiCurveCalculationConfig(name, curveNames, target, "Par Rate", CURVE_EXPOSURES, exogenousCurves);
assertEquals(EXTRA_USD_CONFIG, config);
assertEquals(config.getCalculationMethod(), "Par Rate");
assertEquals(config.getCalculationConfigName(), name);
assertEquals(config.getTarget(), target);
ArrayAsserts.assertArrayEquals(config.getYieldCurveNames(), curveNames);
assertEquals(config.getExogenousConfigData(), exogenousCurves);
}
@Test
public void testCycle() {
assertEquals(DEFAULT_USD_CONFIG, cycleObject(MultiCurveCalculationConfig.class, DEFAULT_USD_CONFIG));
assertEquals(EXTRA_USD_CONFIG, cycleObject(MultiCurveCalculationConfig.class, EXTRA_USD_CONFIG));
assertEquals(DEFAULT_INR_CONFIG, cycleObject(MultiCurveCalculationConfig.class, DEFAULT_INR_CONFIG));
}
}