/**
* Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.pricer.bond;
import static com.opengamma.strata.basics.currency.Currency.GBP;
import static com.opengamma.strata.basics.currency.Currency.USD;
import static com.opengamma.strata.basics.index.IborIndices.GBP_LIBOR_3M;
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.assertSame;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.opengamma.strata.basics.ReferenceData;
import com.opengamma.strata.basics.currency.Currency;
import com.opengamma.strata.basics.currency.CurrencyPair;
import com.opengamma.strata.basics.currency.FxMatrix;
import com.opengamma.strata.basics.index.IborIndexObservation;
import com.opengamma.strata.market.sensitivity.MutablePointSensitivities;
import com.opengamma.strata.pricer.ZeroRateSensitivity;
import com.opengamma.strata.pricer.rate.IborRateSensitivity;
/**
* Test {@link IssuerCurveZeroRateSensitivity}.
*/
@Test
public class IssuerCurveZeroRateSensitivityTest {
private static final ReferenceData REF_DATA = ReferenceData.standard();
private static final double YEARFRAC = 2d;
private static final double YEARFRAC2 = 3d;
private static final double VALUE = 32d;
private static final Currency CURRENCY = USD;
private static final LegalEntityGroup GROUP = LegalEntityGroup.of("ISSUER1");
public void test_of_withSensitivityCurrency() {
Currency sensiCurrency = GBP;
IssuerCurveZeroRateSensitivity test = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, sensiCurrency, GROUP, VALUE);
assertEquals(test.getLegalEntityGroup(), GROUP);
assertEquals(test.getCurveCurrency(), CURRENCY);
assertEquals(test.getCurrency(), sensiCurrency);
assertEquals(test.getYearFraction(), YEARFRAC);
assertEquals(test.getSensitivity(), VALUE);
}
public void test_of_withoutSensitivityCurrency() {
IssuerCurveZeroRateSensitivity test = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GROUP, VALUE);
assertEquals(test.getLegalEntityGroup(), GROUP);
assertEquals(test.getCurveCurrency(), CURRENCY);
assertEquals(test.getCurrency(), CURRENCY);
assertEquals(test.getYearFraction(), YEARFRAC);
assertEquals(test.getSensitivity(), VALUE);
}
public void test_of_zeroRateSensitivity() {
Currency sensiCurrency = GBP;
ZeroRateSensitivity zeroSensi = ZeroRateSensitivity.of(CURRENCY, YEARFRAC, sensiCurrency, VALUE);
IssuerCurveZeroRateSensitivity test = IssuerCurveZeroRateSensitivity.of(zeroSensi, GROUP);
assertEquals(test.getLegalEntityGroup(), GROUP);
assertEquals(test.getCurveCurrency(), CURRENCY);
assertEquals(test.getCurrency(), sensiCurrency);
assertEquals(test.getYearFraction(), YEARFRAC);
assertEquals(test.getSensitivity(), VALUE);
}
//-------------------------------------------------------------------------
public void test_withCurrency() {
IssuerCurveZeroRateSensitivity base = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GROUP, VALUE);
IssuerCurveZeroRateSensitivity test = base.withCurrency(GBP);
assertEquals(test.getLegalEntityGroup(), GROUP);
assertEquals(test.getCurveCurrency(), CURRENCY);
assertEquals(test.getCurrency(), GBP);
assertEquals(test.getYearFraction(), YEARFRAC);
assertEquals(test.getSensitivity(), VALUE);
}
public void test_withSensitivity() {
IssuerCurveZeroRateSensitivity base = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GROUP, VALUE);
double newValue = 53d;
IssuerCurveZeroRateSensitivity test = base.withSensitivity(newValue);
assertEquals(test.getLegalEntityGroup(), GROUP);
assertEquals(test.getCurveCurrency(), CURRENCY);
assertEquals(test.getCurrency(), CURRENCY);
assertEquals(test.getYearFraction(), YEARFRAC);
assertEquals(test.getSensitivity(), newValue);
}
public void test_compareKey() {
IssuerCurveZeroRateSensitivity a1 = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GROUP, VALUE);
IssuerCurveZeroRateSensitivity a2 = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GROUP, VALUE);
IssuerCurveZeroRateSensitivity b = IssuerCurveZeroRateSensitivity.of(GBP, YEARFRAC, GROUP, VALUE);
IssuerCurveZeroRateSensitivity c = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC2, GROUP, VALUE);
IssuerCurveZeroRateSensitivity d =
IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, LegalEntityGroup.of("ISSUER2"), VALUE);
IborRateSensitivity other = IborRateSensitivity.of(
IborIndexObservation.of(GBP_LIBOR_3M, date(2015, 8, 27), REF_DATA), 32d);
assertEquals(a1.compareKey(a2), 0);
assertEquals(a1.compareKey(b) > 0, true);
assertEquals(b.compareKey(a1) < 0, true);
assertEquals(a1.compareKey(c) < 0, true);
assertEquals(c.compareKey(a1) > 0, true);
assertEquals(a1.compareKey(d) < 0, true);
assertEquals(d.compareKey(a1) > 0, true);
assertEquals(a1.compareKey(other) > 0, true);
assertEquals(other.compareKey(a1) < 0, true);
}
public void test_convertedTo() {
IssuerCurveZeroRateSensitivity base = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GROUP, VALUE);
double rate = 1.5d;
FxMatrix matrix = FxMatrix.of(CurrencyPair.of(GBP, USD), rate);
IssuerCurveZeroRateSensitivity test1 = base.convertedTo(USD, matrix);
assertEquals(test1, base);
IssuerCurveZeroRateSensitivity test2 = base.convertedTo(GBP, matrix);
IssuerCurveZeroRateSensitivity expected =
IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GBP, GROUP, VALUE / rate);
assertEquals(test2, expected);
}
//-------------------------------------------------------------------------
public void test_multipliedBy() {
IssuerCurveZeroRateSensitivity base = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GROUP, VALUE);
double rate = 2.4d;
IssuerCurveZeroRateSensitivity test = base.multipliedBy(rate);
IssuerCurveZeroRateSensitivity expected = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GROUP, VALUE * rate);
assertEquals(test, expected);
}
public void test_mapSensitivity() {
IssuerCurveZeroRateSensitivity base = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GROUP, VALUE);
IssuerCurveZeroRateSensitivity expected = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GROUP, 1d / VALUE);
IssuerCurveZeroRateSensitivity test = base.mapSensitivity(s -> 1d / s);
assertEquals(test, expected);
}
public void test_normalize() {
IssuerCurveZeroRateSensitivity base = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GROUP, VALUE);
IssuerCurveZeroRateSensitivity test = base.normalize();
assertEquals(test, base);
}
public void test_buildInto() {
IssuerCurveZeroRateSensitivity base = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GROUP, VALUE);
MutablePointSensitivities combo = new MutablePointSensitivities();
MutablePointSensitivities test = base.buildInto(combo);
assertSame(test, combo);
assertEquals(test.getSensitivities(), ImmutableList.of(base));
}
public void test_cloned() {
IssuerCurveZeroRateSensitivity base = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GROUP, VALUE);
IssuerCurveZeroRateSensitivity test = base.cloned();
assertEquals(test, base);
}
public void test_createZeroRateSensitivity() {
IssuerCurveZeroRateSensitivity base = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GBP, GROUP, VALUE);
ZeroRateSensitivity expected = ZeroRateSensitivity.of(CURRENCY, YEARFRAC, GBP, VALUE);
ZeroRateSensitivity test = base.createZeroRateSensitivity();
assertEquals(test, expected);
}
//-------------------------------------------------------------------------
public void coverage() {
IssuerCurveZeroRateSensitivity test1 = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GROUP, VALUE);
coverImmutableBean(test1);
IssuerCurveZeroRateSensitivity test2 =
IssuerCurveZeroRateSensitivity.of(GBP, YEARFRAC2, LegalEntityGroup.of("ISSUER1"), 12d);
coverBeanEquals(test1, test2);
}
public void test_serialization() {
IssuerCurveZeroRateSensitivity test = IssuerCurveZeroRateSensitivity.of(CURRENCY, YEARFRAC, GROUP, VALUE);
assertSerialization(test);
}
}