/** * 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.basics.currency.Currency.USD; import static com.opengamma.strata.collect.TestHelper.assertThrowsIllegalArg; import static com.opengamma.strata.collect.TestHelper.coverBeanEquals; import static com.opengamma.strata.collect.TestHelper.coverImmutableBean; import static org.testng.Assert.assertEquals; import java.util.List; import java.util.Optional; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; import com.opengamma.strata.collect.array.DoubleArray; import com.opengamma.strata.data.MarketDataName; import com.opengamma.strata.market.curve.CurveName; /** * Test {@link UnitParameterSensitivity}. */ @Test public class UnitParameterSensitivityTest { private static final double FACTOR1 = 3.14; private static final DoubleArray VECTOR1 = DoubleArray.of(100, 200, 300, 123); private static final DoubleArray VECTOR1_FACTOR = DoubleArray.of(100 * FACTOR1, 200 * FACTOR1, 300 * FACTOR1, 123 * FACTOR1); private static final DoubleArray VECTOR2 = DoubleArray.of(1000, 250, 321, 123, 321); private static final DoubleArray VECTOR_COMBINED = VECTOR1.concat(VECTOR2); private static final MarketDataName<?> NAME1 = CurveName.of("NAME-1"); private static final MarketDataName<?> NAME2 = CurveName.of("NAME-2"); private static final MarketDataName<?> NAME_COMBINED = CurveName.of("NAME-COMBINED"); private static final List<ParameterMetadata> METADATA1 = ParameterMetadata.listOfEmpty(4); private static final List<ParameterMetadata> METADATA2 = ParameterMetadata.listOfEmpty(5); private static final ImmutableList<ParameterMetadata> METADATA_COMBINED = ImmutableList.<ParameterMetadata>builder().addAll(METADATA1).addAll(METADATA2).build(); private static final List<ParameterMetadata> METADATA_BAD = ParameterMetadata.listOfEmpty(1); private static final List<ParameterSize> PARAM_SPLIT = ImmutableList.of(ParameterSize.of(NAME1, 4), ParameterSize.of(NAME2, 5)); //------------------------------------------------------------------------- public void test_of_metadata() { UnitParameterSensitivity test = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); assertEquals(test.getMarketDataName(), NAME1); assertEquals(test.getParameterCount(), VECTOR1.size()); assertEquals(test.getParameterMetadata(), METADATA1); assertEquals(test.getParameterMetadata(0), METADATA1.get(0)); assertEquals(test.getSensitivity(), VECTOR1); assertEquals(test.getParameterSplit(), Optional.empty()); } public void test_of_metadata_badMetadata() { assertThrowsIllegalArg(() -> UnitParameterSensitivity.of(NAME1, METADATA_BAD, VECTOR1)); } public void test_of_metadataParamSplit() { UnitParameterSensitivity test = UnitParameterSensitivity.of(NAME_COMBINED, METADATA_COMBINED, VECTOR_COMBINED, PARAM_SPLIT); assertEquals(test.getMarketDataName(), NAME_COMBINED); assertEquals(test.getParameterCount(), VECTOR_COMBINED.size()); assertEquals(test.getParameterMetadata(), METADATA_COMBINED); assertEquals(test.getParameterMetadata(0), METADATA_COMBINED.get(0)); assertEquals(test.getSensitivity(), VECTOR_COMBINED); assertEquals(test.getParameterSplit(), Optional.of(PARAM_SPLIT)); } public void test_of_metadataParamSplit_badSplit() { assertThrowsIllegalArg(() -> UnitParameterSensitivity.of(NAME_COMBINED, METADATA1, VECTOR1, PARAM_SPLIT)); } public void test_combine() { UnitParameterSensitivity base1 = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); UnitParameterSensitivity base2 = UnitParameterSensitivity.of(NAME2, METADATA2, VECTOR2); UnitParameterSensitivity test = UnitParameterSensitivity.combine(NAME_COMBINED, base1, base2); assertEquals(test.getMarketDataName(), NAME_COMBINED); assertEquals(test.getParameterCount(), VECTOR_COMBINED.size()); assertEquals(test.getParameterMetadata(), METADATA_COMBINED); assertEquals(test.getParameterMetadata(0), METADATA_COMBINED.get(0)); assertEquals(test.getSensitivity(), VECTOR_COMBINED); assertEquals(test.getParameterSplit(), Optional.of(PARAM_SPLIT)); } public void test_combine_arraySize0() { assertThrowsIllegalArg(() -> UnitParameterSensitivity.combine(NAME_COMBINED)); } public void test_combine_arraySize1() { UnitParameterSensitivity base = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); assertThrowsIllegalArg(() -> UnitParameterSensitivity.combine(NAME_COMBINED, base)); } public void test_combine_duplicateNames() { UnitParameterSensitivity base1 = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); UnitParameterSensitivity base2 = UnitParameterSensitivity.of(NAME1, METADATA2, VECTOR2); assertThrowsIllegalArg(() -> UnitParameterSensitivity.combine(NAME_COMBINED, base1, base2)); } //------------------------------------------------------------------------- public void test_multipliedBy_currency() { UnitParameterSensitivity base = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); CurrencyParameterSensitivity test = base.multipliedBy(USD, FACTOR1); assertEquals(test, CurrencyParameterSensitivity.of(NAME1, METADATA1, USD, VECTOR1_FACTOR)); } public void test_multipliedBy() { UnitParameterSensitivity base = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); UnitParameterSensitivity test = base.multipliedBy(FACTOR1); assertEquals(test, UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1_FACTOR)); } //------------------------------------------------------------------------- public void test_withSensitivity() { UnitParameterSensitivity base = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); UnitParameterSensitivity test = base.withSensitivity(VECTOR1_FACTOR); assertEquals(test, UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1_FACTOR)); assertThrowsIllegalArg(() -> base.withSensitivity(DoubleArray.of(1d))); } //------------------------------------------------------------------------- public void test_plus_array() { UnitParameterSensitivity base = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); UnitParameterSensitivity test = base.plus(VECTOR1); assertEquals(test, base.multipliedBy(2)); } public void test_plus_array_wrongSize() { UnitParameterSensitivity base = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); assertThrowsIllegalArg(() -> base.plus(VECTOR2)); } //------------------------------------------------------------------------- public void test_plus_sensitivity() { UnitParameterSensitivity base1 = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); UnitParameterSensitivity test = base1.plus(base1); assertEquals(test, base1.multipliedBy(2)); } public void test_plus_sensitivity_wrongName() { UnitParameterSensitivity base1 = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); UnitParameterSensitivity base2 = UnitParameterSensitivity.of(NAME2, METADATA1, VECTOR1); assertThrowsIllegalArg(() -> base1.plus(base2)); } //------------------------------------------------------------------------- public void test_split1() { UnitParameterSensitivity base = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); ImmutableList<UnitParameterSensitivity> test = base.split(); assertEquals(test.size(), 1); assertEquals(test.get(0), base); } public void test_split2() { UnitParameterSensitivity base1 = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); UnitParameterSensitivity base2 = UnitParameterSensitivity.of(NAME2, METADATA2, VECTOR2); UnitParameterSensitivity combined = UnitParameterSensitivity.combine(NAME_COMBINED, base1, base2); ImmutableList<UnitParameterSensitivity> test = combined.split(); assertEquals(test.size(), 2); assertEquals(test.get(0), base1); assertEquals(test.get(1), base2); } //------------------------------------------------------------------------- public void test_total() { UnitParameterSensitivity base = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); double test = base.total(); assertEquals(test, VECTOR1.get(0) + VECTOR1.get(1) + VECTOR1.get(2) + VECTOR1.get(3)); } //------------------------------------------------------------------------- public void coverage() { UnitParameterSensitivity test = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); coverImmutableBean(test); UnitParameterSensitivity test2 = UnitParameterSensitivity.of(NAME2, METADATA2, VECTOR2); coverBeanEquals(test, test2); } }