/**
* Copyright (C) 2016 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.pricer.capfloor;
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 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.currency.CurrencyPair;
import com.opengamma.strata.basics.currency.FxMatrix;
import com.opengamma.strata.market.sensitivity.MutablePointSensitivities;
import com.opengamma.strata.market.sensitivity.PointSensitivities;
import com.opengamma.strata.pricer.ZeroRateSensitivity;
/**
* Test {@link IborCapletFloorletSensitivity}.
*/
@Test
public class IborCapletFloorletSensitivityTest {
private static final double EXPIRY = 1d;
private static final double FORWARD = 0.015d;
private static final double STRIKE = 0.001d;
private static final double SENSITIVITY = 0.54d;
private static final IborCapletFloorletVolatilitiesName NAME = IborCapletFloorletVolatilitiesName.of("Test");
private static final IborCapletFloorletVolatilitiesName NAME2 = IborCapletFloorletVolatilitiesName.of("Test2");
public void test_of() {
IborCapletFloorletSensitivity test =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, SENSITIVITY);
assertEquals(test.getVolatilitiesName(), NAME);
assertEquals(test.getCurrency(), GBP);
assertEquals(test.getExpiry(), EXPIRY);
assertEquals(test.getStrike(), STRIKE);
assertEquals(test.getForward(), FORWARD);
assertEquals(test.getSensitivity(), SENSITIVITY);
}
//-------------------------------------------------------------------------
public void test_withCurrency() {
IborCapletFloorletSensitivity base =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, SENSITIVITY);
IborCapletFloorletSensitivity expected =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, USD, SENSITIVITY);
IborCapletFloorletSensitivity test = base.withCurrency(USD);
assertEquals(test, expected);
}
//-------------------------------------------------------------------------
public void test_withSensitivity() {
IborCapletFloorletSensitivity base =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, SENSITIVITY);
double sensi = 23.5;
IborCapletFloorletSensitivity expected =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, sensi);
IborCapletFloorletSensitivity test = base.withSensitivity(sensi);
assertEquals(test, expected);
}
//-------------------------------------------------------------------------
public void test_compareKey() {
IborCapletFloorletSensitivity a1 =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, SENSITIVITY);
IborCapletFloorletSensitivity a2 =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, SENSITIVITY);
IborCapletFloorletSensitivity b =
IborCapletFloorletSensitivity.of(NAME2, EXPIRY, STRIKE, FORWARD, GBP, SENSITIVITY);
IborCapletFloorletSensitivity c =
IborCapletFloorletSensitivity.of(NAME, EXPIRY + 1, STRIKE, FORWARD, GBP, SENSITIVITY);
IborCapletFloorletSensitivity d =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, 0.009, FORWARD, GBP, SENSITIVITY);
IborCapletFloorletSensitivity e =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, 0.005, GBP, SENSITIVITY);
IborCapletFloorletSensitivity f =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, USD, SENSITIVITY);
ZeroRateSensitivity other = ZeroRateSensitivity.of(GBP, 2d, 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(e) > 0, true);
assertEquals(e.compareKey(a1) < 0, true);
assertEquals(a1.compareKey(f) < 0, true);
assertEquals(f.compareKey(a1) > 0, true);
assertEquals(a1.compareKey(other) < 0, true);
assertEquals(other.compareKey(a1) > 0, true);
}
//-------------------------------------------------------------------------
public void test_convertedTo() {
IborCapletFloorletSensitivity base =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, SENSITIVITY);
double rate = 1.5d;
FxMatrix matrix = FxMatrix.of(CurrencyPair.of(GBP, USD), rate);
IborCapletFloorletSensitivity test1 = base.convertedTo(USD, matrix);
IborCapletFloorletSensitivity expected =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, USD, SENSITIVITY * rate);
assertEquals(test1, expected);
IborCapletFloorletSensitivity test2 = base.convertedTo(GBP, matrix);
assertEquals(test2, base);
}
//-------------------------------------------------------------------------
public void test_multipliedBy() {
IborCapletFloorletSensitivity base =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, SENSITIVITY);
double factor = 3.5d;
IborCapletFloorletSensitivity expected =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, SENSITIVITY * factor);
IborCapletFloorletSensitivity test = base.multipliedBy(3.5d);
assertEquals(test, expected);
}
//-------------------------------------------------------------------------
public void test_mapSensitivity() {
IborCapletFloorletSensitivity base =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, SENSITIVITY);
IborCapletFloorletSensitivity expected =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, 1d / SENSITIVITY);
IborCapletFloorletSensitivity test = base.mapSensitivity(s -> 1 / s);
assertEquals(test, expected);
}
//-------------------------------------------------------------------------
public void test_normalize() {
IborCapletFloorletSensitivity base =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, SENSITIVITY);
IborCapletFloorletSensitivity test = base.normalize();
assertSame(test, base);
}
//-------------------------------------------------------------------------
public void test_buildInto() {
IborCapletFloorletSensitivity base =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, SENSITIVITY);
MutablePointSensitivities combo = new MutablePointSensitivities();
MutablePointSensitivities test = base.buildInto(combo);
assertSame(test, combo);
assertEquals(test.getSensitivities(), ImmutableList.of(base));
}
//-------------------------------------------------------------------------
public void test_build() {
IborCapletFloorletSensitivity base =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, SENSITIVITY);
PointSensitivities test = base.build();
assertEquals(test.getSensitivities(), ImmutableList.of(base));
}
//-------------------------------------------------------------------------
public void test_cloned() {
IborCapletFloorletSensitivity base =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, SENSITIVITY);
IborCapletFloorletSensitivity test = base.cloned();
assertSame(test, base);
}
//-------------------------------------------------------------------------
public void coverage() {
IborCapletFloorletSensitivity test1 =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, SENSITIVITY);
coverImmutableBean(test1);
IborCapletFloorletSensitivity test2 =
IborCapletFloorletSensitivity.of(NAME2, EXPIRY + 2d, 0.98, 0.99, USD, 32d);
coverBeanEquals(test1, test2);
}
public void test_serialization() {
IborCapletFloorletSensitivity test =
IborCapletFloorletSensitivity.of(NAME, EXPIRY, STRIKE, FORWARD, GBP, SENSITIVITY);
assertSerialization(test);
}
}