GCC Code Coverage Report


Directory: ./
File: test/swept_sphere_radius.cpp
Date: 2025-04-01 09:23:31
Exec Total Coverage
Lines: 154 154 100.0%
Branches: 783 1540 50.8%

Line Branch Exec Source
1 /*
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2024, INRIA
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 Willow Garage, Inc. 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 /** \author Louis Montaut */
36
37 #define BOOST_TEST_MODULE COAL_SWEPT_SPHERE_RADIUS
38 #include <boost/test/included/unit_test.hpp>
39
40 #include "coal/narrowphase/narrowphase.h"
41 #include "coal/collision_utility.h"
42
43 #include "coal/serialization/geometric_shapes.h"
44 #include "coal/serialization/convex.h"
45 #include "coal/serialization/transform.h"
46 #include "coal/serialization/archive.h"
47
48 #include "utility.h"
49
50 using namespace coal;
51
52 NODE_TYPE node1_type;
53 NODE_TYPE node2_type;
54 int line;
55
56 #define SET_LINE \
57 node1_type = shape1.getNodeType(); \
58 node2_type = shape2.getNodeType(); \
59 line = __LINE__
60
61 #define COAL_CHECK(cond) \
62 BOOST_CHECK_MESSAGE( \
63 cond, "from line " << line << ", for collision pair: " \
64 << get_node_type_name(node1_type) << " - " \
65 << get_node_type_name(node2_type) \
66 << " with ssr1 = " << shape1.getSweptSphereRadius() \
67 << ", ssr2 = " << shape2.getSweptSphereRadius() \
68 << ": " #cond)
69
70 #define COAL_CHECK_VECTOR_CLOSE(v1, v2, tol) \
71 EIGEN_VECTOR_IS_APPROX(v1, v2, tol); \
72 COAL_CHECK(((v1) - (v2)).isZero(tol))
73
74 #define COAL_CHECK_REAL_CLOSE(v1, v2, tol) \
75 Scalar_IS_APPROX(v1, v2, tol); \
76 COAL_CHECK(std::abs((v1) - (v2)) < tol)
77
78 #define COAL_CHECK_CONDITION(cond) \
79 BOOST_CHECK(cond); \
80 COAL_CHECK(cond)
81
82 // Preambule: swept sphere radius allows to virually convolve geometric shapes
83 // by a sphere with positive radius (Minkowski sum).
84 // Sweeping a shape by a sphere corresponds to doing a Minkowski addition of the
85 // shape with a sphere of radius r. Essentially, this rounds the shape's corners
86 // and edges, which can be useful to smooth collision detection algorithms.
87 //
88 // A nice mathematical property of GJK and EPA is that it is not
89 // necessary to take into account the swept sphere radius in the iterations of
90 // the algorithms. This is because the GJK and EPA algorithms are based on the
91 // Minkowski difference of the two objects.
92 // With spheres of radii r1 and r2 swept around the shapes s1 and s2 of a
93 // collision pair, the Minkowski difference is simply the Minkowski difference
94 // of s1 and s2, summed with a sphere of radius r1 + r2.
95 // This means that running GJK and EPA on the swept-sphere shapes is equivalent
96 // to running GJK and EPA on the original shapes, and then augmenting the
97 // distance by r1 + r2.
98 // This does not modify the normal returned by GJK and EPA.
99 // So we can also easily recover the witness points of the swept sphere shapes.
100 //
101 // This suite of test is designed to verify that property and generally test for
102 // swept-sphere radius support in Coal.
103 // Notes:
104 // - not all collision pairs use GJK/EPA, so this test makes sure that
105 // swept-sphere radius is taken into account even for specialized collision
106 // algorithms.
107 // - when manually taking swept-sphere radius into account in GJK/EPA, we
108 // strongly deteriorate the convergence properties of the algorithms. This
109 // is because certain parts of the shapes become locally strictly convex,
110 // which GJK/EPA are not designed to handle. This becomes particularly the
111 // bigger the swept-sphere radius. So don't be surprised if the tests fail
112 // for large radii.
113
114 struct SweptSphereGJKSolver : public GJKSolver {
115 template <typename S1, typename S2>
116 6400 Scalar shapeDistance(
117 const S1& s1, const Transform3s& tf1, const S2& s2,
118 const Transform3s& tf2, bool compute_penetration, Vec3s& p1, Vec3s& p2,
119 Vec3s& normal, bool use_swept_sphere_radius_in_gjk_epa_iterations) const {
120
2/2
✓ Branch 0 taken 1600 times.
✓ Branch 1 taken 1600 times.
6400 if (use_swept_sphere_radius_in_gjk_epa_iterations) {
121 Scalar distance;
122
1/2
✓ Branch 1 taken 1600 times.
✗ Branch 2 not taken.
3200 this->runGJKAndEPA<S1, S2, details::SupportOptions::WithSweptSphere>(
123 s1, tf1, s2, tf2, compute_penetration, distance, p1, p2, normal);
124 3200 return distance;
125 }
126
127 // Default behavior of coal's GJKSolver
128 Scalar distance;
129
1/2
✓ Branch 1 taken 1600 times.
✗ Branch 2 not taken.
3200 this->runGJKAndEPA<S1, S2, details::SupportOptions::NoSweptSphere>(
130 s1, tf1, s2, tf2, compute_penetration, distance, p1, p2, normal);
131 3200 return distance;
132 }
133 };
134
135 template <typename S1, typename S2>
136 20 void test_gjksolver_swept_sphere_radius(S1& shape1, S2& shape2) {
137
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 SweptSphereGJKSolver solver;
138 // The swept sphere radius is detrimental to the convergence of GJK
139 // and EPA. This gets worse as the radius of the swept sphere increases.
140 // So we need to increase the number of iterations to get a good result.
141 20 const Scalar tol = Scalar(1e-6);
142 20 solver.gjk_tolerance = tol;
143 20 solver.epa_tolerance = tol;
144 20 solver.epa_max_iterations = 1000;
145 20 const bool compute_penetration = true;
146
147 20 Scalar extents[] = {-2, -2, -2, 2, 2, 2};
148 20 std::size_t n = 10;
149 20 std::vector<Transform3s> tf1s;
150 20 std::vector<Transform3s> tf2s;
151
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 generateRandomTransforms(extents, tf1s, n);
152
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 generateRandomTransforms(extents, tf2s, n);
153 20 const std::array<Scalar, 4> swept_sphere_radius = {0, Scalar(0.1), 1, 10};
154
155
2/2
✓ Branch 2 taken 40 times.
✓ Branch 3 taken 10 times.
100 for (const Scalar& ssr1 : swept_sphere_radius) {
156
1/2
✓ Branch 1 taken 40 times.
✗ Branch 2 not taken.
80 shape1.setSweptSphereRadius(ssr1);
157
2/2
✓ Branch 2 taken 160 times.
✓ Branch 3 taken 40 times.
400 for (const Scalar& ssr2 : swept_sphere_radius) {
158
1/2
✓ Branch 1 taken 160 times.
✗ Branch 2 not taken.
320 shape2.setSweptSphereRadius(ssr2);
159
2/2
✓ Branch 0 taken 1600 times.
✓ Branch 1 taken 160 times.
3520 for (std::size_t i = 0; i < n; ++i) {
160
1/2
✓ Branch 2 taken 1600 times.
✗ Branch 3 not taken.
3200 Transform3s tf1 = tf1s[i];
161
1/2
✓ Branch 2 taken 1600 times.
✗ Branch 3 not taken.
3200 Transform3s tf2 = tf2s[i];
162
163
2/4
✓ Branch 1 taken 1600 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1600 times.
✗ Branch 5 not taken.
3200 SET_LINE;
164
165 std::array<Scalar, 2> distance;
166
1/2
✓ Branch 1 taken 1600 times.
✗ Branch 2 not taken.
3200 std::array<Vec3s, 2> p1;
167
1/2
✓ Branch 1 taken 1600 times.
✗ Branch 2 not taken.
3200 std::array<Vec3s, 2> p2;
168
1/2
✓ Branch 1 taken 1600 times.
✗ Branch 2 not taken.
3200 std::array<Vec3s, 2> normal;
169
170 // Default coal behavior - Don't take swept sphere radius into account
171 // during GJK/EPA iterations. Correct the solution afterwards.
172 6400 distance[0] =
173
1/2
✓ Branch 4 taken 1600 times.
✗ Branch 5 not taken.
3200 solver.shapeDistance(shape1, tf1, shape2, tf2, compute_penetration,
174 p1[0], p2[0], normal[0], false);
175
176 // Take swept sphere radius into account during GJK/EPA iterations
177 6400 distance[1] =
178
1/2
✓ Branch 4 taken 1600 times.
✗ Branch 5 not taken.
3200 solver.shapeDistance(shape1, tf1, shape2, tf2, compute_penetration,
179 p1[1], p2[1], normal[1], true);
180
181 // Precision is dependent on the swept-sphere radius.
182 // The issue of precision does not come from the default behavior of
183 // coal, but from the result in which we manually take the swept
184 // sphere radius into account in GJK/EPA iterations.
185 3200 const Scalar precision =
186 3200 3 * sqrt(tol) +
187 3200 (1 / Scalar(100)) * std::max(shape1.getSweptSphereRadius(),
188 6400 shape2.getSweptSphereRadius());
189
190 // Check that the distance is the same
191
28/56
✓ Branch 1 taken 1600 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1600 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1600 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1600 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1600 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 1600 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1600 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1600 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1600 times.
✗ Branch 31 not taken.
✓ Branch 36 taken 1600 times.
✗ Branch 37 not taken.
✓ Branch 39 taken 1600 times.
✗ Branch 40 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 1600 times.
✓ Branch 53 taken 1600 times.
✗ Branch 54 not taken.
✓ Branch 57 taken 1600 times.
✗ Branch 58 not taken.
✓ Branch 62 taken 1600 times.
✗ Branch 63 not taken.
✓ Branch 65 taken 1600 times.
✗ Branch 66 not taken.
✓ Branch 68 taken 1600 times.
✗ Branch 69 not taken.
✓ Branch 72 taken 1600 times.
✗ Branch 73 not taken.
✓ Branch 75 taken 1600 times.
✗ Branch 76 not taken.
✓ Branch 79 taken 1600 times.
✗ Branch 80 not taken.
✓ Branch 82 taken 1600 times.
✗ Branch 83 not taken.
✓ Branch 86 taken 1600 times.
✗ Branch 87 not taken.
✓ Branch 89 taken 1600 times.
✗ Branch 90 not taken.
✓ Branch 93 taken 1600 times.
✗ Branch 94 not taken.
✓ Branch 96 taken 1600 times.
✗ Branch 97 not taken.
✓ Branch 102 taken 1600 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1600 times.
✗ Branch 106 not taken.
✗ Branch 120 not taken.
✓ Branch 121 taken 1600 times.
3200 COAL_CHECK_REAL_CLOSE(distance[0], distance[1], precision);
192
193 // Check that the normal is the same
194
24/48
✓ Branch 1 taken 1600 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1600 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1600 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 1600 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1600 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1600 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 1600 times.
✓ Branch 30 taken 1600 times.
✗ Branch 31 not taken.
✓ Branch 34 taken 1600 times.
✗ Branch 35 not taken.
✓ Branch 39 taken 1600 times.
✗ Branch 40 not taken.
✓ Branch 42 taken 1600 times.
✗ Branch 43 not taken.
✓ Branch 45 taken 1600 times.
✗ Branch 46 not taken.
✓ Branch 49 taken 1600 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1600 times.
✗ Branch 53 not taken.
✓ Branch 56 taken 1600 times.
✗ Branch 57 not taken.
✓ Branch 59 taken 1600 times.
✗ Branch 60 not taken.
✓ Branch 63 taken 1600 times.
✗ Branch 64 not taken.
✓ Branch 66 taken 1600 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1600 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1600 times.
✗ Branch 74 not taken.
✓ Branch 78 taken 1600 times.
✗ Branch 79 not taken.
✓ Branch 81 taken 1600 times.
✗ Branch 82 not taken.
✓ Branch 84 taken 1600 times.
✗ Branch 85 not taken.
✗ Branch 99 not taken.
✓ Branch 100 taken 1600 times.
3200 COAL_CHECK_CONDITION(normal[0].dot(normal[1]) > 0);
195
24/48
✓ Branch 1 taken 1600 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1600 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1600 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 1600 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 1600 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1600 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1600 times.
✓ Branch 31 taken 1600 times.
✗ Branch 32 not taken.
✓ Branch 35 taken 1600 times.
✗ Branch 36 not taken.
✓ Branch 40 taken 1600 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1600 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1600 times.
✗ Branch 47 not taken.
✓ Branch 50 taken 1600 times.
✗ Branch 51 not taken.
✓ Branch 53 taken 1600 times.
✗ Branch 54 not taken.
✓ Branch 57 taken 1600 times.
✗ Branch 58 not taken.
✓ Branch 60 taken 1600 times.
✗ Branch 61 not taken.
✓ Branch 64 taken 1600 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 1600 times.
✗ Branch 68 not taken.
✓ Branch 71 taken 1600 times.
✗ Branch 72 not taken.
✓ Branch 74 taken 1600 times.
✗ Branch 75 not taken.
✓ Branch 79 taken 1600 times.
✗ Branch 80 not taken.
✓ Branch 83 taken 1600 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1600 times.
✗ Branch 87 not taken.
✗ Branch 101 not taken.
✓ Branch 102 taken 1600 times.
3200 COAL_CHECK_CONDITION(std::abs(1 - normal[0].dot(normal[1])) <
196 precision);
197
198 // Check that the witness points are the same
199
34/68
✓ Branch 1 taken 1600 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1600 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1600 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1600 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1600 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 1600 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1600 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1600 times.
✗ Branch 27 not taken.
✓ Branch 30 taken 1600 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1600 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1600 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1600 times.
✗ Branch 42 not taken.
✓ Branch 44 taken 1600 times.
✗ Branch 45 not taken.
✓ Branch 47 taken 1600 times.
✗ Branch 48 not taken.
✓ Branch 50 taken 1600 times.
✗ Branch 51 not taken.
✗ Branch 61 not taken.
✓ Branch 62 taken 1600 times.
✓ Branch 64 taken 1600 times.
✗ Branch 65 not taken.
✓ Branch 68 taken 1600 times.
✗ Branch 69 not taken.
✓ Branch 73 taken 1600 times.
✗ Branch 74 not taken.
✓ Branch 76 taken 1600 times.
✗ Branch 77 not taken.
✓ Branch 79 taken 1600 times.
✗ Branch 80 not taken.
✓ Branch 83 taken 1600 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1600 times.
✗ Branch 87 not taken.
✓ Branch 90 taken 1600 times.
✗ Branch 91 not taken.
✓ Branch 93 taken 1600 times.
✗ Branch 94 not taken.
✓ Branch 97 taken 1600 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 1600 times.
✗ Branch 101 not taken.
✓ Branch 104 taken 1600 times.
✗ Branch 105 not taken.
✓ Branch 107 taken 1600 times.
✗ Branch 108 not taken.
✓ Branch 112 taken 1600 times.
✗ Branch 113 not taken.
✓ Branch 115 taken 1600 times.
✗ Branch 116 not taken.
✓ Branch 118 taken 1600 times.
✗ Branch 119 not taken.
✓ Branch 121 taken 1600 times.
✗ Branch 122 not taken.
✗ Branch 136 not taken.
✓ Branch 137 taken 1600 times.
3200 COAL_CHECK_VECTOR_CLOSE(p1[0], p1[1], precision);
200
34/68
✓ Branch 1 taken 1600 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1600 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1600 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1600 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1600 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 1600 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1600 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1600 times.
✗ Branch 27 not taken.
✓ Branch 30 taken 1600 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1600 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1600 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1600 times.
✗ Branch 42 not taken.
✓ Branch 44 taken 1600 times.
✗ Branch 45 not taken.
✓ Branch 47 taken 1600 times.
✗ Branch 48 not taken.
✓ Branch 50 taken 1600 times.
✗ Branch 51 not taken.
✗ Branch 61 not taken.
✓ Branch 62 taken 1600 times.
✓ Branch 64 taken 1600 times.
✗ Branch 65 not taken.
✓ Branch 68 taken 1600 times.
✗ Branch 69 not taken.
✓ Branch 73 taken 1600 times.
✗ Branch 74 not taken.
✓ Branch 76 taken 1600 times.
✗ Branch 77 not taken.
✓ Branch 79 taken 1600 times.
✗ Branch 80 not taken.
✓ Branch 83 taken 1600 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1600 times.
✗ Branch 87 not taken.
✓ Branch 90 taken 1600 times.
✗ Branch 91 not taken.
✓ Branch 93 taken 1600 times.
✗ Branch 94 not taken.
✓ Branch 97 taken 1600 times.
✗ Branch 98 not taken.
✓ Branch 100 taken 1600 times.
✗ Branch 101 not taken.
✓ Branch 104 taken 1600 times.
✗ Branch 105 not taken.
✓ Branch 107 taken 1600 times.
✗ Branch 108 not taken.
✓ Branch 112 taken 1600 times.
✗ Branch 113 not taken.
✓ Branch 115 taken 1600 times.
✗ Branch 116 not taken.
✓ Branch 118 taken 1600 times.
✗ Branch 119 not taken.
✓ Branch 121 taken 1600 times.
✗ Branch 122 not taken.
✗ Branch 136 not taken.
✓ Branch 137 taken 1600 times.
3200 COAL_CHECK_VECTOR_CLOSE(p2[0], p2[1], precision);
201 }
202 }
203 }
204 20 }
205
206 static const Scalar min_shape_size = Scalar(0.1);
207 static const Scalar max_shape_size = Scalar(0.5);
208
209
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(ssr_mesh_mesh) {
210
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Convex<Triangle> shape1 = makeRandomConvex(min_shape_size, max_shape_size);
211
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Convex<Triangle> shape2 = makeRandomConvex(min_shape_size, max_shape_size);
212
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_gjksolver_swept_sphere_radius(shape1, shape2);
213 2 }
214
215
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(ssr_mesh_ellipsoid) {
216
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Convex<Triangle> shape1 = makeRandomConvex(min_shape_size, max_shape_size);
217
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Ellipsoid shape2 = makeRandomEllipsoid(min_shape_size, max_shape_size);
218
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_gjksolver_swept_sphere_radius(shape1, shape2);
219 2 }
220
221
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(ssr_box_box) {
222
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Box shape1 = makeRandomBox(min_shape_size, max_shape_size);
223
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Box shape2 = makeRandomBox(min_shape_size, max_shape_size);
224
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_gjksolver_swept_sphere_radius(shape1, shape2);
225 2 }
226
227
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(ssr_ellipsoid_ellipsoid) {
228
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Ellipsoid shape1 = makeRandomEllipsoid(min_shape_size, max_shape_size);
229
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Ellipsoid shape2 = makeRandomEllipsoid(min_shape_size, max_shape_size);
230
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_gjksolver_swept_sphere_radius(shape1, shape2);
231 2 }
232
233
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(ssr_ellipsoid_box) {
234
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Ellipsoid shape1 = makeRandomEllipsoid(min_shape_size, max_shape_size);
235
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Box shape2 = makeRandomBox(min_shape_size, max_shape_size);
236
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_gjksolver_swept_sphere_radius(shape1, shape2);
237 2 }
238
239
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(ssr_cone_cone) {
240 Cone shape1 = makeRandomCone({min_shape_size / 2, min_shape_size},
241
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 {max_shape_size, max_shape_size});
242 Cone shape2 = makeRandomCone({min_shape_size / 2, min_shape_size},
243
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 {max_shape_size, max_shape_size});
244
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_gjksolver_swept_sphere_radius(shape1, shape2);
245 2 }
246
247
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(ssr_cone_ellipsoid) {
248 Cone shape1 = makeRandomCone({min_shape_size / 2, min_shape_size},
249
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 {max_shape_size, max_shape_size});
250
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Ellipsoid shape2 = makeRandomEllipsoid(min_shape_size, max_shape_size);
251
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_gjksolver_swept_sphere_radius(shape1, shape2);
252 2 }
253
254
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(ssr_capsule_capsule) {
255 Capsule shape1 = makeRandomCapsule({min_shape_size / 2, min_shape_size},
256
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 {max_shape_size, max_shape_size});
257 Capsule shape2 = makeRandomCapsule({min_shape_size / 2, min_shape_size},
258
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 {max_shape_size, max_shape_size});
259
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_gjksolver_swept_sphere_radius(shape1, shape2);
260 2 }
261
262
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(ssr_capsule_cone) {
263 Capsule shape1 = makeRandomCapsule({min_shape_size / 2, min_shape_size},
264
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 {max_shape_size, max_shape_size});
265 Cone shape2 = makeRandomCone({min_shape_size / 2, min_shape_size},
266
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 {max_shape_size, max_shape_size});
267
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_gjksolver_swept_sphere_radius(shape1, shape2);
268 2 }
269
270
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(ssr_cylinder_cylinder) {
271 Cylinder shape1 = makeRandomCylinder({min_shape_size / 2, min_shape_size},
272
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 {max_shape_size, max_shape_size});
273 Cylinder shape2 = makeRandomCylinder({min_shape_size / 2, min_shape_size},
274
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 {max_shape_size, max_shape_size});
275
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_gjksolver_swept_sphere_radius(shape1, shape2);
276 2 }
277
278 template <typename S1, typename S2>
279 77 void test_collide_swept_sphere_radius(S1& shape1, S2& shape2) {
280 std::cout << "Testing collision between "
281
2/4
✓ Branch 1 taken 77 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 77 times.
✗ Branch 6 not taken.
154 << std::string(get_node_type_name(shape1.getNodeType())) << " and "
282
7/14
✓ Branch 1 taken 77 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 77 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 77 times.
✗ Branch 9 not taken.
✓ Branch 12 taken 77 times.
✗ Branch 13 not taken.
✓ Branch 16 taken 77 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 77 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 77 times.
✗ Branch 23 not taken.
154 << std::string(get_node_type_name(shape2.getNodeType())) << '\n';
283
284 77 Scalar extents[] = {-2, -2, -2, 2, 2, 2};
285 77 std::size_t n = 1;
286 77 std::vector<Transform3s> tf1s;
287 77 std::vector<Transform3s> tf2s;
288
1/2
✓ Branch 1 taken 77 times.
✗ Branch 2 not taken.
77 generateRandomTransforms(extents, tf1s, n);
289
1/2
✓ Branch 1 taken 77 times.
✗ Branch 2 not taken.
77 generateRandomTransforms(extents, tf2s, n);
290
291 77 const std::array<Scalar, 4> swept_sphere_radius = {0, Scalar(0.1), 1, 10};
292
2/2
✓ Branch 2 taken 308 times.
✓ Branch 3 taken 77 times.
385 for (const Scalar& ssr1 : swept_sphere_radius) {
293
1/2
✓ Branch 1 taken 308 times.
✗ Branch 2 not taken.
308 shape1.setSweptSphereRadius(ssr1);
294
2/2
✓ Branch 2 taken 1232 times.
✓ Branch 3 taken 308 times.
1540 for (const Scalar& ssr2 : swept_sphere_radius) {
295
1/2
✓ Branch 1 taken 1232 times.
✗ Branch 2 not taken.
1232 shape2.setSweptSphereRadius(ssr2);
296
2/2
✓ Branch 1 taken 1232 times.
✓ Branch 2 taken 1232 times.
2464 for (std::size_t i = 0; i < n; ++i) {
297
1/2
✓ Branch 2 taken 1232 times.
✗ Branch 3 not taken.
1232 Transform3s tf1 = tf1s[i];
298
1/2
✓ Branch 2 taken 1232 times.
✗ Branch 3 not taken.
1232 Transform3s tf2 = tf2s[i];
299
300
2/4
✓ Branch 1 taken 1232 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1232 times.
✗ Branch 5 not taken.
1232 SET_LINE;
301
1/2
✓ Branch 1 taken 1232 times.
✗ Branch 2 not taken.
1232 CollisionRequest request;
302 1232 request.enable_contact = true;
303 // We make sure we get witness points by setting the security margin to
304 // infinity. That way shape1 and shape2 will always be considered in
305 // collision.
306 1232 request.security_margin = std::numeric_limits<Scalar>::max();
307 1232 const Scalar tol = Scalar(1e-6);
308 1232 request.gjk_tolerance = tol;
309 1232 request.epa_tolerance = tol;
310
311
1/2
✓ Branch 1 taken 1232 times.
✗ Branch 2 not taken.
1232 std::array<CollisionResult, 2> result;
312
313 // Without swept sphere radius
314 1232 const Scalar ssr1 = shape1.getSweptSphereRadius();
315 1232 const Scalar ssr2 = shape2.getSweptSphereRadius();
316
1/2
✓ Branch 1 taken 1232 times.
✗ Branch 2 not taken.
1232 shape1.setSweptSphereRadius(0.);
317
1/2
✓ Branch 1 taken 1232 times.
✗ Branch 2 not taken.
1232 shape2.setSweptSphereRadius(0.);
318
1/2
✓ Branch 2 taken 1232 times.
✗ Branch 3 not taken.
1232 coal::collide(&shape1, tf1, &shape2, tf2, request, result[0]);
319
320 // With swept sphere radius
321
1/2
✓ Branch 1 taken 1232 times.
✗ Branch 2 not taken.
1232 shape1.setSweptSphereRadius(ssr1);
322
1/2
✓ Branch 1 taken 1232 times.
✗ Branch 2 not taken.
1232 shape2.setSweptSphereRadius(ssr2);
323
1/2
✓ Branch 2 taken 1232 times.
✗ Branch 3 not taken.
1232 coal::collide(&shape1, tf1, &shape2, tf2, request, result[1]);
324
325
6/12
✓ Branch 1 taken 1232 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1232 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1232 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 1232 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1232 times.
✗ Branch 20 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 1232 times.
1232 BOOST_CHECK(result[0].isCollision());
326
6/12
✓ Branch 1 taken 1232 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1232 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1232 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 1232 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1232 times.
✗ Branch 20 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 1232 times.
1232 BOOST_CHECK(result[1].isCollision());
327
3/6
✓ Branch 2 taken 1232 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1232 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1232 times.
✗ Branch 9 not taken.
1232 if (result[0].isCollision() && result[1].isCollision()) {
328
1/2
✓ Branch 1 taken 1232 times.
✗ Branch 2 not taken.
1232 std::array<Contact, 2> contact;
329
2/4
✓ Branch 2 taken 1232 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1232 times.
✗ Branch 7 not taken.
1232 contact[0] = result[0].getContact(0);
330
2/4
✓ Branch 2 taken 1232 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1232 times.
✗ Branch 7 not taken.
1232 contact[1] = result[1].getContact(0);
331
332 // Precision is dependent on the swept sphere radii.
333 // The issue of precision does not come from the default behavior of
334 // coal, but from the result in which we manually take the swept
335 // sphere radius into account in GJK/EPA iterations.
336 1232 const Scalar precision =
337 1232 3 * sqrt(tol) + (1 / Scalar(100)) * std::max(ssr1, ssr2);
338 1232 const Scalar ssr = ssr1 + ssr2;
339
340 // Check that the distance is the same
341
28/56
✓ Branch 1 taken 1232 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1232 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1232 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1232 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1232 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 1232 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1232 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1232 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1232 times.
✗ Branch 31 not taken.
✓ Branch 36 taken 1232 times.
✗ Branch 37 not taken.
✓ Branch 39 taken 1232 times.
✗ Branch 40 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 1232 times.
✓ Branch 53 taken 1232 times.
✗ Branch 54 not taken.
✓ Branch 57 taken 1232 times.
✗ Branch 58 not taken.
✓ Branch 62 taken 1232 times.
✗ Branch 63 not taken.
✓ Branch 65 taken 1232 times.
✗ Branch 66 not taken.
✓ Branch 68 taken 1232 times.
✗ Branch 69 not taken.
✓ Branch 72 taken 1232 times.
✗ Branch 73 not taken.
✓ Branch 75 taken 1232 times.
✗ Branch 76 not taken.
✓ Branch 79 taken 1232 times.
✗ Branch 80 not taken.
✓ Branch 82 taken 1232 times.
✗ Branch 83 not taken.
✓ Branch 86 taken 1232 times.
✗ Branch 87 not taken.
✓ Branch 89 taken 1232 times.
✗ Branch 90 not taken.
✓ Branch 93 taken 1232 times.
✗ Branch 94 not taken.
✓ Branch 96 taken 1232 times.
✗ Branch 97 not taken.
✓ Branch 102 taken 1232 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1232 times.
✗ Branch 106 not taken.
✗ Branch 120 not taken.
✓ Branch 121 taken 1232 times.
1232 COAL_CHECK_REAL_CLOSE(contact[0].penetration_depth - ssr,
342 contact[1].penetration_depth, precision);
343
344 // Check that the normal is the same
345
24/48
✓ Branch 1 taken 1232 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1232 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1232 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 1232 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1232 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1232 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 1232 times.
✓ Branch 30 taken 1232 times.
✗ Branch 31 not taken.
✓ Branch 34 taken 1232 times.
✗ Branch 35 not taken.
✓ Branch 39 taken 1232 times.
✗ Branch 40 not taken.
✓ Branch 42 taken 1232 times.
✗ Branch 43 not taken.
✓ Branch 45 taken 1232 times.
✗ Branch 46 not taken.
✓ Branch 49 taken 1232 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1232 times.
✗ Branch 53 not taken.
✓ Branch 56 taken 1232 times.
✗ Branch 57 not taken.
✓ Branch 59 taken 1232 times.
✗ Branch 60 not taken.
✓ Branch 63 taken 1232 times.
✗ Branch 64 not taken.
✓ Branch 66 taken 1232 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1232 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1232 times.
✗ Branch 74 not taken.
✓ Branch 78 taken 1232 times.
✗ Branch 79 not taken.
✓ Branch 81 taken 1232 times.
✗ Branch 82 not taken.
✓ Branch 84 taken 1232 times.
✗ Branch 85 not taken.
✗ Branch 99 not taken.
✓ Branch 100 taken 1232 times.
1232 COAL_CHECK_CONDITION((contact[0].normal).dot(contact[1].normal) > 0);
346
24/48
✓ Branch 1 taken 1232 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1232 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1232 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 1232 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 1232 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1232 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1232 times.
✓ Branch 31 taken 1232 times.
✗ Branch 32 not taken.
✓ Branch 35 taken 1232 times.
✗ Branch 36 not taken.
✓ Branch 40 taken 1232 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1232 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1232 times.
✗ Branch 47 not taken.
✓ Branch 50 taken 1232 times.
✗ Branch 51 not taken.
✓ Branch 53 taken 1232 times.
✗ Branch 54 not taken.
✓ Branch 57 taken 1232 times.
✗ Branch 58 not taken.
✓ Branch 60 taken 1232 times.
✗ Branch 61 not taken.
✓ Branch 64 taken 1232 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 1232 times.
✗ Branch 68 not taken.
✓ Branch 71 taken 1232 times.
✗ Branch 72 not taken.
✓ Branch 74 taken 1232 times.
✗ Branch 75 not taken.
✓ Branch 79 taken 1232 times.
✗ Branch 80 not taken.
✓ Branch 83 taken 1232 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1232 times.
✗ Branch 87 not taken.
✗ Branch 101 not taken.
✓ Branch 102 taken 1232 times.
1232 COAL_CHECK_CONDITION(
347 std::abs(1 - (contact[0].normal).dot(contact[1].normal)) <
348 precision);
349
350 // Check that the witness points are the same
351
40/80
✓ Branch 1 taken 1232 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1232 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1232 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1232 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1232 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 1232 times.
✗ Branch 21 not taken.
✓ Branch 25 taken 1232 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1232 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1232 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1232 times.
✗ Branch 35 not taken.
✓ Branch 39 taken 1232 times.
✗ Branch 40 not taken.
✓ Branch 42 taken 1232 times.
✗ Branch 43 not taken.
✓ Branch 45 taken 1232 times.
✗ Branch 46 not taken.
✓ Branch 51 taken 1232 times.
✗ Branch 52 not taken.
✓ Branch 56 taken 1232 times.
✗ Branch 57 not taken.
✓ Branch 59 taken 1232 times.
✗ Branch 60 not taken.
✓ Branch 62 taken 1232 times.
✗ Branch 63 not taken.
✓ Branch 65 taken 1232 times.
✗ Branch 66 not taken.
✓ Branch 68 taken 1232 times.
✗ Branch 69 not taken.
✗ Branch 79 not taken.
✓ Branch 80 taken 1232 times.
✓ Branch 82 taken 1232 times.
✗ Branch 83 not taken.
✓ Branch 86 taken 1232 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1232 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 1232 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 1232 times.
✗ Branch 98 not taken.
✓ Branch 101 taken 1232 times.
✗ Branch 102 not taken.
✓ Branch 104 taken 1232 times.
✗ Branch 105 not taken.
✓ Branch 108 taken 1232 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1232 times.
✗ Branch 112 not taken.
✓ Branch 115 taken 1232 times.
✗ Branch 116 not taken.
✓ Branch 118 taken 1232 times.
✗ Branch 119 not taken.
✓ Branch 122 taken 1232 times.
✗ Branch 123 not taken.
✓ Branch 125 taken 1232 times.
✗ Branch 126 not taken.
✓ Branch 131 taken 1232 times.
✗ Branch 132 not taken.
✓ Branch 136 taken 1232 times.
✗ Branch 137 not taken.
✓ Branch 139 taken 1232 times.
✗ Branch 140 not taken.
✓ Branch 142 taken 1232 times.
✗ Branch 143 not taken.
✓ Branch 145 taken 1232 times.
✗ Branch 146 not taken.
✓ Branch 148 taken 1232 times.
✗ Branch 149 not taken.
✗ Branch 163 not taken.
✓ Branch 164 taken 1232 times.
1232 COAL_CHECK_VECTOR_CLOSE(
352 contact[0].nearest_points[0] + ssr1 * contact[0].normal,
353 contact[1].nearest_points[0], precision);
354
40/80
✓ Branch 1 taken 1232 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1232 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1232 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1232 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1232 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 1232 times.
✗ Branch 21 not taken.
✓ Branch 25 taken 1232 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1232 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1232 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1232 times.
✗ Branch 35 not taken.
✓ Branch 39 taken 1232 times.
✗ Branch 40 not taken.
✓ Branch 42 taken 1232 times.
✗ Branch 43 not taken.
✓ Branch 45 taken 1232 times.
✗ Branch 46 not taken.
✓ Branch 51 taken 1232 times.
✗ Branch 52 not taken.
✓ Branch 56 taken 1232 times.
✗ Branch 57 not taken.
✓ Branch 59 taken 1232 times.
✗ Branch 60 not taken.
✓ Branch 62 taken 1232 times.
✗ Branch 63 not taken.
✓ Branch 65 taken 1232 times.
✗ Branch 66 not taken.
✓ Branch 68 taken 1232 times.
✗ Branch 69 not taken.
✗ Branch 79 not taken.
✓ Branch 80 taken 1232 times.
✓ Branch 82 taken 1232 times.
✗ Branch 83 not taken.
✓ Branch 86 taken 1232 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1232 times.
✗ Branch 92 not taken.
✓ Branch 94 taken 1232 times.
✗ Branch 95 not taken.
✓ Branch 97 taken 1232 times.
✗ Branch 98 not taken.
✓ Branch 101 taken 1232 times.
✗ Branch 102 not taken.
✓ Branch 104 taken 1232 times.
✗ Branch 105 not taken.
✓ Branch 108 taken 1232 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1232 times.
✗ Branch 112 not taken.
✓ Branch 115 taken 1232 times.
✗ Branch 116 not taken.
✓ Branch 118 taken 1232 times.
✗ Branch 119 not taken.
✓ Branch 122 taken 1232 times.
✗ Branch 123 not taken.
✓ Branch 125 taken 1232 times.
✗ Branch 126 not taken.
✓ Branch 131 taken 1232 times.
✗ Branch 132 not taken.
✓ Branch 136 taken 1232 times.
✗ Branch 137 not taken.
✓ Branch 139 taken 1232 times.
✗ Branch 140 not taken.
✓ Branch 142 taken 1232 times.
✗ Branch 143 not taken.
✓ Branch 145 taken 1232 times.
✗ Branch 146 not taken.
✓ Branch 148 taken 1232 times.
✗ Branch 149 not taken.
✗ Branch 163 not taken.
✓ Branch 164 taken 1232 times.
1232 COAL_CHECK_VECTOR_CLOSE(
355 contact[0].nearest_points[1] - ssr2 * contact[0].normal,
356 contact[1].nearest_points[1], precision);
357 }
358 }
359 }
360 }
361 77 }
362
363 const std::vector<NODE_TYPE> tested_geometries = {
364 GEOM_BOX, GEOM_SPHERE, GEOM_ELLIPSOID, GEOM_CAPSULE, GEOM_CONE,
365 GEOM_CYLINDER, GEOM_CONVEX, GEOM_PLANE, GEOM_HALFSPACE};
366
367
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(ssr_geom_geom) {
368 // Each possible geom pair is tested twice
369
2/2
✓ Branch 5 taken 9 times.
✓ Branch 6 taken 1 times.
20 for (const NODE_TYPE& shape_type1 : tested_geometries) {
370
2/2
✓ Branch 5 taken 81 times.
✓ Branch 6 taken 9 times.
180 for (const NODE_TYPE& shape_type2 : tested_geometries) {
371
4/4
✓ Branch 0 taken 72 times.
✓ Branch 1 taken 9 times.
✓ Branch 2 taken 9 times.
✓ Branch 3 taken 63 times.
162 if (shape_type1 == GEOM_PLANE || shape_type1 == GEOM_HALFSPACE) {
372
4/4
✓ Branch 0 taken 16 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 14 times.
36 if (shape_type2 == GEOM_PLANE || shape_type2 == GEOM_HALFSPACE) {
373 // TODO(louis): check plane-plane plane-halfspace etc. collisions
374 8 continue;
375 }
376 }
377
1/2
✓ Branch 1 taken 77 times.
✗ Branch 2 not taken.
154 std::shared_ptr<ShapeBase> shape1 = makeRandomGeometry(shape_type1);
378
1/2
✓ Branch 1 taken 77 times.
✗ Branch 2 not taken.
154 std::shared_ptr<ShapeBase> shape2 = makeRandomGeometry(shape_type2);
379
1/2
✓ Branch 3 taken 77 times.
✗ Branch 4 not taken.
154 test_collide_swept_sphere_radius(*shape1, *shape2);
380 154 }
381 }
382 2 }
383