GCC Code Coverage Report


Directory: ./
File: test/gjk_asserts.cpp
Date: 2025-04-01 09:23:31
Exec Total Coverage
Lines: 53 53 100.0%
Branches: 109 186 58.6%

Line Branch Exec Source
1 #define BOOST_TEST_MODULE COAL_GJK_ASSERTS
2
3 #include <boost/test/included/unit_test.hpp>
4 #include <boost/math/constants/constants.hpp>
5 #include "coal/BVH/BVH_model.h"
6 #include "coal/collision.h"
7
8 using namespace coal;
9
10 constexpr Scalar pi = boost::math::constants::pi<Scalar>();
11
12 16 Scalar DegToRad(const Scalar& deg) {
13 static Scalar degToRad = pi / Scalar(180);
14 16 return deg * degToRad;
15 }
16 std::vector<Vec3s> dirs{Vec3s::UnitZ(), -Vec3s::UnitZ(), Vec3s::UnitY(),
17 -Vec3s::UnitY(), Vec3s::UnitX(), -Vec3s::UnitX()};
18
19 2 void CreateSphereMesh(BVHModel<OBBRSS>& model, const Scalar& radius) {
20 2 size_t polarSteps{32};
21 2 size_t azimuthSteps{32};
22
23 2 const float PI = static_cast<float>(pi);
24
25 2 const float polarStep = PI / (float)(polarSteps - 1);
26 2 const float azimuthStep = 2.0f * PI / (float)(azimuthSteps - 1);
27 2 std::vector<Vec3s> vertices;
28 2 std::vector<Triangle> triangles;
29
30
2/2
✓ Branch 0 taken 64 times.
✓ Branch 1 taken 2 times.
66 for (size_t p = 0; p < polarSteps; ++p) {
31
2/2
✓ Branch 0 taken 2048 times.
✓ Branch 1 taken 64 times.
2112 for (size_t a = 0; a < azimuthSteps; ++a) {
32 const float x =
33 2048 std::sin((float)p * polarStep) * std::cos((float)a * azimuthStep);
34 const float y =
35 2048 std::sin((float)p * polarStep) * std::sin((float)a * azimuthStep);
36 2048 const float z = std::cos((float)p * polarStep);
37
1/2
✓ Branch 1 taken 2048 times.
✗ Branch 2 not taken.
2048 vertices.emplace_back(radius * x, radius * y, radius * z);
38 }
39 }
40
41
2/2
✓ Branch 0 taken 62 times.
✓ Branch 1 taken 2 times.
64 for (size_t p = 0; p < polarSteps - 1; ++p) {
42
2/2
✓ Branch 0 taken 1922 times.
✓ Branch 1 taken 62 times.
1984 for (size_t a = 0; a < azimuthSteps - 1; ++a) {
43 1922 size_t p0 = p * azimuthSteps + a;
44 1922 size_t p1 = p * azimuthSteps + (a + 1);
45 1922 size_t p2 = (p + 1) * azimuthSteps + (a + 1);
46 1922 size_t p3 = (p + 1) * azimuthSteps + a;
47
1/2
✓ Branch 1 taken 1922 times.
✗ Branch 2 not taken.
1922 triangles.emplace_back(p0, p2, p1);
48
1/2
✓ Branch 1 taken 1922 times.
✗ Branch 2 not taken.
1922 triangles.emplace_back(p0, p3, p2);
49 }
50 }
51
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 model.beginModel();
52
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 model.addSubModel(vertices, triangles);
53
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 model.endModel();
54 2 }
55
56
33/66
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
4 BOOST_AUTO_TEST_CASE(TestSpheres) {
57
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 BVHModel<OBBRSS> sphere1{};
58
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 BVHModel<OBBRSS> sphere2{};
59
60
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 CreateSphereMesh(sphere1, 1.);
61
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 CreateSphereMesh(sphere2, 2.);
62
63
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 CollisionRequest request(CONTACT | DISTANCE_LOWER_BOUND, 1);
64
65
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ComputeCollision compute(&sphere2, &sphere1);
66
67
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s sphere1Tf = Transform3s::Identity();
68
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s sphere2Tf = Transform3s::Identity();
69
70
2/2
✓ Branch 0 taken 360 times.
✓ Branch 1 taken 1 times.
722 for (int i = 0; i < 360; ++i) {
71
2/2
✓ Branch 0 taken 64800 times.
✓ Branch 1 taken 360 times.
130320 for (int j = 0; j < 180; ++j) {
72
2/2
✓ Branch 0 taken 180 times.
✓ Branch 1 taken 64620 times.
129600 if (
73 /// assertion: src/narrowphase/gjk.cpp:331
74
8/8
✓ Branch 0 taken 179 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 180 times.
✓ Branch 3 taken 64619 times.
✓ Branch 4 taken 179 times.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 180 times.
✓ Branch 7 taken 64618 times.
129600 (i == 5 && j == 48) || (i == 64 && j == 151) ||
75
8/8
✓ Branch 0 taken 179 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 180 times.
✓ Branch 3 taken 64617 times.
✓ Branch 4 taken 179 times.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 180 times.
✓ Branch 7 taken 64616 times.
129596 (i == 98 && j == 47) || (i == 355 && j == 48) ||
76 /// assertion: src/narrowphase/gjk.cpp:1263
77
8/8
✓ Branch 0 taken 179 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 180 times.
✓ Branch 3 taken 64615 times.
✓ Branch 4 taken 179 times.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 179 times.
✓ Branch 7 taken 64615 times.
129592 (i == 86 && j == 52) || (i == 89 && j == 17) ||
78
6/6
✓ Branch 0 taken 178 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 178 times.
✓ Branch 3 taken 64615 times.
✓ Branch 4 taken 1 times.
✓ Branch 5 taken 177 times.
129588 (i == 89 && j == 58) || (i == 89 && j == 145)) {
79
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 sphere2Tf.setQuatRotation(
80
3/6
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 Eigen::AngleAxis<Scalar>(DegToRad(Scalar(i)), Vec3s::UnitZ()) *
81
2/4
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
16 Eigen::AngleAxis<Scalar>(DegToRad(Scalar(j)), Vec3s::UnitY()));
82
2/2
✓ Branch 5 taken 48 times.
✓ Branch 6 taken 8 times.
112 for (const Vec3s& dir : dirs) {
83
1/2
✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
96 sphere2Tf.setTranslation(dir);
84
1/2
✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
96 CollisionResult result;
85
86
8/30
✓ Branch 1 taken 48 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 48 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 48 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 48 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 48 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 48 times.
✗ Branch 20 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 48 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 48 times.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
96 BOOST_CHECK_NO_THROW(compute(sphere2Tf, sphere1Tf, request, result));
87 96 }
88 }
89 }
90 }
91 2 }
92