/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.pricer.impl.credit.isda;
import static org.testng.AssertJUnit.assertTrue;
import org.testng.annotations.Test;
/**
*
*/
@Test
public class DoublesScheduleGeneratorTest {
/**
*
*/
@Test
public void getIntegrationsPointsTest() {
final double start = 0.1;
final double end = 2.;
final double[] setA0 = new double[] {0.5, 0.9, 1.4 };
final double[] setB0 = new double[] {0.3, 0.4, 1.5, 1.6 };
final double[] exp0 = new double[] {0.1, 0.3, 0.4, 0.5, 0.9, 1.4, 1.5, 1.6, 2. };
final double[] res0 = DoublesScheduleGenerator.getIntegrationsPoints(start, end, setA0, setB0);
assertTrue(equalArrays(exp0, res0));
final double[] setA1 = new double[] {0.5, 0.9, 1.4 };
final double[] setB1 = new double[] {0.3, 0.4, 0.5, 1.5, 1.6 };
final double[] exp1 = new double[] {0.1, 0.3, 0.4, 0.5, 0.9, 1.4, 1.5, 1.6, 2. };
final double[] res1 = DoublesScheduleGenerator.getIntegrationsPoints(start, end, setA1, setB1);
assertTrue(equalArrays(exp1, res1));
/*
* different(temp[pos], end) == false
*/
final double[] setA2 = new double[] {0.2, 0.9, 1.4 };
final double[] setB2 = new double[] {0.3, 0.4, 0.5, 1.5, 2. - 1.e-3 };
final double[] exp2 = new double[] {0.1, 0.2, 0.3, 0.4, 0.5, 0.9, 1.4, 1.5, 2. };
final double[] res2 = DoublesScheduleGenerator.getIntegrationsPoints(start, end, setA2, setB2);
assertTrue(equalArrays(exp2, res2));
final double[] setA3 = new double[] {0.05, 0.07 };
final double[] setB3 = new double[] {0.03, 0.04 };
final double[] exp3 = new double[] {0.1, 2. };
final double[] res3 = DoublesScheduleGenerator.getIntegrationsPoints(start, end, setA3, setB3);
assertTrue(equalArrays(exp3, res3));
final double[] setA4 = new double[] {2.2, 2.7 };
final double[] setB4 = new double[] {2.3, 2.4 };
final double[] exp4 = new double[] {0.1, 2. };
final double[] res4 = DoublesScheduleGenerator.getIntegrationsPoints(start, end, setA4, setB4);
assertTrue(equalArrays(exp4, res4));
final double[] setA5 = new double[] {-0.5, 0., 1.2 };
final double[] setB5 = new double[] {-0.2, -0., 1.2 };
final double[] exp5 = new double[] {-0.3, -0.2, 0., 1.2, 2. };
final double[] res5 = DoublesScheduleGenerator.getIntegrationsPoints(-0.3, end, setA5, setB5);
assertTrue(equalArrays(exp5, res5));
}
/**
*
*/
@Test
public void combineSetsTest() {
final double[] setA0 = new double[] {-2., -1., 0., 2. };
final double[] setB0 = new double[] {-1., -0., 2.1 };
final double[] exp0 = new double[] {-2., -1., 0., 2., 2.1 };
final double[] res0 = DoublesScheduleGenerator.combineSets(setA0, setB0);
assertTrue(equalArrays(res0, exp0));
final double[] setA1 = new double[] {-2., 0., 2. };
final double[] setB1 = new double[] {-1., 2.1 };
final double[] exp1 = new double[] {-2., -1., 0., 2., 2.1 };
final double[] res1 = DoublesScheduleGenerator.combineSets(setA1, setB1);
assertTrue(equalArrays(res1, exp1));
}
/**
*
*/
@Test
public void truncateSetInclusiveTest() {
final double lower = 0.1;
final double upper = 2.5;
final double[] set0 = new double[] {-0.2, 1.5, 2.9 };
final double[] exp0 = new double[] {0.1, 1.5, 2.5 };
final double[] res0 = DoublesScheduleGenerator.truncateSetInclusive(lower, upper, set0);
assertTrue(equalArrays(exp0, res0));
final double[] set1 = new double[] {-0.2, -0.1 };
final double[] exp1 = new double[] {0.1, 2.5 };
final double[] res1 = DoublesScheduleGenerator.truncateSetInclusive(lower, upper, set1);
assertTrue(equalArrays(exp1, res1));
final double[] set2 = new double[] {0.1 + 1.e-3, 1.5, 2.8 };
final double[] exp2 = new double[] {0.1, 1.5, 2.5 };
final double[] res2 = DoublesScheduleGenerator.truncateSetInclusive(lower, upper, set2);
assertTrue(equalArrays(exp2, res2));
final double[] set3 = new double[] {0., 1.5, 2.5 + 1.e-3 };
final double[] exp3 = new double[] {0.1, 1.5, 2.5 };
final double[] res3 = DoublesScheduleGenerator.truncateSetInclusive(lower, upper, set3);
assertTrue(equalArrays(exp3, res3));
final double[] set4 = new double[] {0.1 - 1.e-4, 1.5, 2.5 - 1.e-4 };
final double[] exp4 = new double[] {0.1, 1.5, 2.5 };
final double[] res4 = DoublesScheduleGenerator.truncateSetInclusive(lower, upper, set4);
assertTrue(equalArrays(exp4, res4));
final double[] set5 = new double[] {lower + 1.e-4, lower + 2.e-4 };
final double[] exp5 = new double[] {lower, lower + 1.e-3 };
final double[] res5 = DoublesScheduleGenerator.truncateSetInclusive(lower, lower + 1.e-3, set5);
assertTrue(equalArrays(exp5, res5));
}
/**
*
*/
@Test
public void leftTruncateTest() {
final double lower = 0.2;
final double[] set0 = new double[] {0.1, 0.3, 0.5 };
final double[] exp0 = new double[] {0.3, 0.5 };
final double[] res0 = DoublesScheduleGenerator.leftTruncate(lower, set0);
assertTrue(equalArrays(exp0, res0));
final double[] set1 = new double[] {0.1, 0.15 };
final double[] exp1 = new double[] {};
final double[] res1 = DoublesScheduleGenerator.leftTruncate(lower, set1);
assertTrue(equalArrays(exp1, res1));
final double[] set2 = new double[] {0.25, 0.3, 0.5 };
final double[] exp2 = new double[] {0.25, 0.3, 0.5 };
final double[] res2 = DoublesScheduleGenerator.leftTruncate(lower, set2);
assertTrue(equalArrays(exp2, res2));
final double[] set3 = new double[] {};
final double[] exp3 = new double[] {};
final double[] res3 = DoublesScheduleGenerator.leftTruncate(lower, set3);
assertTrue(equalArrays(exp3, res3));
final double[] set4 = new double[] {0.0, 0.3, 0.5 };
final double[] exp4 = new double[] {0.0, 0.3, 0.5 };
final double[] res4 = DoublesScheduleGenerator.leftTruncate(-0.0, set4);
assertTrue(equalArrays(exp4, res4));
}
private boolean equalArrays(final double[] exp, final double[] res) {
final int num = exp.length;
if (res.length != num) {
return false;
}
for (int i = 0; i < num; ++i) {
if (exp[i] != res[i]) {
return false;
}
}
return true;
}
}