diff --git a/light/test_light.cc b/light/test_light.cc index 2dcc2ae9..897b01de 100644 --- a/light/test_light.cc +++ b/light/test_light.cc @@ -867,3 +867,47 @@ TEST(mathlib, octree_basic) { EXPECT_EQ(objsTouchingObj_i, objsTouchingObj_i_octree); } } + +TEST(qvec, matrix2x2inv) { + std::mt19937 engine(0); + std::uniform_real_distribution dis(-4096, 4096); + + qmat2x2f randMat; + for (int i=0; i<2; i++) + for (int j=0; j<2; j++) + randMat[i][j] = dis(engine); + + bool ok; + qmat2x2f randInv = qv::invert(randMat, &ok); + ASSERT_TRUE(ok); + + qmat2x2f prod = randMat * randInv; + for (int i=0; i<2; i++) { + for (int j=0; j<2; j++) { + float exp = (i == j) ? 1.0f : 0.0f; + ASSERT_TRUE(fabs(exp - prod[i][j]) < 0.001); + } + } +} + +TEST(qvec, matrix4x4inv) { + std::mt19937 engine(0); + std::uniform_real_distribution dis(-4096, 4096); + + qmat4x4f randMat; + for (int i=0; i<4; i++) + for (int j=0; j<4; j++) + randMat[i][j] = dis(engine); + + bool ok; + qmat4x4f randInv = qv::invert(randMat, &ok); + ASSERT_TRUE(ok); + + qmat4x4f prod = randMat * randInv; + for (int i=0; i<4; i++) { + for (int j=0; j<4; j++) { + float exp = (i == j) ? 1.0f : 0.0f; + ASSERT_TRUE(fabs(exp - prod[i][j]) < 0.001); + } + } +}