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); }
@Override public ValueStepSequence build() { return new ValueStepSequence( firstStepDate, lastStepDate, frequency, adjustment); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case -1025397910: // firstStepDate return ((ValueStepSequence) bean).getFirstStepDate(); case -292412080: // lastStepDate return ((ValueStepSequence) bean).getLastStepDate(); case -70023844: // frequency return ((ValueStepSequence) bean).getFrequency(); case 1977085293: // adjustment return ((ValueStepSequence) bean).getAdjustment(); } return super.propertyGet(bean, propertyName, quiet); }
private ValueStepSequence parseAmountSchedule(XmlElement scheduleEl, double initialValue, FpmlDocument document) { Frequency freq = document.parseFrequency(scheduleEl.getChild("stepFrequency")); LocalDate start = document.parseDate(scheduleEl.getChild("firstNotionalStepDate")); LocalDate end = document.parseDate(scheduleEl.getChild("lastNotionalStepDate")); Optional<XmlElement> amountElOpt = scheduleEl.findChild("notionalStepAmount"); if (amountElOpt.isPresent()) { double amount = document.parseDecimal(amountElOpt.get()); return ValueStepSequence.of(start, end, freq, ValueAdjustment.ofDeltaAmount(amount)); } double rate = document.parseDecimal(scheduleEl.getChild("notionalStepRate")); String relativeTo = scheduleEl.findChild("stepRelativeTo").map(el -> el.getContent()).orElse("Previous"); if (relativeTo.equals("Previous")) { return ValueStepSequence.of(start, end, freq, ValueAdjustment.ofDeltaMultiplier(rate)); } else if (relativeTo.equals("Initial")) { // data model does not support 'relative to initial' but can calculate amount here double amount = initialValue * rate; return ValueStepSequence.of(start, end, freq, ValueAdjustment.ofDeltaAmount(amount)); } else { throw new FpmlParseException(Messages.format( "Unknown 'stepRelativeTo' value '{}', expected 'Initial' or 'Previous'", relativeTo)); } }
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)); }
private DoubleArray resolveSteps(List<SchedulePeriod> periods, RollConvention rollConv) { int size = periods.size(); double[] result = new double[size]; List<ValueStep> resolvedSteps = getStepSequence().map(seq -> seq.resolve(steps, rollConv)).orElse(steps);
private ValueStepSequence( LocalDate firstStepDate, LocalDate lastStepDate, Frequency frequency, ValueAdjustment adjustment) { JodaBeanUtils.notNull(firstStepDate, "firstStepDate"); JodaBeanUtils.notNull(lastStepDate, "lastStepDate"); JodaBeanUtils.notNull(frequency, "frequency"); JodaBeanUtils.notNull(adjustment, "adjustment"); this.firstStepDate = firstStepDate; this.lastStepDate = lastStepDate; this.frequency = frequency; this.adjustment = adjustment; validate(); }
public void test_of_sequence() { ValueStepSequence seq = ValueStepSequence.of( date(2016, 4, 20), date(2016, 10, 20), Frequency.P3M, ValueAdjustment.ofDeltaAmount(-100)); ValueSchedule test = ValueSchedule.of(10000d, seq); assertEquals(test.getInitialValue(), 10000d, TOLERANCE); assertEquals(test.getSteps(), ImmutableList.of()); assertEquals(test.getStepSequence(), Optional.of(seq)); }
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)); }
/** * Obtains an instance from the dates, frequency and change. * * @param firstStepDate the first date of the sequence * @param lastStepDate the last date of the sequence * @param frequency the frequency of changes * @param adjustment the adjustment at each step * @return the varying step */ public static ValueStepSequence of( LocalDate firstStepDate, LocalDate lastStepDate, Frequency frequency, ValueAdjustment adjustment) { return new ValueStepSequence(firstStepDate, lastStepDate, frequency, adjustment); }
public void test_serialization() { ValueStepSequence test = ValueStepSequence.of(date(2016, 4, 20), date(2016, 10, 20), Frequency.P3M, ADJ); assertSerialization(test); }
public 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.getInitialValue(), 2000d, TOLERANCE); assertEquals(test.getSteps(), ImmutableList.of(STEP1, STEP2)); assertEquals(test.getStepSequence(), Optional.of(seq)); }
public void test_resolveValues_sequence() { ValueStepSequence seq = ValueStepSequence.of( date(2014, 2, 1), date(2014, 3, 1), Frequency.P1M, ValueAdjustment.ofDeltaAmount(100)); ValueSchedule test = ValueSchedule.of(200d, seq); assertEquals(test.resolveValues(SCHEDULE), DoubleArray.of(200d, 300d, 400d)); }
public void coverage() { ValueStepSequence seq = ValueStepSequence.of( date(2014, 2, 1), date(2014, 3, 1), Frequency.P1M, ValueAdjustment.ofDeltaAmount(100)); ValueSchedule test = ValueSchedule.of(10000d, Lists.newArrayList(STEP1, STEP2)); coverImmutableBean(test); coverBeanEquals(test, ValueSchedule.of(20000d, seq)); }
public 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 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)); }
.amount(ValueSchedule.builder() .initialValue(50000000d) .stepSequence(ValueStepSequence.of( date(1995, 12, 14), date(1998, 12, 14), Frequency.P12M, ValueAdjustment.ofDeltaAmount(-10000000d))) .build())