Directory: | ./ |
---|---|
File: | test/hfields.cpp |
Date: | 2025-04-01 09:23:31 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 490 | 490 | 100.0% |
Branches: | 1289 | 2560 | 50.4% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | /* | ||
2 | * Software License Agreement (BSD License) | ||
3 | * | ||
4 | * Copyright (c) 2021, 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 Open Source Robotics Foundation 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 Justin Carpentier */ | ||
36 | |||
37 | #define BOOST_TEST_MODULE COAL_HEIGHT_FIELDS | ||
38 | #include <boost/test/included/unit_test.hpp> | ||
39 | #include <boost/filesystem.hpp> | ||
40 | |||
41 | #include "fcl_resources/config.h" | ||
42 | |||
43 | #include "coal/collision.h" | ||
44 | #include "coal/hfield.h" | ||
45 | #include "coal/math/transform.h" | ||
46 | #include "coal/shape/geometric_shapes.h" | ||
47 | #include "coal/mesh_loader/assimp.h" | ||
48 | #include "coal/mesh_loader/loader.h" | ||
49 | |||
50 | #include "coal/collision.h" | ||
51 | #include "coal/internal/traversal_node_hfield_shape.h" | ||
52 | |||
53 | #include "utility.h" | ||
54 | #include <iostream> | ||
55 | |||
56 | using namespace coal; | ||
57 | using RowVector = Eigen::RowVector<Scalar, Eigen::Dynamic>; | ||
58 | |||
59 | template <typename BV> | ||
60 | 12 | void test_constant_hfields(const Eigen::DenseIndex nx, | |
61 | const Eigen::DenseIndex ny, | ||
62 | const Scalar min_altitude, | ||
63 | const Scalar max_altitude) { | ||
64 | 12 | const Scalar x_dim = 1., y_dim = 2.; | |
65 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | const MatrixXs heights = MatrixXs::Constant(ny, nx, max_altitude); |
66 | |||
67 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | HeightField<BV> hfield(x_dim, y_dim, heights, min_altitude); |
68 | |||
69 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(hfield.getXDim() == x_dim); |
70 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(hfield.getYDim() == y_dim); |
71 | |||
72 | 12 | const VecXs& x_grid = hfield.getXGrid(); | |
73 |
7/14✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 6 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 6 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 6 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 6 times.
|
12 | BOOST_CHECK(x_grid[0] == -x_dim / 2.); |
74 |
7/14✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 6 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 6 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 6 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 6 times.
|
12 | BOOST_CHECK(x_grid[nx - 1] == x_dim / 2.); |
75 | |||
76 | 12 | const VecXs& y_grid = hfield.getYGrid(); | |
77 |
7/14✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 6 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 6 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 6 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 6 times.
|
12 | BOOST_CHECK(y_grid[0] == y_dim / 2.); |
78 |
7/14✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 6 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 6 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 6 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 6 times.
|
12 | BOOST_CHECK(y_grid[ny - 1] == -y_dim / 2.); |
79 | |||
80 | // Test local AABB | ||
81 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | hfield.computeLocalAABB(); |
82 | |||
83 |
2/2✓ Branch 0 taken 244 times.
✓ Branch 1 taken 6 times.
|
500 | for (Eigen::DenseIndex i = 0; i < nx; ++i) { |
84 |
2/2✓ Branch 0 taken 20088 times.
✓ Branch 1 taken 244 times.
|
40664 | for (Eigen::DenseIndex j = 0; j < ny; ++j) { |
85 |
4/8✓ Branch 1 taken 20088 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 20088 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 20088 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 20088 times.
✗ Branch 11 not taken.
|
40176 | Vec3s point(x_grid[i], y_grid[j], heights(j, i)); |
86 |
7/14✓ Branch 1 taken 20088 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 20088 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 20088 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 20088 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 20088 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 20088 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 20088 times.
|
40176 | BOOST_CHECK(hfield.aabb_local.contain(point)); |
87 | } | ||
88 | } | ||
89 | |||
90 | // Test clone | ||
91 | { | ||
92 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | HeightField<BV>* hfield_clone = hfield.clone(); |
93 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | hfield_clone->computeLocalAABB(); |
94 |
7/14✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 6 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 6 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 6 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 6 times.
|
12 | BOOST_CHECK(*hfield_clone == hfield); |
95 | |||
96 |
1/2✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
|
12 | delete hfield_clone; |
97 | } | ||
98 | |||
99 | // Build equivalent object | ||
100 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | const Box equivalent_box(x_dim, y_dim, max_altitude - min_altitude); |
101 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | const Transform3s box_placement( |
102 | Matrix3s::Identity(), | ||
103 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | Vec3s(0., 0., (max_altitude + min_altitude) / Scalar(2))); |
104 | |||
105 | // Test collision | ||
106 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | const Sphere sphere(1.); |
107 |
4/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
12 | static const Transform3s IdTransform; |
108 | |||
109 |
3/6✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
|
12 | const Box box(Vec3s::Ones()); |
110 | |||
111 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | Transform3s M_sphere, M_box; |
112 | |||
113 | // No collision case | ||
114 | { | ||
115 | 12 | const Scalar eps_no_collision = | |
116 | 12 | +Scalar(0.1) * (max_altitude - min_altitude); | |
117 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | M_sphere.setTranslation( |
118 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | Vec3s(0., 0., max_altitude + sphere.radius + eps_no_collision)); |
119 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | M_box.setTranslation( |
120 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | Vec3s(0., 0., max_altitude + box.halfSide[2] + eps_no_collision)); |
121 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionRequest request; |
122 | |||
123 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionResult result; |
124 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | collide(&hfield, IdTransform, &sphere, M_sphere, request, result); |
125 | |||
126 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(!result.isCollision()); |
127 | |||
128 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionResult result_check_sphere; |
129 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | collide(&equivalent_box, IdTransform * box_placement, &sphere, M_sphere, |
130 | request, result_check_sphere); | ||
131 | |||
132 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(!result_check_sphere.isCollision()); |
133 | |||
134 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionResult result_check_box; |
135 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | collide(&equivalent_box, IdTransform * box_placement, &box, M_box, request, |
136 | result_check_box); | ||
137 | |||
138 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(!result_check_box.isCollision()); |
139 | 12 | } | |
140 | |||
141 | // Collision case | ||
142 | { | ||
143 | 12 | const Scalar eps_collision = -Scalar(0.1) * (max_altitude - min_altitude); | |
144 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | M_sphere.setTranslation( |
145 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | Vec3s(0., 0., max_altitude + sphere.radius + eps_collision)); |
146 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | M_box.setTranslation( |
147 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | Vec3s(0., 0., max_altitude + box.halfSide[2] + eps_collision)); |
148 | CollisionRequest | ||
149 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | request; //(CONTACT | DISTANCE_LOWER_BOUND, (size_t)((nx-1)*(ny-1))); |
150 | |||
151 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionResult result; |
152 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | collide(&hfield, IdTransform, &sphere, M_sphere, request, result); |
153 | |||
154 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(result.isCollision()); |
155 | |||
156 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionResult result_check; |
157 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | collide(&equivalent_box, IdTransform * box_placement, &sphere, M_sphere, |
158 | request, result_check); | ||
159 | |||
160 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(result_check.isCollision()); |
161 | |||
162 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionResult result_check_box; |
163 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | collide(&equivalent_box, IdTransform * box_placement, &box, M_box, request, |
164 | result_check_box); | ||
165 | |||
166 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(result_check_box.isCollision()); |
167 | 12 | } | |
168 | |||
169 | // Update height | ||
170 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | hfield.updateHeights( |
171 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | MatrixXs::Constant(ny, nx, max_altitude / 2)); // We change nothing |
172 | |||
173 | // No collision case | ||
174 | { | ||
175 | 12 | const Scalar eps_no_collision = | |
176 | 12 | +Scalar(0.1) * (max_altitude - min_altitude); | |
177 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | M_sphere.setTranslation( |
178 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | Vec3s(0., 0., max_altitude + sphere.radius + eps_no_collision)); |
179 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | M_box.setTranslation( |
180 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | Vec3s(0., 0., max_altitude + box.halfSide[2] + eps_no_collision)); |
181 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionRequest request; |
182 | |||
183 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionResult result; |
184 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | collide(&hfield, IdTransform, &sphere, M_sphere, request, result); |
185 | |||
186 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(!result.isCollision()); |
187 | |||
188 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionResult result_check_sphere; |
189 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | collide(&equivalent_box, IdTransform * box_placement, &sphere, M_sphere, |
190 | request, result_check_sphere); | ||
191 | |||
192 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(!result_check_sphere.isCollision()); |
193 | |||
194 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionResult result_check_box; |
195 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | collide(&equivalent_box, IdTransform * box_placement, &box, M_box, request, |
196 | result_check_box); | ||
197 | |||
198 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(!result_check_box.isCollision()); |
199 | 12 | } | |
200 | |||
201 | // Collision case | ||
202 | { | ||
203 | 12 | const Scalar eps_collision = -Scalar(0.1) * (max_altitude - min_altitude); | |
204 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | M_sphere.setTranslation( |
205 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | Vec3s(0., 0., max_altitude + sphere.radius + eps_collision)); |
206 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | M_box.setTranslation( |
207 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | Vec3s(0., 0., max_altitude + box.halfSide[2] + eps_collision)); |
208 | CollisionRequest | ||
209 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | request; //(CONTACT | DISTANCE_LOWER_BOUND, (size_t)((nx-1)*(ny-1))); |
210 | |||
211 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionResult result; |
212 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | collide(&hfield, IdTransform, &sphere, M_sphere, request, result); |
213 | |||
214 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(!result.isCollision()); |
215 | |||
216 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionResult result_check; |
217 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | collide(&equivalent_box, IdTransform * box_placement, &sphere, M_sphere, |
218 | request, result_check); | ||
219 | |||
220 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(result_check.isCollision()); |
221 | |||
222 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionResult result_check_box; |
223 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | collide(&equivalent_box, IdTransform * box_placement, &box, M_box, request, |
224 | result_check_box); | ||
225 | |||
226 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(result_check_box.isCollision()); |
227 | 12 | } | |
228 | |||
229 | // Restore height | ||
230 |
3/6✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 6 times.
✗ Branch 8 not taken.
|
12 | hfield.updateHeights( |
231 | MatrixXs::Constant(ny, nx, max_altitude)); // We change nothing | ||
232 | |||
233 | // Collision case | ||
234 | { | ||
235 | 12 | const Scalar eps_collision = -Scalar(0.1) * (max_altitude - min_altitude); | |
236 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | M_sphere.setTranslation( |
237 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | Vec3s(0., 0., max_altitude + sphere.radius + eps_collision)); |
238 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | M_box.setTranslation( |
239 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | Vec3s(0., 0., max_altitude + box.halfSide[2] + eps_collision)); |
240 | CollisionRequest | ||
241 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | request; //(CONTACT | DISTANCE_LOWER_BOUND, (size_t)((nx-1)*(ny-1))); |
242 | |||
243 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionResult result; |
244 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | collide(&hfield, IdTransform, &sphere, M_sphere, request, result); |
245 | |||
246 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(result.isCollision()); |
247 | |||
248 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionResult result_check; |
249 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | collide(&equivalent_box, IdTransform * box_placement, &sphere, M_sphere, |
250 | request, result_check); | ||
251 | |||
252 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(result_check.isCollision()); |
253 | |||
254 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
12 | CollisionResult result_check_box; |
255 |
2/4✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
12 | collide(&equivalent_box, IdTransform * box_placement, &box, M_box, request, |
256 | result_check_box); | ||
257 | |||
258 |
6/12✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 6 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 6 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 6 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 6 times.
|
12 | BOOST_CHECK(result_check_box.isCollision()); |
259 | 12 | } | |
260 | 12 | } | |
261 | |||
262 |
33/66✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
|
4 | BOOST_AUTO_TEST_CASE(building_constant_hfields) { |
263 | 2 | const Scalar max_altitude = 1., min_altitude = 0.; | |
264 | |||
265 | 2 | test_constant_hfields<OBBRSS>(2, 2, min_altitude, | |
266 | max_altitude); // Simple case | ||
267 | 2 | test_constant_hfields<OBBRSS>(20, 2, min_altitude, max_altitude); | |
268 | 2 | test_constant_hfields<OBBRSS>(100, 100, min_altitude, max_altitude); | |
269 | // test_constant_hfields<OBBRSS>(1000,1000,min_altitude,max_altitude); | ||
270 | |||
271 | 2 | test_constant_hfields<AABB>(2, 2, min_altitude, max_altitude); // Simple case | |
272 | 2 | test_constant_hfields<AABB>(20, 2, min_altitude, max_altitude); | |
273 | 2 | test_constant_hfields<AABB>(100, 100, min_altitude, max_altitude); | |
274 | 2 | } | |
275 | |||
276 | template <typename BV> | ||
277 | 1 | void test_negative_security_margin(const Eigen::DenseIndex nx, | |
278 | const Eigen::DenseIndex ny, | ||
279 | const Scalar min_altitude, | ||
280 | const Scalar max_altitude) { | ||
281 | 1 | const Scalar x_dim = 1., y_dim = 2.; | |
282 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | const MatrixXs heights = MatrixXs::Constant(ny, nx, max_altitude); |
283 | |||
284 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | HeightField<BV> hfield(x_dim, y_dim, heights, min_altitude); |
285 | |||
286 | // Build equivalent object | ||
287 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | const Box equivalent_box(x_dim, y_dim, max_altitude - min_altitude); |
288 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | const Transform3s box_placement( |
289 | Matrix3s::Identity(), | ||
290 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | Vec3s(0, 0, (max_altitude + min_altitude) / Scalar(2))); |
291 | |||
292 | // Test collision | ||
293 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | const Sphere sphere(1.); |
294 |
3/8✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
1 | static const Transform3s IdTransform; |
295 | |||
296 |
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.
|
1 | const Box box(Vec3s::Ones()); |
297 | |||
298 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | Transform3s M_sphere, M_box; |
299 | |||
300 | // No collision case | ||
301 | { | ||
302 | 1 | const Scalar eps_no_collision = | |
303 | 1 | +Scalar(0.1) * (max_altitude - min_altitude); | |
304 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | M_sphere.setTranslation( |
305 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | Vec3s(0., 0., max_altitude + sphere.radius + eps_no_collision)); |
306 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | M_box.setTranslation( |
307 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | Vec3s(0., 0., max_altitude + box.halfSide[2] + eps_no_collision)); |
308 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CollisionRequest request; |
309 | |||
310 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CollisionResult result; |
311 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | collide(&hfield, IdTransform, &sphere, M_sphere, request, result); |
312 | |||
313 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
1 | BOOST_CHECK(!result.isCollision()); |
314 | |||
315 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CollisionResult result_check_sphere; |
316 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | collide(&equivalent_box, IdTransform * box_placement, &sphere, M_sphere, |
317 | request, result_check_sphere); | ||
318 | |||
319 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
1 | BOOST_CHECK(!result_check_sphere.isCollision()); |
320 | |||
321 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CollisionResult result_check_box; |
322 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | collide(&equivalent_box, IdTransform * box_placement, &box, M_box, request, |
323 | result_check_box); | ||
324 | |||
325 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
1 | BOOST_CHECK(!result_check_box.isCollision()); |
326 | 1 | } | |
327 | |||
328 | // Collision case - positive security_margin | ||
329 | { | ||
330 | 1 | const Scalar eps_no_collision = | |
331 | 1 | +Scalar(0.1) * (max_altitude - min_altitude); | |
332 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | M_sphere.setTranslation( |
333 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | Vec3s(0., 0., max_altitude + sphere.radius + eps_no_collision)); |
334 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | M_box.setTranslation( |
335 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | Vec3s(0., 0., max_altitude + box.halfSide[2] + eps_no_collision)); |
336 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CollisionRequest request; |
337 | 1 | request.security_margin = eps_no_collision + Scalar(1e-6); | |
338 | |||
339 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CollisionResult result; |
340 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | collide(&hfield, IdTransform, &sphere, M_sphere, request, result); |
341 | |||
342 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
1 | BOOST_CHECK(result.isCollision()); |
343 | |||
344 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CollisionResult result_check_sphere; |
345 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | collide(&equivalent_box, IdTransform * box_placement, &sphere, M_sphere, |
346 | request, result_check_sphere); | ||
347 | |||
348 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
1 | BOOST_CHECK(result_check_sphere.isCollision()); |
349 | |||
350 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CollisionResult result_check_box; |
351 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | collide(&equivalent_box, IdTransform * box_placement, &box, M_box, request, |
352 | result_check_box); | ||
353 | |||
354 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
1 | BOOST_CHECK(result_check_box.isCollision()); |
355 | 1 | } | |
356 | |||
357 | // Collision case | ||
358 | { | ||
359 | 1 | const Scalar eps_no_collision = | |
360 | 1 | -Scalar(0.1) * (max_altitude - min_altitude); | |
361 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | M_sphere.setTranslation( |
362 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | Vec3s(0., 0., max_altitude + sphere.radius + eps_no_collision)); |
363 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | M_box.setTranslation( |
364 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | Vec3s(0., 0., max_altitude + box.halfSide[2] + eps_no_collision)); |
365 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CollisionRequest request; |
366 | |||
367 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CollisionResult result; |
368 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | collide(&hfield, IdTransform, &sphere, M_sphere, request, result); |
369 | |||
370 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
1 | BOOST_CHECK(result.isCollision()); |
371 | |||
372 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CollisionResult result_check_sphere; |
373 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | collide(&equivalent_box, IdTransform * box_placement, &sphere, M_sphere, |
374 | request, result_check_sphere); | ||
375 | |||
376 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
1 | BOOST_CHECK(result_check_sphere.isCollision()); |
377 | |||
378 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CollisionResult result_check_box; |
379 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | collide(&equivalent_box, IdTransform * box_placement, &box, M_box, request, |
380 | result_check_box); | ||
381 | |||
382 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
1 | BOOST_CHECK(result_check_box.isCollision()); |
383 | 1 | } | |
384 | |||
385 | // No collision case - negative security_margin | ||
386 | { | ||
387 | 1 | const Scalar eps_no_collision = | |
388 | 1 | -Scalar(0.1) * (max_altitude - min_altitude); | |
389 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | M_sphere.setTranslation( |
390 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | Vec3s(0., 0., max_altitude + sphere.radius + eps_no_collision)); |
391 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | M_box.setTranslation( |
392 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | Vec3s(0., 0., max_altitude + box.halfSide[2] + eps_no_collision)); |
393 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CollisionRequest request; |
394 | 1 | request.security_margin = eps_no_collision - Scalar(1e-4); | |
395 | |||
396 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CollisionResult result; |
397 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | collide(&hfield, IdTransform, &sphere, M_sphere, request, result); |
398 | |||
399 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
1 | BOOST_CHECK(!result.isCollision()); |
400 | |||
401 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CollisionResult result_check_sphere; |
402 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | collide(&equivalent_box, IdTransform * box_placement, &sphere, M_sphere, |
403 | request, result_check_sphere); | ||
404 | |||
405 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
1 | BOOST_CHECK(!result_check_sphere.isCollision()); |
406 | |||
407 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | CollisionResult result_check_box; |
408 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | collide(&equivalent_box, IdTransform * box_placement, &box, M_box, request, |
409 | result_check_box); | ||
410 | |||
411 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
1 | BOOST_CHECK(!result_check_box.isCollision()); |
412 | 1 | } | |
413 | 1 | } | |
414 | |||
415 |
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(negative_security_margin) { |
416 | 2 | const Scalar max_altitude = 1., min_altitude = 0.; | |
417 | |||
418 | // test_negative_security_margin<OBBRSS>(100, 100, min_altitude, | ||
419 | // max_altitude); | ||
420 | 2 | test_negative_security_margin<AABB>(100, 100, min_altitude, max_altitude); | |
421 | 2 | } | |
422 | |||
423 |
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(hfield_with_square_hole) { |
424 | 2 | const Eigen::DenseIndex nx = 100, ny = 100; | |
425 | |||
426 | typedef AABB BV; | ||
427 |
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 | const MatrixXs X = RowVector::LinSpaced(nx, -1., 1.).replicate(ny, 1); |
428 |
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 | const MatrixXs Y = VecXs::LinSpaced(ny, 1., -1.).replicate(1, nx); |
429 | |||
430 | 2 | const Scalar dim_square = 0.5; | |
431 | |||
432 | const Eigen::Array<bool, Eigen::Dynamic, Eigen::Dynamic> hole = | ||
433 |
8/16✓ 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.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
|
2 | (X.array().abs() < dim_square) && (Y.array().abs() < dim_square); |
434 | |||
435 | const MatrixXs heights = | ||
436 |
5/10✓ 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.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
|
2 | MatrixXs::Ones(ny, nx) - hole.cast<Scalar>().matrix(); |
437 | |||
438 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const HeightField<BV> hfield(2., 2., heights, -10.); |
439 | |||
440 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Sphere sphere(Scalar(0.48)); |
441 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | const Transform3s sphere_pos(Vec3s(0, 0, Scalar(0.5))); |
442 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s hfield_pos; |
443 | |||
444 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const CollisionRequest request; |
445 | |||
446 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult result; |
447 | { | ||
448 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | collide(&hfield, hfield_pos, &sphere, sphere_pos, request, result); |
449 | |||
450 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(!result.isCollision()); |
451 | } | ||
452 | |||
453 | 2 | sphere.radius = Scalar(0.51); | |
454 | |||
455 | { | ||
456 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult result; |
457 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Sphere sphere2(Scalar(0.51)); |
458 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | collide(&hfield, hfield_pos, &sphere2, sphere_pos, request, result); |
459 | |||
460 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(result.isCollision()); |
461 | 2 | } | |
462 | 2 | } | |
463 | |||
464 |
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(hfield_with_circular_hole) { |
465 | 2 | const Eigen::DenseIndex nx = 100, ny = 100; | |
466 | |||
467 | // typedef OBBRSS BV; TODO(jcarpent): OBBRSS does not work (compile in Debug | ||
468 | // mode), as the overlap of OBBRSS is not satisfactory yet. | ||
469 | typedef AABB BV; | ||
470 |
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 | const MatrixXs X = RowVector::LinSpaced(nx, -1., 1.).replicate(ny, 1); |
471 |
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 | const MatrixXs Y = VecXs::LinSpaced(ny, 1., -1.).replicate(1, nx); |
472 | |||
473 | 2 | const Scalar dim_hole = 1; | |
474 | |||
475 | const Eigen::Array<bool, Eigen::Dynamic, Eigen::Dynamic> hole = | ||
476 |
7/14✓ 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.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
|
2 | (X.array().square() + Y.array().square() <= dim_hole); |
477 | |||
478 | const MatrixXs heights = | ||
479 |
5/10✓ 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.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
|
2 | MatrixXs::Ones(ny, nx) - hole.cast<Scalar>().matrix(); |
480 | |||
481 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const HeightField<BV> hfield(2., 2., heights, -10.); |
482 | |||
483 |
7/14✓ 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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
|
2 | BOOST_CHECK(hfield.getXGrid()[0] == -1.); |
484 |
7/14✓ 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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
|
2 | BOOST_CHECK(hfield.getXGrid()[nx - 1] == +1.); |
485 | |||
486 |
7/14✓ 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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
|
2 | BOOST_CHECK(hfield.getYGrid()[0] == +1.); |
487 |
7/14✓ 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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
|
2 | BOOST_CHECK(hfield.getYGrid()[ny - 1] == -1.); |
488 | |||
489 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Sphere sphere(Scalar(0.975)); |
490 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | const Transform3s sphere_pos(Vec3s(0, 0, 1)); |
491 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s hfield_pos; |
492 | |||
493 | 2 | const Scalar thresholds[3] = {0, Scalar(0.01), Scalar(-0.005)}; | |
494 | |||
495 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 1 times.
|
8 | for (int i = 0; i < 3; ++i) { |
496 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
6 | CollisionResult result; |
497 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
6 | CollisionRequest request; |
498 | 6 | request.security_margin = thresholds[i]; | |
499 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
6 | collide(&hfield, hfield_pos, &sphere, sphere_pos, request, result); |
500 | |||
501 |
6/12✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 3 times.
|
6 | BOOST_CHECK(!result.isCollision()); |
502 | 6 | } | |
503 | |||
504 | // Increase the size of the sphere to force the collision | ||
505 | 2 | sphere.radius = Scalar(1.01); | |
506 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 1 times.
|
8 | for (int i = 0; i < 3; ++i) { |
507 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
6 | CollisionResult result; |
508 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
6 | CollisionRequest request; |
509 | 6 | request.security_margin = thresholds[i]; | |
510 |
1/2✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
|
6 | collide(&hfield, hfield_pos, &sphere, sphere_pos, request, result); |
511 | |||
512 |
6/12✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 3 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 3 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 3 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 3 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 3 times.
|
6 | BOOST_CHECK(result.isCollision()); |
513 | 6 | } | |
514 | |||
515 | { | ||
516 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult result; |
517 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionRequest request; |
518 | 2 | request.security_margin = Scalar(-0.02); | |
519 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | collide(&hfield, hfield_pos, &sphere, sphere_pos, request, result); |
520 | |||
521 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(!result.isCollision()); |
522 | 2 | } | |
523 | 2 | } | |
524 | |||
525 | 7 | bool isApprox(const Scalar v1, const Scalar v2, | |
526 | const Scalar tol = Scalar(1e-6)) { | ||
527 | 7 | return std::fabs(v1 - v2) <= tol; | |
528 | } | ||
529 | |||
530 | 17 | Vec3s computeFaceNormal(const Triangle& triangle, | |
531 | const std::vector<Vec3s>& points) { | ||
532 |
1/2✓ Branch 3 taken 17 times.
✗ Branch 4 not taken.
|
17 | const Vec3s pointA = points[triangle[0]]; |
533 |
1/2✓ Branch 3 taken 17 times.
✗ Branch 4 not taken.
|
17 | const Vec3s pointB = points[triangle[1]]; |
534 |
1/2✓ Branch 3 taken 17 times.
✗ Branch 4 not taken.
|
17 | const Vec3s pointC = points[triangle[2]]; |
535 | |||
536 |
4/8✓ Branch 1 taken 17 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 17 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 17 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 17 times.
✗ Branch 11 not taken.
|
34 | return (pointB - pointA).cross(pointC - pointA).normalized(); |
537 | } | ||
538 | |||
539 |
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_hfield_bin_face_normal_orientation) { |
540 | 2 | const Scalar sphere_radius = 1.; | |
541 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Sphere sphere(sphere_radius); |
542 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | MatrixXs altitutes(2, 2); |
543 | 2 | Scalar altitude_value = 1.; | |
544 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | altitutes.fill(altitude_value); |
545 | |||
546 | typedef AABB BV; | ||
547 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | HeightField<BV> hfield(1., 1., altitutes, 0.); |
548 | |||
549 | 2 | const HeightField<BV>::BVS& nodes = hfield.getNodes(); | |
550 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(nodes.size() == 1); |
551 | 2 | const HeightField<BV>::Node& node = nodes[0]; | |
552 | |||
553 | typedef HFNodeBase::FaceOrientation FaceOrientation; | ||
554 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK((node.contact_active_faces & FaceOrientation::BOTTOM) == |
555 | int(FaceOrientation::BOTTOM)); | ||
556 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK((node.contact_active_faces & FaceOrientation::TOP) == |
557 | int(FaceOrientation::TOP)); | ||
558 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK((node.contact_active_faces & FaceOrientation::NORTH) == |
559 | int(FaceOrientation::NORTH)); | ||
560 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK((node.contact_active_faces & FaceOrientation::SOUTH) == |
561 | int(FaceOrientation::SOUTH)); | ||
562 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK((node.contact_active_faces & FaceOrientation::EAST) == |
563 | int(FaceOrientation::EAST)); | ||
564 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK((node.contact_active_faces & FaceOrientation::WEST) == |
565 | int(FaceOrientation::WEST)); | ||
566 | |||
567 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | Convex<Triangle> convex1, convex2; |
568 | int convex1_active_faces, convex2_active_faces; | ||
569 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | details::buildConvexTriangles(node, hfield, convex1, convex1_active_faces, |
570 | convex2, convex2_active_faces); | ||
571 | |||
572 | // Check face normals for convex1 | ||
573 | { | ||
574 | 2 | const std::vector<Vec3s>& points = *(convex1.points); | |
575 | // BOTTOM | ||
576 | { | ||
577 | 2 | const Triangle& triangle = (*(convex1.polygons))[0]; | |
578 | |||
579 |
10/20✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 35 not taken.
✓ Branch 36 taken 1 times.
|
2 | BOOST_CHECK( |
580 | computeFaceNormal(triangle, points).isApprox(-Vec3s::UnitZ())); | ||
581 | } | ||
582 | |||
583 | // TOP | ||
584 | { | ||
585 | 2 | const Triangle& triangle = (*(convex1.polygons))[1]; | |
586 | |||
587 |
9/18✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
|
2 | BOOST_CHECK(computeFaceNormal(triangle, points).isApprox(Vec3s::UnitZ())); |
588 | } | ||
589 | |||
590 | // WEST sides | ||
591 | { | ||
592 | 2 | const Triangle& triangle1 = (*(convex1.polygons))[2]; | |
593 | 2 | const Triangle& triangle2 = (*(convex1.polygons))[3]; | |
594 | |||
595 |
10/20✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 35 not taken.
✓ Branch 36 taken 1 times.
|
2 | BOOST_CHECK( |
596 | computeFaceNormal(triangle1, points).isApprox(-Vec3s::UnitX())); | ||
597 |
10/20✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 35 not taken.
✓ Branch 36 taken 1 times.
|
2 | BOOST_CHECK( |
598 | computeFaceNormal(triangle2, points).isApprox(-Vec3s::UnitX())); | ||
599 | } | ||
600 | |||
601 | // SOUTH-EAST sides | ||
602 | { | ||
603 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | const Vec3s south_east_normal = Vec3s(1., -1., 0).normalized(); |
604 | |||
605 | 2 | const Triangle& triangle1 = (*(convex1.polygons))[4]; | |
606 | 2 | const Triangle& triangle2 = (*(convex1.polygons))[5]; | |
607 | |||
608 |
8/16✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK( |
609 | computeFaceNormal(triangle1, points).isApprox(south_east_normal)); | ||
610 |
8/16✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK( |
611 | computeFaceNormal(triangle2, points).isApprox(south_east_normal)); | ||
612 | } | ||
613 | |||
614 | // NORTH sides | ||
615 | { | ||
616 | 2 | const Triangle& triangle1 = (*(convex1.polygons))[6]; | |
617 | 2 | const Triangle& triangle2 = (*(convex1.polygons))[7]; | |
618 | |||
619 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | std::cout << "computeFaceNormal(triangle1,points): " |
620 |
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.
|
4 | << computeFaceNormal(triangle1, points).transpose() |
621 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | << std::endl; |
622 |
9/18✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
|
2 | BOOST_CHECK( |
623 | computeFaceNormal(triangle1, points).isApprox(Vec3s::UnitY())); | ||
624 |
9/18✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
|
2 | BOOST_CHECK( |
625 | computeFaceNormal(triangle2, points).isApprox(Vec3s::UnitY())); | ||
626 | } | ||
627 | } | ||
628 | |||
629 | // Check face normals for convex2 | ||
630 | { | ||
631 | 2 | const std::vector<Vec3s>& points = *(convex2.points); | |
632 | |||
633 | // BOTTOM | ||
634 | { | ||
635 | 2 | const Triangle& triangle = (*(convex2.polygons))[0]; | |
636 | |||
637 |
10/20✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 35 not taken.
✓ Branch 36 taken 1 times.
|
2 | BOOST_CHECK( |
638 | computeFaceNormal(triangle, points).isApprox(-Vec3s::UnitZ())); | ||
639 | } | ||
640 | |||
641 | // TOP | ||
642 | { | ||
643 | 2 | const Triangle& triangle = (*(convex2.polygons))[1]; | |
644 | |||
645 |
9/18✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
|
2 | BOOST_CHECK(computeFaceNormal(triangle, points).isApprox(Vec3s::UnitZ())); |
646 | } | ||
647 | |||
648 | // SOUTH sides | ||
649 | { | ||
650 | 2 | const Triangle& triangle1 = (*(convex2.polygons))[2]; | |
651 | 2 | const Triangle& triangle2 = (*(convex2.polygons))[3]; | |
652 | |||
653 |
10/20✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 35 not taken.
✓ Branch 36 taken 1 times.
|
2 | BOOST_CHECK( |
654 | computeFaceNormal(triangle1, points).isApprox(-Vec3s::UnitY())); | ||
655 |
10/20✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 35 not taken.
✓ Branch 36 taken 1 times.
|
2 | BOOST_CHECK( |
656 | computeFaceNormal(triangle2, points).isApprox(-Vec3s::UnitY())); | ||
657 | } | ||
658 | |||
659 | // NORTH-WEST sides | ||
660 | { | ||
661 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | const Vec3s north_west_normal = Vec3s(-1., 1., 0).normalized(); |
662 | |||
663 | 2 | const Triangle& triangle1 = (*(convex2.polygons))[4]; | |
664 | 2 | const Triangle& triangle2 = (*(convex2.polygons))[5]; | |
665 | |||
666 |
8/16✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK( |
667 | computeFaceNormal(triangle1, points).isApprox(north_west_normal)); | ||
668 |
8/16✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK( |
669 | computeFaceNormal(triangle2, points).isApprox(north_west_normal)); | ||
670 | } | ||
671 | |||
672 | // EAST sides | ||
673 | { | ||
674 | 2 | const Triangle& triangle1 = (*(convex2.polygons))[6]; | |
675 | 2 | const Triangle& triangle2 = (*(convex2.polygons))[7]; | |
676 | |||
677 |
9/18✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
|
2 | BOOST_CHECK( |
678 | computeFaceNormal(triangle1, points).isApprox(Vec3s::UnitX())); | ||
679 |
9/18✓ 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 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
|
2 | BOOST_CHECK( |
680 | computeFaceNormal(triangle2, points).isApprox(Vec3s::UnitX())); | ||
681 | } | ||
682 | } | ||
683 | 2 | } | |
684 | |||
685 |
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_hfield_bin_active_faces) { |
686 | typedef HFNodeBase::FaceOrientation FaceOrientation; | ||
687 | 2 | const Scalar sphere_radius = 1.; | |
688 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Sphere sphere(sphere_radius); |
689 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | MatrixXs altitutes(3, 3); |
690 | 2 | Scalar altitude_value = 1.; | |
691 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | altitutes.fill(altitude_value); |
692 | |||
693 | typedef AABB BV; | ||
694 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | HeightField<BV> hfield(1., 1., altitutes, 0.); |
695 | |||
696 | 2 | const HeightField<BV>::BVS& nodes = hfield.getNodes(); | |
697 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(nodes.size() == 7); |
698 | |||
699 |
2/2✓ Branch 5 taken 7 times.
✓ Branch 6 taken 1 times.
|
16 | for (const auto& node : nodes) { |
700 |
2/2✓ Branch 1 taken 4 times.
✓ Branch 2 taken 3 times.
|
14 | if (node.isLeaf()) { |
701 |
6/12✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 4 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 4 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 4 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 4 times.
|
8 | BOOST_CHECK((node.contact_active_faces & FaceOrientation::BOTTOM) == |
702 | int(FaceOrientation::BOTTOM)); | ||
703 |
6/12✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 4 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 4 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 4 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 4 times.
|
8 | BOOST_CHECK((node.contact_active_faces & FaceOrientation::TOP) == |
704 | int(FaceOrientation::TOP)); | ||
705 | |||
706 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
|
8 | if (node.x_id == 0) |
707 |
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 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 2 times.
|
4 | BOOST_CHECK((node.contact_active_faces & FaceOrientation::WEST) == |
708 | int(FaceOrientation::WEST)); | ||
709 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
|
8 | if (node.y_id == 0) |
710 |
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 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 2 times.
|
4 | BOOST_CHECK((node.contact_active_faces & FaceOrientation::NORTH) == |
711 | int(FaceOrientation::NORTH)); | ||
712 | |||
713 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
|
8 | if (node.x_id == 1) |
714 |
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 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 2 times.
|
4 | BOOST_CHECK((node.contact_active_faces & FaceOrientation::EAST) == |
715 | int(FaceOrientation::EAST)); | ||
716 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
|
8 | if (node.y_id == 1) |
717 |
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 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 2 times.
|
4 | BOOST_CHECK((node.contact_active_faces & FaceOrientation::SOUTH) == |
718 | int(FaceOrientation::SOUTH)); | ||
719 | } | ||
720 | } | ||
721 | 2 | } | |
722 | |||
723 |
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_hfield_single_bin) { |
724 | 2 | const Scalar sphere_radius = 1.; | |
725 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Sphere sphere(sphere_radius); |
726 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | MatrixXs altitutes(2, 2); |
727 | 2 | Scalar altitude_value = 1.; | |
728 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | altitutes.fill(altitude_value); |
729 | |||
730 | typedef AABB BV; | ||
731 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | HeightField<BV> hfield(1., 1., altitutes, 0.); |
732 | |||
733 | 2 | const HeightField<BV>::BVS& nodes = hfield.getNodes(); | |
734 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(nodes.size() == 1); |
735 | |||
736 | // Collision from the TOP | ||
737 | { | ||
738 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | const Transform3s sphere_pos(Vec3s(0., 0., 2.)); |
739 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s hfield_pos; |
740 | |||
741 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult result; |
742 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionRequest request; |
743 | 2 | request.security_margin = -Scalar(0.005); | |
744 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | collide(&hfield, hfield_pos, &sphere, sphere_pos, request, result); |
745 | |||
746 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(!result.isCollision()); |
747 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK( |
748 | isApprox(result.distance_lower_bound, -request.security_margin)); | ||
749 | 2 | } | |
750 | |||
751 | // Same, but with a positive margin. | ||
752 | { | ||
753 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | const Transform3s sphere_pos(Vec3s(0., 0., 2.)); |
754 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s hfield_pos; |
755 | |||
756 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult result; |
757 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionRequest request; |
758 | 2 | request.security_margin = +Scalar(0.005); | |
759 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | collide(&hfield, hfield_pos, &sphere, sphere_pos, request, result); |
760 | |||
761 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(result.isCollision()); |
762 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | if (result.isCollision()) { |
763 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact& contact = result.getContact(0); |
764 |
8/16✓ 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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK(contact.normal.isApprox(Vec3s::UnitZ())); |
765 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | std::cout << "contact.penetration_depth: " << contact.penetration_depth |
766 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | << std::endl; |
767 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(isApprox(contact.penetration_depth, 0.)); |
768 | } | ||
769 | 2 | } | |
770 | |||
771 | // Collision from the BOTTOM | ||
772 | { | ||
773 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | const Transform3s sphere_pos(Vec3s(0., 0., -1.)); |
774 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s hfield_pos; |
775 | |||
776 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult result; |
777 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionRequest request; |
778 | 2 | request.security_margin = -Scalar(0.005); | |
779 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | collide(&hfield, hfield_pos, &sphere, sphere_pos, request, result); |
780 | |||
781 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(!result.isCollision()); |
782 | 2 | } | |
783 | |||
784 | { | ||
785 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | const Transform3s sphere_pos(Vec3s(0., 0., -1.)); |
786 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s hfield_pos; |
787 | |||
788 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult result; |
789 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionRequest request; |
790 | 2 | request.security_margin = +Scalar(0.005); | |
791 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | collide(&hfield, hfield_pos, &sphere, sphere_pos, request, result); |
792 | |||
793 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(result.isCollision()); |
794 | { | ||
795 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact& contact = result.getContact(0); |
796 |
9/18✓ 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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
|
2 | BOOST_CHECK(contact.normal.isApprox(-Vec3s::UnitZ())); |
797 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | std::cout << "contact.penetration_depth: " << contact.penetration_depth |
798 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | << std::endl; |
799 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(isApprox(contact.penetration_depth, 0.)); |
800 | } | ||
801 | 2 | } | |
802 | |||
803 | // Collision from the WEST | ||
804 | { | ||
805 | const Transform3s sphere_pos( | ||
806 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
2 | Vec3s(hfield.getXGrid()[0] - sphere_radius, 0., 0.5)); |
807 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s hfield_pos; |
808 | |||
809 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult result; |
810 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionRequest request; |
811 | 2 | request.security_margin = -Scalar(0.005); | |
812 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | collide(&hfield, hfield_pos, &sphere, sphere_pos, request, result); |
813 | |||
814 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(!result.isCollision()); |
815 | 2 | } | |
816 | |||
817 | { | ||
818 | const Transform3s sphere_pos( | ||
819 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
2 | Vec3s(hfield.getXGrid()[0] - sphere_radius, 0., 0.5)); |
820 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s hfield_pos; |
821 | |||
822 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult result; |
823 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionRequest request; |
824 | 2 | request.security_margin = +Scalar(0.005); | |
825 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | collide(&hfield, hfield_pos, &sphere, sphere_pos, request, result); |
826 | |||
827 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(result.isCollision()); |
828 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | if (result.isCollision()) { |
829 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact& contact = result.getContact(0); |
830 |
9/18✓ 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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
|
2 | BOOST_CHECK(contact.normal.isApprox(-Vec3s::UnitX())); |
831 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(isApprox(contact.penetration_depth, 0.)); |
832 | } | ||
833 | 2 | } | |
834 | |||
835 | // Collision from the EAST | ||
836 | { | ||
837 | const Transform3s sphere_pos( | ||
838 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
2 | Vec3s(hfield.getXGrid()[1] + sphere_radius, 0., 0.5)); |
839 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s hfield_pos; |
840 | |||
841 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult result; |
842 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionRequest request; |
843 | 2 | request.security_margin = -Scalar(0.005); | |
844 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | collide(&hfield, hfield_pos, &sphere, sphere_pos, request, result); |
845 | |||
846 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(!result.isCollision()); |
847 | 2 | } | |
848 | |||
849 | { | ||
850 | const Transform3s sphere_pos( | ||
851 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
2 | Vec3s(hfield.getXGrid()[1] + sphere_radius, 0., 0.5)); |
852 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s hfield_pos; |
853 | |||
854 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult result; |
855 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionRequest request; |
856 | 2 | request.security_margin = +Scalar(0.005); | |
857 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | collide(&hfield, hfield_pos, &sphere, sphere_pos, request, result); |
858 | |||
859 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(result.isCollision()); |
860 | |||
861 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | if (result.isCollision()) { |
862 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact& contact = result.getContact(0); |
863 |
8/16✓ 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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK(contact.normal.isApprox(Vec3s::UnitX())); |
864 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(isApprox(contact.penetration_depth, 0.)); |
865 | } | ||
866 | 2 | } | |
867 | |||
868 | // Collision from the NORTH | ||
869 | { | ||
870 | const Transform3s sphere_pos( | ||
871 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
2 | Vec3s(0., hfield.getYGrid()[0] + sphere_radius, 0.5)); |
872 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s hfield_pos; |
873 | |||
874 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult result; |
875 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionRequest request; |
876 | 2 | request.security_margin = -Scalar(0.005); | |
877 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | collide(&hfield, hfield_pos, &sphere, sphere_pos, request, result); |
878 | |||
879 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(!result.isCollision()); |
880 | 2 | } | |
881 | |||
882 | { | ||
883 | const Transform3s sphere_pos( | ||
884 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
2 | Vec3s(0, hfield.getYGrid()[0] + sphere_radius, Scalar(0.5))); |
885 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s hfield_pos; |
886 | |||
887 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult result; |
888 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionRequest request; |
889 | 2 | request.security_margin = +Scalar(0.005); | |
890 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | collide(&hfield, hfield_pos, &sphere, sphere_pos, request, result); |
891 | |||
892 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(result.isCollision()); |
893 | |||
894 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | if (result.isCollision()) { |
895 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact& contact = result.getContact(0); |
896 |
8/16✓ 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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 1 times.
|
2 | BOOST_CHECK(contact.normal.isApprox(Vec3s::UnitY())); |
897 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(isApprox(contact.penetration_depth, 0.)); |
898 | } | ||
899 | 2 | } | |
900 | |||
901 | // Collision from the SOUTH | ||
902 | { | ||
903 | const Transform3s sphere_pos( | ||
904 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
2 | Vec3s(0., hfield.getYGrid()[1] - sphere_radius, 0.5)); |
905 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s hfield_pos; |
906 | |||
907 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult result; |
908 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionRequest request; |
909 | 2 | request.security_margin = -Scalar(0.005); | |
910 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | collide(&hfield, hfield_pos, &sphere, sphere_pos, request, result); |
911 | |||
912 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(!result.isCollision()); |
913 | 2 | } | |
914 | |||
915 | { | ||
916 | const Transform3s sphere_pos( | ||
917 |
3/6✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
|
2 | Vec3s(0., hfield.getYGrid()[1] - sphere_radius, Scalar(0.5))); |
918 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Transform3s hfield_pos; |
919 | |||
920 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionResult result; |
921 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | CollisionRequest request; |
922 | 2 | request.security_margin = +Scalar(0.005); | |
923 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | collide(&hfield, hfield_pos, &sphere, sphere_pos, request, result); |
924 | |||
925 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(result.isCollision()); |
926 | |||
927 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | if (result.isCollision()) { |
928 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | const Contact& contact = result.getContact(0); |
929 |
9/18✓ 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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
|
2 | BOOST_CHECK(contact.normal.isApprox(-Vec3s::UnitY())); |
930 |
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 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(isApprox(contact.penetration_depth, 0.)); |
931 | } | ||
932 | 2 | } | |
933 | 2 | } | |
934 |