/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.math;
import static org.testng.AssertJUnit.assertEquals;
import org.testng.annotations.Test;
import com.opengamma.analytics.math.number.ComplexNumber;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class TrigonometricFunctionUtilsTest {
private static final Double X = 0.12;
private static final ComplexNumber Y = new ComplexNumber(X, 0);
private static final ComplexNumber Z = new ComplexNumber(X, -0.34);
private static final double EPS = 1e-9;
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNull1() {
TrigonometricFunctionUtils.acos(null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNull2() {
TrigonometricFunctionUtils.acosh(null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNull3() {
TrigonometricFunctionUtils.asin(null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNull4() {
TrigonometricFunctionUtils.asinh(null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNull5() {
TrigonometricFunctionUtils.atan(null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNull6() {
TrigonometricFunctionUtils.atanh(null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNull7() {
TrigonometricFunctionUtils.cos(null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNull8() {
TrigonometricFunctionUtils.cosh(null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNull9() {
TrigonometricFunctionUtils.sin(null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNull10() {
TrigonometricFunctionUtils.sinh(null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNull11() {
TrigonometricFunctionUtils.tan(null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNull12() {
TrigonometricFunctionUtils.tanh(null);
}
@Test
public void test() {
assertEquals(TrigonometricFunctionUtils.acos(TrigonometricFunctionUtils.cos(X)), X, EPS);
assertEquals(TrigonometricFunctionUtils.asin(TrigonometricFunctionUtils.sin(X)), X, EPS);
assertEquals(TrigonometricFunctionUtils.atan(TrigonometricFunctionUtils.tan(X)), X, EPS);
assertComplexEquals(TrigonometricFunctionUtils.cos(Y), Math.cos(X));
assertComplexEquals(TrigonometricFunctionUtils.sin(Y), Math.sin(X));
assertComplexEquals(TrigonometricFunctionUtils.tan(Y), Math.tan(X));
assertComplexEquals(TrigonometricFunctionUtils.acos(Y), Math.acos(X));
assertComplexEquals(TrigonometricFunctionUtils.asin(Y), Math.asin(X));
assertComplexEquals(TrigonometricFunctionUtils.atan(Y), Math.atan(X));
assertComplexEquals(TrigonometricFunctionUtils.acos(TrigonometricFunctionUtils.cos(Z)), Z);
assertComplexEquals(TrigonometricFunctionUtils.asin(TrigonometricFunctionUtils.sin(Z)), Z);
assertComplexEquals(TrigonometricFunctionUtils.atan(TrigonometricFunctionUtils.tan(Z)), Z);
assertEquals(TrigonometricFunctionUtils.acosh(TrigonometricFunctionUtils.cosh(X)), X, EPS);
assertEquals(TrigonometricFunctionUtils.asinh(TrigonometricFunctionUtils.sinh(X)), X, EPS);
assertEquals(TrigonometricFunctionUtils.atanh(TrigonometricFunctionUtils.tanh(X)), X, EPS);
assertComplexEquals(TrigonometricFunctionUtils.acosh(TrigonometricFunctionUtils.cosh(Z)), Z);
assertComplexEquals(TrigonometricFunctionUtils.asinh(TrigonometricFunctionUtils.sinh(Z)), Z);
assertComplexEquals(TrigonometricFunctionUtils.atanh(TrigonometricFunctionUtils.tanh(Z)), Z);
// assertComplexEquals(TrigonometricFunctionUtils.acosh(0.25), TrigonometricFunctionUtils.acosh(new ComplexNumber(0.25, 0)));
}
@Test
public void testAtanh() {
double x = 0.76;
ComplexNumber z = new ComplexNumber(x);
double real = 0.5*Math.log((1+x)/(1-x));
ComplexNumber res = TrigonometricFunctionUtils.atanh(z);
assertEquals(real,res.getReal(),1e-15);
assertEquals(0.0,res.getImaginary(),0);
}
private void assertComplexEquals(final ComplexNumber z1, final ComplexNumber z2) {
assertEquals(z1.getReal(), z2.getReal(), EPS);
assertEquals(z1.getImaginary(), z2.getImaginary(), EPS);
}
private void assertComplexEquals(final ComplexNumber z, final double x) {
assertEquals(z.getImaginary(), 0, EPS);
assertEquals(z.getReal(), x, EPS);
}
}