public virtual void test_builder_validEmpty()
        {
            ValueSchedule test = ValueSchedule.builder().build();

            assertEquals(test.InitialValue, 0d, TOLERANCE);
            assertEquals(test.Steps, ImmutableList.of());
        }
        public virtual void test_resolveValues_sequenceAndStepClash()
        {
            ValueStepSequence seq   = ValueStepSequence.of(date(2014, 2, 1), date(2014, 3, 1), Frequency.P1M, ValueAdjustment.ofDeltaAmount(100));
            ValueStep         step1 = ValueStep.of(date(2014, 2, 1), ValueAdjustment.ofReplace(350d));
            ValueSchedule     test  = ValueSchedule.builder().initialValue(200d).steps(step1).stepSequence(seq).build();

            assertThrowsIllegalArg(() => test.resolveValues(SCHEDULE));
        }
        public virtual void test_resolveValues_sequenceAndSteps()
        {
            ValueStepSequence seq   = ValueStepSequence.of(date(2014, 2, 1), date(2014, 3, 1), Frequency.P1M, ValueAdjustment.ofDeltaAmount(100));
            ValueStep         step1 = ValueStep.of(date(2014, 1, 1), ValueAdjustment.ofReplace(350d));
            ValueSchedule     test  = ValueSchedule.builder().initialValue(200d).steps(step1).stepSequence(seq).build();

            assertEquals(test.resolveValues(SCHEDULE), DoubleArray.of(350d, 450d, 550d));
        }
        public virtual void test_builder_validFull()
        {
            ValueStepSequence seq  = ValueStepSequence.of(date(2016, 4, 20), date(2016, 10, 20), Frequency.P3M, ValueAdjustment.ofDeltaAmount(-100));
            ValueSchedule     test = ValueSchedule.builder().initialValue(2000d).steps(STEP1, STEP2).stepSequence(seq).build();

            assertEquals(test.InitialValue, 2000d, TOLERANCE);
            assertEquals(test.Steps, ImmutableList.of(STEP1, STEP2));
            assertEquals(test.StepSequence, seq);
        }