/** * 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.AUD; 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.assertThrowsIllegalArg; import static com.opengamma.strata.collect.TestHelper.coverBeanEquals; import static com.opengamma.strata.collect.TestHelper.coverImmutableBean; import static org.testng.Assert.assertEquals; import org.joda.beans.BeanBuilder; import org.testng.annotations.Test; import com.opengamma.strata.basics.currency.CurrencyPair; import com.opengamma.strata.collect.tuple.Pair; import com.opengamma.strata.market.option.DeltaStrike; import com.opengamma.strata.market.option.MoneynessStrike; import com.opengamma.strata.market.option.SimpleStrike; import com.opengamma.strata.market.option.Strike; /** * Test {@link FxVolatilitySurfaceYearFractionParameterMetadata}. */ @Test public class FxVolatilitySurfaceYearFractionParameterMetadataTest { private static final double TIME_TO_EXPIRY = 1.5d; private static final DeltaStrike STRIKE = DeltaStrike.of(0.75d); private static final SimpleStrike STRIKE1 = SimpleStrike.of(1.35); private static final CurrencyPair CURRENCY_PAIR = CurrencyPair.of(GBP, USD); public void test_of_withStrikeType() { FxVolatilitySurfaceYearFractionParameterMetadata test = FxVolatilitySurfaceYearFractionParameterMetadata.of(TIME_TO_EXPIRY, STRIKE, CURRENCY_PAIR); assertEquals(test.getCurrencyPair(), CURRENCY_PAIR); assertEquals(test.getIdentifier(), Pair.of(TIME_TO_EXPIRY, STRIKE)); assertEquals(test.getLabel(), Pair.of(TIME_TO_EXPIRY, STRIKE.getLabel()).toString()); assertEquals(test.getStrike(), STRIKE); assertEquals(test.getYearFraction(), TIME_TO_EXPIRY); } public void test_of_withLabel() { Pair<Double, Strike> pair = Pair.of(TIME_TO_EXPIRY, STRIKE1); String label = "(1.5, 1.35)"; FxVolatilitySurfaceYearFractionParameterMetadata test = FxVolatilitySurfaceYearFractionParameterMetadata.of(TIME_TO_EXPIRY, STRIKE1, label, CURRENCY_PAIR); assertEquals(test.getCurrencyPair(), CURRENCY_PAIR); assertEquals(test.getIdentifier(), pair); assertEquals(test.getLabel(), label); assertEquals(test.getStrike(), STRIKE1); assertEquals(test.getYearFraction(), TIME_TO_EXPIRY); } public void test_builder_noLabel() { BeanBuilder<? extends FxVolatilitySurfaceYearFractionParameterMetadata> builder = FxVolatilitySurfaceYearFractionParameterMetadata.meta().builder(); Pair<Double, Strike> pair = Pair.of(TIME_TO_EXPIRY, STRIKE); builder.set(FxVolatilitySurfaceYearFractionParameterMetadata.meta().currencyPair(), CURRENCY_PAIR); builder.set(FxVolatilitySurfaceYearFractionParameterMetadata.meta().yearFraction(), TIME_TO_EXPIRY); builder.set(FxVolatilitySurfaceYearFractionParameterMetadata.meta().strike(), STRIKE); FxVolatilitySurfaceYearFractionParameterMetadata test = builder.build(); assertEquals(test.getCurrencyPair(), CURRENCY_PAIR); assertEquals(test.getIdentifier(), pair); assertEquals(test.getLabel(), Pair.of(TIME_TO_EXPIRY, STRIKE.getLabel()).toString()); assertEquals(test.getStrike(), STRIKE); assertEquals(test.getYearFraction(), TIME_TO_EXPIRY); } public void test_builder_withLabel() { BeanBuilder<? extends FxVolatilitySurfaceYearFractionParameterMetadata> builder = FxVolatilitySurfaceYearFractionParameterMetadata.meta().builder(); Pair<Double, Strike> pair = Pair.of(TIME_TO_EXPIRY, STRIKE); String label = "(1.5, 0.75)"; builder.set(FxVolatilitySurfaceYearFractionParameterMetadata.meta().currencyPair(), CURRENCY_PAIR); builder.set(FxVolatilitySurfaceYearFractionParameterMetadata.meta().yearFraction(), TIME_TO_EXPIRY); builder.set(FxVolatilitySurfaceYearFractionParameterMetadata.meta().strike(), STRIKE); builder.set(FxVolatilitySurfaceYearFractionParameterMetadata.meta().label(), label); FxVolatilitySurfaceYearFractionParameterMetadata test = builder.build(); assertEquals(test.getCurrencyPair(), CURRENCY_PAIR); assertEquals(test.getIdentifier(), pair); assertEquals(test.getLabel(), label); assertEquals(test.getStrike(), STRIKE); assertEquals(test.getYearFraction(), TIME_TO_EXPIRY); } public void test_builder_incomplete() { BeanBuilder<? extends FxVolatilitySurfaceYearFractionParameterMetadata> builder1 = FxVolatilitySurfaceYearFractionParameterMetadata.meta().builder(); assertThrowsIllegalArg(() -> builder1.build()); BeanBuilder<? extends FxVolatilitySurfaceYearFractionParameterMetadata> builder2 = FxVolatilitySurfaceYearFractionParameterMetadata.meta().builder(); builder2.set(FxVolatilitySurfaceYearFractionParameterMetadata.meta().yearFraction(), TIME_TO_EXPIRY); assertThrowsIllegalArg(() -> builder2.build()); } //------------------------------------------------------------------------- public void coverage() { FxVolatilitySurfaceYearFractionParameterMetadata test1 = FxVolatilitySurfaceYearFractionParameterMetadata.of(TIME_TO_EXPIRY, STRIKE, CURRENCY_PAIR); coverImmutableBean(test1); FxVolatilitySurfaceYearFractionParameterMetadata test2 = FxVolatilitySurfaceYearFractionParameterMetadata.of(3d, MoneynessStrike.of(1.1d), CurrencyPair.of(EUR, AUD)); coverBeanEquals(test1, test2); } public void test_serialization() { FxVolatilitySurfaceYearFractionParameterMetadata test = FxVolatilitySurfaceYearFractionParameterMetadata.of(TIME_TO_EXPIRY, STRIKE, CURRENCY_PAIR); assertSerialization(test); } }