From 04e628b61a67fc0f00df9047659c6ee291d15760 Mon Sep 17 00:00:00 2001 From: Daniel Chappuis Date: Thu, 28 Jan 2016 17:39:27 +0100 Subject: [PATCH] Add unit test for maths functions and fix unit test of AABB --- test/main.cpp | 2 + test/tests/collision/TestAABB.h | 6 +- .../mathematics/TestMathematicsFunctions.h | 129 ++++++++++++++++++ 3 files changed, 134 insertions(+), 3 deletions(-) create mode 100644 test/tests/mathematics/TestMathematicsFunctions.h diff --git a/test/main.cpp b/test/main.cpp index 86e36204..70a5ed1b 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -31,6 +31,7 @@ #include "tests/mathematics/TestQuaternion.h" #include "tests/mathematics/TestMatrix2x2.h" #include "tests/mathematics/TestMatrix3x3.h" +#include "tests/mathematics/TestMathematicsFunctions.h" #include "tests/collision/TestPointInside.h" #include "tests/collision/TestRaycast.h" #include "tests/collision/TestCollisionWorld.h" @@ -50,6 +51,7 @@ int main() { testSuite.addTest(new TestQuaternion("Quaternion")); testSuite.addTest(new TestMatrix3x3("Matrix3x3")); testSuite.addTest(new TestMatrix2x2("Matrix2x2")); + testSuite.addTest(new TestMathematicsFunctions("Maths Functions")); // ---------- Collision Detection tests ---------- // diff --git a/test/tests/collision/TestAABB.h b/test/tests/collision/TestAABB.h index 2686cd72..9125eb6d 100644 --- a/test/tests/collision/TestAABB.h +++ b/test/tests/collision/TestAABB.h @@ -134,9 +134,9 @@ class TestAABB : public Test { test(approxEqual(mAABB2.getExtent().y, 16)); test(approxEqual(mAABB2.getExtent().z, 60)); - test(approxEqual(mAABB3.getExtent().x, 25)); - test(approxEqual(mAABB3.getExtent().y, 15)); - test(approxEqual(mAABB3.getExtent().z, 28)); + test(approxEqual(mAABB3.getExtent().x, 50)); + test(approxEqual(mAABB3.getExtent().y, 50)); + test(approxEqual(mAABB3.getExtent().z, 50)); // -------- Test getCenter() -------- // diff --git a/test/tests/mathematics/TestMathematicsFunctions.h b/test/tests/mathematics/TestMathematicsFunctions.h new file mode 100644 index 00000000..726eca05 --- /dev/null +++ b/test/tests/mathematics/TestMathematicsFunctions.h @@ -0,0 +1,129 @@ +/******************************************************************************** +* ReactPhysics3D physics library, http://www.reactphysics3d.com * +* Copyright (c) 2010-2015 Daniel Chappuis * +********************************************************************************* +* * +* This software is provided 'as-is', without any express or implied warranty. * +* In no event will the authors be held liable for any damages arising from the * +* use of this software. * +* * +* Permission is granted to anyone to use this software for any purpose, * +* including commercial applications, and to alter it and redistribute it * +* freely, subject to the following restrictions: * +* * +* 1. The origin of this software must not be misrepresented; you must not claim * +* that you wrote the original software. If you use this software in a * +* product, an acknowledgment in the product documentation would be * +* appreciated but is not required. * +* * +* 2. Altered source versions must be plainly marked as such, and must not be * +* misrepresented as being the original software. * +* * +* 3. This notice may not be removed or altered from any source distribution. * +* * +********************************************************************************/ + +#ifndef TEST_MATHEMATICS_FUNCTIONS_H +#define TEST_MATHEMATICS_FUNCTIONS_H + +// Libraries +#include "Test.h" +#include "mathematics/mathematics_functions.h" + +/// Reactphysics3D namespace +namespace reactphysics3d { + +// Class TestMathematicsFunctions +/** + * Unit test for mathematics functions + */ +class TestMathematicsFunctions : public Test { + + private : + + // ---------- Atributes ---------- // + + + + public : + + // ---------- Methods ---------- // + + /// Constructor + TestMathematicsFunctions(const std::string& name): Test(name) {} + + /// Run the tests + void run() { + + // Test approxEqual() + test(approxEqual(2, 7, 5.2)); + test(approxEqual(7, 2, 5.2)); + test(approxEqual(6, 6)); + test(!approxEqual(1, 5)); + test(!approxEqual(1, 5, 3)); + test(approxEqual(-2, -2)); + test(approxEqual(-2, -7, 6)); + test(!approxEqual(-2, 7, 2)); + test(approxEqual(-3, 8, 12)); + test(!approxEqual(-3, 8, 6)); + + // Test clamp() + test(clamp(4, -3, 5) == 4); + test(clamp(-3, 1, 8) == 1); + test(clamp(45, -6, 7) == 7); + test(clamp(-5, -2, -1) == -2); + test(clamp(-5, -9, -1) == -5); + test(clamp(6, 6, 9) == 6); + test(clamp(9, 6, 9) == 9); + test(clamp(decimal(4), decimal(-3), decimal(5)) == decimal(4)); + test(clamp(decimal(-3), decimal(1), decimal(8)) == decimal(1)); + test(clamp(decimal(45), decimal(-6), decimal(7)) == decimal(7)); + test(clamp(decimal(-5), decimal(-2), decimal(-1)) == decimal(-2)); + test(clamp(decimal(-5), decimal(-9), decimal(-1)) == decimal(-5)); + test(clamp(decimal(6), decimal(6), decimal(9)) == decimal(6)); + test(clamp(decimal(9), decimal(6), decimal(9)) == decimal(9)); + + // Test min3() + test(min3(1, 5, 7) == 1); + test(min3(-4, 2, 4) == -4); + test(min3(-1, -5, -7) == -7); + test(min3(13, 5, 47) == 5); + test(min3(4, 4, 4) == 4); + + // Test max3() + test(max3(1, 5, 7) == 7); + test(max3(-4, 2, 4) == 4); + test(max3(-1, -5, -7) == -1); + test(max3(13, 5, 47) == 47); + test(max3(4, 4, 4) == 4); + + // Test sameSign() + test(sameSign(4, 53)); + test(sameSign(-4, -8)); + test(!sameSign(4, -7)); + test(!sameSign(-4, 53)); + + // Test computeBarycentricCoordinatesInTriangle() + Vector3 a(0, 0, 0); + Vector3 b(5, 0, 0); + Vector3 c(0, 0, 5); + decimal u,v,w; + computeBarycentricCoordinatesInTriangle(a, b, c, a, u, v, w); + test(approxEqual(u, 1.0, 0.000001)); + test(approxEqual(v, 0.0, 0.000001)); + test(approxEqual(w, 0.0, 0.000001)); + computeBarycentricCoordinatesInTriangle(a, b, c, b, u, v, w); + test(approxEqual(u, 0.0, 0.000001)); + test(approxEqual(v, 1.0, 0.000001)); + test(approxEqual(w, 0.0, 0.000001)); + computeBarycentricCoordinatesInTriangle(a, b, c, c, u, v, w); + test(approxEqual(u, 0.0, 0.000001)); + test(approxEqual(v, 0.0, 0.000001)); + test(approxEqual(w, 1.0, 0.000001)); + } + + }; + +} + +#endif