/**
* Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.pricer;
import static com.opengamma.strata.basics.currency.Currency.GBP;
import static com.opengamma.strata.basics.date.DayCounts.ACT_365F;
import static com.opengamma.strata.collect.TestHelper.assertThrowsIllegalArg;
import static com.opengamma.strata.collect.TestHelper.date;
import static org.testng.Assert.assertEquals;
import java.time.LocalDate;
import org.testng.annotations.Test;
import com.opengamma.strata.collect.array.DoubleArray;
import com.opengamma.strata.market.ValueType;
import com.opengamma.strata.market.curve.CurveInfoType;
import com.opengamma.strata.market.curve.CurveMetadata;
import com.opengamma.strata.market.curve.CurveName;
import com.opengamma.strata.market.curve.Curves;
import com.opengamma.strata.market.curve.DefaultCurveMetadata;
import com.opengamma.strata.market.curve.InterpolatedNodalCurve;
import com.opengamma.strata.market.curve.interpolator.CurveInterpolator;
import com.opengamma.strata.market.curve.interpolator.CurveInterpolators;
/**
* Test {@link DiscountFactors}.
*/
@Test
public class DiscountFactorsTest {
private static final LocalDate DATE_VAL = date(2015, 6, 4);
private static final CurveInterpolator INTERPOLATOR = CurveInterpolators.LINEAR;
private static final CurveName NAME = CurveName.of("TestCurve");
private static final InterpolatedNodalCurve CURVE_DF = InterpolatedNodalCurve.of(
Curves.discountFactors(NAME, ACT_365F), DoubleArray.of(0, 10), DoubleArray.of(1, 2), INTERPOLATOR);
private static final InterpolatedNodalCurve CURVE_ZERO = InterpolatedNodalCurve.of(
Curves.zeroRates(NAME, ACT_365F), DoubleArray.of(0, 10), DoubleArray.of(1, 2), INTERPOLATOR);
private static final CurveMetadata META_ZERO_PERIODIC = DefaultCurveMetadata.builder()
.curveName(NAME)
.xValueType(ValueType.YEAR_FRACTION)
.yValueType(ValueType.ZERO_RATE)
.dayCount(ACT_365F)
.addInfo(CurveInfoType.COMPOUNDING_PER_YEAR, 2)
.build();
private static final InterpolatedNodalCurve CURVE_ZERO_PERIODIC = InterpolatedNodalCurve.of(
META_ZERO_PERIODIC, DoubleArray.of(0, 10), DoubleArray.of(1, 2), INTERPOLATOR);
private static final InterpolatedNodalCurve CURVE_PRICES = InterpolatedNodalCurve.of(
Curves.prices(NAME), DoubleArray.of(0, 10), DoubleArray.of(1, 2), INTERPOLATOR);
//-------------------------------------------------------------------------
public void test_of_discountFactors() {
DiscountFactors test = DiscountFactors.of(GBP, DATE_VAL, CURVE_DF);
assertEquals(test instanceof SimpleDiscountFactors, true);
assertEquals(test.getCurrency(), GBP);
assertEquals(test.getValuationDate(), DATE_VAL);
}
public void test_of_zeroRate() {
DiscountFactors test = DiscountFactors.of(GBP, DATE_VAL, CURVE_ZERO);
assertEquals(test instanceof ZeroRateDiscountFactors, true);
assertEquals(test.getCurrency(), GBP);
assertEquals(test.getValuationDate(), DATE_VAL);
}
public void test_of_zeroRatePeriodic() {
DiscountFactors test = DiscountFactors.of(GBP, DATE_VAL, CURVE_ZERO_PERIODIC);
assertEquals(test instanceof ZeroRatePeriodicDiscountFactors, true);
assertEquals(test.getCurrency(), GBP);
assertEquals(test.getValuationDate(), DATE_VAL);
}
public void test_of_prices() {
assertThrowsIllegalArg(() -> DiscountFactors.of(GBP, DATE_VAL, CURVE_PRICES));
}
}