Переглянути джерело

test: ensure the LU-decomposition checks fail with GCC and -ffast-math.

undefined
Sam Hocevar 10 роки тому
джерело
коміт
d70027cc3e
1 змінених файлів з 39 додано та 10 видалено
  1. +39
    -10
      src/t/math/matrix.cpp

+ 39
- 10
src/t/math/matrix.cpp Переглянути файл

@@ -79,11 +79,16 @@ lolunit_declare_fixture(MatrixTest)
mat2 m(vec2(4, 3), mat2 m(vec2(4, 3),
vec2(3, 2)); vec2(3, 2));


/* Invert matrix and check that the results are finite */
mat2 m1 = inverse(m); mat2 m1 = inverse(m);
for (int j = 0; j < 2; ++j) for (int j = 0; j < 2; ++j)
for (int i = 0; i < 2; ++i) for (int i = 0; i < 2; ++i)
lolunit_assert_equal(m1[i][j], m1[i][j]);
{
lolunit_assert_less(m1[i][j], FLT_MAX);
lolunit_assert_greater(m1[i][j], -FLT_MAX);
}


/* Multiply with original matrix and check that we get identity */
mat2 m2 = m1 * m; mat2 m2 = m1 * m;
for (int j = 0; j < 2; ++j) for (int j = 0; j < 2; ++j)
for (int i = 0; i < 2; ++i) for (int i = 0; i < 2; ++i)
@@ -103,8 +108,11 @@ lolunit_declare_fixture(MatrixTest)
for (int j = 0; j < 3; ++j) for (int j = 0; j < 3; ++j)
for (int i = 0; i < 3; ++i) for (int i = 0; i < 3; ++i)
{ {
lolunit_assert(!isnan(U[i][j]));
lolunit_assert(!isnan(L[i][j]));
/* Check that the LU decomposition has valid values */
lolunit_assert_less(U[i][j], FLT_MAX);
lolunit_assert_greater(U[i][j], -FLT_MAX);
lolunit_assert_less(L[i][j], FLT_MAX);
lolunit_assert_greater(L[i][j], -FLT_MAX);


if (i < j) if (i < j)
lolunit_assert_doubles_equal(U[i][j], 0.f, 1e-5); lolunit_assert_doubles_equal(U[i][j], 0.f, 1e-5);
@@ -130,8 +138,11 @@ lolunit_declare_fixture(MatrixTest)
for (int j = 0; j < 4; ++j) for (int j = 0; j < 4; ++j)
for (int i = 0; i < 4; ++i) for (int i = 0; i < 4; ++i)
{ {
lolunit_assert(!isnan(U[i][j]));
lolunit_assert(!isnan(L[i][j]));
/* Check that the LU decomposition has valid values */
lolunit_assert_less(U[i][j], FLT_MAX);
lolunit_assert_greater(U[i][j], -FLT_MAX);
lolunit_assert_less(L[i][j], FLT_MAX);
lolunit_assert_greater(L[i][j], -FLT_MAX);


if (i < j) if (i < j)
lolunit_assert_doubles_equal(U[i][j], 0.f, 1e-5); lolunit_assert_doubles_equal(U[i][j], 0.f, 1e-5);
@@ -157,8 +168,11 @@ lolunit_declare_fixture(MatrixTest)
for (int j = 0; j < 4; ++j) for (int j = 0; j < 4; ++j)
for (int i = 0; i < 4; ++i) for (int i = 0; i < 4; ++i)
{ {
lolunit_assert(!isnan(U[i][j]));
lolunit_assert(!isnan(L[i][j]));
/* Check that the LU decomposition has valid values */
lolunit_assert_less(U[i][j], FLT_MAX);
lolunit_assert_greater(U[i][j], -FLT_MAX);
lolunit_assert_less(L[i][j], FLT_MAX);
lolunit_assert_greater(L[i][j], -FLT_MAX);


if (i < j) if (i < j)
lolunit_assert_doubles_equal(U[i][j], 0.f, 1e-5); lolunit_assert_doubles_equal(U[i][j], 0.f, 1e-5);
@@ -240,11 +254,16 @@ lolunit_declare_fixture(MatrixTest)
vec3(3, 2, 3), vec3(3, 2, 3),
vec3(9, 5, 7)); vec3(9, 5, 7));


/* Invert matrix and check that the results are finite */
mat3 m1 = inverse(m); mat3 m1 = inverse(m);
for (int j = 0; j < 3; ++j) for (int j = 0; j < 3; ++j)
for (int i = 0; i < 3; ++i) for (int i = 0; i < 3; ++i)
lolunit_assert_equal(m1[i][j], m1[i][j]);
{
lolunit_assert_less(m1[i][j], FLT_MAX);
lolunit_assert_greater(m1[i][j], -FLT_MAX);
}


/* Multiply with original matrix and check that we get identity */
mat3 m2 = m1 * m; mat3 m2 = m1 * m;
for (int j = 0; j < 3; ++j) for (int j = 0; j < 3; ++j)
for (int i = 0; i < 3; ++i) for (int i = 0; i < 3; ++i)
@@ -258,11 +277,16 @@ lolunit_declare_fixture(MatrixTest)
vec4( 4, 2, 5, -4), vec4( 4, 2, 5, -4),
vec4( 5, -3, -7, -6)); vec4( 5, -3, -7, -6));


/* Invert matrix and check that the results are finite */
mat4 m1 = inverse(m); mat4 m1 = inverse(m);
for (int j = 0; j < 4; ++j) for (int j = 0; j < 4; ++j)
for (int i = 0; i < 4; ++i) for (int i = 0; i < 4; ++i)
lolunit_assert_equal(m1[i][j], m1[i][j]);
{
lolunit_assert_less(m1[i][j], FLT_MAX);
lolunit_assert_greater(m1[i][j], -FLT_MAX);
}


/* Multiply with original matrix and check that we get identity */
mat4 m2 = m1 * m; mat4 m2 = m1 * m;
for (int j = 0; j < 4; ++j) for (int j = 0; j < 4; ++j)
for (int i = 0; i < 4; ++i) for (int i = 0; i < 4; ++i)
@@ -275,11 +299,16 @@ lolunit_declare_fixture(MatrixTest)
vec4(0, 0, 1, 0), vec4(0, 0, 1, 0),
vec4(0, -1, 0, 0), vec4(0, -1, 0, 0),
vec4(0, 0, -1, 1)); vec4(0, 0, -1, 1));
/* Invert matrix and check that the results are finite */
mat4 m1 = inverse(m); mat4 m1 = inverse(m);
for (int j = 0; j < 4; ++j) for (int j = 0; j < 4; ++j)
for (int i = 0; i < 4; ++i) for (int i = 0; i < 4; ++i)
lolunit_assert_equal(m1[i][j], m1[i][j]);
{
lolunit_assert_less(m1[i][j], FLT_MAX);
lolunit_assert_greater(m1[i][j], -FLT_MAX);
}


/* Multiply with original matrix and check that we get identity */
mat4 m2 = m1 * m; mat4 m2 = m1 * m;
for (int j = 0; j < 4; ++j) for (int j = 0; j < 4; ++j)
for (int i = 0; i < 4; ++i) for (int i = 0; i < 4; ++i)


Завантаження…
Відмінити
Зберегти