/**
* Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.market.surface;
import static com.opengamma.strata.basics.currency.Currency.USD;
import static org.testng.Assert.assertEquals;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.opengamma.strata.collect.array.DoubleArray;
import com.opengamma.strata.market.param.LabelParameterMetadata;
import com.opengamma.strata.market.param.ParameterMetadata;
import com.opengamma.strata.market.param.UnitParameterSensitivity;
/**
* Test {@link Surface}.
*/
@Test
public class SurfaceTest {
private static final SurfaceName SURFACE_NAME = SurfaceName.of("Surface");
private static final LabelParameterMetadata PARAM_META = LabelParameterMetadata.of("TestParam");
public void test_withPerturbation() {
Surface test = new TestingSurface(2d);
assertEquals(test.withPerturbation((i, v, m) -> v + 1).getParameter(0), 3d);
}
public void test_createParameterSensitivity_unit() {
Surface test = new TestingSurface(2d);
assertEquals(test.createParameterSensitivity(DoubleArray.of(2d)).getMarketDataName(), SURFACE_NAME);
assertEquals(test.createParameterSensitivity(DoubleArray.of(2d)).getParameterCount(), 1);
assertEquals(test.createParameterSensitivity(DoubleArray.of(2d)).getParameterMetadata(), ImmutableList.of(PARAM_META));
assertEquals(test.createParameterSensitivity(DoubleArray.of(2d)).getSensitivity(), DoubleArray.of(2d));
}
public void test_createParameterSensitivity_currency() {
Surface test = new TestingSurface(2d);
assertEquals(test.createParameterSensitivity(USD, DoubleArray.of(2d)).getMarketDataName(), SURFACE_NAME);
assertEquals(test.createParameterSensitivity(USD, DoubleArray.of(2d)).getParameterCount(), 1);
assertEquals(test.createParameterSensitivity(USD, DoubleArray.of(2d)).getParameterMetadata(), ImmutableList.of(PARAM_META));
assertEquals(test.createParameterSensitivity(USD, DoubleArray.of(2d)).getCurrency(), USD);
assertEquals(test.createParameterSensitivity(USD, DoubleArray.of(2d)).getSensitivity(), DoubleArray.of(2d));
}
//-------------------------------------------------------------------------
static class TestingSurface implements Surface {
final double value;
TestingSurface(double value) {
this.value = value;
}
@Override
public int getParameterCount() {
return 1;
}
@Override
public double getParameter(int parameterIndex) {
return value;
}
@Override
public ParameterMetadata getParameterMetadata(int parameterIndex) {
return PARAM_META;
}
@Override
public SurfaceMetadata getMetadata() {
return DefaultSurfaceMetadata.of(SURFACE_NAME);
}
@Override
public Surface withMetadata(SurfaceMetadata metadata) {
return this;
}
@Override
public Surface withParameter(int parameterIndex, double newValue) {
return new TestingSurface(newValue);
}
@Override
public double zValue(double x, double y) {
return value;
}
@Override
public UnitParameterSensitivity zValueParameterSensitivity(double x, double y) {
return createParameterSensitivity(DoubleArray.filled(1));
}
}
}