GCC Code Coverage Report


Directory: ./
File: test/distance_lower_bound.cpp
Date: 2025-04-01 09:23:31
Exec Total Coverage
Lines: 127 127 100.0%
Branches: 337 656 51.4%

Line Branch Exec Source
1 /*
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2014-2016, CNRS-LAAS
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
17 * * Neither the name of CNRS-LAAS nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 */
34
35 #define BOOST_TEST_MODULE COAL_DISTANCE_LOWER_BOUND
36 #include <boost/test/included/unit_test.hpp>
37 #include <boost/filesystem.hpp>
38
39 #include "coal/fwd.hh"
40 #include "coal/data_types.h"
41 #include "coal/BV/OBBRSS.h"
42 #include "coal/BVH/BVH_model.h"
43 #include "coal/narrowphase/narrowphase.h"
44 #include "coal/collision.h"
45 #include "coal/distance.h"
46 #include "utility.h"
47 #include "fcl_resources/config.h"
48
49 using coal::BVHModel;
50 using coal::CollisionGeometryPtr_t;
51 using coal::CollisionObject;
52 using coal::CollisionRequest;
53 using coal::CollisionResult;
54 using coal::DistanceRequest;
55 using coal::DistanceResult;
56 using coal::OBBRSS;
57 using coal::Scalar;
58 using coal::shared_ptr;
59 using coal::Transform3s;
60 using coal::Triangle;
61 using coal::Vec3s;
62
63 2202 bool testDistanceLowerBound(const Transform3s& tf,
64 const CollisionGeometryPtr_t& m1,
65 const CollisionGeometryPtr_t& m2,
66 Scalar& distance) {
67
2/4
✓ Branch 1 taken 2202 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2202 times.
✗ Branch 5 not taken.
2202 Transform3s pose1(tf), pose2;
68
69
1/2
✓ Branch 1 taken 2202 times.
✗ Branch 2 not taken.
2202 CollisionRequest request;
70
71
1/2
✓ Branch 1 taken 2202 times.
✗ Branch 2 not taken.
2202 CollisionResult result;
72
1/2
✓ Branch 1 taken 2202 times.
✗ Branch 2 not taken.
2202 CollisionObject co1(m1, pose1);
73
1/2
✓ Branch 1 taken 2202 times.
✗ Branch 2 not taken.
2202 CollisionObject co2(m2, pose2);
74
75
1/2
✓ Branch 1 taken 2202 times.
✗ Branch 2 not taken.
2202 coal::collide(&co1, &co2, request, result);
76 2202 distance = result.distance_lower_bound;
77
78 4404 return result.isCollision();
79 2202 }
80
81 100 bool testCollide(const Transform3s& tf, const CollisionGeometryPtr_t& m1,
82 const CollisionGeometryPtr_t& m2) {
83
2/4
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
100 Transform3s pose1(tf), pose2;
84
85
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 CollisionRequest request(coal::NO_REQUEST, 1);
86 100 request.enable_distance_lower_bound = false;
87
88
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 CollisionResult result;
89
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 CollisionObject co1(m1, pose1);
90
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 CollisionObject co2(m2, pose2);
91
92
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
100 coal::collide(&co1, &co2, request, result);
93 200 return result.isCollision();
94 100 }
95
96 2202 bool testDistance(const Transform3s& tf, const CollisionGeometryPtr_t& m1,
97 const CollisionGeometryPtr_t& m2, Scalar& distance) {
98
2/4
✓ Branch 1 taken 2202 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2202 times.
✗ Branch 5 not taken.
2202 Transform3s pose1(tf), pose2;
99
100
1/2
✓ Branch 1 taken 2202 times.
✗ Branch 2 not taken.
2202 DistanceRequest request;
101
1/2
✓ Branch 2 taken 2202 times.
✗ Branch 3 not taken.
2202 DistanceResult result;
102
1/2
✓ Branch 1 taken 2202 times.
✗ Branch 2 not taken.
2202 CollisionObject co1(m1, pose1);
103
1/2
✓ Branch 1 taken 2202 times.
✗ Branch 2 not taken.
2202 CollisionObject co2(m2, pose2);
104
105
1/2
✓ Branch 1 taken 2202 times.
✗ Branch 2 not taken.
2202 coal::distance(&co1, &co2, request, result);
106 2202 distance = result.min_distance;
107
108
2/2
✓ Branch 0 taken 417 times.
✓ Branch 1 taken 1785 times.
2202 if (result.min_distance <= 0) {
109 417 return true;
110 } else {
111 1785 return false;
112 }
113 2202 }
114
115
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(mesh_mesh) {
116 2 std::vector<Vec3s> p1, p2;
117 2 std::vector<Triangle> t1, t2;
118
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 boost::filesystem::path path(TEST_RESOURCES_DIR);
119
120
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
2 loadOBJFile((path / "env.obj").string().c_str(), p1, t1);
121
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
2 loadOBJFile((path / "rob.obj").string().c_str(), p2, t2);
122
123
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
2 shared_ptr<BVHModel<OBBRSS> > m1(new BVHModel<OBBRSS>);
124
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
2 shared_ptr<BVHModel<OBBRSS> > m2(new BVHModel<OBBRSS>);
125
126
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m1->beginModel();
127
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m1->addSubModel(p1, t1);
128
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m1->endModel();
129
130
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m2->beginModel();
131
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m2->addSubModel(p2, t2);
132
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m2->endModel();
133
134 2 std::vector<Transform3s> transforms;
135 2 Scalar extents[] = {-3000, -3000, 0, 3000, 3000, 3000};
136 2 std::size_t n = 100;
137
138
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 generateRandomTransforms(extents, transforms, n);
139
140 // collision
141
2/2
✓ Branch 1 taken 100 times.
✓ Branch 2 taken 1 times.
202 for (std::size_t i = 0; i < transforms.size(); ++i) {
142 Scalar distanceLowerBound, distance;
143 bool col1, col2, col3;
144
1/2
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
200 col1 = testDistanceLowerBound(transforms[i], m1, m2, distanceLowerBound);
145
1/2
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
200 col2 = testDistance(transforms[i], m1, m2, distance);
146
1/2
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
200 col3 = testCollide(transforms[i], m1, m2);
147
6/12
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 100 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 100 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 100 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 100 times.
✗ Branch 17 not taken.
200 std::cout << "col1 = " << col1 << ", col2 = " << col2 << ", col3 = " << col3
148
1/2
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
200 << std::endl;
149
3/6
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 100 times.
✗ Branch 8 not taken.
200 std::cout << "distance lower bound = " << distanceLowerBound << std::endl;
150
3/6
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 100 times.
✗ Branch 8 not taken.
200 std::cout << "distance = " << distance << std::endl;
151
6/12
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 100 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 100 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 100 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 100 times.
200 BOOST_CHECK(col1 == col3);
152
2/2
✓ Branch 0 taken 60 times.
✓ Branch 1 taken 40 times.
200 if (!col1) {
153
9/18
✓ Branch 1 taken 60 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 60 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 60 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 60 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 60 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 60 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 60 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 60 times.
✗ Branch 26 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 60 times.
120 BOOST_CHECK_MESSAGE(distanceLowerBound <= distance,
154 "distance = " << distance << ", lower bound = "
155 << distanceLowerBound);
156 }
157 }
158 2 }
159
160
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(box_sphere) {
161
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
2 shared_ptr<coal::Sphere> sphere(new coal::Sphere(0.5));
162
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
2 shared_ptr<coal::Box> box(new coal::Box(1., 1., 1.));
163
164
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s M1;
165
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 M1.setIdentity();
166
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s M2;
167
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 M2.setIdentity();
168
169 2 std::vector<Transform3s> transforms;
170 2 Scalar extents[] = {-2., -2., -2., 2., 2., 2.};
171 2 const std::size_t n = 1000;
172
173
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 generateRandomTransforms(extents, transforms, n);
174
175 Scalar distanceLowerBound, distance;
176 bool col1, col2;
177
1/2
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
2 col1 = testDistanceLowerBound(M1, sphere, box, distanceLowerBound);
178
1/2
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
2 col2 = testDistance(M1, sphere, box, distance);
179
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
2 BOOST_CHECK(col1 == col2);
180
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
2 BOOST_CHECK(distanceLowerBound <= distance);
181
182
2/2
✓ Branch 1 taken 1000 times.
✓ Branch 2 taken 1 times.
2002 for (std::size_t i = 0; i < transforms.size(); ++i) {
183 Scalar distanceLowerBound, distance;
184 bool col1, col2;
185 col1 =
186
1/2
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
2000 testDistanceLowerBound(transforms[i], sphere, box, distanceLowerBound);
187
1/2
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
2000 col2 = testDistance(transforms[i], sphere, box, distance);
188
6/12
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
2000 BOOST_CHECK(col1 == col2);
189
2/2
✓ Branch 0 taken 871 times.
✓ Branch 1 taken 129 times.
2000 if (!col1) {
190
9/18
✓ Branch 1 taken 871 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 871 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 871 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 871 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 871 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 871 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 871 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 871 times.
✗ Branch 26 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 871 times.
1742 BOOST_CHECK_MESSAGE(distanceLowerBound <= distance,
191 "distance = " << distance << ", lower bound = "
192 << distanceLowerBound);
193 }
194 }
195 2 }
196
197
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(sphere_sphere) {
198
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
2 shared_ptr<coal::Sphere> sphere1(new coal::Sphere(0.5));
199
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
2 shared_ptr<coal::Sphere> sphere2(new coal::Sphere(1.));
200
201
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s M1;
202
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 M1.setIdentity();
203
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s M2;
204
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 M2.setIdentity();
205
206 2 std::vector<Transform3s> transforms;
207 2 Scalar extents[] = {-2., -2., -2., 2., 2., 2.};
208 2 const std::size_t n = 1000;
209
210
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 generateRandomTransforms(extents, transforms, n);
211
212 Scalar distanceLowerBound, distance;
213 bool col1, col2;
214
1/2
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
2 col1 = testDistanceLowerBound(M1, sphere1, sphere2, distanceLowerBound);
215
1/2
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
2 col2 = testDistance(M1, sphere1, sphere2, distance);
216
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
2 BOOST_CHECK(col1 == col2);
217
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
2 BOOST_CHECK(distanceLowerBound <= distance);
218
219
2/2
✓ Branch 1 taken 1000 times.
✓ Branch 2 taken 1 times.
2002 for (std::size_t i = 0; i < transforms.size(); ++i) {
220 Scalar distanceLowerBound, distance;
221 bool col1, col2;
222
1/2
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
2000 col1 = testDistanceLowerBound(transforms[i], sphere1, sphere2,
223 distanceLowerBound);
224
1/2
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
2000 col2 = testDistance(transforms[i], sphere1, sphere2, distance);
225
6/12
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
2000 BOOST_CHECK(col1 == col2);
226
2/2
✓ Branch 0 taken 774 times.
✓ Branch 1 taken 226 times.
2000 if (!col1) {
227
9/18
✓ Branch 1 taken 774 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 774 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 774 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 774 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 774 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 774 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 774 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 774 times.
✗ Branch 26 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 774 times.
1548 BOOST_CHECK_MESSAGE(distanceLowerBound <= distance,
228 "distance = " << distance << ", lower bound = "
229 << distanceLowerBound);
230 }
231 }
232 2 }
233
234
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(box_mesh) {
235 2 std::vector<Vec3s> p1;
236 2 std::vector<Triangle> t1;
237
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 boost::filesystem::path path(TEST_RESOURCES_DIR);
238
239
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
2 loadOBJFile((path / "env.obj").string().c_str(), p1, t1);
240
241
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
2 shared_ptr<BVHModel<OBBRSS> > m1(new BVHModel<OBBRSS>);
242
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
2 shared_ptr<coal::Box> m2(new coal::Box(500, 200, 150));
243
244
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m1->beginModel();
245
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m1->addSubModel(p1, t1);
246
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 m1->endModel();
247
248 2 std::vector<Transform3s> transforms;
249 2 Scalar extents[] = {-3000, -3000, 0, 3000, 3000, 3000};
250 2 std::size_t n = 100;
251
252
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 generateRandomTransforms(extents, transforms, n);
253
254 // collision
255
2/2
✓ Branch 1 taken 100 times.
✓ Branch 2 taken 1 times.
202 for (std::size_t i = 0; i < transforms.size(); ++i) {
256 Scalar distanceLowerBound, distance;
257 bool col1, col2;
258
1/2
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
200 col1 = testDistanceLowerBound(transforms[i], m1, m2, distanceLowerBound);
259
1/2
✓ Branch 4 taken 100 times.
✗ Branch 5 not taken.
200 col2 = testDistance(transforms[i], m1, m2, distance);
260
6/12
✓ Branch 1 taken 100 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 100 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 100 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 100 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 100 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 100 times.
200 BOOST_CHECK(col1 == col2);
261
2/2
✓ Branch 0 taken 80 times.
✓ Branch 1 taken 20 times.
200 if (!col1) {
262
9/18
✓ Branch 1 taken 80 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 80 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 80 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 80 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 80 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 80 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 80 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 80 times.
✗ Branch 26 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 80 times.
160 BOOST_CHECK_MESSAGE(distanceLowerBound <= distance,
263 "distance = " << distance << ", lower bound = "
264 << distanceLowerBound);
265 }
266 }
267 2 }
268