/** * Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.model.volatility.discrete; import static org.testng.AssertJUnit.assertEquals; import java.util.ArrayList; import java.util.List; import org.testng.annotations.Test; import cern.jet.random.engine.MersenneTwister; import cern.jet.random.engine.MersenneTwister64; import cern.jet.random.engine.RandomEngine; import com.opengamma.analytics.math.matrix.DoubleMatrix1D; import com.opengamma.analytics.math.matrix.DoubleMatrix2D; import com.opengamma.util.test.TestGroup; import com.opengamma.util.tuple.DoublesPair; /** * */ @Test(groups = TestGroup.UNIT) public class DiscreteVolatilityFunctionProviderTest { private static final RandomEngine RANDOM = new MersenneTwister64(MersenneTwister.DEFAULT_SEED); @Test public void flatTest() { final double level = 0.4; final DiscreteVolatilityFunctionProvider pro = new DiscreteVolatilityFunctionProvider() { @Override public DiscreteVolatilityFunction from(final DoublesPair[] expiryStrikePoints) { final int n = expiryStrikePoints.length; final DoubleMatrix1D res = new DoubleMatrix1D(n, level); return new DiscreteVolatilityFunction() { @Override public DoubleMatrix1D evaluate(final DoubleMatrix1D x) { return res; } @Override public int getLengthOfRange() { return n; } @Override public int getLengthOfDomain() { return 0; } @Override public DoubleMatrix2D calculateJacobian(final DoubleMatrix1D x) { return DoubleMatrix2D.EMPTY_MATRIX; } }; } }; final int nSamples = 40; final List<DoublesPair> points = new ArrayList<>(nSamples); for (int i = 0; i < nSamples; i++) { final double t = RANDOM.nextDouble() * 20.0; final double k = RANDOM.nextDouble() * 0.15; points.add(DoublesPair.of(t, k)); } final DiscreteVolatilityFunction func = pro.from(points); final DoubleMatrix1D nullVector = new DoubleMatrix1D(0); final DoubleMatrix1D y = func.evaluate(nullVector); assertEquals(nSamples, y.getNumberOfElements()); for (int i = 0; i < nSamples; i++) { assertEquals(level, y.getEntry(i)); } final DoubleMatrix2D jac = func.calculateJacobianViaFD(nullVector); assertEquals(0, jac.getNumberOfElements()); } }