/**
* Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.pricer.swaption;
import static com.opengamma.strata.product.swap.type.FixedIborSwapConventions.GBP_FIXED_1Y_LIBOR_3M;
import static org.testng.Assert.assertEquals;
import java.time.LocalDate;
import java.time.ZonedDateTime;
import java.util.Optional;
import org.testng.annotations.Test;
import com.opengamma.strata.data.MarketDataName;
import com.opengamma.strata.market.ValueType;
import com.opengamma.strata.market.param.CurrencyParameterSensitivities;
import com.opengamma.strata.market.param.ParameterMetadata;
import com.opengamma.strata.market.param.ParameterPerturbation;
import com.opengamma.strata.market.sensitivity.PointSensitivities;
import com.opengamma.strata.product.common.PutCall;
import com.opengamma.strata.product.swap.type.FixedIborSwapConvention;
/**
* Test {@link SwaptionVolatilities}.
*/
@Test
public class SwaptionVolatilitiesTest {
private static final ZonedDateTime DATE_TIME = ZonedDateTime.now();
//-------------------------------------------------------------------------
public void test_defaultMethods() {
SwaptionVolatilities test = new TestingSwaptionVolatilities();
assertEquals(test.getValuationDate(), DATE_TIME.toLocalDate());
assertEquals(test.volatility(DATE_TIME, 1, 2, 3), 6d);
assertEquals(test.parameterSensitivity(), CurrencyParameterSensitivities.empty());
}
static class TestingSwaptionVolatilities implements SwaptionVolatilities {
@Override
public SwaptionVolatilitiesName getName() {
return SwaptionVolatilitiesName.of("Default");
}
@Override
public FixedIborSwapConvention getConvention() {
return GBP_FIXED_1Y_LIBOR_3M;
}
@Override
public ZonedDateTime getValuationDateTime() {
return DATE_TIME;
}
@Override
public <T> Optional<T> findData(MarketDataName<T> name) {
return Optional.empty();
}
@Override
public int getParameterCount() {
throw new UnsupportedOperationException();
}
@Override
public double getParameter(int parameterIndex) {
throw new UnsupportedOperationException();
}
@Override
public ParameterMetadata getParameterMetadata(int parameterIndex) {
throw new UnsupportedOperationException();
}
@Override
public SwaptionVolatilities withParameter(int parameterIndex, double newValue) {
throw new UnsupportedOperationException();
}
@Override
public SwaptionVolatilities withPerturbation(ParameterPerturbation perturbation) {
throw new UnsupportedOperationException();
}
@Override
public double volatility(double expiry, double tenor, double strike, double forward) {
return expiry * 2d;
}
@Override
public CurrencyParameterSensitivities parameterSensitivity(PointSensitivities pointSensitivities) {
return CurrencyParameterSensitivities.empty();
}
@Override
public double price(double expiry, double tenor, PutCall putCall, double strike, double forward, double volatility) {
throw new UnsupportedOperationException();
}
@Override
public double priceDelta(double expiry, double tenor, PutCall putCall, double strike, double forward, double volatility) {
throw new UnsupportedOperationException();
}
@Override
public double priceGamma(double expiry, double tenor, PutCall putCall, double strike, double forward, double volatility) {
throw new UnsupportedOperationException();
}
@Override
public double priceTheta(double expiry, double tenor, PutCall putCall, double strike, double forward, double volatility) {
throw new UnsupportedOperationException();
}
@Override
public double priceVega(double expiry, double tenor, PutCall putCall, double strike, double forward, double volatility) {
throw new UnsupportedOperationException();
}
@Override
public double relativeTime(ZonedDateTime date) {
return 3d;
}
@Override
public double tenor(LocalDate startDate, LocalDate endDate) {
throw new UnsupportedOperationException();
}
@Override
public LocalDate getValuationDate() {
return getValuationDateTime().toLocalDate();
}
@Override
public ValueType getVolatilityType() {
return ValueType.BLACK_VOLATILITY;
}
}
}