/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.core.historicaltimeseries;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import org.testng.annotations.Test;
import org.threeten.bp.LocalDate;
import com.opengamma.core.historicaltimeseries.impl.SimpleHistoricalTimeSeries;
import com.opengamma.id.UniqueId;
import com.opengamma.timeseries.date.localdate.ImmutableLocalDateDoubleTimeSeries;
import com.opengamma.util.test.TestGroup;
/**
* Tests the {@link HistoricalTimeSeriesAdjustment} class.
*/
@Test(groups = TestGroup.UNIT)
public class HistoricalTimeSeriesAdjustmentTest {
private HistoricalTimeSeries createTestSeries() {
return new SimpleHistoricalTimeSeries(UniqueId.of("HTS", "Test"), ImmutableLocalDateDoubleTimeSeries.of(LocalDate.now(), 100d));
}
public void testNoOp() {
final HistoricalTimeSeriesAdjustment noop = HistoricalTimeSeriesAdjustment.NoOp.INSTANCE;
assertEquals(noop.toString(), "");
assertTrue(HistoricalTimeSeriesAdjustment.parse("") instanceof HistoricalTimeSeriesAdjustment.NoOp);
final HistoricalTimeSeries hts = noop.adjust(createTestSeries());
assertEquals(hts.getTimeSeries().getLatestValue(), 100d);
assertEquals(noop.adjust(100d), 100d);
}
public void testDivideBy() {
final HistoricalTimeSeriesAdjustment div = new HistoricalTimeSeriesAdjustment.DivideBy(100d);
assertEquals(div.toString(), "100.0 /");
final HistoricalTimeSeriesAdjustment dec = HistoricalTimeSeriesAdjustment.parse("100.0 /");
assertEquals(((HistoricalTimeSeriesAdjustment.DivideBy) dec).getAmountToDivideBy(), 100d);
final HistoricalTimeSeries hts = dec.adjust(createTestSeries());
assertEquals(hts.getTimeSeries().getLatestValue(), 1d);
assertEquals(dec.adjust(100d), 1d);
}
public void testSubtractFrom() {
final HistoricalTimeSeriesAdjustment sub = new HistoricalTimeSeriesAdjustment.Subtract(1d);
assertEquals(sub.toString(), "1.0 -");
final HistoricalTimeSeriesAdjustment dec = HistoricalTimeSeriesAdjustment.parse("1.0 -");
assertEquals(((HistoricalTimeSeriesAdjustment.Subtract) dec).getAmountToSubtract(), 1d);
final HistoricalTimeSeries hts = dec.adjust(createTestSeries());
assertEquals(hts.getTimeSeries().getLatestValue(), 99d);
assertEquals(dec.adjust(100d), 99d);
}
public void testSequence() {
final HistoricalTimeSeriesAdjustment seq = new HistoricalTimeSeriesAdjustment.Sequence(new HistoricalTimeSeriesAdjustment.Sequence(new HistoricalTimeSeriesAdjustment.Subtract(50d),
new HistoricalTimeSeriesAdjustment.DivideBy(100d)), new HistoricalTimeSeriesAdjustment.Subtract(0.1));
assertEquals(seq.toString(), "50.0 - 100.0 / 0.1 -");
final HistoricalTimeSeriesAdjustment dec = HistoricalTimeSeriesAdjustment.parse("50.0 - 100.0 / 0.1 -");
// Note that sequence is commutative, but right associates in the parser
assertTrue(((HistoricalTimeSeriesAdjustment.Sequence) dec).getFirst() instanceof HistoricalTimeSeriesAdjustment.Subtract);
assertTrue(((HistoricalTimeSeriesAdjustment.Sequence) dec).getSecond() instanceof HistoricalTimeSeriesAdjustment.Sequence);
final HistoricalTimeSeries hts = dec.adjust(createTestSeries());
assertEquals(hts.getTimeSeries().getLatestValue(), 0.4);
assertEquals(dec.adjust(100d), 0.4);
}
}