From 0b95cdce242097859db073a3df3bcff73aacfe25 Mon Sep 17 00:00:00 2001 From: Kevin Boyd Date: Wed, 10 Jul 2019 18:01:59 -0400 Subject: [PATCH] Use const views in matrix determinant calculation Reduces scope of the matrix.h implementation to just reals Change-Id: Ide66967b35ffc58b3e61c403d3ce1862b5f5b8ca --- src/gromacs/math/matrix.h | 3 +-- src/gromacs/math/tests/matrix.cpp | 18 ++++++------------ 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/gromacs/math/matrix.h b/src/gromacs/math/matrix.h index ed225ad585..665fbe77ab 100644 --- a/src/gromacs/math/matrix.h +++ b/src/gromacs/math/matrix.h @@ -68,8 +68,7 @@ using Matrix3x3Span = Matrix3x3::view_type; using Matrix3x3ConstSpan = Matrix3x3::const_view_type; //! Determinant of a 3x3 matrix -template -ElementType determinant(const BasicMatrix3x3 matrix) +constexpr real determinant(Matrix3x3ConstSpan matrix) { return ( matrix(0, 0)*(matrix(1, 1)*matrix(2, 2)-matrix(2, 1)*matrix(1, 2)) -matrix(1, 0)*(matrix(0, 1)*matrix(2, 2)-matrix(2, 1)*matrix(0, 2)) diff --git a/src/gromacs/math/tests/matrix.cpp b/src/gromacs/math/tests/matrix.cpp index 406022aa1d..0d75840872 100644 --- a/src/gromacs/math/tests/matrix.cpp +++ b/src/gromacs/math/tests/matrix.cpp @@ -142,29 +142,23 @@ TEST_F(MatrixTest, staticMultiDimArrayExtent) EXPECT_EQ(matrix_.extent(1), 3); } -TEST_F(MatrixTest, determinantWorksForInt) +TEST_F(MatrixTest, determinantWorks) { - const BasicMatrix3x3 mat = {{6, 4, 2, 1, -2, 8, 1, 5, 7}}; - EXPECT_EQ(determinant(mat), -306); -} - -TEST_F(MatrixTest, determinantWorksForFloat) -{ - const BasicMatrix3x3 mat = {{1.0, 2.0, 3.0, - 0.0, 1.0, 4.0, - 5.0, 6.0, 0.0}}; + const Matrix3x3 mat = {{1.0, 2.0, 3.0, + 0.0, 1.0, 4.0, + 5.0, 6.0, 0.0}}; EXPECT_EQ(determinant(mat), 1); } TEST_F(MatrixTest, noninvertableDeterminantIsZero) { - const BasicMatrix3x3 mat = {{1, 0, 0, 0, 1, 0, 0, 0, 0}}; + const Matrix3x3 mat = {{1, 0, 0, 0, 1, 0, 0, 0, 0}}; EXPECT_EQ(determinant(mat), 0); } TEST_F(MatrixTest, determinantOfDiagonalMatrix) { - const BasicMatrix3x3 mat = {{2, 0, 0, 0, 3, 0, 0, 0, 4}}; + const Matrix3x3 mat = {{2, 0, 0, 0, 3, 0, 0, 0, 4}}; EXPECT_EQ(determinant(mat), 24); } -- 2.11.4.GIT