/** * Copyright (C) 2016 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.market.param; import static com.opengamma.strata.collect.TestHelper.assertThrows; import static com.opengamma.strata.collect.TestHelper.assertThrowsIllegalArg; import static org.testng.Assert.assertEquals; import java.util.List; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; /** * Test {@link ParameterizedDataCombiner}. */ @Test public class ParameterizedDataCombinerTest { private static final TestingParameterizedData2 DATA1 = new TestingParameterizedData2(1d, 2d); private static final TestingParameterizedData DATA2 = new TestingParameterizedData(3d); private static final TestingParameterizedData2 DATA3 = new TestingParameterizedData2(4d, 5d); //------------------------------------------------------------------------- public void test_basics() { ParameterizedDataCombiner test = ParameterizedDataCombiner.of(DATA1, DATA2, DATA3); assertEquals(test.getParameterCount(), 5); assertEquals(test.getParameter(0), 1d); assertEquals(test.getParameter(1), 2d); assertEquals(test.getParameter(2), 3d); assertEquals(test.getParameter(3), 4d); assertEquals(test.getParameter(4), 5d); assertEquals(test.getParameterMetadata(0), ParameterMetadata.empty()); assertThrows(() -> test.getParameter(-1), IndexOutOfBoundsException.class); assertThrows(() -> test.getParameter(5), IndexOutOfBoundsException.class); assertThrows(() -> test.getParameterMetadata(-1), IndexOutOfBoundsException.class); assertThrows(() -> test.getParameterMetadata(5), IndexOutOfBoundsException.class); assertThrowsIllegalArg(() -> ParameterizedDataCombiner.of()); } //------------------------------------------------------------------------- public void test_underlyingWithParameter0() { ParameterizedDataCombiner test = ParameterizedDataCombiner.of(DATA1, DATA2, DATA3); assertEquals(test.underlyingWithParameter(0, TestingParameterizedData2.class, 0, -1d).getParameter(0), -1d); assertEquals(test.underlyingWithParameter(0, TestingParameterizedData2.class, 0, -1d).getParameter(1), 2d); assertEquals(test.underlyingWithParameter(1, TestingParameterizedData.class, 0, -1d).getParameter(0), 3d); assertEquals(test.underlyingWithParameter(2, TestingParameterizedData2.class, 0, -1d).getParameter(0), 4d); assertEquals(test.underlyingWithParameter(2, TestingParameterizedData2.class, 0, -1d).getParameter(1), 5d); } public void test_underlyingWithParameter1() { ParameterizedDataCombiner test = ParameterizedDataCombiner.of(DATA1, DATA2, DATA3); assertEquals(test.underlyingWithParameter(0, TestingParameterizedData2.class, 1, -1d).getParameter(0), 1d); assertEquals(test.underlyingWithParameter(0, TestingParameterizedData2.class, 1, -1d).getParameter(1), -1d); assertEquals(test.underlyingWithParameter(1, TestingParameterizedData.class, 1, -1d).getParameter(0), 3d); assertEquals(test.underlyingWithParameter(2, TestingParameterizedData2.class, 1, -1d).getParameter(0), 4d); assertEquals(test.underlyingWithParameter(2, TestingParameterizedData2.class, 1, -1d).getParameter(1), 5d); } public void test_underlyingWithParameter2() { ParameterizedDataCombiner test = ParameterizedDataCombiner.of(DATA1, DATA2, DATA3); assertEquals(test.underlyingWithParameter(0, TestingParameterizedData2.class, 2, -1d).getParameter(0), 1d); assertEquals(test.underlyingWithParameter(0, TestingParameterizedData2.class, 2, -1d).getParameter(1), 2d); assertEquals(test.underlyingWithParameter(1, TestingParameterizedData.class, 2, -1d).getParameter(0), -1d); assertEquals(test.underlyingWithParameter(2, TestingParameterizedData2.class, 2, -1d).getParameter(0), 4d); assertEquals(test.underlyingWithParameter(2, TestingParameterizedData2.class, 2, -1d).getParameter(1), 5d); } public void test_underlyingWithParameter3() { ParameterizedDataCombiner test = ParameterizedDataCombiner.of(DATA1, DATA2, DATA3); assertEquals(test.underlyingWithParameter(0, TestingParameterizedData2.class, 3, -1d).getParameter(0), 1d); assertEquals(test.underlyingWithParameter(0, TestingParameterizedData2.class, 3, -1d).getParameter(1), 2d); assertEquals(test.underlyingWithParameter(1, TestingParameterizedData.class, 3, -1d).getParameter(0), 3d); assertEquals(test.underlyingWithParameter(2, TestingParameterizedData2.class, 3, -1d).getParameter(0), -1d); assertEquals(test.underlyingWithParameter(2, TestingParameterizedData2.class, 3, -1d).getParameter(1), 5d); } public void test_underlyingWithParameter4() { ParameterizedDataCombiner test = ParameterizedDataCombiner.of(DATA1, DATA2, DATA3); assertEquals(test.underlyingWithParameter(0, TestingParameterizedData2.class, 4, -1d).getParameter(0), 1d); assertEquals(test.underlyingWithParameter(0, TestingParameterizedData2.class, 4, -1d).getParameter(1), 2d); assertEquals(test.underlyingWithParameter(1, TestingParameterizedData.class, 4, -1d).getParameter(0), 3d); assertEquals(test.underlyingWithParameter(2, TestingParameterizedData2.class, 4, -1d).getParameter(0), 4d); assertEquals(test.underlyingWithParameter(2, TestingParameterizedData2.class, 4, -1d).getParameter(1), -1d); } //------------------------------------------------------------------------- public void test_underlyingWithPerturbation() { ParameterPerturbation perturbation = (i, v, m) -> v + i + 0.5d; ParameterizedDataCombiner test = ParameterizedDataCombiner.of(DATA1, DATA2, DATA3); assertEquals(test.underlyingWithPerturbation(0, TestingParameterizedData2.class, perturbation).getParameter(0), 1.5d); assertEquals(test.underlyingWithPerturbation(0, TestingParameterizedData2.class, perturbation).getParameter(1), 3.5d); assertEquals(test.underlyingWithPerturbation(1, TestingParameterizedData.class, perturbation).getParameter(0), 5.5d); assertEquals(test.underlyingWithPerturbation(2, TestingParameterizedData2.class, perturbation).getParameter(0), 7.5d); assertEquals(test.underlyingWithPerturbation(2, TestingParameterizedData2.class, perturbation).getParameter(1), 9.5d); } //------------------------------------------------------------------------- public void test_withParameter() { ParameterizedDataCombiner test = ParameterizedDataCombiner.of(DATA1, DATA2, DATA3); assertEquals(test.withParameter( ParameterizedData.class, 0, -1d), ImmutableList.of(DATA1.withParameter(0, -1d), DATA2, DATA3)); assertEquals(test.withParameter( ParameterizedData.class, 1, -1d), ImmutableList.of(DATA1.withParameter(1, -1d), DATA2, DATA3)); assertEquals(test.withParameter( ParameterizedData.class, 2, -1d), ImmutableList.of(DATA1, DATA2.withParameter(0, -1d), DATA3)); assertEquals(test.withParameter( ParameterizedData.class, 3, -1d), ImmutableList.of(DATA1, DATA2, DATA3.withParameter(0, -1d))); assertEquals(test.withParameter( ParameterizedData.class, 4, -1d), ImmutableList.of(DATA1, DATA2, DATA3.withParameter(1, -1d))); } //------------------------------------------------------------------------- public void test_withPerturbation() { ParameterPerturbation perturbation = (i, v, m) -> v + i + 0.5d; ParameterizedDataCombiner test = ParameterizedDataCombiner.of(DATA1, DATA2, DATA3); List<ParameterizedData> perturbed = test.withPerturbation(ParameterizedData.class, perturbation); assertEquals(perturbed.get(0), new TestingParameterizedData2(1.5d, 3.5d)); assertEquals(perturbed.get(1), new TestingParameterizedData(5.5d)); assertEquals(perturbed.get(2), new TestingParameterizedData2(7.5d, 9.5d)); } }