Directory: | ./ |
---|---|
File: | test/collision.cpp |
Date: | 2025-04-01 09:23:31 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 313 | 334 | 93.7% |
Branches: | 627 | 1532 | 40.9% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | /* | ||
2 | * Software License Agreement (BSD License) | ||
3 | * | ||
4 | * Copyright (c) 2011-2014, Willow Garage, Inc. | ||
5 | * Copyright (c) 2014-2015, Open Source Robotics Foundation | ||
6 | * All rights reserved. | ||
7 | * | ||
8 | * Redistribution and use in source and binary forms, with or without | ||
9 | * modification, are permitted provided that the following conditions | ||
10 | * are met: | ||
11 | * | ||
12 | * * Redistributions of source code must retain the above copyright | ||
13 | * notice, this list of conditions and the following disclaimer. | ||
14 | * * Redistributions in binary form must reproduce the above | ||
15 | * copyright notice, this list of conditions and the following | ||
16 | * disclaimer in the documentation and/or other materials provided | ||
17 | * with the distribution. | ||
18 | * * Neither the name of Open Source Robotics Foundation nor the names of its | ||
19 | * contributors may be used to endorse or promote products derived | ||
20 | * from this software without specific prior written permission. | ||
21 | * | ||
22 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
23 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
24 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||
25 | * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||
26 | * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
27 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||
28 | * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
29 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||
30 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
31 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | ||
32 | * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
33 | * POSSIBILITY OF SUCH DAMAGE. | ||
34 | */ | ||
35 | |||
36 | /** \author Joseph Mirabel */ | ||
37 | |||
38 | #include <boost/mpl/vector.hpp> | ||
39 | |||
40 | #define BOOST_TEST_MODULE COAL_COLLISION | ||
41 | #include <boost/test/included/unit_test.hpp> | ||
42 | |||
43 | #include <boost/assign/list_of.hpp> | ||
44 | #include <fstream> | ||
45 | |||
46 | #include "coal/fwd.hh" | ||
47 | |||
48 | COAL_COMPILER_DIAGNOSTIC_PUSH | ||
49 | COAL_COMPILER_DIAGNOSTIC_IGNORED_DEPRECECATED_DECLARATIONS | ||
50 | |||
51 | #include "coal/collision.h" | ||
52 | |||
53 | COAL_COMPILER_DIAGNOSTIC_POP | ||
54 | |||
55 | #include "coal/BV/BV.h" | ||
56 | #include "coal/mesh_loader/assimp.h" | ||
57 | #include "coal/narrowphase/narrowphase.h" | ||
58 | #include "coal/shape/geometric_shapes.h" | ||
59 | |||
60 | #include "../src/collision_node.h" | ||
61 | #include "coal/internal/BV_splitter.h" | ||
62 | #include "coal/internal/traversal_node_bvhs.h" | ||
63 | #include "coal/internal/traversal_node_setup.h" | ||
64 | |||
65 | #include "coal/timings.h" | ||
66 | |||
67 | #include "fcl_resources/config.h" | ||
68 | #include "utility.h" | ||
69 | |||
70 | using namespace coal; | ||
71 | namespace utf = boost::unit_test::framework; | ||
72 | |||
73 | int num_max_contacts = (std::numeric_limits<int>::max)(); | ||
74 | |||
75 |
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(OBB_Box_test) { |
76 | 2 | Scalar r_extents[] = {-1000, -1000, -1000, 1000, 1000, 1000}; | |
77 | 2 | std::vector<Transform3s> rotate_transform; | |
78 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | generateRandomTransforms(r_extents, rotate_transform, 1); |
79 | |||
80 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | AABB aabb1; |
81 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | aabb1.min_ = Vec3s(-600, -600, -600); |
82 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | aabb1.max_ = Vec3s(600, 600, 600); |
83 | |||
84 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | OBB obb1; |
85 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | convertBV(aabb1, rotate_transform[0], obb1); |
86 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Box box1; |
87 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Transform3s box1_tf; |
88 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | constructBox(aabb1, rotate_transform[0], box1, box1_tf); |
89 | |||
90 | 2 | Scalar extents[] = {-1000, -1000, -1000, 1000, 1000, 1000}; | |
91 | 2 | std::size_t n = 1000; | |
92 | |||
93 | 2 | std::vector<Transform3s> transforms; | |
94 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | generateRandomTransforms(extents, transforms, n); |
95 | |||
96 |
2/2✓ Branch 1 taken 1000 times.
✓ Branch 2 taken 1 times.
|
2002 | for (std::size_t i = 0; i < transforms.size(); ++i) { |
97 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | AABB aabb; |
98 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | aabb.min_ = aabb1.min_ * 0.5; |
99 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | aabb.max_ = aabb1.max_ * 0.5; |
100 | |||
101 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | OBB obb2; |
102 |
1/2✓ Branch 2 taken 1000 times.
✗ Branch 3 not taken.
|
2000 | convertBV(aabb, transforms[i], obb2); |
103 | |||
104 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | Box box2; |
105 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | Transform3s box2_tf; |
106 |
1/2✓ Branch 2 taken 1000 times.
✗ Branch 3 not taken.
|
2000 | constructBox(aabb, transforms[i], box2, box2_tf); |
107 | |||
108 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | GJKSolver solver; |
109 | |||
110 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | bool overlap_obb = obb1.overlap(obb2); |
111 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | CollisionRequest request; |
112 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | CollisionResult result; |
113 | // Convention: when doing primitive-primitive collision, either use | ||
114 | // `collide` or `ShapeShapeCollide`. | ||
115 | // **DO NOT** use methods of the GJKSolver directly if you don't know what | ||
116 | // you are doing. | ||
117 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | ShapeShapeCollide<Box, Box>(&box1, box1_tf, &box2, box2_tf, &solver, |
118 | request, result); | ||
119 | 2000 | bool overlap_box = result.isCollision(); | |
120 | |||
121 |
6/12✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
|
2000 | BOOST_CHECK(overlap_obb == overlap_box); |
122 | 2000 | } | |
123 | 2 | } | |
124 | |||
125 |
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(OBB_shape_test) { |
126 | 2 | Scalar r_extents[] = {-1000, -1000, -1000, 1000, 1000, 1000}; | |
127 | 2 | std::vector<Transform3s> rotate_transform; | |
128 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | generateRandomTransforms(r_extents, rotate_transform, 1); |
129 | |||
130 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | AABB aabb1; |
131 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | aabb1.min_ = Vec3s(-600, -600, -600); |
132 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | aabb1.max_ = Vec3s(600, 600, 600); |
133 | |||
134 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | OBB obb1; |
135 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | convertBV(aabb1, rotate_transform[0], obb1); |
136 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Box box1; |
137 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Transform3s box1_tf; |
138 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | constructBox(aabb1, rotate_transform[0], box1, box1_tf); |
139 | |||
140 | 2 | Scalar extents[] = {-1000, -1000, -1000, 1000, 1000, 1000}; | |
141 | 2 | std::size_t n = 1000; | |
142 | |||
143 | 2 | std::vector<Transform3s> transforms; | |
144 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | generateRandomTransforms(extents, transforms, n); |
145 | |||
146 |
2/2✓ Branch 1 taken 1000 times.
✓ Branch 2 taken 1 times.
|
2002 | for (std::size_t i = 0; i < transforms.size(); ++i) { |
147 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | Scalar len = (aabb1.max_[0] - aabb1.min_[0]) * Scalar(0.5); |
148 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | OBB obb2; |
149 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | GJKSolver solver; |
150 | |||
151 | { | ||
152 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | Sphere sphere(len); |
153 |
1/2✓ Branch 2 taken 1000 times.
✗ Branch 3 not taken.
|
2000 | computeBV(sphere, transforms[i], obb2); |
154 | |||
155 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | bool overlap_obb = obb1.overlap(obb2); |
156 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | CollisionRequest request; |
157 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | CollisionResult result; |
158 |
1/2✓ Branch 2 taken 1000 times.
✗ Branch 3 not taken.
|
2000 | ShapeShapeCollide<Box, Sphere>(&box1, box1_tf, &sphere, transforms[i], |
159 | &solver, request, result); | ||
160 | 2000 | bool overlap_sphere = result.isCollision(); | |
161 | // The sphere is contained inside obb2. So if the sphere overlaps with | ||
162 | // obb1, then necessarily obb2 overlaps with obb1. | ||
163 |
6/12✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
|
2000 | BOOST_CHECK(overlap_obb >= overlap_sphere); |
164 | 2000 | } | |
165 | |||
166 | { | ||
167 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | Capsule capsule(len, 2 * len); |
168 |
1/2✓ Branch 2 taken 1000 times.
✗ Branch 3 not taken.
|
2000 | computeBV(capsule, transforms[i], obb2); |
169 | |||
170 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | bool overlap_obb = obb1.overlap(obb2); |
171 | |||
172 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | CollisionRequest request; |
173 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | CollisionResult result; |
174 |
1/2✓ Branch 2 taken 1000 times.
✗ Branch 3 not taken.
|
2000 | ShapeShapeCollide<Box, Capsule>(&box1, box1_tf, &capsule, transforms[i], |
175 | &solver, request, result); | ||
176 | 2000 | bool overlap_capsule = result.isCollision(); | |
177 |
6/12✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
|
2000 | BOOST_CHECK(overlap_obb >= overlap_capsule); |
178 | 2000 | } | |
179 | |||
180 | { | ||
181 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | Cone cone(len, 2 * len); |
182 |
1/2✓ Branch 2 taken 1000 times.
✗ Branch 3 not taken.
|
2000 | computeBV(cone, transforms[i], obb2); |
183 | |||
184 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | bool overlap_obb = obb1.overlap(obb2); |
185 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | CollisionRequest request; |
186 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | CollisionResult result; |
187 |
1/2✓ Branch 2 taken 1000 times.
✗ Branch 3 not taken.
|
2000 | ShapeShapeCollide<Box, Cone>(&box1, box1_tf, &cone, transforms[i], |
188 | &solver, request, result); | ||
189 | 2000 | bool overlap_cone = result.isCollision(); | |
190 |
6/12✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
|
2000 | BOOST_CHECK(overlap_obb >= overlap_cone); |
191 | 2000 | } | |
192 | |||
193 | { | ||
194 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | Cylinder cylinder(len, 2 * len); |
195 |
1/2✓ Branch 2 taken 1000 times.
✗ Branch 3 not taken.
|
2000 | computeBV(cylinder, transforms[i], obb2); |
196 | |||
197 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | bool overlap_obb = obb1.overlap(obb2); |
198 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | CollisionRequest request; |
199 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | CollisionResult result; |
200 |
1/2✓ Branch 2 taken 1000 times.
✗ Branch 3 not taken.
|
2000 | ShapeShapeCollide<Box, Cylinder>(&box1, box1_tf, &cylinder, transforms[i], |
201 | &solver, request, result); | ||
202 | 2000 | bool overlap_cylinder = result.isCollision(); | |
203 |
6/12✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
|
2000 | BOOST_CHECK(overlap_obb >= overlap_cylinder); |
204 | 2000 | } | |
205 | 2000 | } | |
206 | 2 | } | |
207 | |||
208 |
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(OBB_AABB_test) { |
209 | 2 | Scalar extents[] = {-1000, -1000, -1000, 1000, 1000, 1000}; | |
210 | 2 | std::size_t n = 1000; | |
211 | |||
212 | 2 | std::vector<Transform3s> transforms; | |
213 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | generateRandomTransforms(extents, transforms, n); |
214 | |||
215 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | AABB aabb1; |
216 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | aabb1.min_ = Vec3s(-600, -600, -600); |
217 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | aabb1.max_ = Vec3s(600, 600, 600); |
218 | |||
219 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | OBB obb1; |
220 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | convertBV(aabb1, Transform3s(), obb1); |
221 | |||
222 |
2/2✓ Branch 1 taken 1000 times.
✓ Branch 2 taken 1 times.
|
2002 | for (std::size_t i = 0; i < transforms.size(); ++i) { |
223 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | AABB aabb; |
224 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | aabb.min_ = aabb1.min_ * 0.5; |
225 |
2/4✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1000 times.
✗ Branch 5 not taken.
|
2000 | aabb.max_ = aabb1.max_ * 0.5; |
226 | |||
227 |
1/2✓ Branch 3 taken 1000 times.
✗ Branch 4 not taken.
|
2000 | AABB aabb2 = translate(aabb, transforms[i].getTranslation()); |
228 | |||
229 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | OBB obb2; |
230 |
2/4✓ Branch 3 taken 1000 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1000 times.
✗ Branch 7 not taken.
|
2000 | convertBV(aabb, Transform3s(transforms[i].getTranslation()), obb2); |
231 | |||
232 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | bool overlap_aabb = aabb1.overlap(aabb2); |
233 |
1/2✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
|
2000 | bool overlap_obb = obb1.overlap(obb2); |
234 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1000 times.
|
2000 | if (overlap_aabb != overlap_obb) { |
235 | ✗ | std::cout << aabb1.min_ << " " << aabb1.max_ << std::endl; | |
236 | ✗ | std::cout << aabb2.min_ << " " << aabb2.max_ << std::endl; | |
237 | ✗ | std::cout << obb1.To << " " << obb1.extent << " " << obb1.axes | |
238 | ✗ | << std::endl; | |
239 | ✗ | std::cout << obb2.To << " " << obb2.extent << " " << obb2.axes | |
240 | ✗ | << std::endl; | |
241 | } | ||
242 | |||
243 |
6/12✓ Branch 1 taken 1000 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1000 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1000 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1000 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1000 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1000 times.
|
2000 | BOOST_CHECK(overlap_aabb == overlap_obb); |
244 | } | ||
245 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | std::cout << std::endl; |
246 | 2 | } | |
247 | |||
248 | std::ostream *bench_stream = NULL; | ||
249 | bool bs_nl = true; | ||
250 | bool bs_hp = false; | ||
251 | #define BENCHMARK(stream) \ | ||
252 | if (bench_stream != NULL) { \ | ||
253 | *bench_stream << (bs_nl ? "" : ", ") << stream; \ | ||
254 | bs_nl = false; \ | ||
255 | } | ||
256 | #define BENCHMARK_HEADER(stream) \ | ||
257 | if (!bs_hp) { \ | ||
258 | BENCHMARK(stream) \ | ||
259 | } | ||
260 | #define BENCHMARK_NEXT() \ | ||
261 | if (bench_stream != NULL && !bs_nl) { \ | ||
262 | *bench_stream << '\n'; \ | ||
263 | bs_nl = true; \ | ||
264 | bs_hp = true; \ | ||
265 | } | ||
266 | |||
267 | typedef std::vector<Contact> Contacts_t; | ||
268 | typedef boost::mpl::vector<OBB, RSS, KDOP<24>, KDOP<18>, KDOP<16>, kIOS, OBBRSS> | ||
269 | BVs_t; | ||
270 | std::vector<SplitMethodType> splitMethods = boost::assign::list_of( | ||
271 | SPLIT_METHOD_MEAN)(SPLIT_METHOD_MEDIAN)(SPLIT_METHOD_BV_CENTER); | ||
272 | |||
273 | #define BV_STR_SPECIALIZATION(bv) \ | ||
274 | template <> \ | ||
275 | const char *str<bv>() { \ | ||
276 | return #bv; \ | ||
277 | } | ||
278 | template <typename BV> | ||
279 | const char *str(); | ||
280 | 18 | BV_STR_SPECIALIZATION(AABB) | |
281 | 33 | BV_STR_SPECIALIZATION(OBB) | |
282 | 36 | BV_STR_SPECIALIZATION(RSS) | |
283 | 12 | BV_STR_SPECIALIZATION(KDOP<24>) | |
284 | 12 | BV_STR_SPECIALIZATION(KDOP<18>) | |
285 | 12 | BV_STR_SPECIALIZATION(KDOP<16>) | |
286 | 36 | BV_STR_SPECIALIZATION(kIOS) | |
287 | 36 | BV_STR_SPECIALIZATION(OBBRSS) | |
288 | |||
289 | template <typename T> | ||
290 | struct wrap {}; | ||
291 | |||
292 | struct base_traits { | ||
293 | enum { IS_IMPLEMENTED = true }; | ||
294 | }; | ||
295 | |||
296 | enum { | ||
297 | Oriented = true, | ||
298 | NonOriented = false, | ||
299 | Recursive = true, | ||
300 | NonRecursive = false | ||
301 | }; | ||
302 | |||
303 | template <typename BV, bool Oriented, bool recursive> | ||
304 | struct traits : base_traits {}; | ||
305 | |||
306 | template <short N, bool recursive> | ||
307 | struct traits<KDOP<N>, Oriented, recursive> : base_traits { | ||
308 | enum { IS_IMPLEMENTED = false }; | ||
309 | }; | ||
310 | |||
311 | COAL_COMPILER_DIAGNOSTIC_PUSH | ||
312 | COAL_COMPILER_DIAGNOSTIC_IGNORED_DEPRECECATED_DECLARATIONS | ||
313 | |||
314 | struct mesh_mesh_run_test { | ||
315 | 3 | mesh_mesh_run_test(const std::vector<Transform3s> &_transforms, | |
316 | const CollisionRequest _request) | ||
317 | 3 | : transforms(_transforms), | |
318 | 3 | request(_request), | |
319 | 3 | enable_statistics(false), | |
320 | 3 | benchmark(false), | |
321 | 3 | isInit(false), | |
322 | 3 | indent(0) {} | |
323 | |||
324 | const std::vector<Transform3s> &transforms; | ||
325 | const CollisionRequest request; | ||
326 | bool enable_statistics, benchmark; | ||
327 | std::vector<Contacts_t> contacts; | ||
328 | std::vector<Contacts_t> contacts_ref; | ||
329 | bool isInit; | ||
330 | |||
331 | int indent; | ||
332 | |||
333 | COAL_COMPILER_DIAGNOSTIC_POP | ||
334 | |||
335 | 354 | const char *getindent() { | |
336 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 354 times.
|
354 | assert(indent < 9); |
337 | static const char *t[] = {"", | ||
338 | "\t", | ||
339 | "\t\t", | ||
340 | "\t\t\t", | ||
341 | "\t\t\t\t", | ||
342 | "\t\t\t\t\t", | ||
343 | "\t\t\t\t\t\t", | ||
344 | "\t\t\t\t\t\t\t", | ||
345 | "\t\t\t\t\t\t\t\t"}; | ||
346 | 354 | return t[indent]; | |
347 | } | ||
348 | |||
349 | template <typename BV> | ||
350 | 138 | void query(const std::vector<Transform3s> &transforms, | |
351 | SplitMethodType splitMethod, const CollisionRequest request, | ||
352 | std::vector<Contacts_t> &contacts) { | ||
353 |
7/10✓ Branch 0 taken 22 times.
✓ Branch 1 taken 47 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 21 times.
✓ 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.
|
138 | BENCHMARK_HEADER("BV"); |
354 |
7/10✓ Branch 0 taken 22 times.
✓ Branch 1 taken 47 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 21 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
138 | BENCHMARK_HEADER("oriented"); |
355 |
7/10✓ Branch 0 taken 22 times.
✓ Branch 1 taken 47 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 21 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
138 | BENCHMARK_HEADER("Split method"); |
356 |
2/2✓ Branch 0 taken 21 times.
✓ Branch 1 taken 48 times.
|
138 | if (enable_statistics) { |
357 |
2/10✓ Branch 0 taken 21 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 21 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
42 | BENCHMARK_HEADER("num_bv_tests"); |
358 |
2/10✓ Branch 0 taken 21 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 21 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
42 | BENCHMARK_HEADER("num_leaf_tests"); |
359 | } | ||
360 |
7/10✓ Branch 0 taken 22 times.
✓ Branch 1 taken 47 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 21 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
138 | BENCHMARK_HEADER("numContacts"); |
361 |
7/10✓ Branch 0 taken 22 times.
✓ Branch 1 taken 47 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 21 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
138 | BENCHMARK_HEADER("distance_lower_bound"); |
362 |
7/10✓ Branch 0 taken 22 times.
✓ Branch 1 taken 47 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 21 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
|
138 | BENCHMARK_HEADER("time"); |
363 |
5/6✓ Branch 0 taken 48 times.
✓ Branch 1 taken 21 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 47 times.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
138 | BENCHMARK_NEXT(); |
364 | |||
365 | typedef BVHModel<BV> BVH_t; | ||
366 | typedef shared_ptr<BVH_t> BVHPtr_t; | ||
367 | |||
368 |
6/12✓ Branch 1 taken 69 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 69 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 69 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 69 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 69 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 69 times.
✗ Branch 17 not taken.
|
138 | BVHPtr_t model1(new BVH_t), model2(new BVH_t); |
369 |
3/6✓ Branch 2 taken 69 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 69 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 69 times.
✗ Branch 9 not taken.
|
138 | model1->bv_splitter.reset(new BVSplitter<BV>(splitMethod)); |
370 |
3/6✓ Branch 2 taken 69 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 69 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 69 times.
✗ Branch 9 not taken.
|
138 | model2->bv_splitter.reset(new BVSplitter<BV>(splitMethod)); |
371 | |||
372 |
4/8✓ Branch 1 taken 69 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 69 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 69 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 69 times.
✗ Branch 12 not taken.
|
138 | loadPolyhedronFromResource(TEST_RESOURCES_DIR "/env.obj", Vec3s::Ones(), |
373 | model1); | ||
374 |
4/8✓ Branch 1 taken 69 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 69 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 69 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 69 times.
✗ Branch 12 not taken.
|
138 | loadPolyhedronFromResource(TEST_RESOURCES_DIR "/rob.obj", Vec3s::Ones(), |
375 | model2); | ||
376 | |||
377 |
1/2✓ Branch 1 taken 69 times.
✗ Branch 2 not taken.
|
138 | Timer timer(false); |
378 |
1/2✓ Branch 1 taken 69 times.
✗ Branch 2 not taken.
|
138 | const Transform3s tf2; |
379 | 138 | const std::size_t N = transforms.size(); | |
380 | |||
381 |
1/2✓ Branch 1 taken 69 times.
✗ Branch 2 not taken.
|
138 | contacts.resize(3 * N); |
382 | |||
383 | if (traits<BV, Oriented, Recursive>::IS_IMPLEMENTED) { | ||
384 |
8/16✓ Branch 2 taken 42 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 42 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 42 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 42 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 42 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 42 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 42 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 42 times.
✗ Branch 27 not taken.
|
84 | BOOST_TEST_MESSAGE(getindent() << "BV: " << str<BV>() << " oriented"); |
385 | 84 | ++indent; | |
386 | |||
387 |
2/2✓ Branch 3 taken 12 times.
✓ Branch 4 taken 42 times.
|
108 | for (std::size_t i = 0; i < transforms.size(); ++i) { |
388 | 24 | const Transform3s &tf1 = transforms[i]; | |
389 | 24 | timer.start(); | |
390 | |||
391 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
24 | CollisionResult local_result; |
392 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
24 | MeshCollisionTraversalNode<BV, 0> node(request); |
393 | 24 | node.enable_statistics = enable_statistics; | |
394 | |||
395 | bool success = | ||
396 |
1/2✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
|
24 | initialize(node, *model1, tf1, *model2, tf2, local_result); |
397 |
6/12✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 12 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 12 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 12 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 12 times.
|
24 | BOOST_REQUIRE(success); |
398 | |||
399 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
24 | collide(&node, request, local_result); |
400 | |||
401 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
24 | timer.stop(); |
402 | |||
403 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
24 | BENCHMARK(str<BV>()); |
404 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
24 | BENCHMARK(1); |
405 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
24 | BENCHMARK(splitMethod); |
406 |
1/2✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
|
24 | if (enable_statistics) { |
407 |
9/18✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 12 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 12 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 12 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 12 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 12 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 12 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 12 times.
✗ Branch 29 not taken.
|
24 | BOOST_TEST_MESSAGE(getindent() << "statistics: " << node.num_bv_tests |
408 | << " " << node.num_leaf_tests); | ||
409 |
7/14✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 12 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 12 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 12 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 12 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 12 times.
✗ Branch 24 not taken.
|
24 | BOOST_TEST_MESSAGE(getindent() |
410 | << "nb contacts: " << local_result.numContacts()); | ||
411 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
24 | BENCHMARK(node.num_bv_tests); |
412 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
24 | BENCHMARK(node.num_leaf_tests); |
413 | } | ||
414 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
24 | BENCHMARK(local_result.numContacts()); |
415 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
24 | BENCHMARK(local_result.distance_lower_bound); |
416 |
1/10✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
24 | BENCHMARK(timer.duration().count()); |
417 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
24 | BENCHMARK_NEXT(); |
418 | |||
419 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
|
24 | if (local_result.numContacts() > 0) { |
420 | ✗ | local_result.getContacts(contacts[i]); | |
421 | ✗ | std::sort(contacts[i].begin(), contacts[i].end()); | |
422 | } | ||
423 | } | ||
424 | 84 | --indent; | |
425 | } | ||
426 | |||
427 | if (traits<BV, NonOriented, Recursive>::IS_IMPLEMENTED) { | ||
428 |
7/14✓ Branch 2 taken 69 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 69 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 69 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 69 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 69 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 69 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 69 times.
✗ Branch 24 not taken.
|
138 | BOOST_TEST_MESSAGE(getindent() << "BV: " << str<BV>()); |
429 | 138 | ++indent; | |
430 | |||
431 |
2/2✓ Branch 3 taken 21 times.
✓ Branch 4 taken 69 times.
|
180 | for (std::size_t i = 0; i < transforms.size(); ++i) { |
432 |
1/2✓ Branch 2 taken 21 times.
✗ Branch 3 not taken.
|
42 | const Transform3s tf1 = transforms[i]; |
433 | |||
434 | 42 | timer.start(); | |
435 |
1/2✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
|
42 | CollisionResult local_result; |
436 |
1/2✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
|
42 | MeshCollisionTraversalNode<BV, RelativeTransformationIsIdentity> node( |
437 | request); | ||
438 | 42 | node.enable_statistics = enable_statistics; | |
439 | |||
440 |
2/4✓ Branch 2 taken 21 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 21 times.
✗ Branch 6 not taken.
|
42 | BVH_t *model1_tmp = new BVH_t(*model1); |
441 |
1/2✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
|
42 | Transform3s tf1_tmp = tf1; |
442 |
2/4✓ Branch 2 taken 21 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 21 times.
✗ Branch 6 not taken.
|
42 | BVH_t *model2_tmp = new BVH_t(*model2); |
443 |
1/2✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
|
42 | Transform3s tf2_tmp = tf2; |
444 | |||
445 |
1/2✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
|
42 | bool success = initialize(node, *model1_tmp, tf1_tmp, *model2_tmp, |
446 | tf2_tmp, local_result, true, true); | ||
447 |
6/12✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 21 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 21 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 21 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 21 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 21 times.
|
42 | BOOST_REQUIRE(success); |
448 | |||
449 |
1/2✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
|
42 | collide(&node, request, local_result); |
450 |
1/2✓ Branch 0 taken 21 times.
✗ Branch 1 not taken.
|
42 | delete model1_tmp; |
451 |
1/2✓ Branch 0 taken 21 times.
✗ Branch 1 not taken.
|
42 | delete model2_tmp; |
452 | |||
453 |
1/2✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
|
42 | timer.stop(); |
454 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
42 | BENCHMARK(str<BV>()); |
455 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
42 | BENCHMARK(2); |
456 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
42 | BENCHMARK(splitMethod); |
457 |
1/2✓ Branch 0 taken 21 times.
✗ Branch 1 not taken.
|
42 | if (enable_statistics) { |
458 |
9/18✓ Branch 2 taken 21 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 21 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 21 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 21 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 21 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 21 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 21 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 21 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 21 times.
✗ Branch 29 not taken.
|
42 | BOOST_TEST_MESSAGE(getindent() << "statistics: " << node.num_bv_tests |
459 | << " " << node.num_leaf_tests); | ||
460 |
7/14✓ Branch 2 taken 21 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 21 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 21 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 21 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 21 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 21 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 21 times.
✗ Branch 24 not taken.
|
42 | BOOST_TEST_MESSAGE(getindent() |
461 | << "nb contacts: " << local_result.numContacts()); | ||
462 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
42 | BENCHMARK(node.num_bv_tests); |
463 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
42 | BENCHMARK(node.num_leaf_tests); |
464 | } | ||
465 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
42 | BENCHMARK(local_result.numContacts()); |
466 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
42 | BENCHMARK(local_result.distance_lower_bound); |
467 |
1/10✗ Branch 0 not taken.
✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
42 | BENCHMARK(timer.duration().count()); |
468 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
42 | BENCHMARK_NEXT(); |
469 | |||
470 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 21 times.
|
42 | if (local_result.numContacts() > 0) { |
471 | ✗ | local_result.getContacts(contacts[i + N]); | |
472 | ✗ | std::sort(contacts[i + N].begin(), contacts[i + N].end()); | |
473 | } | ||
474 | } | ||
475 | 138 | --indent; | |
476 | } | ||
477 | |||
478 | if (traits<BV, Oriented, NonRecursive>::IS_IMPLEMENTED) { | ||
479 |
8/16✓ Branch 2 taken 42 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 42 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 42 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 42 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 42 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 42 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 42 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 42 times.
✗ Branch 27 not taken.
|
84 | BOOST_TEST_MESSAGE(getindent() |
480 | << "BV: " << str<BV>() << " oriented non-recursive"); | ||
481 | 84 | ++indent; | |
482 | |||
483 |
2/2✓ Branch 3 taken 12 times.
✓ Branch 4 taken 42 times.
|
108 | for (std::size_t i = 0; i < transforms.size(); ++i) { |
484 | 24 | timer.start(); | |
485 |
1/2✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
|
24 | const Transform3s tf1 = transforms[i]; |
486 | |||
487 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
24 | CollisionResult local_result; |
488 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
24 | MeshCollisionTraversalNode<BV, 0> node(request); |
489 | 24 | node.enable_statistics = enable_statistics; | |
490 | |||
491 | bool success = | ||
492 |
1/2✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
|
24 | initialize(node, *model1, tf1, *model2, tf2, local_result); |
493 |
6/12✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 12 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 12 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 12 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 12 times.
|
24 | BOOST_REQUIRE(success); |
494 | |||
495 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
24 | collide(&node, request, local_result, NULL, false); |
496 | |||
497 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
24 | timer.stop(); |
498 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
24 | BENCHMARK(str<BV>()); |
499 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
24 | BENCHMARK(0); |
500 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
24 | BENCHMARK(splitMethod); |
501 |
1/2✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
|
24 | if (enable_statistics) { |
502 |
9/18✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 12 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 12 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 12 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 12 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 12 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 12 times.
✗ Branch 26 not taken.
✓ Branch 28 taken 12 times.
✗ Branch 29 not taken.
|
24 | BOOST_TEST_MESSAGE(getindent() << "statistics: " << node.num_bv_tests |
503 | << " " << node.num_leaf_tests); | ||
504 |
7/14✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 12 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 12 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 12 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 12 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 12 times.
✗ Branch 24 not taken.
|
24 | BOOST_TEST_MESSAGE(getindent() |
505 | << "nb contacts: " << local_result.numContacts()); | ||
506 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
24 | BENCHMARK(node.num_bv_tests); |
507 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
24 | BENCHMARK(node.num_leaf_tests); |
508 | } | ||
509 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
|
24 | BENCHMARK(local_result.numContacts()); |
510 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
24 | BENCHMARK(local_result.distance_lower_bound); |
511 |
1/10✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
24 | BENCHMARK(timer.duration().count()); |
512 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
|
24 | BENCHMARK_NEXT(); |
513 | |||
514 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 12 times.
|
24 | if (local_result.numContacts() > 0) { |
515 | ✗ | local_result.getContacts(contacts[i + 2 * N]); | |
516 | ✗ | std::sort(contacts[i + 2 * N].begin(), contacts[i + 2 * N].end()); | |
517 | } | ||
518 | } | ||
519 | 84 | --indent; | |
520 | } | ||
521 | 138 | } | |
522 | |||
523 | 42 | void check_contacts(std::size_t i0, std::size_t i1, bool warn) { | |
524 |
2/2✓ Branch 0 taken 42 times.
✓ Branch 1 taken 42 times.
|
84 | for (std::size_t i = i0; i < i1; ++i) { |
525 | 42 | Contacts_t in_ref_but_not_in_i; | |
526 |
2/4✓ Branch 2 taken 42 times.
✗ Branch 3 not taken.
✓ Branch 9 taken 42 times.
✗ Branch 10 not taken.
|
210 | std::set_difference( |
527 | 126 | contacts_ref[i].begin(), contacts_ref[i].end(), contacts[i].begin(), | |
528 | 42 | contacts[i].end(), | |
529 | std::inserter(in_ref_but_not_in_i, in_ref_but_not_in_i.begin())); | ||
530 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 42 times.
|
42 | if (!in_ref_but_not_in_i.empty()) { |
531 | ✗ | for (std::size_t j = 0; j < in_ref_but_not_in_i.size(); ++j) { | |
532 | ✗ | if (warn) { | |
533 | ✗ | BOOST_WARN_MESSAGE( | |
534 | false, "Missed contacts: " << in_ref_but_not_in_i[j].b1 << ", " | ||
535 | << in_ref_but_not_in_i[j].b2); | ||
536 | } else { | ||
537 | ✗ | BOOST_CHECK_MESSAGE( | |
538 | false, "Missed contacts: " << in_ref_but_not_in_i[j].b1 << ", " | ||
539 | << in_ref_but_not_in_i[j].b2); | ||
540 | } | ||
541 | } | ||
542 | } | ||
543 | |||
544 | 42 | Contacts_t in_i_but_not_in_ref; | |
545 |
2/4✓ Branch 2 taken 42 times.
✗ Branch 3 not taken.
✓ Branch 9 taken 42 times.
✗ Branch 10 not taken.
|
210 | std::set_difference( |
546 | 126 | contacts[i].begin(), contacts[i].end(), contacts_ref[i].begin(), | |
547 | 42 | contacts_ref[i].end(), | |
548 | std::inserter(in_i_but_not_in_ref, in_i_but_not_in_ref.begin())); | ||
549 | |||
550 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 42 times.
|
42 | if (!in_i_but_not_in_ref.empty()) { |
551 | ✗ | for (std::size_t j = 0; j < in_i_but_not_in_ref.size(); ++j) { | |
552 | ✗ | if (warn) { | |
553 | ✗ | BOOST_WARN_MESSAGE( | |
554 | false, "False contacts: " << in_i_but_not_in_ref[j].b1 << ", " | ||
555 | << in_i_but_not_in_ref[j].b2); | ||
556 | } else { | ||
557 | ✗ | BOOST_CHECK_MESSAGE( | |
558 | false, "False contacts: " << in_i_but_not_in_ref[j].b1 << ", " | ||
559 | << in_i_but_not_in_ref[j].b2); | ||
560 | } | ||
561 | } | ||
562 | } | ||
563 | 42 | } | |
564 | 42 | } | |
565 | |||
566 | template <typename BV> | ||
567 | 132 | void check() { | |
568 |
2/2✓ Branch 0 taken 46 times.
✓ Branch 1 taken 20 times.
|
132 | if (benchmark) return; |
569 | 40 | const std::size_t N = transforms.size(); | |
570 | |||
571 |
4/8✓ Branch 3 taken 20 times.
✗ Branch 4 not taken.
✓ Branch 9 taken 20 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 20 times.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 20 times.
|
40 | BOOST_REQUIRE_EQUAL(contacts.size(), 3 * N); |
572 |
4/8✓ Branch 3 taken 20 times.
✗ Branch 4 not taken.
✓ Branch 10 taken 20 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 20 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 20 times.
|
40 | BOOST_REQUIRE_EQUAL(contacts.size(), contacts_ref.size()); |
573 | |||
574 | if (traits<BV, Oriented, Recursive>::IS_IMPLEMENTED) { | ||
575 |
8/16✓ Branch 2 taken 11 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 11 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 11 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 11 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 11 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 11 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 11 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 11 times.
✗ Branch 27 not taken.
|
22 | BOOST_TEST_MESSAGE(getindent() << "BV: " << str<BV>() << " oriented"); |
576 | 22 | ++indent; | |
577 | 22 | check_contacts(0, N, false); | |
578 | 22 | --indent; | |
579 | } | ||
580 | if (traits<BV, NonOriented, Recursive>::IS_IMPLEMENTED) { | ||
581 |
7/14✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 20 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 20 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 20 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 20 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 20 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 20 times.
✗ Branch 24 not taken.
|
40 | BOOST_TEST_MESSAGE(getindent() << "BV: " << str<BV>()); |
582 | 40 | ++indent; | |
583 | 40 | check_contacts(N, 2 * N, true); | |
584 | 40 | --indent; | |
585 | } | ||
586 | if (traits<BV, Oriented, NonRecursive>::IS_IMPLEMENTED) { | ||
587 |
8/16✓ Branch 2 taken 11 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 11 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 11 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 11 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 11 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 11 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 11 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 11 times.
✗ Branch 27 not taken.
|
22 | BOOST_TEST_MESSAGE(getindent() |
588 | << "BV: " << str<BV>() << " oriented non-recursive"); | ||
589 | 22 | ++indent; | |
590 | 22 | check_contacts(2 * N, 3 * N, false); | |
591 | 22 | --indent; | |
592 | } | ||
593 | } | ||
594 | |||
595 | template <typename BV> | ||
596 | 46 | void operator()(wrap<BV>) { | |
597 |
2/2✓ Branch 1 taken 69 times.
✓ Branch 2 taken 23 times.
|
184 | for (std::size_t i = 0; i < splitMethods.size(); ++i) { |
598 |
7/14✓ Branch 2 taken 69 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 69 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 69 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 69 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 69 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 69 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 69 times.
✗ Branch 24 not taken.
|
138 | BOOST_TEST_MESSAGE(getindent() << "splitMethod: " << splitMethods[i]); |
599 | 138 | ++indent; | |
600 |
1/2✓ Branch 3 taken 69 times.
✗ Branch 4 not taken.
|
138 | query<BV>(transforms, splitMethods[i], request, |
601 |
2/2✓ Branch 0 taken 66 times.
✓ Branch 1 taken 3 times.
|
138 | (isInit ? contacts : contacts_ref)); |
602 |
2/2✓ Branch 0 taken 66 times.
✓ Branch 1 taken 3 times.
|
138 | if (isInit) check<BV>(); |
603 | 138 | isInit = true; | |
604 | 138 | --indent; | |
605 | } | ||
606 | 46 | } | |
607 | }; | ||
608 | |||
609 | // This test | ||
610 | // 1. load two objects "env.obj" and "rob.obj" from directory | ||
611 | // fcl_resources, | ||
612 | // 2. generates n random transformation and for each of them denote tf, | ||
613 | // 2.1 performs a collision test where object 1 is in pose tf. All | ||
614 | // the contacts are stored in vector global_pairs. | ||
615 | // 2.2 performs a series of collision tests with the same object and | ||
616 | // the same poses using various methods and various types of bounding | ||
617 | // volumes. Each time the contacts are stored in vector global_pairs_now. | ||
618 | // | ||
619 | // The methods used to test collision are | ||
620 | // - collide_Test that calls function collide with tf for object1 pose and | ||
621 | // identity for the second object pose, | ||
622 | // - collide_Test2 that moves all vertices of object1 in pose tf and that | ||
623 | // calls function collide with identity for both object poses, | ||
624 | // | ||
625 |
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(mesh_mesh) { |
626 | 2 | std::vector<Transform3s> transforms; | |
627 | 2 | Scalar extents[] = {-3000, -3000, 0, 3000, 3000, 3000}; | |
628 | #ifndef NDEBUG // if debug mode | ||
629 | 2 | std::size_t n = 1; | |
630 | #else | ||
631 | std::size_t n = 10; | ||
632 | #endif | ||
633 |
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 | n = getNbRun(utf::master_test_suite().argc, utf::master_test_suite().argv, n); |
634 | |||
635 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | generateRandomTransforms(extents, transforms, n); |
636 | |||
637 |
7/14✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
|
4 | Eigen::IOFormat f(Eigen::FullPrecision, 0, ", ", ",", "", "", "(", ")"); |
638 |
2/2✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1 times.
|
4 | for (std::size_t i = 0; i < transforms.size(); ++i) { |
639 |
13/26✓ 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.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 30 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 37 taken 1 times.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 times.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 times.
✗ Branch 44 not taken.
|
2 | BOOST_TEST_MESSAGE( |
640 | "q" << i << "=" << transforms[i].getTranslation().format(f) << "+" | ||
641 | << transforms[i].getQuatRotation().coeffs().format(f)); | ||
642 | } | ||
643 | |||
644 | COAL_COMPILER_DIAGNOSTIC_PUSH | ||
645 | COAL_COMPILER_DIAGNOSTIC_IGNORED_DEPRECECATED_DECLARATIONS | ||
646 | |||
647 | // Request all contacts and check that all methods give the same result. | ||
648 | mesh_mesh_run_test runner( | ||
649 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | transforms, CollisionRequest(CONTACT, (size_t)num_max_contacts)); |
650 | 2 | runner.enable_statistics = true; | |
651 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | boost::mpl::for_each<BVs_t, wrap<boost::mpl::placeholders::_1>>(runner); |
652 | |||
653 | COAL_COMPILER_DIAGNOSTIC_POP | ||
654 | 2 | } | |
655 | |||
656 |
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(mesh_mesh_benchmark) { |
657 | 2 | std::vector<Transform3s> transforms; | |
658 | 2 | Scalar extents[] = {-3000, -3000, 0, 3000, 3000, 3000}; | |
659 | #ifndef NDEBUG | ||
660 | 2 | std::size_t n = 0; | |
661 | #else | ||
662 | std::size_t n = 10; | ||
663 | #endif | ||
664 |
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 | n = getNbRun(utf::master_test_suite().argc, utf::master_test_suite().argv, n); |
665 | |||
666 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | generateRandomTransforms(extents, transforms, n); |
667 | |||
668 |
7/14✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
|
4 | Eigen::IOFormat f(Eigen::FullPrecision, 0, ", ", ",", "", "", "(", ")"); |
669 |
1/2✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
|
2 | for (std::size_t i = 0; i < transforms.size(); ++i) { |
670 | ✗ | BOOST_TEST_MESSAGE( | |
671 | "q" << i << "=" << transforms[i].getTranslation().format(f) << "+" | ||
672 | << transforms[i].getQuatRotation().coeffs().format(f)); | ||
673 | } | ||
674 | |||
675 | // Request all contacts and check that all methods give the same result. | ||
676 | typedef boost::mpl::vector<OBB, RSS, AABB, KDOP<24>, KDOP<18>, KDOP<16>, kIOS, | ||
677 | OBBRSS> | ||
678 | BVs_t; | ||
679 | |||
680 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | std::ofstream ofs("./collision.benchmark.csv", std::ofstream::out); |
681 | 2 | bench_stream = &ofs; | |
682 | |||
683 | // without lower bound. | ||
684 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | mesh_mesh_run_test runner1(transforms, CollisionRequest()); |
685 | 2 | runner1.enable_statistics = false; | |
686 | 2 | runner1.benchmark = true; | |
687 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | boost::mpl::for_each<BVs_t, wrap<boost::mpl::placeholders::_1>>(runner1); |
688 | |||
689 | // with lower bound. | ||
690 | mesh_mesh_run_test runner2(transforms, | ||
691 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | CollisionRequest(DISTANCE_LOWER_BOUND, 1)); |
692 | 2 | runner2.enable_statistics = false; | |
693 | 2 | runner2.benchmark = true; | |
694 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | boost::mpl::for_each<BVs_t, wrap<boost::mpl::placeholders::_1>>(runner2); |
695 | |||
696 | 2 | bench_stream = NULL; | |
697 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ofs.close(); |
698 | 2 | } | |
699 |