From e387baf2134ab255463dec1b7d8708399c6e7849 Mon Sep 17 00:00:00 2001 From: erwincoumans Date: Tue, 24 Nov 2015 16:13:21 -0800 Subject: [PATCH 1/6] add collision and inverse dynamics unit tests to cmake, .travis.yml and appveyor.yml (more unit tests will follow, once this setup works) --- .travis.yml | 7 ++-- CMakeLists.txt | 5 +-- appveyor.yml | 8 +++++ test/CMakeLists.txt | 2 +- test/InverseDynamics/CMakeLists.txt | 30 ++++++++++++++++ .../test_invdyn_kinematics.cpp | 3 +- test/collision/CMakeLists.txt | 36 +++++++++++++++++++ test/collision/main.cpp | 8 ++--- 8 files changed, 89 insertions(+), 10 deletions(-) create mode 100644 test/InverseDynamics/CMakeLists.txt create mode 100644 test/collision/CMakeLists.txt diff --git a/.travis.yml b/.travis.yml index 949adbd29..bb6dcde2e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,10 +10,13 @@ script: - echo "CC="$CC - cmake . -G "Unix Makefiles" #-DCMAKE_CXX_FLAGS=-Werror - make -j8 - # Test again with double precision + - ctest -j8 --output-on-failure + # Build again with double precision - cmake . -G "Unix Makefiles" -DUSE_DOUBLE_PRECISION=ON #-DCMAKE_CXX_FLAGS=-Werror - make -j8 - # Test again with shared libraries + - ctest -j8 --output-on-failure + # Build again with shared libraries - cmake . -G "Unix Makefiles" -DBUILD_SHARED_LIBS=ON - make -j8 + - ctest -j8 --output-on-failure - sudo make install diff --git a/CMakeLists.txt b/CMakeLists.txt index 631c0fae6..5e33f67f4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,12 +80,12 @@ IF(MSVC) ELSE() OPTION(USE_MSVC_SSE "Use MSVC /arch:sse option" ON) IF (USE_MSVC_SSE) - ADD_DEFINITIONS(/arch:SSE) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE") ENDIF() ENDIF() OPTION(USE_MSVC_FAST_FLOATINGPOINT "Use MSVC /fp:fast option" ON) IF (USE_MSVC_FAST_FLOATINGPOINT) - ADD_DEFINITIONS(/fp:fast) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fp:fast") ENDIF() ENDIF(MSVC) @@ -273,6 +273,7 @@ ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.5) OPTION(BUILD_UNIT_TESTS "Build Unit Tests" ON) IF (BUILD_UNIT_TESTS) + ENABLE_TESTING() SUBDIRS(test) ENDIF() diff --git a/appveyor.yml b/appveyor.yml index 54c1175f7..7014631e1 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,5 +1,12 @@ build: project: build3/vs2010/0_Bullet3Solution.sln + - mkdir cmake + - cd cmake + - cmake .. -G"Visual Studio 14 2015 Win64" + - cmake --build . --target ALL_BUILD --config Release -- /maxcpucount:4 /verbosity:quiet + +test_script: + - ctest --parallel 4 --build-config Release --output-on-failure before_build: - echo %CD% @@ -7,3 +14,4 @@ before_build: - echo %CD% - premake4 vs2010 - ps: cd .. + diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 990d62ce4..45369660d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,3 +1,3 @@ #SUBDIRS( gtest-1.7.0 TestBullet3OpenCL) -SUBDIRS( gtest-1.7.0 ) +SUBDIRS( gtest-1.7.0 collision InverseDynamics) diff --git a/test/InverseDynamics/CMakeLists.txt b/test/InverseDynamics/CMakeLists.txt new file mode 100644 index 000000000..79c9aebf2 --- /dev/null +++ b/test/InverseDynamics/CMakeLists.txt @@ -0,0 +1,30 @@ + + + +INCLUDE_DIRECTORIES( + . + ../../src + ../gtest-1.7.0/include + ../../Extras/InverseDynamics +) + + +#ADD_DEFINITIONS(-DGTEST_HAS_PTHREAD=1) +ADD_DEFINITIONS(-D_VARIADIC_MAX=10) + +LINK_LIBRARIES( + BulletInverseDynamicsUtils BulletInverseDynamics Bullet3Common LinearMath gtest +) + + + ADD_EXECUTABLE(Test_BulletInverseDynamics + test_invdyn_kinematics.cpp + ) + +ADD_TEST(Test_BulletInverseDynamics_PASS Test_BulletInverseDynamics) + +IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) + SET_TARGET_PROPERTIES(Test_Collision PROPERTIES DEBUG_POSTFIX "_Debug") + SET_TARGET_PROPERTIES(Test_Collision PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") + SET_TARGET_PROPERTIES(Test_Collision PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") +ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) diff --git a/test/InverseDynamics/test_invdyn_kinematics.cpp b/test/InverseDynamics/test_invdyn_kinematics.cpp index 06e7c999e..6726816a5 100644 --- a/test/InverseDynamics/test_invdyn_kinematics.cpp +++ b/test/InverseDynamics/test_invdyn_kinematics.cpp @@ -349,7 +349,7 @@ TEST(InvDynKinematicsDifferentiation, errorOrder) { const idScalar expected_angular_acceleration_error_1 = max_angular_acceleration_error[0] * pow(kDeltaTs[1] / kDeltaTs[0], 2); - printf("linear vel error: %e %e %e\n", max_linear_velocity_error[1], +/* printf("linear vel error: %e %e %e\n", max_linear_velocity_error[1], expected_linear_velocity_error_1, max_linear_velocity_error[1] - expected_linear_velocity_error_1); printf("angular vel error: %e %e %e\n", max_angular_velocity_error[1], @@ -361,6 +361,7 @@ TEST(InvDynKinematicsDifferentiation, errorOrder) { printf("angular acc error: %e %e %e\n", max_angular_acceleration_error[1], expected_angular_acceleration_error_1, max_angular_acceleration_error[1] - expected_angular_acceleration_error_1); +*/ } int main(int argc, char** argv) { diff --git a/test/collision/CMakeLists.txt b/test/collision/CMakeLists.txt new file mode 100644 index 000000000..5c92e7d77 --- /dev/null +++ b/test/collision/CMakeLists.txt @@ -0,0 +1,36 @@ + +INCLUDE_DIRECTORIES( + . + ../../src + ../gtest-1.7.0/include +) + + +#ADD_DEFINITIONS(-DGTEST_HAS_PTHREAD=1) +ADD_DEFINITIONS(-D_VARIADIC_MAX=10) + +LINK_LIBRARIES( + LinearMath gtest +) + + + ADD_EXECUTABLE(Test_Collision + main.cpp + ../../src/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.cpp + ../../src/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h + ../../src/BulletCollision/CollisionShapes/btSphereShape.cpp + ../../src/BulletCollision/CollisionShapes/btMultiSphereShape.cpp + ../../src/BulletCollision/CollisionShapes/btPolyhedralConvexShape.cpp + ../../src/BulletCollision/CollisionShapes/btConvexShape.cpp + ../../src/BulletCollision/CollisionShapes/btConvexInternalShape.cpp + ../../src/BulletCollision/CollisionShapes/btCollisionShape.cpp + ../../src/BulletCollision/CollisionShapes/btConvexPolyhedron.cpp + ) + +ADD_TEST(Test_Collision_PASS Test_Collision) + +IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) + SET_TARGET_PROPERTIES(Test_Collision PROPERTIES DEBUG_POSTFIX "_Debug") + SET_TARGET_PROPERTIES(Test_Collision PROPERTIES MINSIZEREL_POSTFIX "_MinsizeRel") + SET_TARGET_PROPERTIES(Test_Collision PROPERTIES RELWITHDEBINFO_POSTFIX "_RelWithDebugInfo") +ENDIF(INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) diff --git a/test/collision/main.cpp b/test/collision/main.cpp index 3f68f1020..86fb36c59 100644 --- a/test/collision/main.cpp +++ b/test/collision/main.cpp @@ -179,12 +179,12 @@ void testSphereSphereDistance(SphereSphereTestMethod method, btScalar abs_error) ASSERT_EQ(btScalar(0), distInfo.m_distance); } - for (int rb=1;rb<10;rb++) - for (int z=-20;z<20;z++) + for (int rb=1;rb<5;rb++) + for (int z=-5;z<5;z++) { - for (int j=1;j<10;j++) + for (int j=1;j<5;j++) { - for (int i=-20;i<20;i++) + for (int i=-5;i<5;i++) { if (i!=z)//skip co-centric spheres for now (todo(erwincoumans) fix this) { From 4c3d32bf485da4efaa29b9c91c8df786b4e57d9a Mon Sep 17 00:00:00 2001 From: erwincoumans Date: Tue, 24 Nov 2015 16:15:23 -0800 Subject: [PATCH 2/6] tab->space --- appveyor.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 7014631e1..ed1d3228a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,9 +1,9 @@ build: project: build3/vs2010/0_Bullet3Solution.sln - - mkdir cmake - - cd cmake - - cmake .. -G"Visual Studio 14 2015 Win64" - - cmake --build . --target ALL_BUILD --config Release -- /maxcpucount:4 /verbosity:quiet + - mkdir cmake + - cd cmake + - cmake .. -G"Visual Studio 14 2015 Win64" + - cmake --build . --target ALL_BUILD --config Release -- /maxcpucount:4 /verbosity:quiet test_script: - ctest --parallel 4 --build-config Release --output-on-failure From 1826f11fbcd190d33d48bb670f883d4c565c7e37 Mon Sep 17 00:00:00 2001 From: erwincoumans Date: Tue, 24 Nov 2015 16:54:04 -0800 Subject: [PATCH 3/6] add pthread dependency for gtest-based tests for non-Windows platforms --- test/InverseDynamics/CMakeLists.txt | 3 +++ test/collision/CMakeLists.txt | 3 +++ 2 files changed, 6 insertions(+) diff --git a/test/InverseDynamics/CMakeLists.txt b/test/InverseDynamics/CMakeLists.txt index 79c9aebf2..e8f39846c 100644 --- a/test/InverseDynamics/CMakeLists.txt +++ b/test/InverseDynamics/CMakeLists.txt @@ -15,6 +15,9 @@ ADD_DEFINITIONS(-D_VARIADIC_MAX=10) LINK_LIBRARIES( BulletInverseDynamicsUtils BulletInverseDynamics Bullet3Common LinearMath gtest ) +IF (NOT WIN32) + LINK_LIBRARIES( pthread ) +ENDIF() ADD_EXECUTABLE(Test_BulletInverseDynamics diff --git a/test/collision/CMakeLists.txt b/test/collision/CMakeLists.txt index 5c92e7d77..1c94cc073 100644 --- a/test/collision/CMakeLists.txt +++ b/test/collision/CMakeLists.txt @@ -13,6 +13,9 @@ LINK_LIBRARIES( LinearMath gtest ) +IF (NOT WIN32) + LINK_LIBRARIES( pthread ) +ENDIF() ADD_EXECUTABLE(Test_Collision main.cpp From d8ee7e4dbcdeb835204cb9ba95b1ef1eba4fac5a Mon Sep 17 00:00:00 2001 From: erwincoumans Date: Tue, 24 Nov 2015 17:13:58 -0800 Subject: [PATCH 4/6] attempt to fix appveyor.yml (both build project for premake4 and build_script for cmake, does that work? --- appveyor.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index ed1d3228a..8332b0905 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,5 +1,7 @@ build: project: build3/vs2010/0_Bullet3Solution.sln + +build_script: - mkdir cmake - cd cmake - cmake .. -G"Visual Studio 14 2015 Win64" From ff74884f9f38ea9528e9c1e6397f7e33cef10fc3 Mon Sep 17 00:00:00 2001 From: erwincoumans Date: Tue, 24 Nov 2015 17:15:35 -0800 Subject: [PATCH 5/6] more appveyor fun --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 8332b0905..55af07e56 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -6,7 +6,7 @@ build_script: - cd cmake - cmake .. -G"Visual Studio 14 2015 Win64" - cmake --build . --target ALL_BUILD --config Release -- /maxcpucount:4 /verbosity:quiet - + test_script: - ctest --parallel 4 --build-config Release --output-on-failure From 0e247264fffdddc807966cdfcd47269217c0336e Mon Sep 17 00:00:00 2001 From: erwincoumans Date: Tue, 24 Nov 2015 17:34:43 -0800 Subject: [PATCH 6/6] use BT_ID_MAX as std::max is not portable (older Visual Studio versions break) --- Extras/InverseDynamics/DillCreator.cpp | 2 +- src/BulletInverseDynamics/IDConfig.hpp | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Extras/InverseDynamics/DillCreator.cpp b/Extras/InverseDynamics/DillCreator.cpp index 8463ab887..a1ddf00c2 100644 --- a/Extras/InverseDynamics/DillCreator.cpp +++ b/Extras/InverseDynamics/DillCreator.cpp @@ -79,7 +79,7 @@ int DillCreator::recurseDill(const int level, const int parent, const idScalar d return -1; } - idScalar size = std::max(level, 1); + idScalar size = BT_ID_MAX(level, 1); const int body = m_current_body; // length = 0.1 * size; // with = 2 * 0.01 * size; diff --git a/src/BulletInverseDynamics/IDConfig.hpp b/src/BulletInverseDynamics/IDConfig.hpp index 97646dc43..dadbd8235 100644 --- a/src/BulletInverseDynamics/IDConfig.hpp +++ b/src/BulletInverseDynamics/IDConfig.hpp @@ -28,12 +28,20 @@ #ifndef btInverseDynamics #error "custom inverse dynamics config, but no custom namespace defined" #endif + +#define BT_ID_MAX(a,b) std::max(a,b) +#define BT_ID_MIN(a,b) std::min(a,b) + #else #define btInverseDynamics btInverseDynamicsBullet3 // Use default configuration with bullet's types // Use the same scalar type as rest of bullet library #include "LinearMath/btScalar.h" typedef btScalar idScalar; +#include "LinearMath/btMinMax.h" +#define BT_ID_MAX(a,b) btMax(a,b) +#define BT_ID_MIN(a,b) btMin(a,b) + #ifdef BT_USE_DOUBLE_PRECISION #define BT_ID_USE_DOUBLE_PRECISION #endif