diff --git a/src/unittest/test_irr_quaternion.cpp b/src/unittest/test_irr_quaternion.cpp index 1bb0c3cc9..61ddcad7c 100644 --- a/src/unittest/test_irr_quaternion.cpp +++ b/src/unittest/test_irr_quaternion.cpp @@ -10,31 +10,48 @@ using matrix4 = core::matrix4; static bool matrix_equals(const matrix4 &a, const matrix4 &b) { - return a.equals(b, 0.00001f); + return a.equals(b, 0.00001f); } TEST_CASE("quaternion") { // Make sure that the conventions are consistent SECTION("equivalence to euler rotations") { - auto test_rotation = [](v3f rad) { - matrix4 R; - R.setRotationRadians(rad); - v3f rad2; - core::quaternion(rad).toEuler(rad2); - matrix4 R2; - R2.setRotationRadians(rad2); - CHECK(matrix_equals(R, R2)); - }; + auto test_rotation = [](v3f rad) { + matrix4 R; + R.setRotationRadians(rad); + v3f rad2; + core::quaternion(rad).toEuler(rad2); + matrix4 R2; + R2.setRotationRadians(rad2); + CHECK(matrix_equals(R, R2)); + }; - test_rotation({100, 200, 300}); - Catch::Generators::RandomFloatingGenerator gen(0.0f, 2 * core::PI, Catch::getSeed()); - for (int i = 0; i < 1000; ++i) - test_rotation(v3f{gen.get(), gen.get(), gen.get()}); - for (int i = 0; i < 4; i++) - for (int j = 0; j < 4; j++) - for (int k = 0; k < 4; k++) - test_rotation(core::PI / 4.0f * v3f(i, j, k)); + Catch::Generators::RandomFloatingGenerator gen(0.0f, 2 * core::PI, Catch::getSeed()); + for (int i = 0; i < 1000; ++i) + test_rotation(v3f{gen.get(), gen.get(), gen.get()}); + for (int i = 0; i < 4; i++) + for (int j = 0; j < 4; j++) + for (int k = 0; k < 4; k++) + test_rotation(core::PI / 4.0f * v3f(i, j, k)); +} + +SECTION("equivalence to rotation matrices") { + auto test_rotation = [](v3f rad) { + matrix4 R; + R.setRotationRadians(rad); + matrix4 R2; + core::quaternion(R).getMatrix(R2); + CHECK(matrix_equals(R, R2)); + }; + + Catch::Generators::RandomFloatingGenerator gen(0.0f, 2 * core::PI, Catch::getSeed()); + for (int i = 0; i < 1000; ++i) + test_rotation(v3f{gen.get(), gen.get(), gen.get()}); + for (int i = 0; i < 4; i++) + for (int j = 0; j < 4; j++) + for (int k = 0; k < 4; k++) + test_rotation(core::PI / 4.0f * v3f(i, j, k)); } } \ No newline at end of file