GCC Code Coverage Report


Directory: ./
File: test/gjk_convergence_criterion.cpp
Date: 2025-04-01 09:23:31
Exec Total Coverage
Lines: 70 72 97.2%
Branches: 265 529 50.1%

Line Branch Exec Source
1 /*
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2022, 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_NESTEROV_GJK
38 #include <boost/test/included/unit_test.hpp>
39 #include <boost/test/tools/old/interface.hpp>
40
41 #include <Eigen/Geometry>
42 #include "coal/data_types.h"
43 #include "coal/narrowphase/narrowphase.h"
44 #include "coal/shape/geometric_shapes.h"
45 #include "coal/internal/tools.h"
46
47 #include "utility.h"
48
49 using coal::Box;
50 using coal::GJKConvergenceCriterion;
51 using coal::GJKConvergenceCriterionType;
52 using coal::GJKSolver;
53 using coal::Scalar;
54 using coal::ShapeBase;
55 using coal::SolverScalar;
56 using coal::support_func_guess_t;
57 using coal::Transform3s;
58 using coal::Vec3ps;
59 using coal::Vec3s;
60 using coal::details::GJK;
61 using coal::details::MinkowskiDiff;
62 using std::size_t;
63
64
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(set_cv_criterion) {
65
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 GJKSolver solver;
66
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 GJK gjk(128, Scalar(1e-6));
67
68 // Checking defaults
69
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
2 BOOST_CHECK(solver.gjk.convergence_criterion ==
70 GJKConvergenceCriterion::Default);
71
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
2 BOOST_CHECK(solver.gjk.convergence_criterion_type ==
72 GJKConvergenceCriterionType::Relative);
73
74
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
2 BOOST_CHECK(gjk.convergence_criterion == GJKConvergenceCriterion::Default);
75
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
2 BOOST_CHECK(gjk.convergence_criterion_type ==
76 GJKConvergenceCriterionType::Relative);
77
78 // Checking set
79 2 solver.gjk.convergence_criterion = GJKConvergenceCriterion::DualityGap;
80 2 gjk.convergence_criterion = GJKConvergenceCriterion::DualityGap;
81 2 solver.gjk.convergence_criterion_type = GJKConvergenceCriterionType::Absolute;
82 2 gjk.convergence_criterion_type = GJKConvergenceCriterionType::Absolute;
83
84
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
2 BOOST_CHECK(solver.gjk.convergence_criterion ==
85 GJKConvergenceCriterion::DualityGap);
86
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
2 BOOST_CHECK(solver.gjk.convergence_criterion_type ==
87 GJKConvergenceCriterionType::Absolute);
88
89
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
2 BOOST_CHECK(gjk.convergence_criterion == GJKConvergenceCriterion::DualityGap);
90
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
2 BOOST_CHECK(gjk.convergence_criterion_type ==
91 GJKConvergenceCriterionType::Absolute);
92 2 }
93
94 2 void test_gjk_cv_criterion(const ShapeBase& shape0, const ShapeBase& shape1,
95 const GJKConvergenceCriterionType cv_type) {
96 // Solvers
97 2 unsigned int max_iterations = 128;
98 // by default GJK uses the VDB convergence criterion, which is relative.
99
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 GJK gjk1(max_iterations, Scalar(1e-6));
100
101 Scalar tol;
102
2/3
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 switch (cv_type) {
103 // need to lower the tolerance when absolute
104 1 case GJKConvergenceCriterionType::Absolute:
105 1 tol = Scalar(1e-8);
106 1 break;
107 1 case GJKConvergenceCriterionType::Relative:
108 1 tol = Scalar(1e-6);
109 1 break;
110 default:
111 throw std::logic_error("Wrong convergence criterion type");
112 }
113
114
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 GJK gjk2(max_iterations, tol);
115 2 gjk2.convergence_criterion = GJKConvergenceCriterion::DualityGap;
116 2 gjk2.convergence_criterion_type = cv_type;
117
118
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 GJK gjk3(max_iterations, tol);
119 2 gjk3.convergence_criterion = GJKConvergenceCriterion::Hybrid;
120 2 gjk3.convergence_criterion_type = cv_type;
121
122 // Minkowski difference
123
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
4 MinkowskiDiff mink_diff;
124
125 // Generate random transforms
126 2 size_t n = 1000;
127 2 Scalar extents[] = {-3., -3., 0, 3., 3., 3.};
128 4 std::vector<Transform3s> transforms;
129
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 generateRandomTransforms(extents, transforms, n);
130
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 Transform3s identity = Transform3s::Identity();
131
132 // Same init for both solvers
133
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 Vec3s init_guess = Vec3s(1, 0, 0);
134
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 support_func_guess_t init_support_guess;
135
1/2
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
2 init_support_guess.setZero();
136
137 // Run for 3 different cv criterions
138
2/2
✓ Branch 0 taken 2000 times.
✓ Branch 1 taken 2 times.
2002 for (size_t i = 0; i < n; ++i) {
139
1/2
✓ Branch 2 taken 2000 times.
✗ Branch 3 not taken.
2000 mink_diff.set<false>(&shape0, &shape1, identity, transforms[i]);
140
141
2/4
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2000 times.
✗ Branch 5 not taken.
2000 GJK::Status res1 = gjk1.evaluate(mink_diff, init_guess.cast<SolverScalar>(),
142 init_support_guess);
143
6/12
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2000 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 2000 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 2000 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 2000 times.
2000 BOOST_CHECK(gjk1.getNumIterations() <= max_iterations);
144
1/2
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
2000 Vec3ps ray1 = gjk1.ray;
145
2/4
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2000 times.
✗ Branch 5 not taken.
2000 res1 = gjk1.evaluate(mink_diff, init_guess.cast<SolverScalar>(),
146 init_support_guess);
147
6/12
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2000 times.
2000 BOOST_CHECK(res1 != GJK::Status::Failed);
148
16/32
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2000 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2000 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2000 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2000 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2000 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2000 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2000 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2000 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2000 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2000 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 2000 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2000 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2000 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2000 times.
✗ Branch 47 not taken.
✗ Branch 57 not taken.
✓ Branch 58 taken 2000 times.
2000 EIGEN_VECTOR_IS_APPROX(gjk1.ray, ray1, SolverScalar(1e-8));
149
150
2/4
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2000 times.
✗ Branch 5 not taken.
2000 GJK::Status res2 = gjk2.evaluate(mink_diff, init_guess.cast<SolverScalar>(),
151 init_support_guess);
152
6/12
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2000 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 2000 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 2000 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 2000 times.
2000 BOOST_CHECK(gjk2.getNumIterations() <= max_iterations);
153
1/2
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
2000 Vec3ps ray2 = gjk2.ray;
154
2/4
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2000 times.
✗ Branch 5 not taken.
2000 res2 = gjk2.evaluate(mink_diff, init_guess.cast<SolverScalar>(),
155 init_support_guess);
156
6/12
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2000 times.
2000 BOOST_CHECK(res2 != GJK::Status::Failed);
157
16/32
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2000 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2000 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2000 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2000 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2000 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2000 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2000 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2000 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2000 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2000 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 2000 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2000 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2000 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2000 times.
✗ Branch 47 not taken.
✗ Branch 57 not taken.
✓ Branch 58 taken 2000 times.
2000 EIGEN_VECTOR_IS_APPROX(gjk2.ray, ray2, SolverScalar(1e-8));
158
159
2/4
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2000 times.
✗ Branch 5 not taken.
2000 GJK::Status res3 = gjk3.evaluate(mink_diff, init_guess.cast<SolverScalar>(),
160 init_support_guess);
161
6/12
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2000 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 2000 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 2000 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 2000 times.
2000 BOOST_CHECK(gjk3.getNumIterations() <= max_iterations);
162
1/2
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
2000 Vec3ps ray3 = gjk3.ray;
163
2/4
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2000 times.
✗ Branch 5 not taken.
2000 res3 = gjk3.evaluate(mink_diff, init_guess.cast<SolverScalar>(),
164 init_support_guess);
165
6/12
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 2000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 2000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 2000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2000 times.
2000 BOOST_CHECK(res3 != GJK::Status::Failed);
166
16/32
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2000 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2000 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2000 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2000 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2000 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2000 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2000 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2000 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2000 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2000 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 2000 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2000 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2000 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2000 times.
✗ Branch 47 not taken.
✗ Branch 57 not taken.
✓ Branch 58 taken 2000 times.
2000 EIGEN_VECTOR_IS_APPROX(gjk3.ray, ray3, SolverScalar(1e-8));
167
168 // check that solutions are close enough
169
16/32
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2000 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2000 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2000 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2000 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2000 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2000 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2000 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2000 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2000 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2000 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 2000 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2000 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2000 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2000 times.
✗ Branch 47 not taken.
✗ Branch 57 not taken.
✓ Branch 58 taken 2000 times.
2000 EIGEN_VECTOR_IS_APPROX(gjk1.ray, gjk2.ray, SolverScalar(1e-4));
170
16/32
✓ Branch 1 taken 2000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 2000 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 2000 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 2000 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 2000 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 2000 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 2000 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 2000 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 2000 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 2000 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 2000 times.
✗ Branch 35 not taken.
✓ Branch 37 taken 2000 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 2000 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 2000 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 2000 times.
✗ Branch 47 not taken.
✗ Branch 57 not taken.
✓ Branch 58 taken 2000 times.
2000 EIGEN_VECTOR_IS_APPROX(gjk1.ray, gjk3.ray, SolverScalar(1e-4));
171 }
172 2 }
173
174
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(cv_criterion_same_solution) {
175
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Box box0 = Box(Scalar(0.1), Scalar(0.2), Scalar(0.3));
176
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Box box1 = Box(Scalar(1.1), Scalar(1.2), Scalar(1.3));
177
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_gjk_cv_criterion(box0, box1, GJKConvergenceCriterionType::Absolute);
178
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_gjk_cv_criterion(box0, box1, GJKConvergenceCriterionType::Relative);
179 2 }
180