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

org.jeometry.math.solver.ResolvableTest Maven / Gradle / Ivy

package org.jeometry.math.solver;

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

import org.jeometry.Jeometry;
import org.jeometry.factory.JeometryFactory;
import org.jeometry.math.Matrix;
import org.jeometry.math.Vector;

/**
 * This class provides utilities for {@link Resolvable resolvable} implementations test.
 * @author Julien Seinturier - COMEX S.A. - [email protected] - https://github.com/jorigin/jeometry
 * @version {@value Jeometry#version}
 * @since 1.0.2
 */
public class ResolvableTest {
	
	/**
	 * Check that the given resolvable object can solve the given linear system AX = B.
* This method use the {@link Resolvable#solve(Matrix)} method. * @param a the A matrix * @param b the B matrix * @param result the expected result X * @param solvent the solvent to use * @param epsilon the numerical precision for number comparison */ public static void testSolve(Matrix a, Matrix b, Matrix result, Resolvable solvent, double epsilon) { assertNotNull("Linear system (A) is null", a); assertNotNull("Constants (B) is null", b); assertNotNull("Expected result (Xe) is null", b); assertNotNull("Solvent is null", b); Matrix x = solvent.solve(b); assertNotNull("Result is null", x); assertEquals("Result size error, expected ("+result.getRowsCount()+", "+result.getColumnsCount()+") but got ("+x.getRowsCount()+", "+x.getColumnsCount()+")", result.getRowsCount(), x.getRowsCount()); assertEquals("Result size error, expected ("+result.getRowsCount()+", "+result.getColumnsCount()+") but got ("+x.getRowsCount()+", "+x.getColumnsCount()+")", result.getColumnsCount(), x.getColumnsCount()); for(int row = 0; row < x.getRowsCount(); row++) { for(int col = 0; col < x.getColumnsCount(); col++) { assertEquals("Bad value ("+row+", "+col+")", result.getValue(row, col), x.getValue(row, col), epsilon); } } Matrix bcomputed = a.multiply(x); assertNotNull("Computed constant is null", x); assertEquals("Computed constant size error, expected ("+b.getRowsCount()+", "+bcomputed.getColumnsCount()+") but got ("+bcomputed.getRowsCount()+", "+bcomputed.getColumnsCount()+")", b.getRowsCount(), bcomputed.getRowsCount()); assertEquals("Computed constant size error, expected ("+b.getRowsCount()+", "+bcomputed.getColumnsCount()+") but got ("+bcomputed.getRowsCount()+", "+bcomputed.getColumnsCount()+")", b.getColumnsCount(), bcomputed.getColumnsCount()); for(int row = 0; row < b.getRowsCount(); row++) { for(int col = 0; col < b.getColumnsCount(); col++) { assertEquals("Bad value ("+row+", "+col+")", b.getValue(row, col), bcomputed.getValue(row, col), epsilon); } } } /** * Check that the given resolvable object can solve the given linear system AX = B.
* This method use the {@link Resolvable#solve(Matrix, Matrix)} method. * @param a the A matrix * @param b the B matrix * @param result the expected result X * @param solvent the solvent to use * @param epsilon the numerical precision for number comparison */ public static void testSolveResult(Matrix a, Matrix b, Matrix result, Resolvable solvent, double epsilon) { assertNotNull("Linear system (A) is null", a); assertNotNull("Constants (B) is null", b); assertNotNull("Expected result (Xe) is null", b); assertNotNull("Solvent is null", b); Matrix x = JeometryFactory.createMatrix(a.getColumnsCount(), 1); Matrix returned = solvent.solve(b, x); assertNotNull("Result is null", returned); assertSame("Returned reference differs from given output.", x, returned); assertEquals("Result size error, expected ("+result.getRowsCount()+", "+result.getColumnsCount()+") but got ("+x.getRowsCount()+", "+x.getColumnsCount()+")", result.getRowsCount(), x.getRowsCount()); assertEquals("Result size error, expected ("+result.getRowsCount()+", "+result.getColumnsCount()+") but got ("+x.getRowsCount()+", "+x.getColumnsCount()+")", result.getColumnsCount(), x.getColumnsCount()); for(int row = 0; row < x.getRowsCount(); row++) { for(int col = 0; col < x.getColumnsCount(); col++) { assertEquals("Bad value ("+row+", "+col+")", result.getValue(row, col), x.getValue(row, col), epsilon); } } Matrix bcomputed = a.multiply(x); assertNotNull("Computed constant is null", x); assertEquals("Computed constant size error, expected ("+b.getRowsCount()+", "+bcomputed.getColumnsCount()+") but got ("+bcomputed.getRowsCount()+", "+bcomputed.getColumnsCount()+")", b.getRowsCount(), bcomputed.getRowsCount()); assertEquals("Computed constant size error, expected ("+b.getRowsCount()+", "+bcomputed.getColumnsCount()+") but got ("+bcomputed.getRowsCount()+", "+bcomputed.getColumnsCount()+")", b.getColumnsCount(), bcomputed.getColumnsCount()); for(int row = 0; row < b.getRowsCount(); row++) { for(int col = 0; col < b.getColumnsCount(); col++) { assertEquals("Bad value ("+row+", "+col+")", b.getValue(row, col), bcomputed.getValue(row, col), epsilon); } } } /** * Check that the given solvent can solve the given linear system AX = B.
* This method use the {@link Resolvable#solve(Vector)} method. * @param a the A matrix * @param b the B vector * @param result the expected result X * @param solvent the solvent to use * @param epsilon the numerical precision for number comparison */ public static void testSolve(Matrix a, Vector b, Vector result, Resolvable solvent, double epsilon) { assertNotNull("Linear system (A) is null", a); assertNotNull("Constants (B) is null", b); assertNotNull("Expected result (Xe) is null", b); assertNotNull("Solvent is null", b); Vector x = solvent.solve(b); assertNotNull("Result is null", x); assertEquals("Result size error, expected ("+result.getDimension()+") but got ("+x.getDimension()+")", result.getDimension(), x.getDimension()); for(int dimension = 0; dimension < x.getDimension(); dimension++) { assertEquals("Bad value ("+dimension+")", result.getVectorComponent(dimension), x.getVectorComponent(dimension), epsilon); } Vector bcomputed = a.multiply(x); assertNotNull("Computed constants are null", b); assertEquals("Computed constants size error, expected ("+b.getDimension()+") but got ("+bcomputed.getDimension()+")", b.getDimension(), bcomputed.getDimension()); for(int dimension = 0; dimension < b.getDimension(); dimension++) { assertEquals("Bad value ("+dimension+")", b.getVectorComponent(dimension), bcomputed.getVectorComponent(dimension), epsilon); } } /** * Check that the given solvent can solve the given linear system AX = B.
* This method use the {@link Resolvable#solve(Vector, Vector)} method. * @param a the A matrix * @param b the B vector * @param result the expected result X * @param solvent the solvent to use * @param epsilon the numerical precision for number comparison */ public static void testSolveResult(Matrix a, Vector b, Vector result, Resolvable solvent, double epsilon) { assertNotNull("Linear system (A) is null", a); assertNotNull("Constants (B) is null", b); assertNotNull("Expected result (Xe) is null", b); assertNotNull("Solvent is null", b); Vector x = JeometryFactory.createVector(a.getColumnsCount()); Vector returned = solvent.solve(b, x); assertNotNull("Result is null", x); assertSame("Returned reference differs from given output.", x, returned); assertEquals("Result size error, expected ("+result.getDimension()+") but got ("+x.getDimension()+")", result.getDimension(), x.getDimension()); for(int dimension = 0; dimension < x.getDimension(); dimension++) { assertEquals("Bad value ("+dimension+")", result.getVectorComponent(dimension), x.getVectorComponent(dimension), epsilon); } Vector bcomputed = a.multiply(x); assertNotNull("Computed constants are null", b); assertEquals("Computed constants size error, expected ("+b.getDimension()+") but got ("+bcomputed.getDimension()+")", b.getDimension(), bcomputed.getDimension()); for(int dimension = 0; dimension < b.getDimension(); dimension++) { assertEquals("Bad value ("+dimension+")", b.getVectorComponent(dimension), bcomputed.getVectorComponent(dimension), epsilon); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy