/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals;
import org.testng.annotations.Test;
import org.threeten.bp.LocalDate;
import org.threeten.bp.Period;
import org.threeten.bp.ZonedDateTime;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.time.DateUtils;
/**
*
*/
@Test(groups = TestGroup.UNIT)
public class DateLabelledMatrix1DTest {
private static final LocalDate[] D1 = new LocalDate[] {LocalDate.of(2011, 1, 1), LocalDate.of(2011, 3, 1), LocalDate.of(2011, 5, 1), LocalDate.of(2011, 7, 1) };
private static final Object[] D1_LABELS = new Object[] {"2011-01-01", "2011-03-01", "2011-05-01", "2011-07-01" };
private static final ZonedDateTime[] Z1 = new ZonedDateTime[] {DateUtils.getUTCDate(2011, 1, 1), DateUtils.getUTCDate(2011, 3, 1), DateUtils.getUTCDate(2011, 5, 1), DateUtils.getUTCDate(2011, 7, 1) };
private static final Object[] Z1_LABELS = new Object[] {"2011-01-01T00:00Z", "2011-03-01T00:00Z", "2011-05-01T00:00Z", "2011-07-01T00:00Z" };
private static final LocalDate[] D2 = new LocalDate[] {LocalDate.of(2011, 1, 1), LocalDate.of(2011, 2, 1), LocalDate.of(2011, 3, 1), LocalDate.of(2011, 4, 1) };
private static final ZonedDateTime[] Z2 = new ZonedDateTime[] {DateUtils.getUTCDate(2011, 1, 1), DateUtils.getUTCDate(2011, 2, 1), DateUtils.getUTCDate(2011, 3, 1), DateUtils.getUTCDate(2011, 4, 1) };
private static final LocalDate[] D3 = new LocalDate[] {LocalDate.of(2011, 1, 1), LocalDate.of(2011, 3, 2), LocalDate.of(2011, 4, 30), LocalDate.of(2011, 7, 1) };
private static final ZonedDateTime[] Z3 = new ZonedDateTime[] {DateUtils.getUTCDate(2011, 1, 1), DateUtils.getUTCDate(2011, 3, 2), DateUtils.getUTCDate(2011, 4, 30), DateUtils.getUTCDate(2011, 7, 1) };
private static final LocalDate[] D4 = new LocalDate[] {LocalDate.of(2011, 1, 2), LocalDate.of(2011, 2, 2), LocalDate.of(2011, 2, 28), LocalDate.of(2011, 4, 1) };
private static final ZonedDateTime[] Z4 = new ZonedDateTime[] {DateUtils.getUTCDate(2011, 1, 2), DateUtils.getUTCDate(2011, 2, 2), DateUtils.getUTCDate(2011, 2, 28), DateUtils.getUTCDate(2011, 4, 1) };
private static final double[] V1 = new double[] {1, 2, 3, 4 };
private static final double[] V2 = new double[] {5, 6, 7, 8 };
private static final double[] V3 = new double[] {9, 10, 11, 12 };
private static final Period TOLERANCE = Period.ofDays(2);
private static final LocalDateLabelledMatrix1D LD1 = new LocalDateLabelledMatrix1D(D1, V1);
private static final LocalDateLabelledMatrix1D LD2 = new LocalDateLabelledMatrix1D(D1, V2);
private static final LocalDateLabelledMatrix1D LD3 = new LocalDateLabelledMatrix1D(D2, V3);
private static final LocalDateLabelledMatrix1D LD4 = new LocalDateLabelledMatrix1D(D3, V2);
private static final LocalDateLabelledMatrix1D LD5 = new LocalDateLabelledMatrix1D(D4, V3);
private static final ZonedDateTimeLabelledMatrix1D ZDT1 = new ZonedDateTimeLabelledMatrix1D(Z1, V1);
private static final ZonedDateTimeLabelledMatrix1D ZDT2 = new ZonedDateTimeLabelledMatrix1D(Z1, V2);
private static final ZonedDateTimeLabelledMatrix1D ZDT3 = new ZonedDateTimeLabelledMatrix1D(Z2, V3);
private static final ZonedDateTimeLabelledMatrix1D ZDT4 = new ZonedDateTimeLabelledMatrix1D(Z3, V2);
private static final ZonedDateTimeLabelledMatrix1D ZDT5 = new ZonedDateTimeLabelledMatrix1D(Z4, V3);
@Test
public void addSingleValueNewDate1() {
final LocalDate d = LocalDate.of(2011, 1, 2);
final double v = 10;
LabelledMatrix1D<LocalDate, Period> newMatrix = LD1.addIgnoringLabel(d, d, v);
final LocalDate[] newDates = new LocalDate[] {LocalDate.of(2011, 1, 1), d, LocalDate.of(2011, 3, 1), LocalDate.of(2011, 5, 1), LocalDate.of(2011, 7, 1) };
final Object[] newDatesLabels = new Object[] {"2011-01-01", d, "2011-03-01", "2011-05-01", "2011-07-01" };
final double[] newValues = new double[] {1, 10, 2, 3, 4 };
assertArrayEquals(newDates, newMatrix.getKeys());
assertArrayEquals(newDatesLabels, newMatrix.getLabels());
assertArrayEquals(newValues, newMatrix.getValues(), 0);
newMatrix = LD1.add(d, d, v);
assertArrayEquals(newDates, newMatrix.getKeys());
assertArrayEquals(newDatesLabels, newMatrix.getLabels());
assertArrayEquals(newValues, newMatrix.getValues(), 0);
}
@Test
public void addSingleValueNewDate2() {
final ZonedDateTime d = DateUtils.getUTCDate(2011, 1, 2);
final double v = 10;
LabelledMatrix1D<ZonedDateTime, Period> newMatrix = ZDT1.addIgnoringLabel(d, d, v);
final ZonedDateTime[] newDates = new ZonedDateTime[] {DateUtils.getUTCDate(2011, 1, 1), d, DateUtils.getUTCDate(2011, 3, 1), DateUtils.getUTCDate(2011, 5, 1), DateUtils.getUTCDate(2011, 7, 1) };
final Object[] newDatesLabels = new Object[] {"2011-01-01T00:00Z", d, "2011-03-01T00:00Z", "2011-05-01T00:00Z", "2011-07-01T00:00Z" };
final double[] newValues = new double[] {1, 10, 2, 3, 4 };
assertArrayEquals(newDates, newMatrix.getKeys());
assertArrayEquals(newDatesLabels, newMatrix.getLabels());
assertArrayEquals(newValues, newMatrix.getValues(), 0);
newMatrix = ZDT1.add(d, d, v);
assertArrayEquals(newDates, newMatrix.getKeys());
assertArrayEquals(newDatesLabels, newMatrix.getLabels());
assertArrayEquals(newValues, newMatrix.getValues(), 0);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void addSingleValueExistingDate1() {
LocalDate d = LocalDate.of(2011, 1, 1);
final double v = 10;
LabelledMatrix1D<LocalDate, Period> newMatrix = LD1.addIgnoringLabel(d, d, v);
final LocalDate[] newDates = new LocalDate[] {LocalDate.of(2011, 1, 1), LocalDate.of(2011, 3, 1), LocalDate.of(2011, 5, 1), LocalDate.of(2011, 7, 1) };
final Object[] newDatesLabels = new Object[] {"2011-01-01", "2011-03-01", "2011-05-01", "2011-07-01" };
final double[] newValues = new double[] {11, 2, 3, 4 };
assertArrayEquals(newDates, newMatrix.getKeys());
assertArrayEquals(newDatesLabels, newMatrix.getLabels());
assertArrayEquals(newValues, newMatrix.getValues(), 0);
newMatrix = LD1.add(d, d, v);
assertArrayEquals(newDates, newMatrix.getKeys());
assertArrayEquals(newDatesLabels, newMatrix.getLabels());
assertArrayEquals(newValues, newMatrix.getValues(), 0);
d = LocalDate.of(2011, 1, 2);
newMatrix = LD1.addIgnoringLabel(d, d, v, TOLERANCE);
assertArrayEquals(newDates, newMatrix.getKeys());
assertArrayEquals(newDatesLabels, newMatrix.getLabels());
assertArrayEquals(newValues, newMatrix.getValues(), 0);
LD1.add(d, d, v, TOLERANCE);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void addSingleValueExistingDate2() {
ZonedDateTime d = DateUtils.getUTCDate(2011, 1, 1);
final double v = 10;
LabelledMatrix1D<ZonedDateTime, Period> newMatrix = ZDT1.addIgnoringLabel(d, d, v);
final ZonedDateTime[] newDates = new ZonedDateTime[] {DateUtils.getUTCDate(2011, 1, 1), DateUtils.getUTCDate(2011, 3, 1), DateUtils.getUTCDate(2011, 5, 1), DateUtils.getUTCDate(2011, 7, 1) };
final Object[] newDatesLabels = new Object[] {"2011-01-01T00:00Z", "2011-03-01T00:00Z", "2011-05-01T00:00Z", "2011-07-01T00:00Z" };
final double[] newValues = new double[] {11, 2, 3, 4 };
assertArrayEquals(newDates, newMatrix.getKeys());
assertArrayEquals(newDatesLabels, newMatrix.getLabels());
assertArrayEquals(newValues, newMatrix.getValues(), 0);
newMatrix = ZDT1.add(d, d, v);
assertArrayEquals(newDates, newMatrix.getKeys());
assertArrayEquals(newDatesLabels, newMatrix.getLabels());
assertArrayEquals(newValues, newMatrix.getValues(), 0);
newMatrix = ZDT1.add(d, d, v);
assertArrayEquals(newDates, newMatrix.getKeys());
assertArrayEquals(newDatesLabels, newMatrix.getLabels());
assertArrayEquals(newValues, newMatrix.getValues(), 0);
d = DateUtils.getUTCDate(2011, 1, 2);
newMatrix = ZDT1.addIgnoringLabel(d, d, v, TOLERANCE);
assertArrayEquals(newDates, newMatrix.getKeys());
assertArrayEquals(newDatesLabels, newMatrix.getLabels());
assertArrayEquals(newValues, newMatrix.getValues(), 0);
ZDT1.add(d, d, v, TOLERANCE);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testAddMatrixAllExisting1() {
LabelledMatrix1D<LocalDate, Period> sum = LD1.add(LD2);
assertArrayEquals(sum.getKeys(), D1);
assertArrayEquals(sum.getLabels(), D1_LABELS);
for (int i = 0; i < D1.length; i++) {
assertEquals(V1[i] + V2[i], sum.getValues()[i], 0);
}
sum = LD1.addIgnoringLabel(LD2);
assertArrayEquals(sum.getKeys(), D1);
assertArrayEquals(sum.getLabels(), D1_LABELS);
for (int i = 0; i < D1.length; i++) {
assertEquals(V1[i] + V2[i], sum.getValues()[i], 0);
}
sum = LD1.addIgnoringLabel(LD4, TOLERANCE);
assertArrayEquals(sum.getKeys(), D1);
assertArrayEquals(sum.getLabels(), D1_LABELS);
for (int i = 0; i < D1.length; i++) {
assertEquals(V1[i] + V2[i], sum.getValues()[i], 0);
}
LD1.add(LD4, TOLERANCE);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testAddMatrixAllExisting2() {
LabelledMatrix1D<ZonedDateTime, Period> sum = ZDT1.add(ZDT2);
assertArrayEquals(sum.getKeys(), Z1);
assertArrayEquals(sum.getLabels(), Z1_LABELS);
for (int i = 0; i < Z1.length; i++) {
assertEquals(V1[i] + V2[i], sum.getValues()[i], 0);
}
sum = ZDT1.addIgnoringLabel(ZDT2);
assertArrayEquals(sum.getKeys(), Z1);
assertArrayEquals(sum.getLabels(), Z1_LABELS);
for (int i = 0; i < Z1.length; i++) {
assertEquals(V1[i] + V2[i], sum.getValues()[i], 0);
}
sum = ZDT1.addIgnoringLabel(ZDT4, TOLERANCE);
assertArrayEquals(sum.getKeys(), Z1);
assertArrayEquals(sum.getLabels(), Z1_LABELS);
for (int i = 0; i < Z1.length; i++) {
assertEquals(V1[i] + V2[i], sum.getValues()[i], 0);
}
ZDT1.add(ZDT4, TOLERANCE);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testAddMatrixSomeExisting1() {
LocalDate[] expectedDates = new LocalDate[] {LocalDate.of(2011, 1, 1), LocalDate.of(2011, 2, 1), LocalDate.of(2011, 3, 1), LocalDate.of(2011, 4, 1), LocalDate.of(2011, 5, 1),
LocalDate.of(2011, 7, 1) };
Object[] expectedDatesLabels = new Object[] {"2011-01-01", "2011-02-01", "2011-03-01", "2011-04-01", "2011-05-01", "2011-07-01" };
final double[] expectedValues = new double[] {10, 10, 13, 12, 3, 4 };
LabelledMatrix1D<LocalDate, Period> sum = LD1.add(LD3);
assertArrayEquals(expectedDates, sum.getKeys());
assertArrayEquals(expectedDatesLabels, sum.getLabels());
assertArrayEquals(expectedValues, sum.getValues(), 0);
sum = LD1.addIgnoringLabel(LD3);
assertArrayEquals(expectedDates, sum.getKeys());
assertArrayEquals(expectedDatesLabels, sum.getLabels());
assertArrayEquals(expectedValues, sum.getValues(), 0);
expectedDates = new LocalDate[] {LocalDate.of(2011, 1, 1), LocalDate.of(2011, 2, 2), LocalDate.of(2011, 3, 1), LocalDate.of(2011, 4, 1), LocalDate.of(2011, 5, 1), LocalDate.of(2011, 7, 1) };
expectedDatesLabels = new Object[] {"2011-01-01", "2011-02-02", "2011-03-01", "2011-04-01", "2011-05-01", "2011-07-01" };
sum = LD1.addIgnoringLabel(LD5, TOLERANCE);
assertArrayEquals(expectedDates, sum.getKeys());
assertArrayEquals(expectedDatesLabels, sum.getLabels());
assertArrayEquals(expectedValues, sum.getValues(), 0);
LD1.add(LD5, TOLERANCE);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testAddMatrixSomeExisting2() {
ZonedDateTime[] expectedDates = new ZonedDateTime[] {DateUtils.getUTCDate(2011, 1, 1), DateUtils.getUTCDate(2011, 2, 1), DateUtils.getUTCDate(2011, 3, 1), DateUtils.getUTCDate(2011, 4, 1),
DateUtils.getUTCDate(2011, 5, 1), DateUtils.getUTCDate(2011, 7, 1) };
Object[] expectedDatesLabels = new Object[] {"2011-01-01T00:00Z", "2011-02-01T00:00Z", "2011-03-01T00:00Z", "2011-04-01T00:00Z", "2011-05-01T00:00Z",
"2011-07-01T00:00Z" };
final double[] expectedValues = new double[] {10, 10, 13, 12, 3, 4 };
LabelledMatrix1D<ZonedDateTime, Period> sum = ZDT1.add(ZDT3);
assertArrayEquals(expectedDates, sum.getKeys());
assertArrayEquals(expectedDatesLabels, sum.getLabels());
assertArrayEquals(expectedValues, sum.getValues(), 0);
sum = ZDT1.addIgnoringLabel(ZDT3);
assertArrayEquals(expectedDates, sum.getKeys());
assertArrayEquals(expectedDatesLabels, sum.getLabels());
assertArrayEquals(expectedValues, sum.getValues(), 0);
expectedDates = new ZonedDateTime[] {DateUtils.getUTCDate(2011, 1, 1), DateUtils.getUTCDate(2011, 2, 2), DateUtils.getUTCDate(2011, 3, 1), DateUtils.getUTCDate(2011, 4, 1),
DateUtils.getUTCDate(2011, 5, 1), DateUtils.getUTCDate(2011, 7, 1) };
expectedDatesLabels = new Object[] {"2011-01-01T00:00Z", "2011-02-02T00:00Z", "2011-03-01T00:00Z", "2011-04-01T00:00Z", "2011-05-01T00:00Z", "2011-07-01T00:00Z" };
sum = ZDT1.addIgnoringLabel(ZDT5, TOLERANCE);
assertArrayEquals(expectedDates, sum.getKeys());
assertArrayEquals(expectedDatesLabels, sum.getLabels());
assertArrayEquals(expectedValues, sum.getValues(), 0);
ZDT1.add(ZDT5, TOLERANCE);
}
}