Package com.opengamma.financial.analytics.fudgemsg

Source Code of com.opengamma.financial.analytics.fudgemsg.ModelForwardCurveTest

/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.fudgemsg;

import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;

import org.testng.annotations.Test;

import com.opengamma.analytics.financial.equity.variance.pricing.AffineDividends;
import com.opengamma.analytics.financial.model.interestrate.curve.ForwardCurve;
import com.opengamma.analytics.financial.model.interestrate.curve.ForwardCurveAffineDividends;
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.analytics.math.curve.Curve;
import com.opengamma.analytics.math.curve.FunctionalDoublesCurve;
import com.opengamma.analytics.math.curve.InterpolatedDoublesCurve;
import com.opengamma.analytics.math.function.Function1D;
import com.opengamma.analytics.math.interpolation.CombinedInterpolatorExtrapolatorFactory;
import com.opengamma.analytics.math.interpolation.Interpolator1D;
import com.opengamma.analytics.math.interpolation.Interpolator1DFactory;
import com.opengamma.analytics.util.serialization.InvokedSerializedForm;
import com.opengamma.util.test.TestGroup;

/**
*
*/
@Test(groups = TestGroup.UNIT)
public class ModelForwardCurveTest extends AnalyticsTestBase {

  private static final double[] EXPIRIES = new double[] {1, 2, 3, 4, 5};
  private static final double[] FORWARD = new double[] {100, 101, 102, 103, 104};
  private static final Interpolator1D INTERPOLATOR = CombinedInterpolatorExtrapolatorFactory.getInterpolator(Interpolator1DFactory.LINEAR, Interpolator1DFactory.FLAT_EXTRAPOLATOR);
  private static final double EPS = 1e-12;


  @Test
  public void testCurve1() {
    final double spot = 100;
    final ForwardCurve curve1 = new ForwardCurve(spot);
    final ForwardCurve curve2 = cycleObject(ForwardCurve.class, curve1);
    assertEquals(curve1.getSpot(), curve2.getSpot(), EPS);
    assertTrue(curve2.getForwardCurve() instanceof ConstantDoublesCurve);
    assertTrue(curve2.getDriftCurve() instanceof ConstantDoublesCurve);
    assertCurveEquals(curve1.getForwardCurve(), curve2.getForwardCurve());
    assertCurveEquals(curve1.getDriftCurve(), curve2.getDriftCurve());
  }

  @Test
  public void testCurve2() {
    final ForwardCurve curve1 = new ForwardCurve(InterpolatedDoublesCurve.from(EXPIRIES, FORWARD, INTERPOLATOR));
    final ForwardCurve curve2 = cycleObject(ForwardCurve.class, curve1);
    assertEquals(curve1.getSpot(), curve2.getSpot(), EPS);
    assertTrue(curve2.getForwardCurve() instanceof InterpolatedDoublesCurve);
    assertTrue(curve2.getDriftCurve() instanceof FunctionalDoublesCurve);
    assertCurveEquals(curve1.getForwardCurve(), curve2.getForwardCurve());
    assertCurveEquals(curve1.getDriftCurve(), curve2.getDriftCurve());
  }

  @Test
  public void testCurve3() {
    final double spot = 100;
    final Curve<Double, Double> driftCurve = InterpolatedDoublesCurve.from(EXPIRIES, FORWARD, INTERPOLATOR);
    final ForwardCurve curve1 = new ForwardCurve(spot, driftCurve);
    final ForwardCurve curve2 = cycleObject(ForwardCurve.class, curve1);
    assertTrue(curve2.getForwardCurve() instanceof FunctionalDoublesCurve);
    assertTrue(curve2.getDriftCurve() instanceof InterpolatedDoublesCurve);
    assertCurveEquals(curve1.getForwardCurve(), curve2.getForwardCurve());
    assertCurveEquals(curve1.getDriftCurve(), curve2.getDriftCurve());
  }

  @Test
  public void testCurve4() {
    final double spot = 100;
    final double drift = 1.5;
    final ForwardCurve curve1 = new ForwardCurve(spot, drift);
    final ForwardCurve curve2 = cycleObject(ForwardCurve.class, curve1);
    assertTrue(curve2.getForwardCurve() instanceof FunctionalDoublesCurve);
    assertTrue(curve2.getDriftCurve() instanceof ConstantDoublesCurve);
    assertCurveEquals(curve1.getForwardCurve(), curve2.getForwardCurve());
    assertCurveEquals(curve1.getDriftCurve(), curve2.getDriftCurve());
  }

  @Test
  public void testCurve5() {
    final ForwardCurve curve1 = new ForwardCurve(InterpolatedDoublesCurve.from(EXPIRIES, FORWARD, INTERPOLATOR), InterpolatedDoublesCurve.from(FORWARD, EXPIRIES, INTERPOLATOR));
    final ForwardCurve curve2 = cycleObject(ForwardCurve.class, curve1);
    assertEquals(curve1.getSpot(), curve2.getSpot(), EPS);
    assertTrue(curve2.getForwardCurve() instanceof InterpolatedDoublesCurve);
    assertTrue(curve2.getDriftCurve() instanceof InterpolatedDoublesCurve);
    assertCurveEquals(curve1.getForwardCurve(), curve2.getForwardCurve());
    assertCurveEquals(curve1.getDriftCurve(), curve2.getDriftCurve());
  }
 
  protected static Curve<Double, Double> getForwardCurve() {
    final Function1D<Double, Double> f = new Function1D<Double, Double>() {
      @Override
      public Double evaluate(final Double x) {
        return x * x;
      }
    };
    return new FunctionalDoublesCurve(f) {
      public Object writeReplace() {
        return new InvokedSerializedForm(ModelForwardCurveTest.class, "getForwardCurve");
      }
    };
  }
 
  @Test
  public void testCurve6() {
    final ForwardCurve curve1 = new ForwardCurve(getForwardCurve());
    final ForwardCurve curve2 = cycleObject(ForwardCurve.class, curve1);
    assertEquals(curve1.getSpot(), curve2.getSpot(), EPS);
    assertTrue(curve2.getForwardCurve() instanceof FunctionalDoublesCurve);
    assertTrue(curve2.getDriftCurve() instanceof FunctionalDoublesCurve);
    assertCurveEquals(curve1.getForwardCurve(), curve2.getForwardCurve());
    assertCurveEquals(curve1.getDriftCurve(), curve2.getDriftCurve());
  }
  @Test
  public void testForwardCurveAffineDividends() {
    final double spot = 100.0;
    final YieldAndDiscountCurve riskFreeCurve = YieldCurve.from(ConstantDoublesCurve.from(0.0));
    final double[] tau = new double[] {0.25, 0.5, 0.75, 1, 2, 3, 4};
    final double[] alpha = new double[] {0.23, 0.24, 0.25, 0.26, 0, 0, 0};
    final double[] beta = new double[] {0, 0, 0, 0, 0.15, 0.2, 0.3};
    final AffineDividends dividends = new AffineDividends(tau, alpha, beta);
    final ForwardCurveAffineDividends curve1 = new ForwardCurveAffineDividends(spot, riskFreeCurve, dividends);
    final ForwardCurveAffineDividends curve2 = cycleObject(ForwardCurveAffineDividends.class, curve1);
    assertEquals(curve1.getSpot(), curve2.getSpot(), EPS);
    assertTrue(curve2.getForwardCurve() instanceof FunctionalDoublesCurve);
    assertTrue(curve2.getDriftCurve() instanceof FunctionalDoublesCurve);
    assertCurveEquals(curve1.getForwardCurve(), curve2.getForwardCurve());
    assertCurveEquals(curve1.getDriftCurve(), curve2.getDriftCurve());
    assertTrue(curve1.equals(curve2));
    assertTrue(curve1.getRiskFreeCurve().equals(curve2.getRiskFreeCurve()));
    assertTrue(curve1.getDividends().equals(curve2.getDividends()));
   
  }

  private void assertCurveEquals(final Curve<Double, Double> c1, final Curve<Double, Double> c2) {
    if (c1 != c2) {
      for (double x = 0.1; x < 100.0; x += 5.00000001) {
        assertEquals(c1.getYValue(x), c2.getYValue(x));
      }
    }
  }
}
TOP

Related Classes of com.opengamma.financial.analytics.fudgemsg.ModelForwardCurveTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.