/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.volatility.surface;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import org.testng.annotations.Test;
import com.opengamma.analytics.financial.model.volatility.surface.VolatilitySurface;
import com.opengamma.analytics.math.function.Function;
import com.opengamma.analytics.math.surface.FunctionalDoublesSurface;
import com.opengamma.analytics.util.serialization.InvokedSerializedForm;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class FunctionalVolatilitySurfaceDataTest {
private static final String X_LABEL = "X";
private static final double X_MIN = 0.01;
private static final double X_MAX = 20;
private static final int NX = 100;
private static final String Y_LABEL = "Y";
private static final double Y_MIN = 0.04;
private static final double Y_MAX = 14;
private static final int NY = 200;
private static final double Z_MIN = 0;
private static final double Z_MAX = 200;
@Test
public void testObject() {
final FunctionalDoublesSurface f = getSurface();
final VolatilitySurface vol = new VolatilitySurface(f);
final FunctionalVolatilitySurfaceData data = new FunctionalVolatilitySurfaceData(vol, X_LABEL, X_MIN, X_MAX, NX, Y_LABEL,
Y_MIN, Y_MAX, NY, Z_MIN, Z_MAX);
assertEquals(X_LABEL, data.getXLabel());
assertEquals(X_MIN, data.getXMinimum());
assertEquals(X_MAX, data.getXMaximum());
assertEquals(NX, data.getNXSamples());
assertEquals(Y_LABEL, data.getYLabel());
assertEquals(Y_MIN, data.getYMinimum());
assertEquals(Y_MAX, data.getYMaximum());
assertEquals(NY, data.getNYSamples());
assertEquals(Z_MIN, data.getZMinimum());
assertEquals(Z_MAX, data.getZMaximum());
FunctionalVolatilitySurfaceData other = new FunctionalVolatilitySurfaceData(vol, X_LABEL, X_MIN, X_MAX, NX, Y_LABEL, Y_MIN, Y_MAX, NY, Z_MIN, Z_MAX);
assertEquals(data, other);
final FunctionalDoublesSurface otherF = FunctionalDoublesSurface.from(new Function<Double, Double>() {
@Override
public Double evaluate(final Double... x) {
return 3 * x[0] - 5 * x[1];
}
@Override
public int hashCode() {
return 1;
}
@Override
public boolean equals(final Object o) {
return true;
}
public Object writeReplace() {
return new InvokedSerializedForm(FunctionalDoublesSurface.class, "getParameterizedFunction");
}
}, "NAME2");
final VolatilitySurface otherVol = new VolatilitySurface(otherF);
other = new FunctionalVolatilitySurfaceData(otherVol, X_LABEL, X_MIN, X_MAX, NX, Y_LABEL, Y_MIN, Y_MAX, NY, Z_MIN, Z_MAX);
assertFalse(data.equals(other));
other = new FunctionalVolatilitySurfaceData(vol, X_LABEL + "a", X_MIN, X_MAX, NX, Y_LABEL, Y_MIN, Y_MAX, NY, Z_MIN, Z_MAX);
assertFalse(data.equals(other));
other = new FunctionalVolatilitySurfaceData(vol, X_LABEL, X_MIN + 1, X_MAX, NX, Y_LABEL, Y_MIN, Y_MAX, NY, Z_MIN, Z_MAX);
assertFalse(data.equals(other));
other = new FunctionalVolatilitySurfaceData(vol, X_LABEL, X_MIN, X_MAX + 1, NX, Y_LABEL, Y_MIN, Y_MAX, NY, Z_MIN, Z_MAX);
assertFalse(data.equals(other));
other = new FunctionalVolatilitySurfaceData(vol, X_LABEL, X_MIN, X_MAX, NX + 1, Y_LABEL, Y_MIN, Y_MAX, NY, Z_MIN, Z_MAX);
assertFalse(data.equals(other));
other = new FunctionalVolatilitySurfaceData(vol, X_LABEL, X_MIN, X_MAX, NX, Y_LABEL + 1, Y_MIN, Y_MAX, NY, Z_MIN, Z_MAX);
assertFalse(data.equals(other));
other = new FunctionalVolatilitySurfaceData(vol, X_LABEL, X_MIN, X_MAX, NX, Y_LABEL, Y_MIN + 1, Y_MAX, NY, Z_MIN, Z_MAX);
assertFalse(data.equals(other));
other = new FunctionalVolatilitySurfaceData(vol, X_LABEL, X_MIN, X_MAX, NX, Y_LABEL, Y_MIN, Y_MAX + 1, NY, Z_MIN, Z_MAX);
assertFalse(data.equals(other));
other = new FunctionalVolatilitySurfaceData(vol, X_LABEL, X_MIN, X_MAX, NX, Y_LABEL, Y_MIN, Y_MAX, NY + 1, Z_MIN, Z_MAX);
assertFalse(data.equals(other));
other = new FunctionalVolatilitySurfaceData(vol, X_LABEL, X_MIN, X_MAX, NX, Y_LABEL, Y_MIN, Y_MAX, NY, Z_MIN + 1, Z_MAX);
assertFalse(data.equals(other));
other = new FunctionalVolatilitySurfaceData(vol, X_LABEL, X_MIN, X_MAX, NX, Y_LABEL, Y_MIN, Y_MAX, NY, Z_MIN, Z_MAX + 1);
assertFalse(data.equals(other));
}
private static FunctionalDoublesSurface getSurface() {
return FunctionalDoublesSurface.from(new Function<Double, Double>() {
@Override
public Double evaluate(final Double... x) {
return 3 * x[0] - 5 * x[1];
}
@Override
public int hashCode() {
return 1;
}
@Override
public boolean equals(final Object o) {
return true;
}
}, "NAME1");
}
}