package com.badlogic.gdx.math;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
import com.badlogic.gdx.utils.Array;
@RunWith(Parameterized.class)
public class BezierTest {
private static float epsilon = Float.MIN_NORMAL;
private static float epsilonApprimations = 1e-6f;
private static enum ImportType {
LibGDXArrays, JavaArrays, JavaVarArgs
}
@Parameters(name = "use setter {0} imported type {1}")
public static Collection<Object[]> parameters () {
Collection<Object[]> parameters = new ArrayList<Object[]>();
for(ImportType type : ImportType.values()){
parameters.add(new Object[]{type, true});
parameters.add(new Object[]{type, false});
}
return parameters;
}
@Parameter(0) public ImportType type;
/** use constructor or setter */
@Parameter(1) public boolean useSetter;
private Bezier<Vector2> bezier;
@Before
public void setup () {
bezier = null;
}
protected Vector2[] create (Vector2[] points) {
if (useSetter) {
bezier = new Bezier<Vector2>();
if (type == ImportType.LibGDXArrays) {
bezier.set(new Array<Vector2>(points), 0, points.length);
} else if (type == ImportType.JavaArrays) {
bezier.set(points, 0, points.length);
} else {
bezier.set(points);
}
} else {
if (type == ImportType.LibGDXArrays) {
bezier = new Bezier<Vector2>(new Array<Vector2>(points), 0, points.length);
} else if (type == ImportType.JavaArrays) {
bezier = new Bezier<Vector2>(points, 0, points.length);
} else {
bezier = new Bezier<Vector2>(points);
}
}
return points;
}
@Test
public void testLinear2D () {
Vector2[] points = create(new Vector2[] {new Vector2(0, 0), new Vector2(1, 1)});
float len = bezier.approxLength(2);
Assert.assertEquals(Math.sqrt(2), len, epsilonApprimations);
Vector2 d = bezier.derivativeAt(new Vector2(), 0.5f);
Assert.assertEquals(1, d.x, epsilon);
Assert.assertEquals(1, d.y, epsilon);
Vector2 v = bezier.valueAt(new Vector2(), 0.5f);
Assert.assertEquals(0.5f, v.x, epsilon);
Assert.assertEquals(0.5f, v.y, epsilon);
float t = bezier.approximate(new Vector2(.5f, .5f));
Assert.assertEquals(.5f, t, epsilonApprimations);
float l = bezier.locate(new Vector2(.5f, .5f));
Assert.assertEquals(.5f, t, epsilon);
}
}