package net.sf.openrocket.util;
import static org.junit.Assert.*;
import org.junit.Test;
public class CoordinateTest {
private static final double EPS = 0.0000000001;
@Test
public void coordinateTest() {
Coordinate x = new Coordinate(1,1,1,1);
Coordinate y = new Coordinate(1,2,3,4);
assertCoordinateEquals(new Coordinate(2,1,1,1), x.setX(2));
assertCoordinateEquals(new Coordinate(1,2,1,1), x.setY(2));
assertCoordinateEquals(new Coordinate(1,1,2,1), x.setZ(2));
assertCoordinateEquals(new Coordinate(1,1,1,2), x.setWeight(2));
assertCoordinateEquals(new Coordinate(2,3,4,1), x.setXYZ(y).add(1,1,1));
assertFalse(x.isNaN());
assertTrue(x.setX(Double.NaN).isNaN());
assertTrue(Coordinate.NaN.isNaN());
assertTrue(x.isWeighted());
assertFalse(x.setWeight(0).isWeighted());
assertCoordinateEquals(x, x.add(Coordinate.NUL));
assertCoordinateEquals(new Coordinate(2,3,4,5), x.add(y));
assertCoordinateEquals(new Coordinate(2,3,4,1), x.add(1,2,3));
assertCoordinateEquals(new Coordinate(2,3,4,5), x.add(1,2,3,4));
assertCoordinateEquals(new Coordinate(0,-1,-2,1), x.sub(y));
assertCoordinateEquals(new Coordinate(0,-1,-2,1), x.sub(1,2,3));
assertCoordinateEquals(new Coordinate(2,4,6,8), y.multiply(2));
assertEquals(1+2+3, y.dot(x), EPS);
assertEquals(1+2+3, x.dot(y), EPS);
assertEquals(1+2+3, Coordinate.dot(x,y), EPS);
assertEquals(x.dot(x), x.length2(), EPS);
assertEquals(y.dot(y), y.length2(), EPS);
assertEquals(Math.sqrt(1+4+9), y.length(), EPS);
assertEquals(1, y.normalize().length(), EPS);
assertCoordinateEquals(new Coordinate(1.75,1.75,1.75,4),
new Coordinate(1,1,1,1).average(new Coordinate(2,2,2,3)));
assertCoordinateEquals(new Coordinate(1,1,1,1),
new Coordinate(1,1,1,1).average(new Coordinate(2,2,2,0)));
assertCoordinateEquals(new Coordinate(1.5,1.5,1.5,0),
new Coordinate(1,1,1,0).average(new Coordinate(2,2,2,0)));
}
private void assertCoordinateEquals(Coordinate a, Coordinate b) {
assertEquals(a, b);
assertEquals(a.weight, b.weight, EPS);
}
}