/**
* Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.pricer.fxopt;
import static com.opengamma.strata.basics.currency.Currency.EUR;
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.market.sensitivity.MutablePointSensitivities;
import com.opengamma.strata.market.sensitivity.PointSensitivities;
import com.opengamma.strata.pricer.ZeroRateSensitivity;
/**
* Test {@link FxOptionSensitivity}.
*/
@Test
public class FxOptionSensitivityTest {
private static final double EXPIRY = 2d;
private static final CurrencyPair PAIR = CurrencyPair.of(EUR, GBP);
private static final double FORWARD = 0.8d;
private static final double STRIKE = 0.95d;
private static final double SENSI_VALUE = 1.24d;
private static final FxOptionVolatilitiesName NAME = FxOptionVolatilitiesName.of("Test");
private static final FxOptionVolatilitiesName NAME2 = FxOptionVolatilitiesName.of("Test2");
public void test_of() {
FxOptionSensitivity test = FxOptionSensitivity.of(NAME, PAIR, EXPIRY, STRIKE, FORWARD, GBP, SENSI_VALUE);
assertEquals(test.getCurrency(), GBP);
assertEquals(test.getExpiry(), EXPIRY);
assertEquals(test.getForward(), FORWARD);
assertEquals(test.getCurrencyPair(), PAIR);
assertEquals(test.getSensitivity(), SENSI_VALUE);
assertEquals(test.getStrike(), STRIKE);
}
public void test_withCurrency() {
FxOptionSensitivity base = FxOptionSensitivity.of(NAME, PAIR, EXPIRY, STRIKE, FORWARD, GBP, SENSI_VALUE);
FxOptionSensitivity test1 = base.withCurrency(EUR);
assertEquals(test1.getCurrency(), EUR);
assertEquals(test1.getExpiry(), EXPIRY);
assertEquals(test1.getForward(), FORWARD);
assertEquals(test1.getCurrencyPair(), PAIR);
assertEquals(test1.getSensitivity(), SENSI_VALUE);
assertEquals(test1.getStrike(), STRIKE);
FxOptionSensitivity test2 = base.withCurrency(GBP);
assertEquals(test2, base);
}
public void test_withSensitivity() {
FxOptionSensitivity base = FxOptionSensitivity.of(NAME, PAIR, EXPIRY, STRIKE, FORWARD, GBP, SENSI_VALUE);
double newSensi = 22.5;
FxOptionSensitivity test = base.withSensitivity(newSensi);
assertEquals(test.getCurrency(), GBP);
assertEquals(test.getExpiry(), EXPIRY);
assertEquals(test.getForward(), FORWARD);
assertEquals(test.getCurrencyPair(), PAIR);
assertEquals(test.getSensitivity(), newSensi);
assertEquals(test.getStrike(), STRIKE);
}
public void test_compareExcludingSensitivity() {
FxOptionSensitivity a1 = FxOptionSensitivity.of(NAME, PAIR, EXPIRY, STRIKE, FORWARD, GBP, SENSI_VALUE);
FxOptionSensitivity a2 = FxOptionSensitivity.of(NAME, PAIR, EXPIRY, STRIKE, FORWARD, GBP, SENSI_VALUE);
FxOptionSensitivity b = FxOptionSensitivity.of(
NAME, CurrencyPair.of(EUR, USD), EXPIRY, STRIKE, FORWARD, GBP, SENSI_VALUE);
FxOptionSensitivity c = FxOptionSensitivity.of(NAME, PAIR, EXPIRY + 1, STRIKE, FORWARD, GBP, SENSI_VALUE);
FxOptionSensitivity d = FxOptionSensitivity.of(NAME, PAIR, EXPIRY, 0.96, FORWARD, GBP, SENSI_VALUE);
FxOptionSensitivity e = FxOptionSensitivity.of(NAME, PAIR, EXPIRY, STRIKE, 0.81, GBP, SENSI_VALUE);
FxOptionSensitivity f = FxOptionSensitivity.of(NAME, PAIR, EXPIRY, STRIKE, FORWARD, EUR, SENSI_VALUE);
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_multipliedBy() {
FxOptionSensitivity base = FxOptionSensitivity.of(NAME, PAIR, EXPIRY, STRIKE, FORWARD, GBP, SENSI_VALUE);
double factor = 5.2d;
FxOptionSensitivity expected = FxOptionSensitivity.of(
NAME, PAIR, EXPIRY, STRIKE, FORWARD, GBP, SENSI_VALUE * factor);
FxOptionSensitivity test = base.multipliedBy(factor);
assertEquals(test, expected);
}
public void test_mapSensitivity() {
FxOptionSensitivity base = FxOptionSensitivity.of(NAME, PAIR, EXPIRY, STRIKE, FORWARD, GBP, SENSI_VALUE);
FxOptionSensitivity expected = FxOptionSensitivity.of(
NAME, PAIR, EXPIRY, STRIKE, FORWARD, GBP, 1.0 / SENSI_VALUE);
FxOptionSensitivity test = base.mapSensitivity(s -> 1 / s);
assertEquals(test, expected);
}
public void test_normalize() {
FxOptionSensitivity base = FxOptionSensitivity.of(NAME, PAIR, EXPIRY, STRIKE, FORWARD, GBP, SENSI_VALUE);
FxOptionSensitivity test = base.normalize();
assertSame(test, base);
}
public void test_buildInto() {
FxOptionSensitivity base = FxOptionSensitivity.of(NAME, PAIR, EXPIRY, STRIKE, FORWARD, GBP, SENSI_VALUE);
MutablePointSensitivities combo = new MutablePointSensitivities();
MutablePointSensitivities test = base.buildInto(combo);
assertSame(test, combo);
assertEquals(test.getSensitivities(), ImmutableList.of(base));
}
public void test_build() {
FxOptionSensitivity base = FxOptionSensitivity.of(NAME, PAIR, EXPIRY, STRIKE, FORWARD, GBP, SENSI_VALUE);
PointSensitivities test = base.build();
assertEquals(test.getSensitivities(), ImmutableList.of(base));
}
public void test_cloned() {
FxOptionSensitivity base = FxOptionSensitivity.of(NAME, PAIR, EXPIRY, STRIKE, FORWARD, GBP, SENSI_VALUE);
FxOptionSensitivity test = base.cloned();
assertSame(test, base);
}
public void coverage() {
FxOptionSensitivity test1 = FxOptionSensitivity.of(NAME, PAIR, EXPIRY, STRIKE, FORWARD, GBP, SENSI_VALUE);
coverImmutableBean(test1);
FxOptionSensitivity test2 = FxOptionSensitivity.of(NAME2, CurrencyPair.of(EUR, USD), EXPIRY, 0.8, 0.9, EUR, 1.1);
coverBeanEquals(test1, test2);
}
public void test_serialization() {
FxOptionSensitivity test = FxOptionSensitivity.of(NAME, PAIR, EXPIRY, STRIKE, FORWARD, GBP, SENSI_VALUE);
assertSerialization(test);
}
}