/*
* $Id$
* This file is a part of the Arakhne Foundation Classes, http://www.arakhne.org/afc
*
* Copyright (c) 2000-2012 Stephane GALLAND.
* Copyright (c) 2005-10, Multiagent Team, Laboratoire Systemes et Transports,
* Universite de Technologie de Belfort-Montbeliard.
* Copyright (c) 2013-2016 The original authors, and other authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.arakhne.afc.math.geometry.d3.ai;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.arakhne.afc.math.AbstractMathTestCase;
import org.arakhne.afc.math.geometry.PathElementType;
import org.arakhne.afc.math.geometry.PathWindingRule;
import org.arakhne.afc.math.geometry.coordinatesystem.CoordinateSystem3DTestRule;
import org.arakhne.afc.math.geometry.d3.Point3D;
import org.arakhne.afc.math.geometry.d3.Point3DStub;
import org.arakhne.afc.math.geometry.d3.Vector3D;
import org.arakhne.afc.math.geometry.d3.Vector3DStub;
@SuppressWarnings("all")
public abstract class AbstractGeomFactory3aiTest extends AbstractMathTestCase {
private GeomFactory3ai<?, ?, ?, ?> factory;
@Rule
public CoordinateSystem3DTestRule csTestRule = new CoordinateSystem3DTestRule();
protected abstract GeomFactory3ai<?, ?, ?, ?> createFactory();
protected abstract Point3D createPoint(int x, int y, int z);
protected abstract Vector3D createVector(int x, int y, int z);
@Before
public void setUp() throws Exception {
this.factory = createFactory();
}
@After
public void tearDown() throws Exception {
this.factory = null;
}
@Test
public void convertToPointPoint3D_expectedPointType() {
Point3D p = createPoint(45, 56, 72);
Point3D p2 = this.factory.convertToPoint(p);
assertSame(p, p2);
}
@Test
public void convertToPointPoint3D_notExpectedPointType() {
Point3D p = new Point3DStub(45, 56, 72);
Point3D p2 = this.factory.convertToPoint(p);
assertNotSame(p, p2);
assertEquals(p, p2);
}
@Test
public void convertToVectorPoint3D() {
Point3D p = new Point3DStub(45, 56, 72);
Vector3D v = this.factory.convertToVector(p);
assertNotSame(p, v);
assertEquals(p, v);
}
@Test
public void convertToPointVector2D() {
Vector3D v = new Vector3DStub(45, 56, 72);
Point3D p = this.factory.convertToPoint(v);
assertNotSame(v, p);
assertEquals(v, p);
}
@Test
public void convertToVectorVector2D_expectedVectorType() {
Vector3D v = createVector(45, 56, 72);
Vector3D v2 = this.factory.convertToVector(v);
assertSame(v, v2);
}
@Test
public void convertToVectorVector2D_notExpectedVectorType() {
Vector3D v = new Vector3DStub(45, 56, 72);
Vector3D v2 = this.factory.convertToVector(v);
assertNotSame(v, v2);
assertEquals(v, v2);
}
@Test
public void newPoint() {
Point3D p = this.factory.newPoint();
assertNotNull(p);
assertEquals(0, p.ix());
assertEquals(0, p.iy());
assertEquals(0, p.iz());
Point3D ref = createPoint(0, 0, 0);
assertEquals(ref.getClass(), p.getClass());
}
@Test
public void newPointIntIntInt() {
Point3D p = this.factory.newPoint(15, 48, 6);
assertNotNull(p);
assertEquals(15, p.ix());
assertEquals(48, p.iy());
assertEquals(6, p.iz());
Point3D ref = createPoint(0, 0, 0);
assertEquals(ref.getClass(), p.getClass());
}
@Test
public void newPointDoubleDouble() {
Point3D p = this.factory.newPoint(15.56, 48.32, 6.42);
assertNotNull(p);
assertEpsilonEquals(16, p.getX());
assertEpsilonEquals(48, p.getY());
assertEpsilonEquals(6, p.getZ());
Point3D ref = createPoint(0, 0, 0);
assertEquals(ref.getClass(), p.getClass());
}
@Test
public void newVector() {
Vector3D p = this.factory.newVector();
assertNotNull(p);
assertEquals(0, p.ix());
assertEquals(0, p.iy());
assertEquals(0, p.iz());
Vector3D ref = createVector(0, 0, 0);
assertEquals(ref.getClass(), p.getClass());
}
@Test
public void newVectorIntIntInt() {
Vector3D p = this.factory.newVector(15, 48, 6);
assertNotNull(p);
assertEquals(15, p.ix());
assertEquals(48, p.iy());
assertEquals(6, p.iz());
Vector3D ref = createVector(0, 0, 0);
assertEquals(ref.getClass(), p.getClass());
}
@Test
public void newVectorDoubleDoubleDouble() {
Vector3D p = this.factory.newVector(15.45, 48.87, 6.42);
assertNotNull(p);
assertEpsilonEquals(15, p.getX());
assertEpsilonEquals(49, p.getY());
assertEpsilonEquals(6, p.getZ());
Vector3D ref = createVector(0, 0, 0);
assertEquals(ref.getClass(), p.getClass());
}
@Test
public void newPath_NONZERO() {
Path3ai<?, ?, ?, ?, ?, ?> path = this.factory.newPath(PathWindingRule.NON_ZERO);
assertNotNull(path);
assertSame(PathWindingRule.NON_ZERO, path.getWindingRule());
assertEquals(0, path.size());
}
@Test
public void newPath_EVENODD() {
Path3ai<?, ?, ?, ?, ?, ?> path = this.factory.newPath(PathWindingRule.EVEN_ODD);
assertNotNull(path);
assertSame(PathWindingRule.EVEN_ODD, path.getWindingRule());
assertEquals(0, path.size());
}
@Test
public void newSegment() {
Segment3ai<?, ?, ?, ?, ?, ?> s = this.factory.newSegment(1, 2, 3, 4, 5, 6);
assertNotNull(s);
assertEquals(1, s.getX1());
assertEquals(2, s.getY1());
assertEquals(3, s.getZ1());
assertEquals(4, s.getX2());
assertEquals(5, s.getY2());
assertEquals(6, s.getZ2());
}
@Test
public void newBox() {
RectangularPrism3ai<?, ?, ?, ?, ?, ?> r = this.factory.newBox();
assertNotNull(r);
assertEquals(0, r.getMinX());
assertEquals(0, r.getMinY());
assertEquals(0, r.getMinZ());
assertEquals(0, r.getMaxX());
assertEquals(0, r.getMaxY());
assertEquals(0, r.getMaxZ());
}
@Test
public void newBoxIntIntIntIntIntInt() {
RectangularPrism3ai<?, ?, ?, ?, ?, ?> r = this.factory.newBox(1, 2, 3, 4, 5, 6);
assertNotNull(r);
assertEquals(1, r.getMinX());
assertEquals(2, r.getMinY());
assertEquals(3, r.getMinZ());
assertEquals(5, r.getMaxX());
assertEquals(7, r.getMaxY());
assertEquals(9, r.getMaxZ());
}
@Test
public void newMovePathElement() {
PathElement3ai element = this.factory.newMovePathElement(1, 2, 3);
assertNotNull(element);
assertSame(PathElementType.MOVE_TO, element.getType());
assertEquals(0, element.getFromX());
assertEquals(0, element.getFromY());
assertEquals(0, element.getFromZ());
assertEquals(0, element.getCtrlX1());
assertEquals(0, element.getCtrlY1());
assertEquals(0, element.getCtrlZ1());
assertEquals(0, element.getCtrlX2());
assertEquals(0, element.getCtrlY2());
assertEquals(0, element.getCtrlZ2());
assertEquals(1, element.getToX());
assertEquals(2, element.getToY());
assertEquals(3, element.getToZ());
}
@Test
public void newLinePathElement() {
PathElement3ai element = this.factory.newLinePathElement(1, 2, 3, 4, 5, 6);
assertNotNull(element);
assertSame(PathElementType.LINE_TO, element.getType());
assertEquals(1, element.getFromX());
assertEquals(2, element.getFromY());
assertEquals(3, element.getFromZ());
assertEquals(0, element.getCtrlX1());
assertEquals(0, element.getCtrlY1());
assertEquals(0, element.getCtrlZ1());
assertEquals(0, element.getCtrlX2());
assertEquals(0, element.getCtrlY2());
assertEquals(0, element.getCtrlZ2());
assertEquals(4, element.getToX());
assertEquals(5, element.getToY());
assertEquals(6, element.getToZ());
}
@Test
public void newClosePathElement() {
PathElement3ai element = this.factory.newClosePathElement(1, 2, 3, 4, 5, 6);
assertNotNull(element);
assertSame(PathElementType.CLOSE, element.getType());
assertEquals(1, element.getFromX());
assertEquals(2, element.getFromY());
assertEquals(3, element.getFromZ());
assertEquals(0, element.getCtrlX1());
assertEquals(0, element.getCtrlY1());
assertEquals(0, element.getCtrlZ1());
assertEquals(0, element.getCtrlX2());
assertEquals(0, element.getCtrlY2());
assertEquals(0, element.getCtrlZ2());
assertEquals(4, element.getToX());
assertEquals(5, element.getToY());
assertEquals(6, element.getToZ());
}
@Test
@Ignore
public void newCurvePathElement_quad() {
PathElement3ai element = this.factory.newCurvePathElement(1, 2, 3, 4, 5, 6, 7, 8, 9);
assertNotNull(element);
assertSame(PathElementType.QUAD_TO, element.getType());
assertEquals(1, element.getFromX());
assertEquals(2, element.getFromY());
assertEquals(3, element.getFromZ());
assertEquals(4, element.getCtrlX1());
assertEquals(5, element.getCtrlY1());
assertEquals(6, element.getCtrlZ1());
assertEquals(0, element.getCtrlX2());
assertEquals(0, element.getCtrlY2());
assertEquals(0, element.getCtrlZ2());
assertEquals(7, element.getToX());
assertEquals(8, element.getToY());
assertEquals(9, element.getToY());
}
@Test
public void newCurvePathElement_curve() {
PathElement3ai element = this.factory.newCurvePathElement(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
assertNotNull(element);
assertSame(PathElementType.CURVE_TO, element.getType());
assertEquals(1, element.getFromX());
assertEquals(2, element.getFromY());
assertEquals(3, element.getFromZ());
assertEquals(4, element.getCtrlX1());
assertEquals(5, element.getCtrlY1());
assertEquals(6, element.getCtrlZ1());
assertEquals(7, element.getCtrlX2());
assertEquals(8, element.getCtrlY2());
assertEquals(9, element.getCtrlZ2());
assertEquals(10, element.getToX());
assertEquals(11, element.getToY());
assertEquals(12, element.getToZ());
}
}