From efd48b48f561e0640e9485aad6b9ffba434c72a7 Mon Sep 17 00:00:00 2001 From: Eric Wasylishen Date: Sun, 23 Apr 2017 16:08:58 -0600 Subject: [PATCH] common: add test for matrix inverse --- light/test_light.cc | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) 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); + } + } +}