From 50ec325c78c40884f7933eb1db4544e08762f4b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 2 Sep 2013 17:24:05 +0200 Subject: [PATCH] Math: fix and test RectangularMatrix*Vector operation. How did I forget to test that? --- src/Math/RectangularMatrix.h | 4 ++-- src/Math/Test/RectangularMatrixTest.cpp | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/Math/RectangularMatrix.h b/src/Math/RectangularMatrix.h index b1d700b00..c867564ed 100644 --- a/src/Math/RectangularMatrix.h +++ b/src/Math/RectangularMatrix.h @@ -328,8 +328,8 @@ template class RectangularMatrix { * (\boldsymbol {Aa})_i = \sum_{k=0}^{m-1} \boldsymbol A_{ki} \boldsymbol a_k * @f] */ - Vector operator*(const Vector& other) const { - return operator*(RectangularMatrix<1, rows, T>(other))[0]; + Vector operator*(const Vector& other) const { + return operator*(RectangularMatrix<1, cols, T>(other))[0]; } /** diff --git a/src/Math/Test/RectangularMatrixTest.cpp b/src/Math/Test/RectangularMatrixTest.cpp index 4aa2a541e..b1104fa1b 100644 --- a/src/Math/Test/RectangularMatrixTest.cpp +++ b/src/Math/Test/RectangularMatrixTest.cpp @@ -74,6 +74,7 @@ class RectangularMatrixTest: public Corrade::TestSuite::Tester { void addSubtract(); void multiplyDivide(); void multiply(); + void multiplyVector(); void transposed(); void diagonal(); @@ -94,6 +95,11 @@ typedef RectangularMatrix<2, 2, Int> Matrix2i; typedef Vector<4, Float> Vector4; typedef Vector<3, Float> Vector3; typedef Vector<2, Float> Vector2; + +typedef RectangularMatrix<4, 3, Int> Matrix4x3i; +typedef RectangularMatrix<3, 4, Int> Matrix3x4i; +typedef Vector<4, Int> Vector4i; +typedef Vector<3, Int> Vector3i; typedef Vector<2, Int> Vector2i; RectangularMatrixTest::RectangularMatrixTest() { @@ -114,6 +120,7 @@ RectangularMatrixTest::RectangularMatrixTest() { &RectangularMatrixTest::addSubtract, &RectangularMatrixTest::multiplyDivide, &RectangularMatrixTest::multiply, + &RectangularMatrixTest::multiplyVector, &RectangularMatrixTest::transposed, &RectangularMatrixTest::diagonal, @@ -349,6 +356,22 @@ void RectangularMatrixTest::multiply() { CORRADE_COMPARE(left*right, expected); } +void RectangularMatrixTest::multiplyVector() { + Vector4i a(-5, 27, 10, 33); + RectangularMatrix<3, 1, Int> b(1, 2, 3); + CORRADE_COMPARE(a*b, Matrix3x4i( + Vector4i( -5, 27, 10, 33), + Vector4i(-10, 54, 20, 66), + Vector4i(-15, 81, 30, 99) + )); + + Matrix3x4i c(Vector4i(0, 4, 8, 12), + Vector4i(1, 5, 9, 13), + Vector4i(3, 7, 11, 15)); + Vector3i d(2, -2, 3); + CORRADE_COMPARE(c*d, Vector4i(7, 19, 31, 43)); +} + void RectangularMatrixTest::transposed() { Matrix4x3 original(Vector3( 0.0f, 1.0f, 3.0f), Vector3( 4.0f, 5.0f, 7.0f),