/** * Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.market.sensitivity; import static com.opengamma.strata.basics.currency.Currency.GBP; import static com.opengamma.strata.basics.currency.Currency.USD; import static com.opengamma.strata.collect.TestHelper.assertSerialization; import static com.opengamma.strata.collect.TestHelper.coverBeanEquals; import static com.opengamma.strata.collect.TestHelper.coverImmutableBean; import static com.opengamma.strata.collect.TestHelper.date; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.opengamma.strata.basics.currency.CurrencyPair; import com.opengamma.strata.basics.currency.FxMatrix; /** * Test {@link PointSensitivities}. */ @Test public class PointSensitivitiesTest { private static final PointSensitivity CS1 = DummyPointSensitivity.of(GBP, date(2015, 6, 30), 12d); private static final PointSensitivity CS2 = DummyPointSensitivity.of(GBP, date(2015, 7, 30), 22d); private static final PointSensitivity CS3 = DummyPointSensitivity.of(GBP, date(2015, 8, 30), 32d); private static final PointSensitivity CS3B = DummyPointSensitivity.of(GBP, date(2015, 8, 30), 3d); private static final PointSensitivity CS4 = DummyPointSensitivity.of(GBP, date(2015, 8, 30), USD, 4d); public void test_of_array() { PointSensitivities test = PointSensitivities.of(CS1, CS2); assertEquals(test.getSensitivities(), ImmutableList.of(CS1, CS2)); assertEquals(test.size(), 2); } public void test_of_List() { PointSensitivities test = PointSensitivities.of(Lists.newArrayList(CS1, CS2)); assertEquals(test.getSensitivities(), ImmutableList.of(CS1, CS2)); assertEquals(test.size(), 2); } //------------------------------------------------------------------------- public void test_combinedWith() { PointSensitivities test = PointSensitivities.of(Lists.newArrayList(CS2, CS1)); PointSensitivities test2 = PointSensitivities.of(Lists.newArrayList(CS3)); assertEquals(test.combinedWith(test2).getSensitivities(), ImmutableList.of(CS2, CS1, CS3)); } //------------------------------------------------------------------------- public void test_multipliedBy() { PointSensitivities test = PointSensitivities.of(Lists.newArrayList(CS3, CS2, CS1)); assertEquals( test.multipliedBy(2d).getSensitivities(), ImmutableList.of(CS3.withSensitivity(64d), CS2.withSensitivity(44d), CS1.withSensitivity(24d))); } public void test_mapSensitivities() { PointSensitivities test = PointSensitivities.of(Lists.newArrayList(CS3, CS2, CS1)); assertEquals( test.mapSensitivities(s -> s / 2).getSensitivities(), ImmutableList.of(CS3.withSensitivity(16d), CS2.withSensitivity(11d), CS1.withSensitivity(6d))); } //------------------------------------------------------------------------- public void test_normalized_sorts() { PointSensitivities test = PointSensitivities.of(Lists.newArrayList(CS3, CS2, CS1)); assertEquals(test.normalized().getSensitivities(), ImmutableList.of(CS1, CS2, CS3)); } public void test_normalized_merges() { PointSensitivities test = PointSensitivities.of(Lists.newArrayList(CS3, CS2, CS1, CS3B)); assertEquals(test.normalized().getSensitivities(), ImmutableList.of(CS1, CS2, CS3.withSensitivity(35d))); } public void test_normalized_empty() { assertEquals(PointSensitivities.empty().normalized(), PointSensitivities.empty()); } //------------------------------------------------------------------------- public void test_equalWithTolerance_length() { PointSensitivities test1 = PointSensitivities.of(Lists.newArrayList(CS3, CS2, CS1)).normalized(); PointSensitivities test2 = PointSensitivities.of(Lists.newArrayList(CS3, CS2)).normalized(); assertFalse(test1.equalWithTolerance(test2, 1.0E+1)); } public void test_equalWithTolerance_date() { PointSensitivities test1 = PointSensitivities.of(Lists.newArrayList(CS3, CS1)).normalized(); PointSensitivities test2 = PointSensitivities.of(Lists.newArrayList(CS3, CS2)).normalized(); assertFalse(test1.equalWithTolerance(test2, 1.0E+1)); } public void test_equalWithTolerance_value() { PointSensitivities test1 = PointSensitivities.of(Lists.newArrayList(CS3, CS1)).normalized(); PointSensitivities test2 = PointSensitivities.of(Lists.newArrayList(CS3B, CS1)).normalized(); assertFalse(test1.equalWithTolerance(test2, 1.0E+1)); } public void test_equalWithTolerance_true() { PointSensitivity cs1b = DummyPointSensitivity.of(GBP, date(2015, 6, 30), 12.1d); PointSensitivities test1 = PointSensitivities.of(Lists.newArrayList(CS3, CS1)).normalized(); PointSensitivities test2 = PointSensitivities.of(Lists.newArrayList(CS3, cs1b)).normalized(); assertTrue(test1.equalWithTolerance(test2, 1.0E-1)); } //------------------------------------------------------------------------- public void test_convertedTo_singleCurrency() { double rate = 1.5d; FxMatrix matrix = FxMatrix.of(CurrencyPair.of(GBP, USD), rate); PointSensitivities base = PointSensitivities.of(Lists.newArrayList(CS3, CS2, CS1)); PointSensitivities test1 = base.convertedTo(USD, matrix); PointSensitivity c1Conv = CS1.convertedTo(USD, matrix); PointSensitivity c2Conv = CS2.convertedTo(USD, matrix); PointSensitivity c3Conv = CS3.convertedTo(USD, matrix); PointSensitivities expected = PointSensitivities.of(Lists.newArrayList(c3Conv, c2Conv, c1Conv)); assertEquals(test1.normalized(), expected.normalized()); PointSensitivities test2 = base.convertedTo(GBP, matrix); assertEquals(test2.normalized(), base.normalized()); } public void test_convertedTo_multipleCurrency() { double rate = 1.5d; FxMatrix matrix = FxMatrix.of(CurrencyPair.of(GBP, USD), rate); PointSensitivities base = PointSensitivities.of(Lists.newArrayList(CS4, CS3, CS1)); PointSensitivities test1 = base.convertedTo(USD, matrix); PointSensitivity c1Conv = CS1.convertedTo(USD, matrix); PointSensitivity c3Conv = CS3.convertedTo(USD, matrix); PointSensitivity c3c4Usd = c3Conv.withSensitivity(c3Conv.getSensitivity() + CS4.getSensitivity()); PointSensitivities expected1 = PointSensitivities.of(Lists.newArrayList(c3c4Usd, c1Conv)); assertEquals(test1.normalized(), expected1.normalized()); PointSensitivities test2 = base.convertedTo(GBP, matrix); PointSensitivity c4Conv = CS4.convertedTo(GBP, matrix); PointSensitivity c3c4GBP = CS3.withSensitivity(CS3.getSensitivity() + c4Conv.getSensitivity()); PointSensitivities expected2 = PointSensitivities.of(Lists.newArrayList(c3c4GBP, CS1)); assertEquals(test2.normalized(), expected2.normalized()); } public void test_convertedTo_empty() { assertEquals(PointSensitivities.empty().convertedTo(GBP, FxMatrix.empty()), PointSensitivities.empty()); } //------------------------------------------------------------------------- public void test_toMutable() { PointSensitivities test = PointSensitivities.of(Lists.newArrayList(CS3, CS2, CS1)); assertEquals(test.toMutable().getSensitivities(), ImmutableList.of(CS3, CS2, CS1)); } //------------------------------------------------------------------------- public void coverage() { PointSensitivities test = PointSensitivities.of(Lists.newArrayList(CS3, CS2, CS1)); coverImmutableBean(test); PointSensitivities test2 = PointSensitivities.of(Lists.newArrayList(CS1)); coverBeanEquals(test, test2); } public void test_serialization() { PointSensitivities test = PointSensitivities.of(Lists.newArrayList(CS3, CS2, CS1)); assertSerialization(test); } }