/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.curve;
import org.testng.annotations.Test;
import com.opengamma.util.test.TestGroup;
/**
* TODO: This is old code that has been commented. It should be removed at some point.
*/
@Test(groups = TestGroup.UNIT)
public class YieldCurveConstructionGeneratorTwoCurrenciesXCcyTest {
// Present Value
// private static final PresentValueMCACalculator PV_CALCULATOR = PresentValueMCACalculator.getInstance();
// private static final PresentValueCurveSensitivityMCSCalculator PVCS_CALCULATOR = PresentValueCurveSensitivityMCSCalculator.getInstance();
// private static final Currency CCY_PV = YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CCY1;
// private static final PresentValueConvertedCalculator PV_CONVERTED_CALCULATOR = new PresentValueConvertedCalculator(CCY_PV, PV_CALCULATOR);
// private static final PresentValueCurveSensitivityConvertedCalculator PVCS_CONVERTED_CALCULATOR = new PresentValueCurveSensitivityConvertedCalculator(CCY_PV, PVCS_CALCULATOR);
// // Par spread market quote
// private static final ParSpreadMarketQuoteCalculator PSMQ_CALCULATOR = ParSpreadMarketQuoteCalculator.getInstance();
// private static final ParSpreadMarketQuoteCurveSensitivityCalculator PSMQCS_CALCULATOR = ParSpreadMarketQuoteCurveSensitivityCalculator.getInstance();
// // Par Rate
// // private static final ParSpreadRateCalculator PSR_CALCULATOR = ParSpreadRateCalculator.getInstance();
// // private static final ParSpreadRateCurveSensitivityCalculator PSRS_CALCULATOR = ParSpreadRateCurveSensitivityCalculator.getInstance();
//
// private static final ZonedDateTime NOW = DateUtils.getUTCDate(2011, 9, 28);
//
// private static List<InstrumentDefinition<?>> DEFINITIONS_DSC_1;
// private static List<InstrumentDefinition<?>> DEFINITIONS_FWD_1;
// private static List<InstrumentDefinition<?>> DEFINITIONS_DSC_2;
// private static List<InstrumentDefinition<?>> DEFINITIONS_FWD_2;
// private static Pair<YieldCurveBundle, DoubleMatrix2D> CURVES_PRESENT_VALUE_WITH_TODAY;
// private static Pair<YieldCurveBundle, DoubleMatrix2D> CURVES_PRESENT_VALUE_WITH_TODAY_2BLOCKS;
// private static Pair<YieldCurveBundle, DoubleMatrix2D> CURVES_PAR_SPREAD_MQ_WITH_TODAY;
// private static Pair<YieldCurveBundle, DoubleMatrix2D> CURVES_PAR_SPREAD_MQ_WITH_TODAY_2BLOCKS;
// private static Pair<YieldCurveBundle, DoubleMatrix2D> CURVES_PRESENT_VALUE_WITHOUT_TODAY;
// private static Pair<YieldCurveBundle, DoubleMatrix2D> CURVES_PAR_SPREAD_MQ_WITHOUT_TODAY;
//
// private static final double TOLERANCE_PV = 1.0E-10;
//
// @BeforeSuite
// static void initClass() {
// DEFINITIONS_DSC_1 = YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.getDefinitions(YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.DSC_1_MARKET_QUOTES,
// YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.DSC_1_GENERATORS, YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.DSC_1_TENOR);
// DEFINITIONS_FWD_1 = YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.getDefinitions(YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.FWD_1_MARKET_QUOTES,
// YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.FWD_1_GENERATORS, YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.FWD_1_TENOR);
// DEFINITIONS_DSC_2 = YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.getDefinitions(YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.DSC_2_MARKET_QUOTES,
// YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.DSC_2_GENERATORS, YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.DSC_2_TENOR);
// DEFINITIONS_FWD_2 = YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.getDefinitions(YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.FWD_2_MARKET_QUOTES,
// YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.FWD_2_GENERATORS, YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.FWD_2_TENOR);
//
// CURVES_PRESENT_VALUE_WITH_TODAY = YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.makeCurves(DEFINITIONS_DSC_1, DEFINITIONS_FWD_1, DEFINITIONS_DSC_2, DEFINITIONS_FWD_2,
// PV_CONVERTED_CALCULATOR, PVCS_CONVERTED_CALCULATOR, true, true);
// CURVES_PRESENT_VALUE_WITH_TODAY_2BLOCKS = YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.makeCurves(DEFINITIONS_DSC_1, DEFINITIONS_FWD_1, DEFINITIONS_DSC_2, DEFINITIONS_FWD_2,
// PV_CONVERTED_CALCULATOR, PVCS_CONVERTED_CALCULATOR, true, true);
// CURVES_PAR_SPREAD_MQ_WITH_TODAY = YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.makeCurves(DEFINITIONS_DSC_1, DEFINITIONS_FWD_1, DEFINITIONS_DSC_2, DEFINITIONS_FWD_2, PSMQ_CALCULATOR,
// PSMQCS_CALCULATOR, true, false);
// CURVES_PAR_SPREAD_MQ_WITH_TODAY_2BLOCKS = YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.makeCurves2Blocks(DEFINITIONS_DSC_1, DEFINITIONS_FWD_1, DEFINITIONS_DSC_2, DEFINITIONS_FWD_2,
// PSMQ_CALCULATOR, PSMQCS_CALCULATOR, true, false);
//
// CURVES_PRESENT_VALUE_WITHOUT_TODAY = YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.makeCurves(DEFINITIONS_DSC_1, DEFINITIONS_FWD_1, DEFINITIONS_DSC_2, DEFINITIONS_FWD_2,
// PV_CONVERTED_CALCULATOR, PVCS_CONVERTED_CALCULATOR, false, true);
// // CURVES_PAR_SPREAD_RATE_WITHOUT_TODAY = YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.makeCurves(DEFINITIONS_DSC, DEFINITIONS_FWD_3M, PSR_CALCULATOR, PSRS_CALCULATOR, false);
// CURVES_PAR_SPREAD_MQ_WITHOUT_TODAY = YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.makeCurves(DEFINITIONS_DSC_1, DEFINITIONS_FWD_1, DEFINITIONS_DSC_2, DEFINITIONS_FWD_2, PSMQ_CALCULATOR,
// PSMQCS_CALCULATOR, false, false);
// }
//
// @Test
// public void curveConstructionTwoCurrenciesXCcy() {
// // Curve constructed with present value and today fixing
// curveConstructionTest(CURVES_PRESENT_VALUE_WITH_TODAY.getFirst(), true);
// // Curve constructed in 2 blocks with present value and today fixing
// curveConstructionTest(CURVES_PRESENT_VALUE_WITH_TODAY_2BLOCKS.getFirst(), true);
// // Curve constructed with par spread (market quote) and today fixing
// curveConstructionTest(CURVES_PAR_SPREAD_MQ_WITH_TODAY.getFirst(), true);
// // Curve constructed in 2 blocks with par spread (market quote) and today fixing
// curveConstructionTest(CURVES_PAR_SPREAD_MQ_WITH_TODAY_2BLOCKS.getFirst(), true);
// final double[][] mqj1 = CURVES_PAR_SPREAD_MQ_WITH_TODAY.getSecond().getData();
// final double[][] mqj2 = CURVES_PAR_SPREAD_MQ_WITH_TODAY_2BLOCKS.getSecond().getData();
// final double[][] pvj1 = CURVES_PRESENT_VALUE_WITH_TODAY.getSecond().getData();
// final double[][] pvj2 = CURVES_PRESENT_VALUE_WITH_TODAY_2BLOCKS.getSecond().getData();
// for (int loop1 = 0; loop1 < mqj1.length; loop1++) {
// for (int loop2 = 0; loop2 < mqj1[0].length; loop2++) {
// assertEquals("Curve construction 2 blocks: Jacobian -" + loop1 + " - " + loop2, mqj1[loop1][loop2], mqj2[loop1][loop2], 1.0E-6);
// assertEquals("Curve construction 2 blocks: Jacobian -" + loop1 + " - " + loop2, pvj1[loop1][loop2], pvj2[loop1][loop2], 1.0E-6);
// }
// }
// // Curve constructed with present value and no today fixing
// curveConstructionTest(CURVES_PRESENT_VALUE_WITHOUT_TODAY.getFirst(), false);
// // // Curve constructed with par rate and no today fixing
// // curveConstructionTest(CURVES_PAR_SPREAD_RATE_WITHOUT_TODAY.getFirst(), false);
// // Curve constructed with par spread (market quote) and no today fixing
// curveConstructionTest(CURVES_PAR_SPREAD_MQ_WITHOUT_TODAY.getFirst(), false);
// }
//
// @SuppressWarnings({"unchecked" })
// public void curveConstructionTest(final YieldCurveBundle curves, final boolean withToday) {
// final int nbDsc1 = DEFINITIONS_DSC_1.size();
// final int nbFwd1 = DEFINITIONS_FWD_1.size();
// final int nbDsc2 = DEFINITIONS_DSC_2.size();
// final int nbFwd2 = DEFINITIONS_FWD_2.size();
// final double[] pv = new double[nbDsc1 + nbFwd1 + nbDsc2 + nbFwd2];
// final List<InstrumentDerivative> instruments = new ArrayList<InstrumentDerivative>();
// for (final InstrumentDefinition<?> instrument : DEFINITIONS_DSC_1) {
// InstrumentDerivative ird;
// if (instrument instanceof SwapFixedONDefinition) {
// final String[] curveNames = new String[] {YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CURVE_NAME_DSC_1, YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CURVE_NAME_DSC_1 };
// ird = ((SwapFixedONDefinition) instrument).toDerivative(NOW, withToday ? YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.TS_FIXED_OIS_USD_WITH_TODAY
// : YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.TS_FIXED_OIS_USD_WITHOUT_TODAY, curveNames);
// } else {
// final String[] curveNames = new String[] {YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CURVE_NAME_DSC_1 };
// ird = instrument.toDerivative(NOW, curveNames);
// }
// instruments.add(ird);
// }
// for (final InstrumentDefinition<?> instrument : DEFINITIONS_FWD_1) {
// InstrumentDerivative ird;
// if (instrument instanceof SwapFixedIborDefinition) {
// final String[] curveNames = new String[] {YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CURVE_NAME_DSC_1, YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CURVE_NAME_FWD_1 };
// ird = ((SwapFixedIborDefinition) instrument).toDerivative(NOW, withToday ? YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.TS_FIXED_IBOR_USD3M_WITH_TODAY
// : YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.TS_FIXED_IBOR_USD3M_WITHOUT_TODAY, curveNames);
// } else {
// final String[] curveNames = new String[] {YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CURVE_NAME_FWD_1 };
// ird = instrument.toDerivative(NOW, curveNames);
// }
// instruments.add(ird);
// }
// for (final InstrumentDefinition<?> instrument : DEFINITIONS_DSC_2) {
// InstrumentDerivative ird;
// if (instrument instanceof SwapXCcyIborIborDefinition) {
// final String[] curveNames = new String[] {YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CURVE_NAME_DSC_2, YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CURVE_NAME_FWD_2,
// YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CURVE_NAME_DSC_1, YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CURVE_NAME_FWD_1 };
// ird = ((SwapXCcyIborIborDefinition) instrument).toDerivative(NOW, withToday ? YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.TS_FIXED_IBOR_EURUSD3M_WITH_TODAY
// : YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.TS_FIXED_IBOR_EURUSD3M_WITHOUT_TODAY, curveNames);
// } else {
// if (instrument instanceof CashDefinition) {
// final String[] curveNames = new String[] {YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CURVE_NAME_DSC_2 };
// ird = instrument.toDerivative(NOW, curveNames);
// } else {
// final String[] curveNames = new String[] {YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CURVE_NAME_DSC_2, YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CURVE_NAME_DSC_1 };
// ird = instrument.toDerivative(NOW, curveNames);
// }
// }
// instruments.add(ird);
// }
// for (final InstrumentDefinition<?> instrument : DEFINITIONS_FWD_2) {
// InstrumentDerivative ird;
// if (instrument instanceof SwapFixedIborDefinition) {
// final String[] curveNames = new String[] {YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CURVE_NAME_DSC_2, YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CURVE_NAME_FWD_2 };
// ird = ((SwapFixedIborDefinition) instrument).toDerivative(NOW, withToday ? YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.TS_FIXED_IBOR_EUR3M_WITH_TODAY
// : YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.TS_FIXED_IBOR_EUR3M_WITHOUT_TODAY, curveNames);
// } else {
// final String[] curveNames = new String[] {YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.CURVE_NAME_FWD_2 };
// ird = instrument.toDerivative(NOW, curveNames);
// }
// instruments.add(ird);
// }
// final String[] curveBundleName = curves.getAllNames().toArray(new String[0]);
// for (int loopdsc1 = 0; loopdsc1 < nbDsc1; loopdsc1++) {
// pv[loopdsc1] = curves.getFxRates().convert(instruments.get(loopdsc1).accept(PV_CALCULATOR, curves), curves.getCurveCurrency(curveBundleName[0])).getAmount();
// assertEquals("Curve construction: node dsc ccy1 - " + loopdsc1, 0, pv[loopdsc1], TOLERANCE_PV);
// }
// for (int loopfwd1 = 0; loopfwd1 < nbFwd1; loopfwd1++) {
// pv[loopfwd1] = curves.getFxRates().convert(instruments.get(loopfwd1).accept(PV_CALCULATOR, curves), curves.getCurveCurrency(curveBundleName[0])).getAmount();
// assertEquals("Curve construction: node fwd ccy1 - " + loopfwd1, 0, pv[loopfwd1], TOLERANCE_PV);
// }
// for (int loopdsc2 = 0; loopdsc2 < nbDsc2; loopdsc2++) {
// pv[nbDsc1 + nbFwd1 + loopdsc2] = curves.getFxRates().convert(instruments.get(nbDsc1 + nbFwd1 + loopdsc2).accept(PV_CALCULATOR, curves), curves.getCurveCurrency(curveBundleName[1])).getAmount();
// assertEquals("Curve construction: node dsc ccy2 - " + loopdsc2, 0, pv[nbDsc1 + nbFwd1 + loopdsc2], TOLERANCE_PV);
// }
// for (int loopfwd2 = 0; loopfwd2 < nbFwd2; loopfwd2++) {
// pv[nbDsc1 + nbFwd1 + nbDsc2 + loopfwd2] = curves.getFxRates()
// .convert(instruments.get(nbDsc1 + nbFwd1 + nbDsc2 + loopfwd2).accept(PV_CALCULATOR, curves), curves.getCurveCurrency(curveBundleName[1])).getAmount();
// assertEquals("Curve construction: node fwd ccy2 - " + loopfwd2, 0, pv[nbDsc1 + nbFwd1 + nbDsc2 + loopfwd2], TOLERANCE_PV);
// }
// }
//
// @Test(enabled = false)
// public void performance() {
// long startTime, endTime;
// final int nbTest = 100;
// @SuppressWarnings("unused")
// Pair<YieldCurveBundle, DoubleMatrix2D> curvePresentValue;
// @SuppressWarnings("unused")
// Pair<YieldCurveBundle, DoubleMatrix2D> curveParSpreadMQ;
// @SuppressWarnings("unused")
// Pair<YieldCurveBundle, DoubleMatrix2D> curveParSpreadMQ2;
//
// final int nbDsc1 = DEFINITIONS_DSC_1.size();
// final int nbFwd1 = DEFINITIONS_FWD_1.size();
// final int nbDsc2 = DEFINITIONS_DSC_2.size();
// final int nbFwd2 = DEFINITIONS_FWD_2.size();
//
// startTime = System.currentTimeMillis();
// for (int looptest = 0; looptest < nbTest; looptest++) {
// curvePresentValue = YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.makeCurves(DEFINITIONS_DSC_1, DEFINITIONS_FWD_1, DEFINITIONS_DSC_2, DEFINITIONS_FWD_2, PV_CONVERTED_CALCULATOR,
// PVCS_CONVERTED_CALCULATOR, true, true);
// }
// endTime = System.currentTimeMillis();
// System.out.println(nbTest + " curve construction TwoCcyXCcy (with present value and " + (nbDsc1 + nbFwd1 + nbDsc2 + nbFwd2) + " instruments): " + (endTime - startTime) + " ms");
// // Performance note: curve construction (with par spread (market quote), 4 curves - 2 ccy and 40 instruments): 16-Jul-2012: On Mac Pro 3.2 GHz Quad-Core Intel Xeon: 1150 ms for 100 bundles.
//
// startTime = System.currentTimeMillis();
// for (int looptest = 0; looptest < nbTest; looptest++) {
// curveParSpreadMQ = YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.makeCurves(DEFINITIONS_DSC_1, DEFINITIONS_FWD_1, DEFINITIONS_DSC_2, DEFINITIONS_FWD_2, PSMQ_CALCULATOR,
// PSMQCS_CALCULATOR, true, false);
// }
// endTime = System.currentTimeMillis();
// System.out.println(nbTest + " curve construction TwoCcyXCcy (with par spread (market quote) and " + (nbDsc1 + nbFwd1 + nbDsc2 + nbFwd2) + " instruments): " + (endTime - startTime) + " ms");
// // Performance note: curve construction (with par spread (market quote), 4 curves - 2 ccy and 40 instruments): 13-Jul-2012: On Mac Pro 3.2 GHz Quad-Core Intel Xeon: 1500 ms for 100 bundles.
//
// startTime = System.currentTimeMillis();
// for (int looptest = 0; looptest < nbTest; looptest++) {
// curveParSpreadMQ2 = YieldCurveConstructionGeneratorTwoCurrenciesXCcyData.makeCurves2Blocks(DEFINITIONS_DSC_1, DEFINITIONS_FWD_1, DEFINITIONS_DSC_2, DEFINITIONS_FWD_2, PSMQ_CALCULATOR,
// PSMQCS_CALCULATOR, true, false);
// }
// endTime = System.currentTimeMillis();
// System.out.println(nbTest + " curve construction TwoCcyXCcy 2 Blocks (with par spread (market quote) and " + (nbDsc1 + nbFwd1 + nbDsc2 + nbFwd2) + " instruments): " + (endTime - startTime)
// + " ms");
// // Performance note: curve construction (with par spread (market quote) in 2 blocks, 4 curves - 2 ccy and 40 instruments): 13-Jul-2012: On Mac Pro 3.2 GHz Quad-Core Intel Xeon: 960 ms for 100 bundles.
// }
}