From b5d16ef340208bbe1a76f33f7498fb168f6405b6 Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Tue, 12 Jun 2012 13:48:17 +0200 Subject: Fixes in math module - rewritten RotateAngle() function and test for it in geometry_test.cpp - added conv.h - conversion functions - added comments in math3d.h and d3dmath.h pointing to new functions - other minor fixes --- src/math/test/CMakeLists.txt | 5 ++- src/math/test/geometry_test.cpp | 83 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/math/test/geometry_test.cpp (limited to 'src/math/test') diff --git a/src/math/test/CMakeLists.txt b/src/math/test/CMakeLists.txt index af9bcca..3d52dd9 100644 --- a/src/math/test/CMakeLists.txt +++ b/src/math/test/CMakeLists.txt @@ -5,11 +5,13 @@ set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -O0") add_executable(matrix_test matrix_test.cpp) add_executable(vector_test vector_test.cpp) +add_executable(geometry_test geometry_test.cpp) enable_testing() add_test(matrix_test ./matrix_test) add_test(vector_test ./vector_test) +add_test(geometry_test ./geometry_test) # 'make check' will compile the required test programs # Note that 'make test' will still fail without compiled programs @@ -20,6 +22,7 @@ set(REMOVE_FILES CMakeFiles Testing cmake_install.cmake CMakeCache.txt CTestTestfile.cmake Makefile ./matrix_test ./vector_test + ./geometry_test ) -add_custom_target(distclean COMMAND rm -rf ${REMOVE_FILES}) \ No newline at end of file +add_custom_target(distclean COMMAND rm -rf ${REMOVE_FILES}) diff --git a/src/math/test/geometry_test.cpp b/src/math/test/geometry_test.cpp new file mode 100644 index 0000000..9082e3e --- /dev/null +++ b/src/math/test/geometry_test.cpp @@ -0,0 +1,83 @@ +// * This file is part of the COLOBOT source code +// * Copyright (C) 2012, Polish Portal of Colobot (PPC) +// * +// * This program is free software: you can redistribute it and/or modify +// * it under the terms of the GNU General Public License as published by +// * the Free Software Foundation, either version 3 of the License, or +// * (at your option) any later version. +// * +// * This program is distributed in the hope that it will be useful, +// * but WITHOUT ANY WARRANTY; without even the implied warranty of +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// * GNU General Public License for more details. +// * +// * You should have received a copy of the GNU General Public License +// * along with this program. If not, see http://www.gnu.org/licenses/. + +// math/test/geometry_test.cpp + +/* Unit tests for functions in geometry.h */ + +#include "../func.h" +#include "../geometry.h" + +#include + +using namespace std; + +const float TEST_TOLERANCE = 1e-5; + +// Test for rewritten function RotateAngle() +int TestRotateAngle() +{ + if (! Math::IsEqual(Math::RotateAngle(0.0f, 0.0f), 0.0f, TEST_TOLERANCE)) + return __LINE__; + + if (! Math::IsEqual(Math::RotateAngle(1.0f, 0.0f), 0.0f, TEST_TOLERANCE)) + return __LINE__; + + if (! Math::IsEqual(Math::RotateAngle(1.0f, 1.0f), 0.25f * Math::PI, TEST_TOLERANCE)) + return __LINE__; + + if (! Math::IsEqual(Math::RotateAngle(0.0f, 2.0f), 0.5f * Math::PI, TEST_TOLERANCE)) + return __LINE__; + + if (! Math::IsEqual(Math::RotateAngle(-0.5f, 0.5f), 0.75f * Math::PI, TEST_TOLERANCE)) + return __LINE__; + + if (! Math::IsEqual(Math::RotateAngle(-1.0f, 0.0f), Math::PI, TEST_TOLERANCE)) + return __LINE__; + + if (! Math::IsEqual(Math::RotateAngle(-1.0f, -1.0f), 1.25f * Math::PI, TEST_TOLERANCE)) + return __LINE__; + + if (! Math::IsEqual(Math::RotateAngle(0.0f, -2.0f), 1.5f * Math::PI, TEST_TOLERANCE)) + return __LINE__; + + if (! Math::IsEqual(Math::RotateAngle(1.0f, -1.0f), 1.75f * Math::PI, TEST_TOLERANCE)) + return __LINE__; + + return 0; +} + +int main() +{ + // Functions to test + int (*TESTS[])() = + { + TestRotateAngle + }; + const int TESTS_SIZE = sizeof(TESTS) / sizeof(*TESTS); + + int result = 0; + for (int i = 0; i < TESTS_SIZE; ++i) + { + result = TESTS[i](); + if (result != 0) + return result; + } + + fprintf(stderr, "All tests successful\n"); + + return 0; +} -- cgit v1.2.3-1-g7c22