From 04dc82a306a289a1b0dfaeb0b132bd8fdf761115 Mon Sep 17 00:00:00 2001 From: Jurgen Van Gael Date: Thu, 28 Jan 2010 00:06:11 +0800 Subject: [PATCH] Unit tests for matrix vector multiplication. --- .../Double/MatrixTests.Arithmetic.cs | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.Arithmetic.cs b/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.Arithmetic.cs index 140151e1..db02257f 100644 --- a/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.Arithmetic.cs +++ b/src/UnitTests/LinearAlgebraTests/Double/MatrixTests.Arithmetic.cs @@ -28,6 +28,77 @@ namespace MathNet.Numerics.UnitTests.LinearAlgebraTests.Double } } + [Test] + public void CanMultiplyWithVector() + { + var A = testMatrices["Singular3x3"]; + var x = new DenseVector(new double[] { 1.0, 2.0, 3.0 }); + var y = A * x; + + Assert.AreEqual(A.RowCount, y.Count); + + for (int i = 0; i < A.RowCount; i++) + { + var ar = A.GetRow(i); + var dot = ar * x; + Assert.AreEqual(dot, y[i]); + } + } + + [Test] + public void CanMultiplyWithVectorIntoResult() + { + var A = testMatrices["Singular3x3"]; + var x = new DenseVector(new double[] { 1.0, 2.0, 3.0 }); + var y = new DenseVector(3); + A.Multiply(x, y); + + for (int i = 0; i < A.RowCount; i++) + { + var ar = A.GetRow(i); + var dot = ar * x; + Assert.AreEqual(dot, y[i]); + } + } + + [Test] + public void CanMultiplyWithVectorIntoResultWhenUpdatingInputArgument() + { + var A = testMatrices["Singular3x3"]; + var x = new DenseVector(new double[] { 1.0, 2.0, 3.0 }); + var y = x; + A.Multiply(x, x); + + Assert.AreSame(y, x); + + for (int i = 0; i < A.RowCount; i++) + { + var ar = A.GetRow(i); + var dot = ar * x; + Assert.AreEqual(dot, y[i]); + } + } + + [Test] + [ExpectedArgumentNullException] + public void MultiplyWithVectorIntoResultFailsWhenResultIsNull() + { + var A = testMatrices["Singular3x3"]; + var x = new DenseVector(new double[] { 1.0, 2.0, 3.0 }); + Vector y = null; + A.Multiply(x, y); + } + + [Test] + [ExpectedArgumentException] + public void MultiplyWithVectorIntoResultFailsWhenResultIsTooLarge() + { + var A = testMatrices["Singular3x3"]; + var x = new DenseVector(new double[] { 1.0, 2.0, 3.0 }); + Vector y = new DenseVector(4); + A.Multiply(x, y); + } + [Test] [Row(0)] [Row(1)]