/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.strata.math.impl;
import static org.testng.AssertJUnit.assertEquals;
import org.testng.annotations.Test;
import com.opengamma.strata.collect.array.DoubleArray;
/**
* Test.
*/
@Test
public class FunctionUtilsTest {
private static final double EPS = 1e-15;
@Test
public void testSquare() {
for (int i = 0; i < 100; i++) {
final double x = Math.random();
assertEquals(FunctionUtils.square(x), x * x, EPS);
}
}
@Test
public void testCube() {
for (int i = 0; i < 100; i++) {
final double x = Math.random();
assertEquals(FunctionUtils.cube(x), x * x * x, EPS);
}
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullIndices() {
FunctionUtils.toTensorIndex(null, new int[] {1, 2, 3 });
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullDimensions1() {
FunctionUtils.toTensorIndex(new int[] {1, 2, 3 }, null);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testWrongLength() {
FunctionUtils.toTensorIndex(new int[] {1, 2 }, new int[] {1, 2, 3 });
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testNullDimensions2() {
FunctionUtils.fromTensorIndex(2, null);
}
@Test
public void testTensorIndexTest1() {
final int[] indices = new int[] {2 };
final int[] dimensions = new int[] {5 };
final int index = FunctionUtils.toTensorIndex(indices, dimensions);
assertEquals(indices[0], index, 0);
final int[] res = FunctionUtils.fromTensorIndex(index, dimensions);
assertEquals(indices[0], res[0], 0);
}
@Test
public void testTensorIndexTest2() {
final int[] indices = new int[] {2, 3 };
final int[] dimensions = new int[] {5, 7 };
final int index = FunctionUtils.toTensorIndex(indices, dimensions);
final int[] res = FunctionUtils.fromTensorIndex(index, dimensions);
assertEquals(indices[0], res[0], 0);
assertEquals(indices[1], res[1], 0);
}
@Test
public void testTensorIndexTest3() {
final int[] indices = new int[] {2, 3, 1 };
final int[] dimensions = new int[] {5, 7, 3 };
final int index = FunctionUtils.toTensorIndex(indices, dimensions);
final int[] res = FunctionUtils.fromTensorIndex(index, dimensions);
assertEquals(indices[0], res[0], 0);
assertEquals(indices[1], res[1], 0);
assertEquals(indices[2], res[2], 0);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testOutOfBounds() {
final int[] indices = new int[] {2, 7, 1 };
final int[] dimensions = new int[] {5, 7, 3 };
FunctionUtils.toTensorIndex(indices, dimensions);
}
@Test
public void getLowerBoundIndexTest() {
int i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(-2., -1.), -0.);
assertEquals(i, 1);
i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(1., 2.), -0.);
assertEquals(i, 0);
i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(1., 2., 3.), 2.5);
assertEquals(i, 1);
i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(1., 2., 3.), 2.);
assertEquals(i, 1);
i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(1., 2., 3.), -2.);
assertEquals(i, 0);
i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(-2., -1., 0.), -0.);
assertEquals(i, 2);
i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(-2., -1., 0.), 0.);
assertEquals(i, 2);
i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(-2., -1., 0.), -0.);
assertEquals(i, 2);
i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(-2., -1., -0.), -0.);
assertEquals(i, 2);
i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(-1., 0., 1.), -0.);
assertEquals(i, 1);
i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(-1., 0., 1.), 0.);
assertEquals(i, 1);
i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(-1., -0., 1.), 0.);
assertEquals(i, 1);
i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(-1., -0., 1.), -0.);
assertEquals(i, 1);
i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(0., 1., 2.), -0.);
assertEquals(i, 0);
i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(0., 1., 2.), 0.);
assertEquals(i, 0);
i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(-0., 1., 2.), 0.);
assertEquals(i, 0);
i = FunctionUtils.getLowerBoundIndex(DoubleArray.of(-0., 1., 2.), -0.);
assertEquals(i, 0);
}
}