Browse Source

test: add more unit tests for matrix inversion.

undefined
Sam Hocevar 10 years ago
parent
commit
9011c4a876
1 changed files with 22 additions and 30 deletions
  1. +22
    -30
      src/t/math/matrix.cpp

+ 22
- 30
src/t/math/matrix.cpp View File

@@ -19,13 +19,11 @@ lolunit_declare_fixture(MatrixTest)
{ {
void SetUp() void SetUp()
{ {
id2 = mat2(1.0f);
tri2 = mat2(vec2(1.0f, 0.0f), tri2 = mat2(vec2(1.0f, 0.0f),
vec2(7.0f, 2.0f)); vec2(7.0f, 2.0f));
inv2 = mat2(vec2(4.0f, 3.0f), inv2 = mat2(vec2(4.0f, 3.0f),
vec2(3.0f, 2.0f)); vec2(3.0f, 2.0f));


id3 = mat3(1.0f);
tri3 = mat3(vec3(1.0f, 0.0f, 0.0f), tri3 = mat3(vec3(1.0f, 0.0f, 0.0f),
vec3(7.0f, 2.0f, 0.0f), vec3(7.0f, 2.0f, 0.0f),
vec3(1.0f, 5.0f, 3.0f)); vec3(1.0f, 5.0f, 3.0f));
@@ -33,7 +31,6 @@ lolunit_declare_fixture(MatrixTest)
vec3(3.0f, 2.0f, 3.0f), vec3(3.0f, 2.0f, 3.0f),
vec3(9.0f, 5.0f, 7.0f)); vec3(9.0f, 5.0f, 7.0f));


id4 = mat4(1.0f);
tri4 = mat4(vec4(1.0f, 0.0f, 0.0f, 0.0f), tri4 = mat4(vec4(1.0f, 0.0f, 0.0f, 0.0f),
vec4(7.0f, 2.0f, 0.0f, 0.0f), vec4(7.0f, 2.0f, 0.0f, 0.0f),
vec4(1.0f, 5.0f, 3.0f, 0.0f), vec4(1.0f, 5.0f, 3.0f, 0.0f),
@@ -68,8 +65,8 @@ lolunit_declare_fixture(MatrixTest)


lolunit_declare_test(Multiplication) lolunit_declare_test(Multiplication)
{ {
mat4 m0 = id4;
mat4 m1 = id4;
mat4 m0(1.f);
mat4 m1(1.f);
mat4 m2 = m0 * m1; mat4 m2 = m0 * m1;


lolunit_assert_equal(m2[0][0], 1.0f); lolunit_assert_equal(m2[0][0], 1.0f);
@@ -235,32 +232,27 @@ lolunit_declare_fixture(MatrixTest)
lolunit_assert_doubles_equal(m2[2][2], 1.0f, 1e-4); lolunit_assert_doubles_equal(m2[2][2], 1.0f, 1e-4);
} }


lolunit_declare_test(Inverse4x4)
lolunit_declare_test(inverse_4x4_1)
{ {
mat4 m0 = inv4;
mat4 m1 = inverse(m0);

mat4 m2 = m0 * m1;

lolunit_assert_equal(m2[0][0], 1.0f);
lolunit_assert_equal(m2[1][0], 0.0f);
lolunit_assert_equal(m2[2][0], 0.0f);
lolunit_assert_equal(m2[3][0], 0.0f);
mat4 m = inv4;
mat4 m2 = inverse(m) * m;


lolunit_assert_equal(m2[0][1], 0.0f);
lolunit_assert_equal(m2[1][1], 1.0f);
lolunit_assert_equal(m2[2][1], 0.0f);
lolunit_assert_equal(m2[3][1], 0.0f);
for (int j = 0; j < 4; ++j)
for (int i = 0; i < 4; ++i)
lolunit_assert_equal(m2[i][j], mat4(1.f)[i][j]);
}


lolunit_assert_equal(m2[0][2], 0.0f);
lolunit_assert_equal(m2[1][2], 0.0f);
lolunit_assert_equal(m2[2][2], 1.0f);
lolunit_assert_equal(m2[3][2], 0.0f);
lolunit_declare_test(inverse_4x4_2)
{
mat4 m(vec4(1.f, 0.f, 0.f, 0.f),
vec4(0.f, 0.f, 1.f, 0.f),
vec4(0.f, -1.f, 0.f, 0.f),
vec4(0.f, 0.f, -1.f, 1.f));
mat4 m2 = inverse(m) * m;


lolunit_assert_equal(m2[0][3], 0.0f);
lolunit_assert_equal(m2[1][3], 0.0f);
lolunit_assert_equal(m2[2][3], 0.0f);
lolunit_assert_equal(m2[3][3], 1.0f);
for (int j = 0; j < 4; ++j)
for (int i = 0; i < 4; ++i)
lolunit_assert_equal(m2[i][j], mat4(1.f)[i][j]);
} }


lolunit_declare_test(Kronecker) lolunit_declare_test(Kronecker)
@@ -293,9 +285,9 @@ lolunit_declare_fixture(MatrixTest)
} }
} }


mat2 tri2, id2, inv2;
mat3 tri3, id3, inv3;
mat4 tri4, id4, inv4;
mat2 tri2, inv2;
mat3 tri3, inv3;
mat4 tri4, inv4;
}; };


} /* namespace lol */ } /* namespace lol */


Loading…
Cancel
Save