From: Kevin Boyd Date: Wed, 10 Jul 2019 22:01:59 +0000 (-0400) Subject: Use const views in matrix determinant calculation X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=0b95cdce242097859db073a3df3bcff73aacfe25;p=alexxy%2Fgromacs.git Use const views in matrix determinant calculation Reduces scope of the matrix.h implementation to just reals Change-Id: Ide66967b35ffc58b3e61c403d3ce1862b5f5b8ca --- 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); }