GCC Code Coverage Report


Directory: ./
File: test/bvh_models.cpp
Date: 2025-04-01 09:23:31
Exec Total Coverage
Lines: 244 247 98.8%
Branches: 672 1344 50.0%

Line Branch Exec Source
1 /*
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2015, Open Source Robotics Foundation
5 * Copyright (c) 2020, INRIA
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 Jeongseok Lee */
37
38 #define BOOST_TEST_MODULE COAL_BVH_MODELS
39 #include <boost/test/included/unit_test.hpp>
40 #include <boost/filesystem.hpp>
41
42 #include "fcl_resources/config.h"
43
44 #include "coal/collision.h"
45 #include "coal/BVH/BVH_model.h"
46 #include "coal/BVH/BVH_utility.h"
47 #include "coal/math/transform.h"
48 #include "coal/shape/geometric_shapes.h"
49 #include "coal/shape/geometric_shape_to_BVH_model.h"
50 #include "coal/mesh_loader/assimp.h"
51 #include "coal/mesh_loader/loader.h"
52 #include "utility.h"
53 #include <iostream>
54
55 using namespace coal;
56
57 template <typename BV>
58 16 void testBVHModelPointCloud() {
59
3/6
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
16 Box box(Vec3s::Ones());
60
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 Scalar a = box.halfSide[0];
61
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 Scalar b = box.halfSide[1];
62
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 Scalar c = box.halfSide[2];
63
1/2
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
16 std::vector<Vec3s> points(8);
64
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[0] << a, -b, c;
65
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[1] << a, b, c;
66
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[2] << -a, b, c;
67
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[3] << -a, -b, c;
68
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[4] << a, -b, -c;
69
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[5] << a, b, -c;
70
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[6] << -a, b, -c;
71
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[7] << -a, -b, -c;
72
73 {
74
3/6
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
16 shared_ptr<BVHModel<BV> > model(new BVHModel<BV>);
75
76
4/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 7 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 6 times.
✓ Branch 9 taken 1 times.
30 if (model->getNodeType() != BV_AABB && model->getNodeType() != BV_KDOP16 &&
77
7/8
✓ Branch 0 taken 7 times.
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 5 times.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 4 times.
✓ Branch 9 taken 4 times.
40 model->getNodeType() != BV_KDOP18 &&
78
3/4
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 4 times.
✓ Branch 5 taken 1 times.
10 model->getNodeType() != BV_KDOP24) {
79 16 std::cout << "Abort test since '" << getNodeTypeName(model->getNodeType())
80 << "' does not support point cloud model. "
81
7/14
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 4 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 4 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 4 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 4 times.
✗ Branch 21 not taken.
8 << "Please see issue #67." << std::endl;
82 8 return;
83 }
84
85 int result;
86
87
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
8 result = model->beginModel();
88
5/10
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 4 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 4 times.
8 BOOST_CHECK_EQUAL(result, BVH_OK);
89
90
2/2
✓ Branch 1 taken 32 times.
✓ Branch 2 taken 4 times.
72 for (std::size_t i = 0; i < points.size(); ++i) {
91
1/2
✓ Branch 3 taken 32 times.
✗ Branch 4 not taken.
64 result = model->addVertex(points[i]);
92
5/10
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 32 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 32 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 32 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 32 times.
64 BOOST_CHECK_EQUAL(result, BVH_OK);
93 }
94
95
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
8 result = model->endModel();
96
5/10
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 4 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 4 times.
8 BOOST_CHECK_EQUAL(result, BVH_OK);
97
98
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
8 model->computeLocalAABB();
99
100
5/10
✓ 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 14 taken 4 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 4 times.
8 BOOST_CHECK_EQUAL(model->num_vertices, 8);
101
5/10
✓ 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 14 taken 4 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 4 times.
8 BOOST_CHECK_EQUAL(model->num_tris, 0);
102
5/10
✓ 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 14 taken 4 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 4 times.
8 BOOST_CHECK_EQUAL(model->build_state, BVH_BUILD_STATE_PROCESSED);
103
2/2
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 4 times.
16 }
104
105 {
106
3/6
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
8 shared_ptr<BVHModel<BV> > model(new BVHModel<BV>);
107
108
4/6
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 1 times.
14 if (model->getNodeType() != BV_AABB && model->getNodeType() != BV_KDOP16 &&
109
6/8
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 4 times.
16 model->getNodeType() != BV_KDOP18 &&
110
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 model->getNodeType() != BV_KDOP24) {
111 std::cout << "Abort test since '" << getNodeTypeName(model->getNodeType())
112 << "' does not support point cloud model. "
113 << "Please see issue #67." << std::endl;
114 return;
115 }
116
117
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
8 MatrixX3s all_points((Eigen::DenseIndex)points.size(), 3);
118
2/2
✓ Branch 1 taken 32 times.
✓ Branch 2 taken 4 times.
72 for (size_t k = 0; k < points.size(); ++k)
119
3/6
✓ Branch 2 taken 32 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 32 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 32 times.
✗ Branch 9 not taken.
64 all_points.row((Eigen::DenseIndex)k) = points[k].transpose();
120
121 int result;
122
123
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
8 result = model->beginModel();
124
5/10
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 4 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 4 times.
8 BOOST_CHECK_EQUAL(result, BVH_OK);
125
126
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
8 result = model->addVertices(all_points);
127
128
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
8 result = model->endModel();
129
5/10
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 4 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 4 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 4 times.
8 BOOST_CHECK_EQUAL(result, BVH_OK);
130
131
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
8 model->computeLocalAABB();
132
133
5/10
✓ 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 14 taken 4 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 4 times.
8 BOOST_CHECK_EQUAL(model->num_vertices, 8);
134
5/10
✓ 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 14 taken 4 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 4 times.
8 BOOST_CHECK_EQUAL(model->num_tris, 0);
135
5/10
✓ 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 14 taken 4 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 4 times.
8 BOOST_CHECK_EQUAL(model->build_state, BVH_BUILD_STATE_PROCESSED);
136 }
137
4/4
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 4 times.
✓ Branch 4 taken 4 times.
✓ Branch 5 taken 4 times.
24 }
138
139 template <typename BV>
140 16 void testBVHModelTriangles() {
141
3/6
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
16 shared_ptr<BVHModel<BV> > model(new BVHModel<BV>);
142
3/6
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
16 Box box(Vec3s::Ones());
143
3/6
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
16 AABB aabb(Vec3s(-1, 0, -1), Vec3s(1, 1, 1));
144
145
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 Scalar a = box.halfSide[0];
146
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 Scalar b = box.halfSide[1];
147
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 Scalar c = box.halfSide[2];
148
1/2
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
16 std::vector<Vec3s> points(8);
149
1/2
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
16 std::vector<Triangle> tri_indices(12);
150
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[0] << a, -b, c;
151
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[1] << a, b, c;
152
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[2] << -a, b, c;
153
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[3] << -a, -b, c;
154
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[4] << a, -b, -c;
155
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[5] << a, b, -c;
156
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[6] << -a, b, -c;
157
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[7] << -a, -b, -c;
158
159 16 tri_indices[0].set(0, 4, 1);
160 16 tri_indices[1].set(1, 4, 5);
161 16 tri_indices[2].set(2, 6, 3);
162 16 tri_indices[3].set(3, 6, 7);
163 16 tri_indices[4].set(3, 0, 2);
164 16 tri_indices[5].set(2, 0, 1);
165 16 tri_indices[6].set(6, 5, 7);
166 16 tri_indices[7].set(7, 5, 4);
167 16 tri_indices[8].set(1, 5, 2);
168 16 tri_indices[9].set(2, 5, 6);
169 16 tri_indices[10].set(3, 7, 0);
170 16 tri_indices[11].set(0, 7, 4);
171
172 int result;
173
174
1/2
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
16 result = model->beginModel();
175
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 8 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 8 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 8 times.
16 BOOST_CHECK_EQUAL(result, BVH_OK);
176
177
2/2
✓ Branch 1 taken 96 times.
✓ Branch 2 taken 8 times.
208 for (std::size_t i = 0; i < tri_indices.size(); ++i) {
178 192 result =
179
1/2
✓ Branch 11 taken 96 times.
✗ Branch 12 not taken.
192 model->addTriangle(points[tri_indices[i][0]], points[tri_indices[i][1]],
180 points[tri_indices[i][2]]);
181
5/10
✓ Branch 1 taken 96 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 96 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 96 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 96 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 96 times.
192 BOOST_CHECK_EQUAL(result, BVH_OK);
182 }
183
184
1/2
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
16 result = model->endModel();
185
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 8 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 8 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 8 times.
16 BOOST_CHECK_EQUAL(result, BVH_OK);
186
187
1/2
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
16 model->computeLocalAABB();
188
189
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 8 times.
16 BOOST_CHECK_EQUAL(model->num_vertices, 12 * 3);
190
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 8 times.
16 BOOST_CHECK_EQUAL(model->num_tris, 12);
191
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 8 times.
16 BOOST_CHECK_EQUAL(model->build_state, BVH_BUILD_STATE_PROCESSED);
192
193
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 Transform3s pose;
194
2/4
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
16 shared_ptr<BVHModel<BV> > cropped(BVHExtract(*model, pose, aabb));
195
6/12
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 8 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 8 times.
16 BOOST_REQUIRE(cropped);
196
6/12
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 8 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 8 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 8 times.
16 BOOST_CHECK(cropped->build_state == BVH_BUILD_STATE_PROCESSED);
197
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 12 taken 8 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 8 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 8 times.
16 BOOST_CHECK_EQUAL(cropped->num_vertices, model->num_vertices - 6);
198
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 12 taken 8 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 8 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 8 times.
16 BOOST_CHECK_EQUAL(cropped->num_tris, model->num_tris - 2);
199
200
2/4
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
16 pose.setTranslation(Vec3s(0, 1, 0));
201
2/4
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
16 cropped.reset(BVHExtract(*model, pose, aabb));
202
6/12
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 8 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 8 times.
16 BOOST_REQUIRE(cropped);
203
6/12
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 8 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 8 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 8 times.
16 BOOST_CHECK(cropped->build_state == BVH_BUILD_STATE_PROCESSED);
204
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 12 taken 8 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 8 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 8 times.
16 BOOST_CHECK_EQUAL(cropped->num_vertices, model->num_vertices - 6);
205
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 12 taken 8 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 8 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 8 times.
16 BOOST_CHECK_EQUAL(cropped->num_tris, model->num_tris - 2);
206
207
2/4
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
16 pose.setTranslation(Vec3s(0, 0, 0));
208 16 Scalar sqrt2_2 = std::sqrt(Scalar(2)) / 2;
209
2/4
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
16 pose.setQuatRotation(Quats(sqrt2_2, sqrt2_2, 0, 0));
210
2/4
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
16 cropped.reset(BVHExtract(*model, pose, aabb));
211
6/12
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 8 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 8 times.
16 BOOST_REQUIRE(cropped);
212
6/12
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 8 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 8 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 8 times.
16 BOOST_CHECK(cropped->build_state == BVH_BUILD_STATE_PROCESSED);
213
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 12 taken 8 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 8 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 8 times.
16 BOOST_CHECK_EQUAL(cropped->num_vertices, model->num_vertices - 6);
214
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 12 taken 8 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 8 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 8 times.
16 BOOST_CHECK_EQUAL(cropped->num_tris, model->num_tris - 2);
215
216
3/6
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
16 pose.setTranslation(-Vec3s(1, 1, 1));
217
2/4
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
16 pose.setQuatRotation(Quats::Identity());
218
2/4
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
16 cropped.reset(BVHExtract(*model, pose, aabb));
219
6/12
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 8 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 8 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 8 times.
16 BOOST_CHECK(!cropped);
220
221
3/6
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
16 aabb = AABB(Vec3s(Scalar(-0.1), Scalar(-0.1), Scalar(-0.1)),
222
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 Vec3s(Scalar(0.1), Scalar(0.1), Scalar(0.1)));
223
2/4
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
16 pose.setTranslation(Vec3s(-0.5, -0.5, 0));
224
2/4
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
16 cropped.reset(BVHExtract(*model, pose, aabb));
225
6/12
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 8 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 8 times.
16 BOOST_REQUIRE(cropped);
226
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 8 times.
16 BOOST_CHECK_EQUAL(cropped->num_tris, 2);
227
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 8 times.
16 BOOST_CHECK_EQUAL(cropped->num_vertices, 6);
228 16 }
229
230 template <typename BV>
231 16 void testBVHModelSubModel() {
232
3/6
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
16 shared_ptr<BVHModel<BV> > model(new BVHModel<BV>);
233
3/6
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
16 Box box(Vec3s::Ones());
234
235
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 Scalar a = box.halfSide[0];
236
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 Scalar b = box.halfSide[1];
237
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 Scalar c = box.halfSide[2];
238
1/2
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
16 std::vector<Vec3s> points(8);
239
1/2
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
16 std::vector<Triangle> tri_indices(12);
240
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[0] << a, -b, c;
241
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[1] << a, b, c;
242
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[2] << -a, b, c;
243
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[3] << -a, -b, c;
244
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[4] << a, -b, -c;
245
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[5] << a, b, -c;
246
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[6] << -a, b, -c;
247
3/6
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
16 points[7] << -a, -b, -c;
248
249 16 tri_indices[0].set(0, 4, 1);
250 16 tri_indices[1].set(1, 4, 5);
251 16 tri_indices[2].set(2, 6, 3);
252 16 tri_indices[3].set(3, 6, 7);
253 16 tri_indices[4].set(3, 0, 2);
254 16 tri_indices[5].set(2, 0, 1);
255 16 tri_indices[6].set(6, 5, 7);
256 16 tri_indices[7].set(7, 5, 4);
257 16 tri_indices[8].set(1, 5, 2);
258 16 tri_indices[9].set(2, 5, 6);
259 16 tri_indices[10].set(3, 7, 0);
260 16 tri_indices[11].set(0, 7, 4);
261
262 int result;
263
264
1/2
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
16 result = model->beginModel();
265
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 8 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 8 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 8 times.
16 BOOST_CHECK_EQUAL(result, BVH_OK);
266
267
1/2
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
16 result = model->addSubModel(points, tri_indices);
268
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 8 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 8 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 8 times.
16 BOOST_CHECK_EQUAL(result, BVH_OK);
269
270
1/2
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
16 result = model->endModel();
271
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 8 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 8 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 8 times.
16 BOOST_CHECK_EQUAL(result, BVH_OK);
272
273
1/2
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
16 model->computeLocalAABB();
274
275
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 8 times.
16 BOOST_CHECK_EQUAL(model->num_vertices, 8);
276
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 8 times.
16 BOOST_CHECK_EQUAL(model->num_tris, 12);
277
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 8 times.
16 BOOST_CHECK_EQUAL(model->build_state, BVH_BUILD_STATE_PROCESSED);
278 16 }
279
280 template <typename BV>
281 16 void testBVHModel() {
282 16 testBVHModelTriangles<BV>();
283 16 testBVHModelPointCloud<BV>();
284 16 testBVHModelSubModel<BV>();
285 16 }
286
287
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_bvh_models) {
288 2 testBVHModel<AABB>();
289 2 testBVHModel<OBB>();
290 2 testBVHModel<RSS>();
291 2 testBVHModel<kIOS>();
292 2 testBVHModel<OBBRSS>();
293 2 testBVHModel<KDOP<16> >();
294 2 testBVHModel<KDOP<18> >();
295 2 testBVHModel<KDOP<24> >();
296 2 }
297
298 template <class BoundingVolume>
299 16 void testLoadPolyhedron() {
300
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 boost::filesystem::path path(TEST_RESOURCES_DIR);
301
3/6
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
32 std::string env = (path / "env.obj").string(),
302
3/6
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
32 rob = (path / "rob.obj").string();
303
304 typedef BVHModel<BoundingVolume> Polyhedron_t;
305 typedef shared_ptr<Polyhedron_t> PolyhedronPtr_t;
306
3/6
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
16 PolyhedronPtr_t P1(new Polyhedron_t), P2;
307
308
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 Vec3s scale;
309
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 scale.setConstant(1);
310
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 loadPolyhedronFromResource(env, scale, P1);
311
312
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 scale.setConstant(-1);
313
1/2
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
16 CachedMeshLoader loader(P1->getNodeType());
314
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
16 CollisionGeometryPtr_t geom = loader.load(env, scale);
315 16 P2 = dynamic_pointer_cast<Polyhedron_t>(geom);
316
6/12
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 8 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 8 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 8 times.
16 BOOST_REQUIRE(P2);
317
318
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 12 taken 8 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 8 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 8 times.
16 BOOST_CHECK_EQUAL(P1->num_tris, P2->num_tris);
319
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 12 taken 8 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 8 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✓ Branch 20 taken 8 times.
16 BOOST_CHECK_EQUAL(P1->num_vertices, P2->num_vertices);
320
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 14 taken 8 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 8 times.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 8 times.
16 BOOST_CHECK_EQUAL(P1->getNumBVs(), P2->getNumBVs());
321
322
1/2
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
32 CollisionGeometryPtr_t geom2 = loader.load(env, scale);
323
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 8 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 8 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 8 times.
16 BOOST_CHECK_EQUAL(geom, geom2);
324 16 }
325
326 template <class BoundingVolume>
327 8 void testLoadGerardBauzil() {
328
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
8 boost::filesystem::path path(TEST_RESOURCES_DIR);
329
3/6
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 4 times.
✗ Branch 9 not taken.
16 std::string env = (path / "staircases_koroibot_hr.dae").string();
330
331 typedef BVHModel<BoundingVolume> Polyhedron_t;
332 typedef shared_ptr<Polyhedron_t> PolyhedronPtr_t;
333
3/6
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
8 PolyhedronPtr_t P1(new Polyhedron_t), P2;
334
335
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
8 Vec3s scale;
336
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
8 scale.setConstant(1);
337
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
8 loadPolyhedronFromResource(env, scale, P1);
338
3/6
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
8 CollisionGeometryPtr_t cylinder(new Cylinder(Scalar(.27), Scalar(.27)));
339
2/4
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4 times.
✗ Branch 5 not taken.
8 Transform3s pos(Vec3s(Scalar(-1.33), Scalar(1.36), Scalar(.14)));
340
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
8 CollisionObject obj(cylinder, pos);
341
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
8 CollisionObject stairs(P1);
342
343
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
8 CollisionRequest request;
344
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
8 CollisionResult result;
345
346
1/2
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
8 collide(&stairs, &obj, request, result);
347
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(result.isCollision());
348 8 }
349
350
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(load_polyhedron) {
351 2 testLoadPolyhedron<AABB>();
352 2 testLoadPolyhedron<OBB>();
353 2 testLoadPolyhedron<RSS>();
354 2 testLoadPolyhedron<kIOS>();
355 2 testLoadPolyhedron<OBBRSS>();
356 2 testLoadPolyhedron<KDOP<16> >();
357 2 testLoadPolyhedron<KDOP<18> >();
358 2 testLoadPolyhedron<KDOP<24> >();
359 2 }
360
361
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(gerard_bauzil) {
362 2 testLoadGerardBauzil<OBB>();
363 2 testLoadGerardBauzil<RSS>();
364 2 testLoadGerardBauzil<kIOS>();
365 2 testLoadGerardBauzil<OBBRSS>();
366 2 }
367
368
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(load_illformated_mesh) {
369
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 boost::filesystem::path path(TEST_RESOURCES_DIR);
370
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
4 const std::string filename = (path / "illformated_mesh.dae").string();
371
372 2 MeshLoader loader;
373
10/34
✓ 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 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 31 not taken.
✓ Branch 32 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 35 taken 1 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✗ Branch 52 not taken.
✗ Branch 53 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
2 BOOST_CHECK_NO_THROW(loader.load(filename));
374 2 }
375
376
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_convex) {
377
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Box* box_ptr = new coal::Box(1, 1, 1);
378
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 CollisionGeometryPtr_t b1(box_ptr);
379
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 BVHModel<OBBRSS> box_bvh_model = BVHModel<OBBRSS>();
380
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 generateBVHModel(box_bvh_model, *box_ptr, Transform3s());
381
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 box_bvh_model.buildConvexRepresentation(false);
382
383
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 box_bvh_model.convex->computeLocalAABB();
384
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 std::shared_ptr<ConvexBase> convex_copy(box_bvh_model.convex->clone());
385
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 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.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
2 BOOST_CHECK(*convex_copy.get() == *box_bvh_model.convex.get());
386 2 }
387