/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.equity.variance.pricing; import static org.testng.AssertJUnit.assertEquals; import org.testng.annotations.Test; import com.opengamma.analytics.financial.model.interestrate.curve.YieldAndDiscountCurve; import com.opengamma.analytics.financial.model.interestrate.curve.YieldCurve; import com.opengamma.analytics.math.curve.ConstantDoublesCurve; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class EquityDividendsCurvesBundleTest { private static final double SPOT = 100; private static final double[] TAU = new double[] {0.1, 0.6, 1.1, 1.6, 2.1, 2.6}; private static final double[] ALPHA = new double[] {5, 4, 3, 2, 1, 0}; private static final double[] BETA = new double[] {0, 0.01, 0.02, 0.03, 0.04, 0.05}; private static final double MU = 0.1; private static final YieldAndDiscountCurve DISCOUNT_CURVE = YieldCurve.from(ConstantDoublesCurve.from(MU)); private static final AffineDividends DIVIDENDS = new AffineDividends(TAU, ALPHA, BETA); private static final EquityDividendsCurvesBundle DIV_CURVES = new EquityDividendsCurvesBundle(SPOT, DISCOUNT_CURVE, DIVIDENDS); @Test(enabled = false) public void printCurves() { for (int i = 0; i < 101; i++) { double t = 3.0 * i / 100.; System.out.println(t + "\t" + DIV_CURVES.getF(t) + "\t" + DIV_CURVES.getR(t) + "\t" + DIV_CURVES.getD(t)); } } @Test public void fowardDropTest() { final double eps = 1e-15; final int n = TAU.length; for (int i = 0; i < n; i++) { double fm = DIV_CURVES.getF(TAU[i] - eps); double f = DIV_CURVES.getF(TAU[i]); double fExpected = fm * (1 - BETA[i]) - ALPHA[i]; assertEquals(fExpected, f, 1e-12); } } @Test public void discountDividendDropTest() { final double eps = 1e-15; final int n = TAU.length; for (int i = 0; i < n; i++) { double dm = DIV_CURVES.getD(TAU[i] - eps); double d = DIV_CURVES.getD(TAU[i]); double dExpected = dm * (1 - BETA[i]) - ALPHA[i]; assertEquals(dExpected, d, 1e-12); } } @Test public void growthFactorDropTest() { final double eps = 1e-15; final int n = TAU.length; for (int i = 0; i < n; i++) { double rm = DIV_CURVES.getR(TAU[i] - eps); double r = DIV_CURVES.getR(TAU[i]); double rExpected = rm * (1 - BETA[i]); assertEquals(rExpected, r, 1e-12); } } }