/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.product.swap;
import static com.opengamma.strata.basics.date.DayCounts.ACT_360;
import static com.opengamma.strata.basics.date.DayCounts.ACT_365F;
import static com.opengamma.strata.collect.TestHelper.assertSerialization;
import static com.opengamma.strata.collect.TestHelper.coverBeanEquals;
import static com.opengamma.strata.collect.TestHelper.coverImmutableBean;
import static com.opengamma.strata.collect.TestHelper.date;
import static org.testng.Assert.assertEquals;
import java.util.Optional;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.opengamma.strata.basics.ReferenceData;
import com.opengamma.strata.basics.index.Index;
import com.opengamma.strata.basics.schedule.Frequency;
import com.opengamma.strata.basics.schedule.RollConventions;
import com.opengamma.strata.basics.schedule.Schedule;
import com.opengamma.strata.basics.schedule.SchedulePeriod;
import com.opengamma.strata.basics.value.ValueAdjustment;
import com.opengamma.strata.basics.value.ValueSchedule;
import com.opengamma.strata.basics.value.ValueStep;
import com.opengamma.strata.product.rate.FixedRateComputation;
/**
* Test.
*/
@Test
public class FixedRateCalculationTest {
private static final ReferenceData REF_DATA = ReferenceData.standard();
public void test_of() {
FixedRateCalculation test = FixedRateCalculation.of(0.025d, ACT_365F);
assertEquals(test.getType(), SwapLegType.FIXED);
assertEquals(test.getRate(), ValueSchedule.of(0.025d));
assertEquals(test.getDayCount(), ACT_365F);
assertEquals(test.getInitialStub(), Optional.empty());
assertEquals(test.getFinalStub(), Optional.empty());
}
public void test_builder() {
FixedRateCalculation test = FixedRateCalculation.builder()
.dayCount(ACT_365F)
.rate(ValueSchedule.of(0.025d))
.initialStub(FixedRateStubCalculation.ofFixedRate(0.1d))
.finalStub(FixedRateStubCalculation.ofFixedRate(0.2d))
.build();
assertEquals(test.getRate(), ValueSchedule.of(0.025d));
assertEquals(test.getDayCount(), ACT_365F);
assertEquals(test.getInitialStub(), Optional.of(FixedRateStubCalculation.ofFixedRate(0.1d)));
assertEquals(test.getFinalStub(), Optional.of(FixedRateStubCalculation.ofFixedRate(0.2d)));
}
//-------------------------------------------------------------------------
public void test_collectIndices() {
FixedRateCalculation test = FixedRateCalculation.builder()
.dayCount(ACT_365F)
.rate(ValueSchedule.of(0.025d))
.build();
ImmutableSet.Builder<Index> builder = ImmutableSet.builder();
test.collectIndices(builder);
assertEquals(builder.build(), ImmutableSet.of());
}
//-------------------------------------------------------------------------
public void test_expand_oneValue() {
FixedRateCalculation test = FixedRateCalculation.builder()
.dayCount(ACT_365F)
.rate(ValueSchedule.of(0.025d))
.build();
SchedulePeriod period1 = SchedulePeriod.of(date(2014, 1, 6), date(2014, 2, 5), date(2014, 1, 5), date(2014, 2, 5));
SchedulePeriod period2 = SchedulePeriod.of(date(2014, 1, 5), date(2014, 2, 5), date(2014, 2, 5), date(2014, 3, 5));
SchedulePeriod period3 = SchedulePeriod.of(date(2014, 3, 5), date(2014, 4, 7), date(2014, 3, 5), date(2014, 4, 5));
Schedule schedule = Schedule.builder()
.periods(period1, period2, period3)
.frequency(Frequency.P1M)
.rollConvention(RollConventions.DAY_5)
.build();
RateAccrualPeriod rap1 = RateAccrualPeriod.builder(period1)
.yearFraction(period1.yearFraction(ACT_365F, schedule))
.rateComputation(FixedRateComputation.of(0.025d))
.build();
RateAccrualPeriod rap2 = RateAccrualPeriod.builder(period2)
.yearFraction(period2.yearFraction(ACT_365F, schedule))
.rateComputation(FixedRateComputation.of(0.025d))
.build();
RateAccrualPeriod rap3 = RateAccrualPeriod.builder(period3)
.yearFraction(period3.yearFraction(ACT_365F, schedule))
.rateComputation(FixedRateComputation.of(0.025d))
.build();
ImmutableList<RateAccrualPeriod> periods = test.createAccrualPeriods(schedule, schedule, REF_DATA);
assertEquals(periods, ImmutableList.of(rap1, rap2, rap3));
}
public void test_expand_distinctValues() {
FixedRateCalculation test = FixedRateCalculation.builder()
.dayCount(ACT_365F)
.rate(ValueSchedule.of(
0.025d,
ValueStep.of(1, ValueAdjustment.ofReplace(0.020d)),
ValueStep.of(2, ValueAdjustment.ofReplace(0.015d))))
.build();
SchedulePeriod period1 = SchedulePeriod.of(date(2014, 1, 6), date(2014, 2, 5), date(2014, 1, 5), date(2014, 2, 5));
SchedulePeriod period2 = SchedulePeriod.of(date(2014, 1, 5), date(2014, 2, 5), date(2014, 2, 5), date(2014, 3, 5));
SchedulePeriod period3 = SchedulePeriod.of(date(2014, 3, 5), date(2014, 4, 7), date(2014, 3, 5), date(2014, 4, 5));
Schedule schedule = Schedule.builder()
.periods(period1, period2, period3)
.frequency(Frequency.P1M)
.rollConvention(RollConventions.DAY_5)
.build();
RateAccrualPeriod rap1 = RateAccrualPeriod.builder(period1)
.yearFraction(period1.yearFraction(ACT_365F, schedule))
.rateComputation(FixedRateComputation.of(0.025d))
.build();
RateAccrualPeriod rap2 = RateAccrualPeriod.builder(period2)
.yearFraction(period2.yearFraction(ACT_365F, schedule))
.rateComputation(FixedRateComputation.of(0.020d))
.build();
RateAccrualPeriod rap3 = RateAccrualPeriod.builder(period3)
.yearFraction(period3.yearFraction(ACT_365F, schedule))
.rateComputation(FixedRateComputation.of(0.015d))
.build();
ImmutableList<RateAccrualPeriod> periods = test.createAccrualPeriods(schedule, schedule, REF_DATA);
assertEquals(periods, ImmutableList.of(rap1, rap2, rap3));
}
//-------------------------------------------------------------------------
public void coverage() {
FixedRateCalculation test = FixedRateCalculation.builder()
.dayCount(ACT_365F)
.rate(ValueSchedule.of(0.025d))
.build();
coverImmutableBean(test);
FixedRateCalculation test2 = FixedRateCalculation.builder()
.dayCount(ACT_360)
.rate(ValueSchedule.of(0.030d))
.build();
coverBeanEquals(test, test2);
}
public void test_serialization() {
FixedRateCalculation test = FixedRateCalculation.builder()
.dayCount(ACT_365F)
.rate(ValueSchedule.of(0.025d))
.build();
assertSerialization(test);
}
}