All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jeometry.factory.MathBuilderTest Maven / Gradle / Ivy

package org.jeometry.factory;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;

import org.jeometry.Geometry;
import org.jeometry.math.Matrix;
import org.jeometry.math.MatrixTestData;
import org.jeometry.math.Quaternion;
import org.jeometry.math.Vector;
import org.junit.BeforeClass;
import org.junit.Test;

/**
 * A test suite for {@link MathBuilder} implementations.
*
* Usage: *

* Create a class that extends this one and add the method:

* * {@literal @}BeforeClass
* public static void initClass() {
*   mathBuilder = [A math builder to test];
*   matrixClass = [the matrix objects class];
*   vectorClass = [the the vector objects class];
*   quaternionClass = [the quaternion objects class];
*
*   GeometryFactory.setMathBuilder([a builder that provide suitable classes]);
* }
*
*
* If the object provided by the geometry factory are not from the same classes as the declared ones, tests will fail. *

* @author Julien Seinturier - COMEX S.A. - [email protected] - https://github.com/jorigin/jeometry * @version {@value Geometry#version} * @since 1.0.0 */ public class MathBuilderTest { protected static MathBuilder mathBuilder = null; protected static Class matrixClass = null; protected static Class vectorClass = null; protected static Class quaternionClass = null; /** * Test initialization. */ @BeforeClass public static void init() { fail("method public static void init() has to be set up with @BeforeClass annotation"); } /** * Testing {@link MathBuilder#createVector(int)} */ @Test public void createVectorSizeTest() { try { Vector vector = mathBuilder.createVector(10); assertNotNull("Cannot instantiate vector using MathBuilder.createVector(int).", vector); assertEquals("Invalid class, got "+vector.getClass().getSimpleName()+" but exptected "+vectorClass.getSimpleName(), vectorClass, vector.getClass()); assertEquals("Invalid vector dimension", 10, vector.getDimension()); } catch (Exception e) { fail("Cannot instantiate vector using MathBuilder.createVector(int)."); } } /** * Testing {@link MathBuilder#createVector(double[])} */ @Test public void createVectorComponentsTest() { try { Vector vector = mathBuilder.createVector(MatrixTestData.V_4_A); assertNotNull("Cannot instantiate vector using MathBuilder.createVector(double[]).", vector); assertEquals("Invalid class, got "+vector.getClass().getSimpleName()+" but exptected "+vectorClass.getSimpleName(), vectorClass, vector.getClass()); assertEquals("Invalid vector dimension", MatrixTestData.V_4_A.length, vector.getDimension()); for(int dimension = 0; dimension < vector.getDimension(); dimension++) { assertEquals("Invalid vector component "+dimension, MatrixTestData.V_4_A[dimension], vector.getVectorComponent(dimension), Double.MIN_VALUE); } } catch (Exception e) { fail("Cannot instantiate vector using MathBuilder.createVector(int)."); } } /** * Testing {@link MathBuilder#createMatrix(int, int)} */ @Test public void createMatrixSizeTest() { try { Matrix matrix = mathBuilder.createMatrix(10, 10); assertNotNull("Cannot instantiate matrix using MathBuilder.createMatrix().", matrix); assertEquals("Invalid class, got "+matrix.getClass().getSimpleName()+" but exptected "+matrixClass.getSimpleName(), matrixClass, matrix.getClass()); assertEquals("Invalid matrix rows number", 10, matrix.getRowsCount()); assertEquals("Invalid matrix columns number", 10, matrix.getColumnsCount()); } catch (Exception e) { fail("Cannot instantiate matrix using MathBuilder.createMatrix()."); } } /** * Testing {@link MathBuilder#createMatrix(double[][])} */ @Test public void createMatrixDataTest() { try { double[][] data = new double[][] { {1.0d, 2.0d, 3.0d}, {4.0d, 5.0d, 6.0d}, {7.0d, 8.0d, 9.0d} }; Matrix matrix = mathBuilder.createMatrix(data); assertNotNull("Cannot instantiate matrix using MathBuilder.createMatrix(double[][]).", matrix); assertEquals("Invalid class, got "+matrix.getClass().getSimpleName()+" but exptected "+matrixClass.getSimpleName(), matrixClass, matrix.getClass()); assertEquals("Invalid matrix rows number", 3, matrix.getRowsCount()); assertEquals("Invalid matrix columns number", 3, matrix.getColumnsCount()); for(int row = 0; row < data.length; row++) { for(int col = 0; col < data[0].length; col++) { assertEquals("Invalid matrix value ["+row+"x"+col+"]", data[row][col], matrix.getValue(row, col), 0.0d); } } } catch (Exception e) { fail("Cannot instantiate matrix using MathBuilder.createMatrix()."); } } /** * Testing {@link MathBuilder#createMatrix(int, int, double[], int)} */ @Test public void createMatrixSizeDataOrderingTest() { try { int rows = 3; int cols = 3; double[] data = new double[] { 1.0d, 2.0d, 3.0d, 4.0d, 5.0d, 6.0d, 7.0d, 8.0d, 9.0d }; Matrix matrix = mathBuilder.createMatrix(rows, cols, data, Matrix.ROW_MAJOR); assertNotNull("Cannot instantiate matrix using MathBuilder.createMatrix(int, int, double[], int).", matrix); assertEquals("Invalid class, got "+matrix.getClass().getSimpleName()+" but exptected "+matrixClass.getSimpleName(), matrixClass, matrix.getClass()); assertEquals("Invalid matrix rows number", rows, matrix.getRowsCount()); assertEquals("Invalid matrix columns number", cols, matrix.getColumnsCount()); for(int row = 0; row < rows; row++) { for(int col = 0; col < cols; col++) { assertEquals("Invalid matrix value ["+row+"x"+col+"]", data[row*cols+col], matrix.getValue(row, col), 0.0d); } } matrix = mathBuilder.createMatrix(rows, cols, data, Matrix.COLUMN_MAJOR); assertNotNull("Cannot instantiate matrix using MathBuilder.createMatrix(int, int, double[], int).", matrix); assertEquals("Invalid matrix rows number", rows, matrix.getRowsCount()); assertEquals("Invalid matrix columns number", cols, matrix.getColumnsCount()); for(int row = 0; row < rows; row++) { for(int col = 0; col < cols; col++) { assertEquals("Invalid matrix value ["+row+"x"+col+"]", data[col*rows+row], matrix.getValue(row, col), 0.0d); } } } catch (Exception e) { fail("Cannot instantiate matrix using MathBuilder.createMatrix()."); } } /** * Testing {@link MathBuilder#createQuaternion()} */ @Test public void createQuaternionTest() { try { Quaternion quaternion = mathBuilder.createQuaternion(); assertNotNull("Cannot instantiate quaternion using MathBuilder.createQuaternion().", quaternion); assertEquals("Invalid class, got "+quaternion.getClass().getSimpleName()+" but exptected "+quaternionClass.getSimpleName(), quaternionClass, quaternion.getClass()); } catch (Exception e) { fail("Cannot instantiate quaternion using MathBuilder.createQuaternion()."); } } /** * Testing {@link MathBuilder#createQuaternion(double, double, double, double)} */ @Test public void createQuaternionParamsTest() { try { Quaternion quaternion = mathBuilder.createQuaternion(1.0, 2.0, 3.0, 4.0); assertNotNull("Cannot instantiate quaternion using MathBuilder.createQuaternion().", quaternion); assertEquals("Invalid class, got "+quaternion.getClass().getSimpleName()+" but exptected "+quaternionClass.getSimpleName(), quaternionClass, quaternion.getClass()); assertEquals("Invalid scalar parameter.", 1.0, quaternion.getScalar(), 0.0d); assertEquals("Invalid i parameter.", 2.0, quaternion.getI(), 0.0d); assertEquals("Invalid j parameter.", 3.0, quaternion.getJ(), 0.0d); assertEquals("Invalid k parameter.", 4.0, quaternion.getK(), 0.0d); } catch (Exception e) { fail("Cannot instantiate quaternion using MathBuilder.createQuaternion(): "+e.getMessage()); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy