2 #include <msp/linal/dynamicmatrix.h>
3 #include <msp/test/test.h>
8 class DynamicMatrixTests: public Test::RegisteredTest<DynamicMatrixTests>
11 typedef LinAl::DynamicMatrix<double> Matrixd;
16 static const char *get_name() { return "DynamicMatrix"; }
24 DynamicMatrixTests::DynamicMatrixTests()
26 add(&DynamicMatrixTests::multiply, "Multiplication");
27 add(&DynamicMatrixTests::invert, "Inversion");
30 void DynamicMatrixTests::multiply()
32 static double data[] =
36 3, 6, 3, 3, 6, 3, 6, 3, 6,
40 Matrixd a(3, 2, data);
41 Matrixd b(2, 3, data+6);
42 EXPECT_EQUAL(a*b, Matrixd(3, 3, data+12));
43 EXPECT_EQUAL(b*a, Matrixd(2, 2, data+21));
47 bool is_identity(const LinAl::DynamicMatrix<T> &m)
49 static const T limit = numeric_limits<T>::epsilon()*4;
50 for(unsigned i=0; i<m.rows(); ++i)
51 for(unsigned j=0; j<m.columns(); ++j)
52 if(abs(T(i==j)-m(i, j))>limit)
57 void DynamicMatrixTests::invert()
59 static double data[] =
61 1, 4, 2, 4, 8, 6, 2, 2, 4
64 Matrixd m(3, 3, data);
65 Matrixd i = LinAl::invert(m);
66 EXPECT(is_identity(i*m));