/**
* Copyright (C) 2016 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.basics.value;
import static com.opengamma.strata.collect.TestHelper.assertSerialization;
import static com.opengamma.strata.collect.TestHelper.assertThrowsIllegalArg;
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.List;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.opengamma.strata.basics.schedule.Frequency;
import com.opengamma.strata.basics.schedule.RollConventions;
/**
* Test {@link ValueStepSequence}.
*/
@Test
public class ValueStepSequenceTest {
private static final ValueAdjustment ADJ = ValueAdjustment.ofDeltaAmount(-100);
private static final ValueAdjustment ADJ2 = ValueAdjustment.ofDeltaAmount(-200);
private static final ValueAdjustment ADJ_BAD = ValueAdjustment.ofReplace(100);
//-------------------------------------------------------------------------
public void test_of() {
ValueStepSequence test = ValueStepSequence.of(date(2016, 4, 20), date(2016, 10, 20), Frequency.P3M, ADJ);
assertEquals(test.getFirstStepDate(), date(2016, 4, 20));
assertEquals(test.getLastStepDate(), date(2016, 10, 20));
assertEquals(test.getFrequency(), Frequency.P3M);
assertEquals(test.getAdjustment(), ADJ);
}
public void test_of_invalid() {
assertThrowsIllegalArg(() -> ValueStepSequence.of(date(2016, 4, 20), date(2016, 4, 19), Frequency.P3M, ADJ));
assertThrowsIllegalArg(() -> ValueStepSequence.of(date(2016, 4, 20), date(2016, 10, 20), Frequency.P3M, ADJ_BAD));
}
//-------------------------------------------------------------------------
public void test_resolve() {
ValueStepSequence test = ValueStepSequence.of(date(2016, 4, 20), date(2016, 10, 20), Frequency.P3M, ADJ);
ValueStep baseStep = ValueStep.of(date(2016, 1, 20), ValueAdjustment.ofReplace(500d));
List<ValueStep> steps = test.resolve(ImmutableList.of(baseStep), RollConventions.NONE);
assertEquals(steps.size(), 4);
assertEquals(steps.get(0), baseStep);
assertEquals(steps.get(1), ValueStep.of(date(2016, 4, 20), ADJ));
assertEquals(steps.get(2), ValueStep.of(date(2016, 7, 20), ADJ));
assertEquals(steps.get(3), ValueStep.of(date(2016, 10, 20), ADJ));
}
public void test_resolve_invalid() {
ValueStepSequence test = ValueStepSequence.of(date(2016, 4, 20), date(2016, 10, 20), Frequency.P12M, ADJ);
ValueStep baseStep = ValueStep.of(date(2016, 1, 20), ValueAdjustment.ofReplace(500d));
assertThrowsIllegalArg(() -> test.resolve(ImmutableList.of(baseStep), RollConventions.NONE));
}
//-------------------------------------------------------------------------
public void coverage() {
ValueStepSequence test = ValueStepSequence.of(date(2016, 4, 20), date(2016, 10, 20), Frequency.P3M, ADJ);
coverImmutableBean(test);
ValueStepSequence test2 = ValueStepSequence.of(date(2016, 4, 1), date(2016, 10, 1), Frequency.P1M, ADJ2);
coverImmutableBean(test2);
}
public void test_serialization() {
ValueStepSequence test = ValueStepSequence.of(date(2016, 4, 20), date(2016, 10, 20), Frequency.P3M, ADJ);
assertSerialization(test);
}
}