package mikera.vectorz;
import static org.junit.Assert.*;
import mikera.vectorz.impl.AComputedVector;
import org.junit.Test;
/**
* Test a lot of different 3D vectors in different combinations
*
* @author Mike
*
*/
public class Test3DVectors {
private void testDot(AVector v) {
assertEquals(v.magnitudeSquared(),v.dotProduct(v),0.0001);
}
private void testMutateClone(AVector v) {
v.clone().fill(Double.NaN);
v.subVector(0,2).clone().fill(Double.NaN);
new Vector(v).fill(Double.NaN);
}
private void testNegate(AVector v) {
AVector n=v.clone();
n.negate();
assertNotEquals(v, n);
n.negate();
assertEquals(v, n);
n.negate();
n.add(v);
assertEquals(Vector3.of(0,0,0),n);
}
private void testValues(AVector v) {
assertEquals(1.0,v.get(0),0.0);
assertEquals(2.0,v.get(1),0.0);
assertEquals(3.0,v.get(2),0.0);
}
private void testVector(AVector v) {
AVector temp=v.clone();
testDot(v);
testNegate(v);
testValues(v);
testMutateClone(v);
assertEquals(temp,v);
}
GrowableVector grownVector=new GrowableVector();
{
grownVector.append(1.0);
grownVector.append(Vector2.of(2,3));
}
@SuppressWarnings("serial")
AVector[] vectors_3D={
Vector3.of(1,2,3),
Vector1.of(1).join(Vector2.of(2,3)),
Vector1.of(1).join(Vector1.of(2)).join(Vector1.of(3)),
new Vector(Vector3.of(1,2,3)),
Vector.of(0,1,2,3,4).subVector(1, 3),
new AComputedVector(3) {
@Override public double get(int i) {return i+1.0;}
},
grownVector
};
@Test public void testSubVector() {
assertEquals(Vector.of(1,2),Vector3.of(0,1,2).subVector(1, 2));
}
@Test public void testAll() {
for (AVector a:vectors_3D) {
testVector(a);
testVector(a.subVector(0, 2).join(a.subVector(2, 1)));
}
}
}