GCC Code Coverage Report


Directory: ./
File: test/normal_and_nearest_points.cpp
Date: 2025-04-01 09:23:31
Exec Total Coverage
Lines: 435 438 99.3%
Branches: 1750 3480 50.3%

Line Branch Exec Source
1 /*
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2022-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_NORMAL_AND_NEAREST_POINTS
38 #include <boost/test/included/unit_test.hpp>
39
40 #include "coal/fwd.hh"
41 #include "coal/shape/geometric_shapes.h"
42 #include "coal/collision_data.h"
43 #include "coal/BV/OBBRSS.h"
44 #include "coal/BVH/BVH_model.h"
45 #include "coal/shape/geometric_shape_to_BVH_model.h"
46
47 #include "utility.h"
48
49 using namespace coal;
50 typedef Eigen::Vector2d Vec2d;
51
52 // This test suite is designed to operate on any pair of primitive shapes:
53 // spheres, capsules, boxes, ellipsoids, cones, cylinders, planes, halfspaces,
54 // convex meshes. Do not use this file for BVH, octree etc. It would not make
55 // sense.
56
57 // This test is designed to check if the normal and the nearest points
58 // are properly handled as defined in DistanceResult::normal.
59 // Regardless of wether or not the two shapes are in intersection, regardless of
60 // whether `collide` or `distance` is called:
61 // --> we denote `dist` the (signed) distance that separates the two shapes
62 // --> we denote `p1` and `p2` their nearest_points (witness points)
63 // --> the `normal` should always point from shape 1 to shape 2, i.e we should
64 // always have: | normal = sign(dist) * (p2 - p1).normalized()
65 // | p2 = p1 + dist * normal
66 // Thus:
67 // --> if o1 and o2 are not in collision, translating o2 by vector
68 // `-(dist + eps) * normal` should bring them in collision (eps > 0).
69 // --> if o1 and o2 are in collision, translating o2 by vector
70 // `-(dist - eps)) * normal` should separate them (eps > 0).
71 // --> finally, if abs(dist) > 0, we should have:
72 // normal = sign(dist) * (p2 - p1).normalized()
73 // p2 = p1 + dist * normal
74 template <typename ShapeType1, typename ShapeType2>
75 864 void test_normal_and_nearest_points(
76 const ShapeType1& o1, const ShapeType2& o2,
77 size_t gjk_max_iterations = GJK_DEFAULT_MAX_ITERATIONS,
78 Scalar gjk_tolerance = GJK_DEFAULT_TOLERANCE,
79 size_t epa_max_iterations = EPA_DEFAULT_MAX_ITERATIONS,
80 Scalar epa_tolerance = EPA_DEFAULT_TOLERANCE) {
81 // Generate random poses for o2
82 #ifndef NDEBUG // if debug mode
83 864 std::size_t n = 10;
84 #else
85 size_t n = 1000;
86 #endif
87 // We want to make sure we generate poses that are in collision
88 // so we take a relatively small extent for the random poses
89 864 Scalar extents[] = {-1.5, -1.5, -1.5, 1.5, 1.5, 1.5};
90 864 std::vector<Transform3s> transforms;
91
1/2
✓ Branch 1 taken 432 times.
✗ Branch 2 not taken.
864 generateRandomTransforms(extents, transforms, n);
92
1/2
✓ Branch 1 taken 432 times.
✗ Branch 2 not taken.
864 Transform3s tf1 = Transform3s::Identity();
93
94
1/2
✓ Branch 1 taken 432 times.
✗ Branch 2 not taken.
864 CollisionRequest colreq;
95 864 colreq.distance_upper_bound = std::numeric_limits<Scalar>::max();
96 // For strictly convex shapes, the default tolerance of EPA is way too low.
97 // Because EPA is basically trying to fit a polytope to a strictly convex
98 // surface, it might take it a lot of iterations to converge to a low
99 // tolerance. A solution is to increase the number of iterations and the
100 // tolerance (and/or increase the number of faces and vertices EPA is allowed
101 // to work with).
102 864 colreq.gjk_max_iterations = gjk_max_iterations;
103 864 colreq.gjk_tolerance = gjk_tolerance;
104 864 colreq.epa_max_iterations = epa_max_iterations;
105 864 colreq.epa_tolerance = epa_tolerance;
106
1/2
✓ Branch 1 taken 432 times.
✗ Branch 2 not taken.
864 DistanceRequest distreq;
107 864 distreq.gjk_max_iterations = gjk_max_iterations;
108 864 distreq.gjk_tolerance = gjk_tolerance;
109 864 distreq.epa_max_iterations = epa_max_iterations;
110 864 distreq.epa_tolerance = epa_tolerance;
111
112
2/2
✓ Branch 1 taken 4320 times.
✓ Branch 2 taken 432 times.
9504 for (size_t i = 0; i < n; i++) {
113 // Run both `distance` and `collide`.
114 // Since CollisionRequest::distance_lower_bound is set to infinity,
115 // these functions should agree on the results regardless of collision or
116 // not.
117
1/2
✓ Branch 2 taken 4320 times.
✗ Branch 3 not taken.
8640 Transform3s tf2 = transforms[i];
118
1/2
✓ Branch 1 taken 4320 times.
✗ Branch 2 not taken.
8640 CollisionResult colres;
119
1/2
✓ Branch 2 taken 4320 times.
✗ Branch 3 not taken.
8640 DistanceResult distres;
120
1/2
✓ Branch 1 taken 4320 times.
✗ Branch 2 not taken.
8640 size_t col = collide(&o1, tf1, &o2, tf2, colreq, colres);
121
1/2
✓ Branch 1 taken 4320 times.
✗ Branch 2 not taken.
8640 Scalar dist = distance(&o1, tf1, &o2, tf2, distreq, distres);
122
123 8640 const Scalar dummy_precision(100 * std::numeric_limits<Scalar>::epsilon());
124
2/2
✓ Branch 0 taken 1884 times.
✓ Branch 1 taken 2436 times.
8640 if (col) {
125
6/12
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1884 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1884 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1884 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1884 times.
3768 BOOST_CHECK(dist <= 0.);
126
6/12
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1884 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 1884 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1884 times.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1884 times.
3768 BOOST_CHECK_CLOSE(dist, distres.min_distance, dummy_precision);
127
2/4
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1884 times.
✗ Branch 5 not taken.
3768 Contact contact = colres.getContact(0);
128
6/12
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1884 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 1884 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1884 times.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1884 times.
3768 BOOST_CHECK_CLOSE(dist, contact.penetration_depth, dummy_precision);
129
130
1/2
✓ Branch 2 taken 1884 times.
✗ Branch 3 not taken.
3768 Vec3s cp1 = contact.nearest_points[0];
131
16/32
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1884 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1884 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1884 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1884 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1884 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1884 times.
✗ Branch 26 not taken.
✓ Branch 29 taken 1884 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 1884 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 1884 times.
✗ Branch 36 not taken.
✓ Branch 39 taken 1884 times.
✗ Branch 40 not taken.
✓ Branch 42 taken 1884 times.
✗ Branch 43 not taken.
✓ Branch 45 taken 1884 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1884 times.
✗ Branch 49 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 1884 times.
3768 EIGEN_VECTOR_IS_APPROX(cp1, distres.nearest_points[0], dummy_precision);
132
133
1/2
✓ Branch 2 taken 1884 times.
✗ Branch 3 not taken.
3768 Vec3s cp2 = contact.nearest_points[1];
134
16/32
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1884 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1884 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1884 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1884 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1884 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1884 times.
✗ Branch 26 not taken.
✓ Branch 29 taken 1884 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 1884 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 1884 times.
✗ Branch 36 not taken.
✓ Branch 39 taken 1884 times.
✗ Branch 40 not taken.
✓ Branch 42 taken 1884 times.
✗ Branch 43 not taken.
✓ Branch 45 taken 1884 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1884 times.
✗ Branch 49 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 1884 times.
3768 EIGEN_VECTOR_IS_APPROX(cp2, distres.nearest_points[1], dummy_precision);
135
8/16
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1884 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1884 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1884 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1884 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1884 times.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1884 times.
3768 BOOST_CHECK_CLOSE(contact.penetration_depth, -(cp2 - cp1).norm(),
136 epa_tolerance);
137
20/40
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1884 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1884 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1884 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1884 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1884 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1884 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1884 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1884 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1884 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1884 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1884 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1884 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1884 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1884 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1884 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1884 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1884 times.
✗ Branch 59 not taken.
✗ Branch 69 not taken.
✓ Branch 70 taken 1884 times.
3768 EIGEN_VECTOR_IS_APPROX(cp1, cp2 - dist * distres.normal, epa_tolerance);
138
139
2/4
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1884 times.
✗ Branch 5 not taken.
3768 Vec3s separation_vector = contact.penetration_depth * contact.normal;
140
18/36
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1884 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1884 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1884 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1884 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1884 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1884 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1884 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1884 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1884 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1884 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1884 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1884 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1884 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1884 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1884 times.
✗ Branch 53 not taken.
✗ Branch 63 not taken.
✓ Branch 64 taken 1884 times.
3768 EIGEN_VECTOR_IS_APPROX(separation_vector, cp2 - cp1, epa_tolerance);
141
142
1/2
✓ Branch 0 taken 1884 times.
✗ Branch 1 not taken.
3768 if (dist < 0) {
143
22/44
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1884 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1884 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1884 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1884 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1884 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1884 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1884 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1884 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1884 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1884 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1884 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1884 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1884 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1884 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1884 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1884 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1884 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1884 times.
✗ Branch 62 not taken.
✓ Branch 64 taken 1884 times.
✗ Branch 65 not taken.
✗ Branch 75 not taken.
✓ Branch 76 taken 1884 times.
3768 EIGEN_VECTOR_IS_APPROX(contact.normal, -(cp2 - cp1).normalized(),
144 epa_tolerance);
145 }
146
147 // Separate the shapes
148
1/2
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
3768 Transform3s new_tf1 = tf1;
149 3768 Scalar eps = Scalar(1e-2);
150
4/8
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1884 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1884 times.
✗ Branch 12 not taken.
3768 new_tf1.setTranslation(tf1.getTranslation() + separation_vector -
151 eps * contact.normal);
152
1/2
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
3768 CollisionResult new_colres;
153
1/2
✓ Branch 2 taken 1884 times.
✗ Branch 3 not taken.
3768 DistanceResult new_distres;
154
1/2
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
3768 size_t new_col = collide(&o1, new_tf1, &o2, tf2, colreq, new_colres);
155
1/2
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
3768 Scalar new_dist = distance(&o1, new_tf1, &o2, tf2, distreq, new_distres);
156
6/12
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1884 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1884 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1884 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1884 times.
3768 BOOST_CHECK(new_dist > 0);
157
6/12
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1884 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1884 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1884 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1884 times.
3768 BOOST_CHECK(!new_col);
158
6/12
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1884 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1884 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1884 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1884 times.
3768 BOOST_CHECK(!new_colres.isCollision());
159
6/12
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1884 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 1884 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1884 times.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1884 times.
3768 BOOST_CHECK_CLOSE(new_colres.distance_lower_bound, new_dist,
160 epa_tolerance);
161
1/2
✓ Branch 2 taken 1884 times.
✗ Branch 3 not taken.
3768 Vec3s new_cp1 = new_distres.nearest_points[0];
162
1/2
✓ Branch 2 taken 1884 times.
✗ Branch 3 not taken.
3768 Vec3s new_cp2 = new_distres.nearest_points[1];
163
8/16
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1884 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1884 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1884 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1884 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1884 times.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1884 times.
3768 BOOST_CHECK_CLOSE(new_dist, (new_cp1 - new_cp2).norm(), epa_tolerance);
164
20/40
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1884 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1884 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1884 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1884 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1884 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1884 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1884 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1884 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1884 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1884 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1884 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1884 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1884 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1884 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1884 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1884 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1884 times.
✗ Branch 59 not taken.
✗ Branch 69 not taken.
✓ Branch 70 taken 1884 times.
3768 EIGEN_VECTOR_IS_APPROX(new_cp1, new_cp2 - new_dist * new_distres.normal,
165 epa_tolerance);
166
167
2/4
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1884 times.
✗ Branch 5 not taken.
3768 Vec3s new_separation_vector = new_dist * new_distres.normal;
168
18/36
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1884 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1884 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1884 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1884 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1884 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1884 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1884 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1884 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1884 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1884 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1884 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1884 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1884 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1884 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1884 times.
✗ Branch 53 not taken.
✗ Branch 63 not taken.
✓ Branch 64 taken 1884 times.
3768 EIGEN_VECTOR_IS_APPROX(new_separation_vector, new_cp2 - new_cp1,
169 epa_tolerance);
170
171
1/2
✓ Branch 0 taken 1884 times.
✗ Branch 1 not taken.
3768 if (new_dist > 0) {
172
20/40
✓ Branch 1 taken 1884 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1884 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1884 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1884 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1884 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1884 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1884 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1884 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 1884 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 1884 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 1884 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 1884 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1884 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1884 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 1884 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 1884 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 1884 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1884 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1884 times.
✗ Branch 59 not taken.
✗ Branch 69 not taken.
✓ Branch 70 taken 1884 times.
3768 EIGEN_VECTOR_IS_APPROX(new_distres.normal,
173 (new_cp2 - new_cp1).normalized(), gjk_tolerance);
174 }
175 3768 } else {
176
6/12
✓ Branch 1 taken 2436 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2436 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2436 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2436 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2436 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2436 times.
4872 BOOST_CHECK(dist >= 0.);
177
6/12
✓ Branch 1 taken 2436 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2436 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2436 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 2436 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2436 times.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2436 times.
4872 BOOST_CHECK_CLOSE(distres.min_distance, dist, dummy_precision);
178
6/12
✓ Branch 1 taken 2436 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2436 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2436 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 2436 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2436 times.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2436 times.
4872 BOOST_CHECK_CLOSE(dist, colres.distance_lower_bound, dummy_precision);
179
180
1/2
✓ Branch 2 taken 2436 times.
✗ Branch 3 not taken.
4872 Vec3s cp1 = distres.nearest_points[0];
181
1/2
✓ Branch 2 taken 2436 times.
✗ Branch 3 not taken.
4872 Vec3s cp2 = distres.nearest_points[1];
182
8/16
✓ Branch 1 taken 2436 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2436 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2436 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 2436 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2436 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 2436 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2436 times.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2436 times.
4872 BOOST_CHECK_CLOSE(dist, (cp1 - cp2).norm(), gjk_tolerance);
183
20/40
✓ Branch 1 taken 2436 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2436 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2436 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2436 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2436 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2436 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2436 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2436 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2436 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2436 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2436 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 2436 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2436 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2436 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2436 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 2436 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 2436 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 2436 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 2436 times.
✗ Branch 59 not taken.
✗ Branch 69 not taken.
✓ Branch 70 taken 2436 times.
4872 EIGEN_VECTOR_IS_APPROX(cp1, cp2 - dist * distres.normal, gjk_tolerance);
184
185
2/4
✓ Branch 1 taken 2436 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2436 times.
✗ Branch 5 not taken.
4872 Vec3s separation_vector = dist * distres.normal;
186
18/36
✓ Branch 1 taken 2436 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2436 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2436 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2436 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2436 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2436 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2436 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2436 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2436 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2436 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2436 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 2436 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2436 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2436 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2436 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 2436 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 2436 times.
✗ Branch 53 not taken.
✗ Branch 63 not taken.
✓ Branch 64 taken 2436 times.
4872 EIGEN_VECTOR_IS_APPROX(separation_vector, cp2 - cp1, gjk_tolerance);
187
188
1/2
✓ Branch 0 taken 2436 times.
✗ Branch 1 not taken.
4872 if (dist > 0) {
189
20/40
✓ Branch 1 taken 2436 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2436 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2436 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2436 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2436 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2436 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2436 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2436 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2436 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2436 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2436 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 2436 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2436 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2436 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2436 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 2436 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 2436 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 2436 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 2436 times.
✗ Branch 59 not taken.
✗ Branch 69 not taken.
✓ Branch 70 taken 2436 times.
4872 EIGEN_VECTOR_IS_APPROX(distres.normal, (cp2 - cp1).normalized(),
190 gjk_tolerance);
191 }
192
193 // Bring the shapes in collision
194 // We actually can't guarantee that the shapes will be in collision.
195 // Suppose you have two disjoing cones, which witness points are the tips
196 // of the cones.
197 // If you translate one of the cones by the separation vector and it
198 // happens to be parallel to the axis of the cone, the two shapes will
199 // still be disjoint.
200 4872 Scalar eps = Scalar(1e-2);
201
1/2
✓ Branch 1 taken 2436 times.
✗ Branch 2 not taken.
4872 Transform3s new_tf1 = tf1;
202
4/8
✓ Branch 1 taken 2436 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2436 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2436 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 2436 times.
✗ Branch 12 not taken.
4872 new_tf1.setTranslation(tf1.getTranslation() + separation_vector +
203 eps * distres.normal);
204
1/2
✓ Branch 1 taken 2436 times.
✗ Branch 2 not taken.
4872 CollisionResult new_colres;
205
1/2
✓ Branch 2 taken 2436 times.
✗ Branch 3 not taken.
4872 DistanceResult new_distres;
206
1/2
✓ Branch 1 taken 2436 times.
✗ Branch 2 not taken.
4872 collide(&o1, new_tf1, &o2, tf2, colreq, new_colres);
207
1/2
✓ Branch 1 taken 2436 times.
✗ Branch 2 not taken.
4872 Scalar new_dist = distance(&o1, new_tf1, &o2, tf2, distreq, new_distres);
208
6/12
✓ Branch 1 taken 2436 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2436 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2436 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2436 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2436 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2436 times.
4872 BOOST_CHECK(new_dist < dist);
209
6/12
✓ Branch 1 taken 2436 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2436 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2436 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 2436 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2436 times.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2436 times.
4872 BOOST_CHECK_CLOSE(new_colres.distance_lower_bound, new_dist,
210 dummy_precision);
211 // tolerance
212
2/2
✓ Branch 1 taken 2435 times.
✓ Branch 2 taken 1 times.
4872 if (new_colres.isCollision()) {
213
2/4
✓ Branch 1 taken 2435 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2435 times.
✗ Branch 5 not taken.
4870 Contact contact = new_colres.getContact(0);
214
1/2
✓ Branch 2 taken 2435 times.
✗ Branch 3 not taken.
4870 Vec3s new_cp1 = contact.nearest_points[0];
215
16/32
✓ Branch 1 taken 2435 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2435 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2435 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2435 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2435 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2435 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2435 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2435 times.
✗ Branch 26 not taken.
✓ Branch 29 taken 2435 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 2435 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 2435 times.
✗ Branch 36 not taken.
✓ Branch 39 taken 2435 times.
✗ Branch 40 not taken.
✓ Branch 42 taken 2435 times.
✗ Branch 43 not taken.
✓ Branch 45 taken 2435 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 2435 times.
✗ Branch 49 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2435 times.
4870 EIGEN_VECTOR_IS_APPROX(new_cp1, new_distres.nearest_points[0],
216 dummy_precision);
217
218
1/2
✓ Branch 2 taken 2435 times.
✗ Branch 3 not taken.
4870 Vec3s new_cp2 = contact.nearest_points[1];
219
16/32
✓ Branch 1 taken 2435 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2435 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2435 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2435 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2435 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2435 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2435 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2435 times.
✗ Branch 26 not taken.
✓ Branch 29 taken 2435 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 2435 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 2435 times.
✗ Branch 36 not taken.
✓ Branch 39 taken 2435 times.
✗ Branch 40 not taken.
✓ Branch 42 taken 2435 times.
✗ Branch 43 not taken.
✓ Branch 45 taken 2435 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 2435 times.
✗ Branch 49 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2435 times.
4870 EIGEN_VECTOR_IS_APPROX(new_cp2, new_distres.nearest_points[1],
220 dummy_precision);
221
8/16
✓ Branch 1 taken 2435 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2435 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2435 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 2435 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2435 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 2435 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2435 times.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2435 times.
4870 BOOST_CHECK_CLOSE(contact.penetration_depth,
222 -(new_cp2 - new_cp1).norm(), epa_tolerance);
223
20/40
✓ Branch 1 taken 2435 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2435 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2435 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2435 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2435 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2435 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2435 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2435 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2435 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2435 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2435 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 2435 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2435 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2435 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2435 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 2435 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 2435 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 2435 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 2435 times.
✗ Branch 59 not taken.
✗ Branch 69 not taken.
✓ Branch 70 taken 2435 times.
4870 EIGEN_VECTOR_IS_APPROX(new_cp1, new_cp2 - new_dist * new_distres.normal,
224 epa_tolerance);
225
226
2/4
✓ Branch 1 taken 2435 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2435 times.
✗ Branch 5 not taken.
4870 Vec3s new_separation_vector =
227 contact.penetration_depth * contact.normal;
228
18/36
✓ Branch 1 taken 2435 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2435 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2435 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2435 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2435 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2435 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2435 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2435 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2435 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2435 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2435 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 2435 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2435 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2435 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2435 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 2435 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 2435 times.
✗ Branch 53 not taken.
✗ Branch 63 not taken.
✓ Branch 64 taken 2435 times.
4870 EIGEN_VECTOR_IS_APPROX(new_separation_vector, new_cp2 - new_cp1,
229 epa_tolerance);
230
231
1/2
✓ Branch 0 taken 2435 times.
✗ Branch 1 not taken.
4870 if (new_dist < 0) {
232
22/44
✓ Branch 1 taken 2435 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2435 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2435 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2435 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2435 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2435 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2435 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2435 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2435 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2435 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2435 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 2435 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2435 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2435 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2435 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 2435 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 2435 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 2435 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 2435 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 2435 times.
✗ Branch 62 not taken.
✓ Branch 64 taken 2435 times.
✗ Branch 65 not taken.
✗ Branch 75 not taken.
✓ Branch 76 taken 2435 times.
4870 EIGEN_VECTOR_IS_APPROX(
233 contact.normal, -(new_cp2 - new_cp1).normalized(), epa_tolerance);
234 }
235 }
236 4872 }
237 }
238 864 }
239
240 template <int VecSize>
241 444 Eigen::Matrix<Scalar, VecSize, 1> generateRandomVector(Scalar min, Scalar max) {
242 typedef Eigen::Matrix<Scalar, VecSize, 1> VecType;
243 // Generate a random vector in the [min, max] range
244
7/14
✓ Branch 1 taken 222 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 222 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 222 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 222 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 222 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 222 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 222 times.
✗ Branch 20 not taken.
444 VecType v = VecType::Random() * (max - min) * 0.5 +
245
1/2
✓ Branch 1 taken 222 times.
✗ Branch 2 not taken.
444 VecType::Ones() * (max + min) * 0.5;
246 444 return v;
247 }
248
249 290 Scalar generateRandomNumber(Scalar min, Scalar max) {
250 290 Scalar r = static_cast<Scalar>(rand()) / static_cast<Scalar>(RAND_MAX);
251 290 r = 2 * r - 1;
252 290 const Scalar half(0.5);
253 290 return r * (max - min) * half + (max + min) * half;
254 }
255
256
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(test_normal_and_nearest_points_sphere_sphere) {
257
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
258
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 Vec2s radii = generateRandomVector<2>(Scalar(0.05), 1);
259
4/8
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
20 shared_ptr<Sphere> o1(new Sphere(radii(0)));
260
4/8
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
20 shared_ptr<Sphere> o2(new Sphere(radii(1)));
261
262
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
263 20 }
264 2 }
265
266
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(test_normal_and_nearest_points_sphere_capsule) {
267
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
268
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 Vec2s radii = generateRandomVector<2>(Scalar(0.05), 1);
269 20 Scalar h = generateRandomNumber(Scalar(0.15), 1);
270
4/8
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
20 shared_ptr<Sphere> o1(new Sphere(radii(0)));
271
4/8
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
20 shared_ptr<Capsule> o2(new Capsule(radii(1), h));
272
273
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
274
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
275 20 }
276 2 }
277
278
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(test_normal_and_nearest_points_sphere_box) {
279
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
280
4/8
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
20 shared_ptr<Box> o1(new Box(generateRandomVector<3>(Scalar(0.05), 1)));
281
3/6
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 10 times.
✗ Branch 9 not taken.
20 shared_ptr<Sphere> o2(new Sphere(generateRandomNumber(Scalar(0.05), 1)));
282
283
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
284
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
285 20 }
286 2 }
287
288
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(test_normal_and_nearest_points_mesh_mesh) {
289
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
290 Convex<Triangle> o1_ = constructPolytopeFromEllipsoid(
291
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 Ellipsoid(generateRandomVector<3>(Scalar(0.05), 1)));
292 shared_ptr<Convex<Triangle>> o1(new Convex<Triangle>(
293
3/6
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 10 times.
✗ Branch 10 not taken.
40 o1_.points, o1_.num_points, o1_.polygons, o1_.num_polygons));
294 Convex<Triangle> o2_ = constructPolytopeFromEllipsoid(
295
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 Ellipsoid(generateRandomVector<3>(Scalar(0.05), 1)));
296 shared_ptr<Convex<Triangle>> o2(new Convex<Triangle>(
297
3/6
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 10 times.
✗ Branch 10 not taken.
40 o2_.points, o2_.num_points, o2_.polygons, o2_.num_polygons));
298
299 20 size_t gjk_max_iterations = GJK_DEFAULT_MAX_ITERATIONS;
300 20 Scalar gjk_tolerance = GJK_DEFAULT_TOLERANCE;
301 20 size_t epa_max_iterations = EPA_DEFAULT_MAX_ITERATIONS;
302 20 Scalar epa_tolerance = EPA_DEFAULT_TOLERANCE;
303
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get(), gjk_max_iterations,
304 gjk_tolerance, epa_max_iterations,
305 epa_tolerance);
306 20 }
307 2 }
308
309
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(test_normal_and_nearest_points_mesh_box) {
310 Convex<Triangle> o1_ = constructPolytopeFromEllipsoid(
311
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 Ellipsoid(generateRandomVector<3>(Scalar(0.05), 1)));
312 shared_ptr<Convex<Triangle>> o1(new Convex<Triangle>(
313
3/6
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
4 o1_.points, o1_.num_points, o1_.polygons, o1_.num_polygons));
314
4/8
✓ 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.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
2 shared_ptr<Box> o2(new Box(generateRandomVector<3>(Scalar(0.05), 1)));
315
316
1/2
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
2 test_normal_and_nearest_points(*o1.get(), *o2.get());
317
1/2
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
2 test_normal_and_nearest_points(*o2.get(), *o1.get());
318 2 }
319
320
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(test_normal_and_nearest_points_mesh_ellipsoid) {
321
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
322 Convex<Triangle> o1_ = constructPolytopeFromEllipsoid(
323
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 Ellipsoid(generateRandomVector<3>(Scalar(0.05), 1)));
324 shared_ptr<Convex<Triangle>> o1(new Convex<Triangle>(
325
3/6
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 10 times.
✗ Branch 10 not taken.
40 o1_.points, o1_.num_points, o1_.polygons, o1_.num_polygons));
326 shared_ptr<Ellipsoid> o2(
327
4/8
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
20 new Ellipsoid(generateRandomVector<3>(Scalar(0.05), 1)));
328
329 20 Scalar gjk_tolerance = Scalar(1e-6);
330 // With EPA's tolerance set at 1e-3, the precision on the normal, contact
331 // points and penetration depth is on the order of the milimeter. However,
332 // EPA (currently) cannot converge to lower tolerances on strictly convex
333 // shapes in a reasonable amount of iterations.
334 20 Scalar epa_tolerance = Scalar(1e-3);
335
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get(),
336 GJK_DEFAULT_MAX_ITERATIONS, gjk_tolerance,
337 EPA_DEFAULT_MAX_ITERATIONS, epa_tolerance);
338
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get(),
339 GJK_DEFAULT_MAX_ITERATIONS, gjk_tolerance,
340 EPA_DEFAULT_MAX_ITERATIONS, epa_tolerance);
341 20 }
342 2 }
343
344
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(test_normal_and_nearest_points_ellipsoid_ellipsoid) {
345
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
346 shared_ptr<Ellipsoid> o1(
347
4/8
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
20 new Ellipsoid(generateRandomVector<3>(Scalar(0.05), 1.0)));
348 shared_ptr<Ellipsoid> o2(
349
4/8
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
20 new Ellipsoid(generateRandomVector<3>(Scalar(0.05), 1.0)));
350
351 20 size_t gjk_max_iterations = GJK_DEFAULT_MAX_ITERATIONS;
352 20 Scalar gjk_tolerance = Scalar(1e-6);
353 // With EPA's tolerance set at 1e-3, the precision on the normal, contact
354 // points and penetration depth is on the order of the milimeter. However,
355 // EPA (currently) cannot converge to lower tolerances on strictly convex
356 // shapes in a reasonable amount of iterations.
357 20 size_t epa_max_iterations = 250;
358 20 Scalar epa_tolerance = Scalar(1e-3);
359 // For EPA on ellipsoids, we need to increase the number of iterations in
360 // this test. This is simply because this test checks **a lot** of cases and
361 // it can generate some of the worst cases for EPA. We don't want to
362 // increase the tolerance too much because otherwise the test would not
363 // work.
364
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get(), gjk_max_iterations,
365 gjk_tolerance, epa_max_iterations,
366 epa_tolerance);
367 20 }
368 2 }
369
370
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(test_normal_and_nearest_points_box_plane) {
371
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
372
4/8
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
20 shared_ptr<Box> o1(new Box(generateRandomVector<3>(Scalar(0.05), 1)));
373 20 const Scalar half(0.5);
374 20 Scalar offset = generateRandomNumber(-half, half);
375
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
20 Vec3s n = Vec3s::Random();
376
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 n.normalize();
377
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Plane> o2(new Plane(n, offset));
378
379
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
380
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
381 20 }
382 2 }
383
384
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(test_normal_and_nearest_points_box_halfspace) {
385
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
386
4/8
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
20 shared_ptr<Box> o1(new Box(generateRandomVector<3>(Scalar(0.05), 1)));
387 20 Scalar offset = Scalar(0.1);
388
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
20 Vec3s n = Vec3s::Random();
389
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 n.normalize();
390
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Halfspace> o2(new Halfspace(n, offset));
391
392
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
393
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
394 20 }
395 2 }
396
397
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(test_normal_and_nearest_points_capsule_halfspace) {
398
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
399 20 Scalar r = generateRandomNumber(Scalar(0.05), 1);
400 20 Scalar h = generateRandomNumber(Scalar(0.15), 1);
401
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Capsule> o1(new Capsule(r, h));
402 20 const Scalar half(0.5);
403 20 Scalar offset = generateRandomNumber(-half, half);
404
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
20 Vec3s n = Vec3s::Random();
405
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 n.normalize();
406
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Halfspace> o2(new Halfspace(n, offset));
407
408
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
409
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
410 20 }
411 2 }
412
413
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(test_normal_and_nearest_points_sphere_halfspace) {
414
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
415
3/6
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 10 times.
✗ Branch 9 not taken.
20 shared_ptr<Sphere> o1(new Sphere(generateRandomNumber(Scalar(0.05), 1)));
416 20 const Scalar half(0.5);
417 20 Scalar offset = generateRandomNumber(-half, half);
418
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
20 Vec3s n = Vec3s::Random();
419
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 n.normalize();
420
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Halfspace> o2(new Halfspace(n, offset));
421
422
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
423
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
424 20 }
425 2 }
426
427
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(test_normal_and_nearest_points_sphere_plane) {
428
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
429
3/6
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 10 times.
✗ Branch 9 not taken.
20 shared_ptr<Sphere> o1(new Sphere(generateRandomNumber(Scalar(0.05), 1)));
430 20 const Scalar half(0.5);
431 20 Scalar offset = generateRandomNumber(-half, half);
432
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
20 Vec3s n = Vec3s::Random();
433
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 n.normalize();
434
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Plane> o2(new Plane(n, offset));
435
436
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
437
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
438 20 }
439 2 }
440
441
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(test_normal_and_nearest_points_mesh_halfspace) {
442
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
443 Convex<Triangle> o1_ = constructPolytopeFromEllipsoid(
444
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 Ellipsoid(generateRandomVector<3>(Scalar(0.05), 1)));
445 shared_ptr<Convex<Triangle>> o1(new Convex<Triangle>(
446
3/6
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 10 times.
✗ Branch 10 not taken.
40 o1_.points, o1_.num_points, o1_.polygons, o1_.num_polygons));
447 20 const Scalar half(0.5);
448 20 Scalar offset = generateRandomNumber(-half, half);
449
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
20 Vec3s n = Vec3s::Random();
450
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 n.normalize();
451
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Halfspace> o2(new Halfspace(n, offset));
452
453
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
454
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
455 20 }
456 2 }
457
458
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(test_normal_and_nearest_points_cone_cylinder) {
459
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
460
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 Vec2s r = generateRandomVector<2>(Scalar(0.05), 1);
461
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 Vec2s h = generateRandomVector<2>(Scalar(0.15), 1);
462
5/10
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 10 times.
✗ Branch 14 not taken.
20 shared_ptr<Cone> o1(new Cone(r(0), h(0)));
463
5/10
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 10 times.
✗ Branch 14 not taken.
20 shared_ptr<Cylinder> o2(new Cylinder(r(1), h(1)));
464
465 20 size_t gjk_max_iterations = GJK_DEFAULT_MAX_ITERATIONS;
466 20 Scalar gjk_tolerance = Scalar(1e-6);
467 20 size_t epa_max_iterations = 250;
468 20 Scalar epa_tolerance = Scalar(1e-3);
469
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get(), gjk_max_iterations,
470 gjk_tolerance, epa_max_iterations,
471 epa_tolerance);
472
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get(), gjk_max_iterations,
473 gjk_tolerance, epa_max_iterations,
474 epa_tolerance);
475 20 }
476 2 }
477
478
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(test_normal_and_nearest_points_cylinder_ellipsoid) {
479
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
480 shared_ptr<Ellipsoid> o1(
481
4/8
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
20 new Ellipsoid(generateRandomVector<3>(Scalar(0.05), 1)));
482
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 Vec2s r = generateRandomVector<2>(Scalar(0.05), 1);
483
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 Vec2s h = generateRandomVector<2>(Scalar(0.15), 1);
484
5/10
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 10 times.
✗ Branch 14 not taken.
20 shared_ptr<Cylinder> o2(new Cylinder(r(1), h(1)));
485
486 20 size_t gjk_max_iterations = GJK_DEFAULT_MAX_ITERATIONS;
487 20 Scalar gjk_tolerance = Scalar(1e-6);
488 20 size_t epa_max_iterations = 250;
489 20 Scalar epa_tolerance = Scalar(1e-3);
490
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get(), gjk_max_iterations,
491 gjk_tolerance, epa_max_iterations,
492 epa_tolerance);
493
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get(), gjk_max_iterations,
494 gjk_tolerance, epa_max_iterations,
495 epa_tolerance);
496 20 }
497 2 }
498
499
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(test_normal_and_nearest_points_cone_halfspace) {
500
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
501 20 Scalar r = generateRandomNumber(Scalar(0.05), 1);
502 20 Scalar h = generateRandomNumber(Scalar(0.15), 1);
503
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Cone> o1(new Cone(r, h));
504 20 const Scalar half(0.5);
505 20 Scalar offset = generateRandomNumber(-half, half);
506
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
20 Vec3s n = Vec3s::Random();
507
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 n.normalize();
508
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Halfspace> o2(new Halfspace(n, offset));
509
510
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
511
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
512 20 }
513 2 }
514
515
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(test_normal_and_nearest_points_cylinder_halfspace) {
516
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
517 20 Scalar r = generateRandomNumber(Scalar(0.05), 1);
518 20 Scalar h = generateRandomNumber(Scalar(0.15), 1);
519
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Cylinder> o1(new Cylinder(r, h));
520 20 const Scalar half(0.5);
521 20 Scalar offset = generateRandomNumber(-half, half);
522
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
20 Vec3s n = Vec3s::Random();
523
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 n.normalize();
524
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Halfspace> o2(new Halfspace(n, offset));
525
526
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
527
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
528 20 }
529 2 }
530
531
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(test_normal_and_nearest_points_cone_plane) {
532
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
533 20 Scalar r = generateRandomNumber(Scalar(0.05), 1);
534 20 Scalar h = generateRandomNumber(Scalar(0.15), 1);
535
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Cone> o1(new Cone(r, h));
536 20 const Scalar half(0.5);
537 20 Scalar offset = generateRandomNumber(-half, half);
538
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
20 Vec3s n = Vec3s::Random();
539
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 n.normalize();
540
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Plane> o2(new Plane(n, offset));
541
542
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
543
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
544 20 }
545 2 }
546
547
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(test_normal_and_nearest_points_cylinder_plane) {
548
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
549 20 Scalar r = generateRandomNumber(Scalar(0.05), 1);
550 20 Scalar h = generateRandomNumber(Scalar(0.15), 1);
551
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Cylinder> o1(new Cylinder(r, h));
552 20 const Scalar half(0.5);
553 20 Scalar offset = generateRandomNumber(-half, half);
554
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
20 Vec3s n = Vec3s::Random();
555
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 n.normalize();
556
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Plane> o2(new Plane(n, offset));
557
558
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
559
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
560 20 }
561 2 }
562
563
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(test_normal_and_nearest_points_capsule_plane) {
564
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
565 20 Scalar r = generateRandomNumber(Scalar(0.05), 1);
566 20 Scalar h = generateRandomNumber(Scalar(0.15), 1);
567
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Capsule> o1(new Capsule(r, h));
568 20 const Scalar half(0.5);
569 20 Scalar offset = generateRandomNumber(-half, half);
570
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
20 Vec3s n = Vec3s::Random();
571
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 n.normalize();
572
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Plane> o2(new Plane(n, offset));
573
574
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
575
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
576 20 }
577 2 }
578
579
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(test_normal_and_nearest_points_capsule_capsule) {
580
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
581
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 Vec2s r = generateRandomVector<2>(Scalar(0.05), 1);
582
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 Vec2s h = generateRandomVector<2>(Scalar(0.15), 1);
583
5/10
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 10 times.
✗ Branch 14 not taken.
20 shared_ptr<Capsule> o1(new Capsule(r(0), h(0)));
584
5/10
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 10 times.
✗ Branch 14 not taken.
20 shared_ptr<Capsule> o2(new Capsule(r(1), h(1)));
585
586
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
587
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
588 20 }
589 2 }
590
591
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(test_normal_and_nearest_points_sphere_cylinder) {
592
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
593
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 Vec2s r = generateRandomVector<2>(Scalar(0.05), 1);
594 20 Scalar h = generateRandomNumber(Scalar(0.15), 1);
595
4/8
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
20 shared_ptr<Sphere> o1(new Sphere(r(0)));
596
4/8
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
20 shared_ptr<Cylinder> o2(new Cylinder(r(1), h));
597
598
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
599
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
600 20 }
601 2 }
602
603
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(test_normal_and_nearest_points_ellipsoid_halfspace) {
604
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
605 20 Scalar offset = generateRandomNumber(Scalar(0.15), 1);
606
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
20 Vec3s n = Vec3s::Random();
607
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 n.normalize();
608 shared_ptr<Ellipsoid> o1(
609
4/8
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
20 new Ellipsoid(generateRandomVector<3>(Scalar(0.05), 1)));
610
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Halfspace> o2(new Halfspace(n, offset));
611
612
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
613
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
614 20 }
615 2 }
616
617
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(test_normal_and_nearest_points_ellipsoid_plane) {
618
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 1 times.
22 for (size_t i = 0; i < 10; ++i) {
619 20 Scalar offset = generateRandomNumber(Scalar(0.15), 1);
620
2/4
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
20 Vec3s n = Vec3s::Random();
621
1/2
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
20 n.normalize();
622 shared_ptr<Ellipsoid> o1(
623
4/8
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 10 times.
✗ Branch 11 not taken.
20 new Ellipsoid(generateRandomVector<3>(Scalar(0.05), 1)));
624
3/6
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
20 shared_ptr<Plane> o2(new Plane(n, offset));
625
626
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o1.get(), *o2.get());
627
1/2
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
20 test_normal_and_nearest_points(*o2.get(), *o1.get());
628 20 }
629 2 }
630
631 2 void test_normal_and_nearest_points(const BVHModel<OBBRSS>& o1,
632 const Halfspace& o2) {
633 // Generate random poses for o2
634 #ifndef NDEBUG // if debug mode
635 2 std::size_t n = 1;
636 #else
637 size_t n = 10000;
638 #endif
639 2 Scalar extents[] = {-2., -2., -2., 2., 2., 2.};
640 2 std::vector<Transform3s> transforms;
641
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 generateRandomTransforms(extents, transforms, n);
642
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 Transform3s tf1 = Transform3s::Identity();
643
2/4
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
2 transforms[0] = Transform3s::Identity();
644
645
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 CollisionRequest colreq;
646 2 colreq.distance_upper_bound = std::numeric_limits<Scalar>::max();
647 2 colreq.num_max_contacts = 100;
648
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 CollisionResult colres;
649
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 DistanceRequest distreq;
650
1/2
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2 DistanceResult distres;
651
652
2/2
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
4 for (size_t i = 0; i < n; i++) {
653
1/2
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
2 Transform3s tf2 = transforms[i];
654
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 colres.clear();
655
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 distres.clear();
656
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 size_t col = collide(&o1, tf1, &o2, tf2, colreq, colres);
657
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 Scalar dist = distance(&o1, tf1, &o2, tf2, distreq, distres);
658
659
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2 if (col) {
660
6/12
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
2 BOOST_CHECK(dist <= 0.);
661
6/12
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
2 BOOST_CHECK_CLOSE(dist, distres.min_distance, 1e-6);
662
2/2
✓ Branch 1 taken 22 times.
✓ Branch 2 taken 2 times.
24 for (size_t c = 0; c < colres.numContacts(); c++) {
663
2/4
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 22 times.
✗ Branch 5 not taken.
22 Contact contact = colres.getContact(c);
664
6/12
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 22 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 22 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 22 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 22 times.
22 BOOST_CHECK(contact.penetration_depth <= 0);
665
6/12
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 22 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 22 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 22 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 22 times.
22 BOOST_CHECK(contact.penetration_depth >= colres.distance_lower_bound);
666
667
1/2
✓ Branch 2 taken 22 times.
✗ Branch 3 not taken.
22 Vec3s cp1 = contact.nearest_points[0];
668
1/2
✓ Branch 2 taken 22 times.
✗ Branch 3 not taken.
22 Vec3s cp2 = contact.nearest_points[1];
669
8/16
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 22 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 22 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 22 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 22 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 22 times.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 22 times.
22 BOOST_CHECK_CLOSE(contact.penetration_depth, -(cp2 - cp1).norm(), 1e-6);
670
20/40
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 22 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 22 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 22 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 22 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 22 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 22 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 22 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 22 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 22 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 22 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 22 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 22 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 22 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 22 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 22 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 22 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 22 times.
✗ Branch 59 not taken.
✗ Branch 69 not taken.
✓ Branch 70 taken 22 times.
22 EIGEN_VECTOR_IS_APPROX(cp1,
671 cp2 - contact.penetration_depth * contact.normal,
672 Scalar(1e-6));
673
674
2/4
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 22 times.
✗ Branch 5 not taken.
22 Vec3s separation_vector = contact.penetration_depth * contact.normal;
675
18/36
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 22 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 22 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 22 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 22 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 22 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 22 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 22 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 22 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 22 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 22 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 22 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 22 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 22 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 22 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 22 times.
✗ Branch 53 not taken.
✗ Branch 63 not taken.
✓ Branch 64 taken 22 times.
22 EIGEN_VECTOR_IS_APPROX(separation_vector, cp2 - cp1, Scalar(1e-6));
676
677
1/2
✓ Branch 0 taken 22 times.
✗ Branch 1 not taken.
22 if (dist < 0) {
678
22/44
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 22 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 22 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 22 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 22 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 22 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 22 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 22 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 22 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 22 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 22 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 22 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 22 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 22 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 22 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 22 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 22 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 22 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 22 times.
✗ Branch 62 not taken.
✓ Branch 64 taken 22 times.
✗ Branch 65 not taken.
✗ Branch 75 not taken.
✓ Branch 76 taken 22 times.
22 EIGEN_VECTOR_IS_APPROX(contact.normal, -(cp2 - cp1).normalized(),
679 Scalar(1e-6));
680 }
681 }
682 } else {
683 BOOST_CHECK(dist >= 0.);
684 BOOST_CHECK_CLOSE(distres.min_distance, dist, 1e-6);
685 BOOST_CHECK_CLOSE(dist, colres.distance_lower_bound, 1e-6);
686 }
687 }
688 2 }
689
690 1 void test_normal_and_nearest_points(const Halfspace& o1,
691 const BVHModel<OBBRSS>& o2) {
692 1 test_normal_and_nearest_points(o2, o1);
693 1 }
694
695
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(test_normal_and_nearest_points_bvh_halfspace) {
696
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Box* box_ptr = new coal::Box(1, 1, 1);
697
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 coal::CollisionGeometryPtr_t b1(box_ptr);
698
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 BVHModel<coal::OBBRSS> o1 = BVHModel<OBBRSS>();
699
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 generateBVHModel(o1, *box_ptr, Transform3s());
700
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 o1.buildConvexRepresentation(false);
701
702 2 Scalar offset = Scalar(0.1);
703
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Vec3s n = Vec3s::Random();
704
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 n.normalize();
705
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<Halfspace> o2(new Halfspace(n, offset));
706
707
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 test_normal_and_nearest_points(o1, *o2.get());
708
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 test_normal_and_nearest_points(*o2.get(), o1);
709 2 }
710