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))
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);
}