Use const views in matrix determinant calculation
authorKevin Boyd <kevin.boyd@uconn.edu>
Wed, 10 Jul 2019 22:01:59 +0000 (18:01 -0400)
committerPaul Bauer <paul.bauer.q@gmail.com>
Thu, 11 Jul 2019 06:22:07 +0000 (08:22 +0200)
Reduces scope of the matrix.h implementation to just reals

Change-Id: Ide66967b35ffc58b3e61c403d3ce1862b5f5b8ca

src/gromacs/math/matrix.h
src/gromacs/math/tests/matrix.cpp

index ed225ad5854c9a65f7825ccf9c131d3c874853fd..665fbe77abcccac18fd771adebc86f7009c54287 100644 (file)
@@ -68,8 +68,7 @@ using Matrix3x3Span      = Matrix3x3::view_type;
 using Matrix3x3ConstSpan = Matrix3x3::const_view_type;
 
 //! Determinant of a 3x3 matrix
-template <class ElementType>
-ElementType determinant(const BasicMatrix3x3<ElementType> 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))
index 406022aa1df7e56058fb0defe9b5d0944ae8f745..0d75840872e5f00708c04575d308478616e80e3d 100644 (file)
@@ -142,29 +142,23 @@ TEST_F(MatrixTest, staticMultiDimArrayExtent)
     EXPECT_EQ(matrix_.extent(1), 3);
 }
 
-TEST_F(MatrixTest, determinantWorksForInt)
+TEST_F(MatrixTest, determinantWorks)
 {
-    const BasicMatrix3x3<int> mat = {{6, 4, 2, 1, -2, 8, 1, 5, 7}};
-    EXPECT_EQ(determinant(mat), -306);
-}
-
-TEST_F(MatrixTest, determinantWorksForFloat)
-{
-    const BasicMatrix3x3<float> 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<int> 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<int> 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);
 }