/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.provider.description.interestrate;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
import java.util.ArrayList;
import org.testng.annotations.Test;
import com.opengamma.analytics.financial.forex.datasets.StandardDataSetsEURUSDForex;
import com.opengamma.analytics.financial.forex.method.FXMatrixUtils;
import com.opengamma.analytics.financial.instrument.index.IborIndex;
import com.opengamma.analytics.financial.interestrate.datasets.StandardDataSetsMulticurveUSD;
import com.opengamma.analytics.financial.provider.curve.CurveBuildingBlockBundle;
import com.opengamma.util.money.Currency;
import com.opengamma.util.tuple.Pair;
/**
* Tests the merge tools between different providers.
*/
public class ProviderUtilsTest {
private static final Pair<MulticurveProviderDiscount, CurveBuildingBlockBundle> MULTICURVE_PAIR_USD136 = StandardDataSetsMulticurveUSD.getCurvesUSDOisL1L3L6();
private static final MulticurveProviderDiscount MULTICURVE_USD136 = MULTICURVE_PAIR_USD136.getFirst();
private static final Pair<MulticurveProviderDiscount, CurveBuildingBlockBundle> MULTICURVE_PAIR_USDEUR_FX = StandardDataSetsEURUSDForex.getCurvesUSDOisEURFx();
private static final MulticurveProviderDiscount MULTICURVE_USDEUR_FX = MULTICURVE_PAIR_USDEUR_FX.getFirst();
private static final Currency USD = Currency.USD;
private static final Currency EUR = Currency.EUR;
private static final IborIndex[] INDEX_USD136 = StandardDataSetsMulticurveUSD.indexIborArrayUSDOisL3();
private static final double TOLERANCE_FX_RATE = 1.0E-10;
@Test
/**
* Test merge of a single provider.
*/
public void mergeUSD136() {
final ArrayList<MulticurveProviderDiscount> multicurveList = new ArrayList<>();
multicurveList.add(MULTICURVE_USD136);
final MulticurveProviderDiscount merged1 = ProviderUtils.mergeDiscountingProviders(multicurveList);
assertEquals("ProviderUtils - Merge multi-curve provider", MULTICURVE_USD136.getCurve(USD), merged1.getCurve(USD));
for (int loopi = 0; loopi < INDEX_USD136.length; loopi++) {
assertEquals("ProviderUtils - Merge multi-curve provider", MULTICURVE_USD136.getCurve(INDEX_USD136[loopi]), merged1.getCurve(INDEX_USD136[loopi]));
}
assertTrue("ProviderUtils - Merge multi-curve provider", FXMatrixUtils.compare(MULTICURVE_USD136.getFxRates(), merged1.getFxRates(), TOLERANCE_FX_RATE));
}
@Test
/**
* Test merge of a single provider.
*/
public void mergeUSDEURForex() {
final ArrayList<MulticurveProviderDiscount> multicurveList = new ArrayList<>();
multicurveList.add(MULTICURVE_USDEUR_FX);
final MulticurveProviderDiscount merged1 = ProviderUtils.mergeDiscountingProviders(multicurveList);
assertEquals("ProviderUtils - Merge multi-curve provider", MULTICURVE_USDEUR_FX.getCurve(USD), merged1.getCurve(USD));
assertEquals("ProviderUtils - Merge multi-curve provider", MULTICURVE_USDEUR_FX.getCurve(EUR), merged1.getCurve(EUR));
assertTrue("ProviderUtils - Merge multi-curve provider", FXMatrixUtils.compare(MULTICURVE_USDEUR_FX.getFxRates(), merged1.getFxRates(), TOLERANCE_FX_RATE));
}
}