GCC Code Coverage Report


Directory: ./
File: test/capsule_capsule.cpp
Date: 2025-04-01 09:23:31
Exec Total Coverage
Lines: 189 190 99.5%
Branches: 552 1092 50.5%

Line Branch Exec Source
1 /*
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2011-2014, Willow Garage, Inc.
5 * Copyright (c) 2014-2015, Open Source Robotics Foundation
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer in the documentation and/or other materials provided
17 * with the distribution.
18 * * Neither the name of Open Source Robotics Foundation nor the names of its
19 * contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 * POSSIBILITY OF SUCH DAMAGE.
34 */
35
36 /** \author Karsten Knese <Karsten.Knese@googlemail.com> */
37
38 #define BOOST_TEST_MODULE COAL_CAPSULE_CAPSULE
39 #include <boost/test/included/unit_test.hpp>
40
41 #define CHECK_CLOSE_TO_0(x, eps) BOOST_CHECK_CLOSE((x + 1.0), (1.0), (eps))
42
43 #include <cmath>
44 #include <iostream>
45 #include "coal/distance.h"
46 #include "coal/collision.h"
47 #include "coal/math/transform.h"
48 #include "coal/collision.h"
49 #include "coal/collision_object.h"
50 #include "coal/shape/geometric_shapes.h"
51
52 #include "utility.h"
53
54 using namespace coal;
55 using Quat = Eigen::Quaternion<Scalar>;
56 using Vec4s = Eigen::Matrix<Scalar, 4, 1>;
57
58
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(collision_capsule_capsule_trivial) {
59 2 const Scalar radius = 1.;
60
61
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 CollisionGeometryPtr_t c1(new Capsule(radius, 0.));
62
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 CollisionGeometryPtr_t c2(new Capsule(radius, 0.));
63
64
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 CollisionGeometryPtr_t s1(new Sphere(radius));
65
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 CollisionGeometryPtr_t s2(new Sphere(radius));
66
67 #ifndef NDEBUG
68 2 int num_tests = 1e3;
69 #else
70 int num_tests = 1e6;
71 #endif
72
73
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s tf1;
74
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s tf2;
75
76
2/2
✓ Branch 0 taken 1000 times.
✓ Branch 1 taken 1 times.
2002 for (int i = 0; i < num_tests; ++i) {
77
3/6
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1000 times.
✗ Branch 8 not taken.
2000 Vec3s p1 = Vec3s::Random() * (2. * radius);
78
3/6
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1000 times.
✗ Branch 8 not taken.
2000 Vec3s p2 = Vec3s::Random() * (2. * radius);
79
80
4/8
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1000 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1000 times.
✗ Branch 11 not taken.
2000 Matrix3s rot1 = Quat(Vec4s::Random().normalized()).toRotationMatrix();
81
4/8
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1000 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1000 times.
✗ Branch 11 not taken.
2000 Matrix3s rot2 = Quat(Vec4s::Random().normalized()).toRotationMatrix();
82
83
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 tf1.setTranslation(p1);
84
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 tf1.setRotation(rot1);
85
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 tf2.setTranslation(p2);
86
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 tf2.setRotation(rot2);
87
88
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionObject capsule_o1(c1, tf1);
89
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionObject capsule_o2(c2, tf2);
90
91
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionObject sphere_o1(s1, tf1);
92
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionObject sphere_o2(s2, tf2);
93
94 // Enable computation of nearest points
95
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionRequest collisionRequest;
96
2/4
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
2000 CollisionResult capsule_collisionResult, sphere_collisionResult;
97
98
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 size_t sphere_num_collisions = collide(
99 2000 &sphere_o1, &sphere_o2, collisionRequest, sphere_collisionResult);
100
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 size_t capsule_num_collisions = collide(
101 2000 &capsule_o1, &capsule_o2, collisionRequest, capsule_collisionResult);
102
103
5/10
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 1000 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1000 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 1000 times.
2000 BOOST_CHECK_EQUAL(sphere_num_collisions, capsule_num_collisions);
104
3/4
✓ Branch 0 taken 733 times.
✓ Branch 1 taken 267 times.
✓ Branch 2 taken 733 times.
✗ Branch 3 not taken.
2000 if (sphere_num_collisions == 0 && capsule_num_collisions == 0)
105
6/12
✓ Branch 1 taken 733 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 733 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 733 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 733 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 733 times.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 733 times.
1466 BOOST_CHECK_CLOSE(sphere_collisionResult.distance_lower_bound,
106 capsule_collisionResult.distance_lower_bound, 1e-6);
107 2000 }
108 2 }
109
110
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(collision_capsule_capsule_aligned) {
111 2 const Scalar radius = Scalar(0.01);
112 2 const Scalar length = Scalar(0.2);
113
114
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 CollisionGeometryPtr_t c1(new Capsule(radius, length));
115
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 CollisionGeometryPtr_t c2(new Capsule(radius, length));
116 #ifndef NDEBUG
117 2 int num_tests = 1e3;
118 #else
119 int num_tests = 1e6;
120 #endif
121
122
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s tf1;
123
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s tf2;
124
125
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Vec3s p1 = Vec3s::Zero();
126 Vec3s p2_no_collision =
127 Vec3s(0, 0,
128 Scalar(2 * (length / 2. + radius) +
129
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 1e-3)); // because capsule are along the Z axis
130
131
2/2
✓ Branch 0 taken 1000 times.
✓ Branch 1 taken 1 times.
2002 for (int i = 0; i < num_tests; ++i) {
132
4/8
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1000 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1000 times.
✗ Branch 11 not taken.
2000 Matrix3s rot = Quat(Vec4s::Random().normalized()).toRotationMatrix();
133
134
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 tf1.setTranslation(p1);
135
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 tf1.setRotation(rot);
136
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 tf2.setTranslation(p2_no_collision);
137
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 tf2.setRotation(rot);
138
139
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionObject capsule_o1(c1, tf1);
140
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionObject capsule_o2(c2, tf2);
141
142 // Enable computation of nearest points
143
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionRequest collisionRequest;
144
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionResult capsule_collisionResult;
145
146
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 size_t capsule_num_collisions = collide(
147 &capsule_o1, &capsule_o2, collisionRequest, capsule_collisionResult);
148
149
6/12
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
2000 BOOST_CHECK(capsule_num_collisions == 0);
150 2000 }
151
152 Vec3s p2_with_collision =
153
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 Vec3s(0, 0, Scalar(std::min(length / 2, radius) * (1. - 1e-2)));
154
2/2
✓ Branch 0 taken 1000 times.
✓ Branch 1 taken 1 times.
2002 for (int i = 0; i < num_tests; ++i) {
155
4/8
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1000 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1000 times.
✗ Branch 11 not taken.
2000 Matrix3s rot = Quat(Vec4s::Random().normalized()).toRotationMatrix();
156
157
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 tf1.setTranslation(p1);
158
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 tf1.setRotation(rot);
159
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 tf2.setTranslation(p2_with_collision);
160
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 tf2.setRotation(rot);
161
162
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionObject capsule_o1(c1, tf1);
163
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionObject capsule_o2(c2, tf2);
164
165 // Enable computation of nearest points
166
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionRequest collisionRequest;
167
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionResult capsule_collisionResult;
168
169
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 size_t capsule_num_collisions = collide(
170 &capsule_o1, &capsule_o2, collisionRequest, capsule_collisionResult);
171
172
6/12
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
2000 BOOST_CHECK(capsule_num_collisions > 0);
173 2000 }
174
175
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 p2_no_collision = Vec3s(0, 0, Scalar(2 * (length / 2. + radius) + 1e-3));
176
177
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 Transform3s geom1_placement(Matrix3s::Identity(), Vec3s::Zero());
178
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Transform3s geom2_placement(Matrix3s::Identity(), p2_no_collision);
179
180
2/2
✓ Branch 0 taken 1000 times.
✓ Branch 1 taken 1 times.
2002 for (int i = 0; i < num_tests; ++i) {
181
4/8
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1000 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1000 times.
✗ Branch 11 not taken.
2000 Matrix3s rot = Quat(Vec4s::Random().normalized()).toRotationMatrix();
182
2/4
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
2000 Vec3s trans = Vec3s::Random();
183
184
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 Transform3s displacement(rot, trans);
185
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 Transform3s tf1 = displacement * geom1_placement;
186
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 Transform3s tf2 = displacement * geom2_placement;
187
188
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionObject capsule_o1(c1, tf1);
189
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionObject capsule_o2(c2, tf2);
190
191 // Enable computation of nearest points
192
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionRequest collisionRequest;
193
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionResult capsule_collisionResult;
194
195
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 size_t capsule_num_collisions = collide(
196 &capsule_o1, &capsule_o2, collisionRequest, capsule_collisionResult);
197
198
6/12
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
2000 BOOST_CHECK(capsule_num_collisions == 0);
199 2000 }
200
201 // p2_with_collision =
202 // Vec3s(0.,0.,std::min(length/2.,radius)*(1.-1e-2));
203
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 p2_with_collision = Vec3s(0, 0, Scalar(0.01));
204
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 geom2_placement.setTranslation(p2_with_collision);
205
206
2/2
✓ Branch 0 taken 1000 times.
✓ Branch 1 taken 1 times.
2002 for (int i = 0; i < num_tests; ++i) {
207
4/8
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1000 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1000 times.
✗ Branch 11 not taken.
2000 Matrix3s rot = Quat(Vec4s::Random().normalized()).toRotationMatrix();
208
2/4
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
2000 Vec3s trans = Vec3s::Random();
209
210
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 Transform3s displacement(rot, trans);
211
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 Transform3s tf1 = displacement * geom1_placement;
212
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 Transform3s tf2 = displacement * geom2_placement;
213
214
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionObject capsule_o1(c1, tf1);
215
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionObject capsule_o2(c2, tf2);
216
217 // Enable computation of nearest points
218
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionRequest collisionRequest;
219
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 CollisionResult capsule_collisionResult;
220
221
1/2
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
2000 size_t capsule_num_collisions = collide(
222 &capsule_o1, &capsule_o2, collisionRequest, capsule_collisionResult);
223
224
6/12
✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
2000 BOOST_CHECK(capsule_num_collisions > 0);
225 2000 }
226 2 }
227
228
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(distance_capsulecapsule_origin) {
229
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 CollisionGeometryPtr_t s1(new Capsule(5, 10));
230
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 CollisionGeometryPtr_t s2(new Capsule(5, 10));
231
232
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s tf1;
233
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Transform3s tf2(Vec3s(Scalar(20.1), 0, 0));
234
235
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 CollisionObject o1(s1, tf1);
236
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 CollisionObject o2(s2, tf2);
237
238 // Enable computation of nearest points
239
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 DistanceRequest distanceRequest(true);
240
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 DistanceResult distanceResult;
241
242
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 distance(&o1, &o2, distanceRequest, distanceResult);
243
244
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::cerr << "Applied translation on two capsules";
245
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 std::cerr << " T1 = " << tf1.getTranslation()
246
3/6
✓ 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.
2 << ", T2 = " << tf2.getTranslation() << std::endl;
247
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 std::cerr << "Closest points: p1 = " << distanceResult.nearest_points[0]
248
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 << ", p2 = " << distanceResult.nearest_points[1]
249
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 << ", distance = " << distanceResult.min_distance << std::endl;
250
251
6/12
✓ 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 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1 times.
2 BOOST_CHECK_CLOSE(distanceResult.min_distance, 10.1, 1e-6);
252 2 }
253
254
33/66
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
4 BOOST_AUTO_TEST_CASE(distance_capsulecapsule_transformXY) {
255
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 CollisionGeometryPtr_t s1(new Capsule(5, 10));
256
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 CollisionGeometryPtr_t s2(new Capsule(5, 10));
257
258
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s tf1;
259
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Transform3s tf2(Vec3s(20, 20, 0));
260
261
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 CollisionObject o1(s1, tf1);
262
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 CollisionObject o2(s2, tf2);
263
264 // Enable computation of nearest points
265
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 DistanceRequest distanceRequest(true);
266
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 DistanceResult distanceResult;
267
268
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 distance(&o1, &o2, distanceRequest, distanceResult);
269
270
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::cerr << "Applied translation on two capsules";
271
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 std::cerr << " T1 = " << tf1.getTranslation()
272
3/6
✓ 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.
2 << ", T2 = " << tf2.getTranslation() << std::endl;
273
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 std::cerr << "Closest points: p1 = " << distanceResult.nearest_points[0]
274
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 << ", p2 = " << distanceResult.nearest_points[1]
275
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 << ", distance = " << distanceResult.min_distance << std::endl;
276
277 2 Scalar expected = sqrt(Scalar(800)) - 10;
278
6/12
✓ 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 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1 times.
2 BOOST_CHECK_CLOSE(distanceResult.min_distance, expected, 1e-6);
279 2 }
280
281
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(distance_capsulecapsule_transformZ) {
282
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 CollisionGeometryPtr_t s1(new Capsule(5, 10));
283
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 CollisionGeometryPtr_t s2(new Capsule(5, 10));
284
285
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s tf1;
286
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Transform3s tf2(Vec3s(0, 0, Scalar(20.1)));
287
288
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 CollisionObject o1(s1, tf1);
289
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 CollisionObject o2(s2, tf2);
290
291 // Enable computation of nearest points
292
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 DistanceRequest distanceRequest(true);
293
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 DistanceResult distanceResult;
294
295
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 distance(&o1, &o2, distanceRequest, distanceResult);
296
297
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::cerr << "Applied translation on two capsules";
298
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 std::cerr << " T1 = " << tf1.getTranslation()
299
3/6
✓ 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.
2 << ", T2 = " << tf2.getTranslation() << std::endl;
300
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 std::cerr << "Closest points: p1 = " << distanceResult.nearest_points[0]
301
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 << ", p2 = " << distanceResult.nearest_points[1]
302
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 << ", distance = " << distanceResult.min_distance << std::endl;
303
304
6/12
✓ 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 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1 times.
2 BOOST_CHECK_CLOSE(distanceResult.min_distance, 0.1, 1e-6);
305 2 }
306
307
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(distance_capsulecapsule_transformZ2) {
308
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 CollisionGeometryPtr_t s1(new Capsule(5, 10));
309
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 CollisionGeometryPtr_t s2(new Capsule(5, 10));
310
311
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s tf1;
312
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s tf2(makeQuat(sqrt(Scalar(2)) / 2, 0, sqrt(Scalar(2)) / 2, 0),
313
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
4 Vec3s(0, 0, Scalar(25.1)));
314
315
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 CollisionObject o1(s1, tf1);
316
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 CollisionObject o2(s2, tf2);
317
318 // Enable computation of nearest points
319
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 DistanceRequest distanceRequest(true);
320
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 DistanceResult distanceResult;
321
322
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 distance(&o1, &o2, distanceRequest, distanceResult);
323
324
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::cerr << "Applied rotation and translation on two capsules" << std::endl;
325
3/6
✓ 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.
2 std::cerr << "R1 = " << tf1.getRotation() << std::endl
326
4/8
✓ 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.
2 << "T1 = " << tf1.getTranslation().transpose() << std::endl
327
3/6
✓ 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.
2 << "R2 = " << tf2.getRotation() << std::endl
328
4/8
✓ 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.
2 << "T2 = " << tf2.getTranslation().transpose() << std::endl;
329
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::cerr << "Closest points:" << std::endl
330
3/6
✓ 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.
2 << "p1 = " << distanceResult.nearest_points[0].transpose()
331
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 << std::endl
332
3/6
✓ 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.
2 << "p2 = " << distanceResult.nearest_points[1].transpose()
333
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 << std::endl
334
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 << "distance = " << distanceResult.min_distance << std::endl;
335
336 2 const Vec3s& p1 = distanceResult.nearest_points[0];
337 2 const Vec3s& p2 = distanceResult.nearest_points[1];
338
339
6/12
✓ 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 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1 times.
2 BOOST_CHECK_CLOSE(distanceResult.min_distance, 10.1, 1e-6);
340
7/14
✓ 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 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
2 CHECK_CLOSE_TO_0(p1[0], 1e-4);
341
7/14
✓ 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 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
2 CHECK_CLOSE_TO_0(p1[1], 1e-4);
342
7/14
✓ 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 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
2 BOOST_CHECK_CLOSE(p1[2], 10, 1e-4);
343
7/14
✓ 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 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
2 CHECK_CLOSE_TO_0(p2[0], 1e-4);
344
7/14
✓ 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 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
2 CHECK_CLOSE_TO_0(p2[1], 1e-4);
345
7/14
✓ 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 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
2 BOOST_CHECK_CLOSE(p2[2], 20.1, 1e-4);
346 2 }
347