From 5b3e279c203a5d70018a28b4aeb639ba43eaa325 Mon Sep 17 00:00:00 2001 From: Walter Oggioni Date: Sun, 28 May 2023 19:59:42 +0800 Subject: [PATCH] added unit test --- .../java/net/woggioni/jmath/MatrixTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/jmath/src/test/java/net/woggioni/jmath/MatrixTest.java b/jmath/src/test/java/net/woggioni/jmath/MatrixTest.java index 48160fe..61caba2 100644 --- a/jmath/src/test/java/net/woggioni/jmath/MatrixTest.java +++ b/jmath/src/test/java/net/woggioni/jmath/MatrixTest.java @@ -4,6 +4,9 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import java.util.Optional; +import java.util.Random; +import java.util.function.IntFunction; import java.util.stream.IntStream; public class MatrixTest { @@ -203,4 +206,21 @@ public class MatrixTest { Assertions.assertEquals(expectedSolution, inverse.mmul(b)); } + @Test + public void randomLinearSystemTest() { + int size = 10; + Random rnd = new Random(101325); + NumericTypeFactory numericTypeFactory = RationalFactory.getInstance(); + Matrix.ValueGenerator init = (i, j) -> + Rational.of(rnd.nextInt(-1000 * size, 1000 * size), (long) 1000 * size); + Matrix mtx = Matrix.of(numericTypeFactory, size, size, init); + Matrix lu = mtx.clone(); + Matrix.Pivot pivot = lu.lup(); + IntFunction initVector = (i) -> Rational.of(rnd.nextInt(0, size), size); + Vector b = Vector.of(numericTypeFactory, size, initVector); + Vector x = lu.luSolve(b, pivot); + Vector error = mtx.mmul(x).sub(b); + Assertions.assertEquals(Rational.ZERO, error.norm()); + } + } \ No newline at end of file