/**
* Copyright (C) 2009 - 2010 by OpenGamma Inc.
*
* Please see distribution for license.
*/
package com.opengamma.analytics.math.function.special;
import static org.testng.AssertJUnit.assertEquals;
import org.testng.annotations.Test;
import com.opengamma.analytics.math.function.DoubleFunction1D;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class JacobiPolynomialFunctionTest {
private static final double ALPHA = 0.12;
private static final double BETA = 0.34;
private static final DoubleFunction1D P0 = new DoubleFunction1D() {
@Override
public Double evaluate(final Double x) {
return 1.;
}
};
private static final DoubleFunction1D P1 = new DoubleFunction1D() {
@Override
public Double evaluate(final Double x) {
return 0.5 * (2 * (ALPHA + 1) + (ALPHA + BETA + 2) * (x - 1));
}
};
private static final DoubleFunction1D P2 = new DoubleFunction1D() {
@Override
public Double evaluate(final Double x) {
return 0.125 * (4 * (ALPHA + 1) * (ALPHA + 2) + 4 * (ALPHA + BETA + 3) * (ALPHA + 2) * (x - 1) + (ALPHA + BETA + 3) * (ALPHA + BETA + 4) * (x - 1) * (x - 1));
}
};
private static final DoubleFunction1D[] P = new DoubleFunction1D[] {P0, P1, P2};
private static final JacobiPolynomialFunction JACOBI = new JacobiPolynomialFunction();
private static final double EPS = 1e-9;
@Test(expectedExceptions = UnsupportedOperationException.class)
public void testNoAlphaBeta() {
JACOBI.getPolynomials(3);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNegativeN() {
JACOBI.getPolynomials(-3, ALPHA, BETA);
}
@Test(expectedExceptions = UnsupportedOperationException.class)
public void testGetPolynomials() {
JACOBI.getPolynomialsAndFirstDerivative(3);
}
@Test
public void test() {
DoubleFunction1D[] p = JACOBI.getPolynomials(0, ALPHA, BETA);
assertEquals(p.length, 1);
final double x = 1.23;
assertEquals(p[0].evaluate(x), 1, EPS);
for (int i = 0; i <= 2; i++) {
p = JACOBI.getPolynomials(i, ALPHA, BETA);
for (int j = 0; j <= i; j++) {
assertEquals(P[j].evaluate(x), p[j].evaluate(x), EPS);
}
}
}
}