GCC Code Coverage Report


Directory: ./
File: test/serialization.cpp
Date: 2025-04-01 09:23:31
Exec Total Coverage
Lines: 270 270 100.0%
Branches: 772 1505 51.3%

Line Branch Exec Source
1 /*
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2021-2023 INRIA.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
17 * * Neither the name of Willow Garage, Inc. nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 */
34
35 #define BOOST_TEST_MODULE COAL_SERIALIZATION
36 #include <fstream>
37 #include <boost/test/included/unit_test.hpp>
38
39 #include "coal/fwd.hh"
40
41 COAL_COMPILER_DIAGNOSTIC_PUSH
42 COAL_COMPILER_DIAGNOSTIC_IGNORED_DEPRECECATED_DECLARATIONS
43
44 #include "coal/collision.h"
45
46 #include "coal/contact_patch.h"
47 #include "coal/distance.h"
48 #include "coal/BV/OBBRSS.h"
49 #include "coal/BVH/BVH_model.h"
50
51 #include "coal/serialization/collision_data.h"
52 #include "coal/serialization/contact_patch.h"
53 #include "coal/serialization/AABB.h"
54 #include "coal/serialization/BVH_model.h"
55 #include "coal/serialization/hfield.h"
56 #include "coal/serialization/transform.h"
57 #include "coal/serialization/geometric_shapes.h"
58 #include "coal/serialization/convex.h"
59 #include "coal/serialization/archive.h"
60 #include "coal/serialization/memory.h"
61
62 #ifdef COAL_HAS_OCTOMAP
63 #include "coal/serialization/octree.h"
64 #endif
65
66 #include "utility.h"
67 #include "fcl_resources/config.h"
68
69 #include <boost/archive/tmpdir.hpp>
70 #include <boost/filesystem.hpp>
71
72 namespace utf = boost::unit_test::framework;
73
74 using namespace coal;
75
76 template <typename T>
77 536 bool check(const T& value, const T& other) {
78 536 return value == other;
79 }
80
81 template <typename T>
82 96 bool check_ptr(const T* value, const T* other) {
83 96 return *value == *other;
84 }
85
86 enum SerializationMode { TXT = 1, XML = 2, BIN = 4, STREAM = 8 };
87
88 template <typename T>
89 void test_serialization(const T* value, T& other_value,
90 const int mode = TXT | XML | BIN | STREAM) {
91 test_serialization(*value, other_value, mode);
92 }
93
94 template <typename T,
95 bool is_base = std::is_base_of<T, CollisionGeometry>::value>
96 struct test_pointer_serialization_impl {
97 48 static void run(const T&, T&, const int) {}
98 };
99
100 template <typename T>
101 struct test_pointer_serialization_impl<T, true> {
102 static void run(const T& value, T& other_value, const int mode) {
103 const CollisionGeometry* ptr = &value;
104 CollisionGeometry* other_ptr = &other_value;
105
106 const boost::filesystem::path tmp_path(boost::archive::tmpdir());
107 const boost::filesystem::path txt_path("file.txt");
108 const boost::filesystem::path txt_ptr_path("ptr_file.txt");
109 const boost::filesystem::path xml_path("file.xml");
110 const boost::filesystem::path bin_path("file.bin");
111 const boost::filesystem::path txt_filename(tmp_path / txt_path);
112 const boost::filesystem::path xml_filename(tmp_path / xml_path);
113 const boost::filesystem::path bin_filename(tmp_path / bin_path);
114
115 // TXT
116 if (mode & 0x1) {
117 {
118 std::ofstream ofs(txt_filename.c_str());
119
120 boost::archive::text_oarchive oa(ofs);
121 oa << ptr;
122 }
123 BOOST_CHECK(check(*reinterpret_cast<const CollisionGeometry*>(ptr),
124 *reinterpret_cast<const CollisionGeometry*>(ptr)));
125
126 {
127 std::ifstream ifs(txt_filename.c_str());
128 boost::archive::text_iarchive ia(ifs);
129
130 ia >> other_ptr;
131 }
132 BOOST_CHECK(
133 check(*reinterpret_cast<const CollisionGeometry*>(ptr),
134 *reinterpret_cast<const CollisionGeometry*>(other_ptr)));
135 }
136 }
137 };
138
139 template <typename T>
140 48 void test_pointer_serialization(const T& value, T& other_value,
141 const int mode = TXT | XML | BIN | STREAM) {
142 48 test_pointer_serialization_impl<T>::run(value, other_value, mode);
143 48 }
144
145 template <typename T>
146 48 void test_serialization(const T& value, T& other_value,
147 const int mode = TXT | XML | BIN | STREAM) {
148
1/2
✓ Branch 2 taken 24 times.
✗ Branch 3 not taken.
48 const boost::filesystem::path tmp_path(boost::archive::tmpdir());
149
1/2
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
48 const boost::filesystem::path txt_path("file.txt");
150
1/2
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
48 const boost::filesystem::path txt_ptr_path("ptr_file.txt");
151
1/2
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
48 const boost::filesystem::path xml_path("file.xml");
152
1/2
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
48 const boost::filesystem::path bin_path("file.bin");
153
1/2
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
48 const boost::filesystem::path txt_filename(tmp_path / txt_path);
154
1/2
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
48 const boost::filesystem::path xml_filename(tmp_path / xml_path);
155
1/2
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
48 const boost::filesystem::path bin_filename(tmp_path / bin_path);
156
157 // TXT
158
2/2
✓ Branch 0 taken 22 times.
✓ Branch 1 taken 2 times.
48 if (mode & 0x1) {
159 // -- TXT
160 {
161
1/2
✓ Branch 2 taken 22 times.
✗ Branch 3 not taken.
44 const std::string filename = txt_filename.string();
162
1/2
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
44 coal::serialization::saveToText(value, filename);
163
10/18
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 22 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 21 times.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 21 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 21 times.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 21 times.
44 BOOST_CHECK(check(value, value));
164
165
1/2
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
44 coal::serialization::loadFromText(other_value, filename);
166
10/18
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 22 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 21 times.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 21 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 21 times.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 21 times.
44 BOOST_CHECK(check(value, other_value));
167 44 }
168
169 // -- String stream (TXT format)
170 {
171
1/2
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
44 std::stringstream ss_out;
172
1/2
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
44 coal::serialization::saveToStringStream(value, ss_out);
173
10/18
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 22 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 21 times.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 21 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 21 times.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 21 times.
44 BOOST_CHECK(check(value, value));
174
175
2/4
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 22 times.
✗ Branch 5 not taken.
44 std::istringstream ss_in(ss_out.str());
176
1/2
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
44 coal::serialization::loadFromStringStream(other_value, ss_in);
177
10/18
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 22 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 21 times.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 21 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 21 times.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 21 times.
44 BOOST_CHECK(check(value, other_value));
178 44 }
179
180 // -- String
181 {
182
1/2
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
44 const std::string str_out = coal::serialization::saveToString(value);
183
10/18
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 22 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 21 times.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 21 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 21 times.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 21 times.
44 BOOST_CHECK(check(value, value));
184
185
1/2
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
44 const std::string str_in(str_out);
186
1/2
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
44 coal::serialization::loadFromString(other_value, str_in);
187
10/18
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 22 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 21 times.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 21 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 21 times.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 21 times.
44 BOOST_CHECK(check(value, other_value));
188 44 }
189 }
190
191 // XML
192
2/2
✓ Branch 0 taken 22 times.
✓ Branch 1 taken 2 times.
48 if (mode & 0x2) {
193 {
194
1/2
✓ Branch 2 taken 22 times.
✗ Branch 3 not taken.
44 const std::string filename = xml_filename.string();
195
1/2
✓ Branch 2 taken 22 times.
✗ Branch 3 not taken.
44 const std::string xml_tag = "value";
196
1/2
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
44 coal::serialization::saveToXML(value, filename, xml_tag);
197
10/18
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 22 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 21 times.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 21 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 21 times.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 21 times.
44 BOOST_CHECK(check(value, value));
198
199
1/2
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
44 coal::serialization::loadFromXML(other_value, filename, xml_tag);
200
10/18
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 22 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 21 times.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 21 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 21 times.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 21 times.
44 BOOST_CHECK(check(value, other_value));
201 44 }
202 }
203
204 // BIN
205
2/2
✓ Branch 0 taken 22 times.
✓ Branch 1 taken 2 times.
48 if (mode & 0x4) {
206 {
207
1/2
✓ Branch 2 taken 22 times.
✗ Branch 3 not taken.
44 const std::string filename = bin_filename.string();
208
1/2
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
44 coal::serialization::saveToBinary(value, filename);
209
10/18
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 22 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 21 times.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 21 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 21 times.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 21 times.
44 BOOST_CHECK(check(value, value));
210
211
1/2
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
44 coal::serialization::loadFromBinary(other_value, filename);
212
10/18
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 22 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 21 times.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 21 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 21 times.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 21 times.
44 BOOST_CHECK(check(value, other_value));
213 44 }
214 }
215
216 // Stream Buffer
217
1/2
✓ Branch 0 taken 24 times.
✗ Branch 1 not taken.
48 if (mode & 0x8) {
218 {
219
1/2
✓ Branch 3 taken 24 times.
✗ Branch 4 not taken.
48 boost::asio::streambuf buffer;
220
1/2
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
48 coal::serialization::saveToBuffer(value, buffer);
221
10/18
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 24 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 23 times.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 23 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 23 times.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 23 times.
48 BOOST_CHECK(check(value, value));
222
223
1/2
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
48 coal::serialization::loadFromBuffer(other_value, buffer);
224
10/18
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 24 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 23 times.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 23 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 23 times.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 23 times.
48 BOOST_CHECK(check(value, other_value));
225 48 }
226 }
227
228 // Test std::shared_ptr<T>
229 {
230
1/2
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
48 const boost::filesystem::path txt_ptr_filename(tmp_path / txt_ptr_path);
231
1/2
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
48 std::shared_ptr<T> ptr = std::make_shared<T>(value);
232
233
1/2
✓ Branch 2 taken 24 times.
✗ Branch 3 not taken.
48 const std::string filename = txt_ptr_filename.string();
234
1/2
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
48 coal::serialization::saveToText(ptr, filename);
235
10/18
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 24 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 23 times.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 23 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 23 times.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 23 times.
48 BOOST_CHECK(check_ptr(ptr.get(), ptr.get()));
236
237 48 std::shared_ptr<T> other_ptr = nullptr;
238
1/2
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
48 coal::serialization::loadFromText(other_ptr, filename);
239
10/18
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 24 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 24 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 23 times.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 23 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 23 times.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✓ Branch 28 taken 23 times.
48 BOOST_CHECK(check_ptr(ptr.get(), other_ptr.get()));
240 48 }
241
242
1/2
✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
48 test_pointer_serialization(value, other_value);
243 48 }
244
245 template <typename T>
246 18 void test_serialization(const T& value,
247 const int mode = TXT | XML | BIN | STREAM) {
248
2/3
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
18 T other_value;
249
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
18 test_serialization(value, other_value, mode);
250 18 }
251
252
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_aabb) {
253
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
2 AABB aabb(-Vec3s::Ones(), Vec3s::Ones());
254
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(aabb);
255 2 }
256
257
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_collision_data) {
258
5/10
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
2 Contact contact(NULL, NULL, 1, 2, Vec3s::Ones(), Vec3s::Zero(), -10.);
259
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(contact);
260
261
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 CollisionRequest collision_request(CONTACT, 10);
262
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(collision_request);
263
264
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 CollisionResult collision_result;
265
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 collision_result.addContact(contact);
266
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 collision_result.addContact(contact);
267 2 collision_result.distance_lower_bound = Scalar(0.1);
268
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 collision_result.normal.setOnes();
269
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 collision_result.nearest_points[0].setRandom();
270
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 collision_result.nearest_points[1].setRandom();
271
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(collision_result);
272
273
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 DistanceRequest distance_request(true, 1., 2.);
274
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(distance_request);
275
276
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 DistanceResult distance_result;
277
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 distance_result.normal.setOnes();
278
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 distance_result.nearest_points[0].setRandom();
279
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 distance_result.nearest_points[1].setRandom();
280
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(distance_result);
281
282 {
283 // Serializing contact patches.
284
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 const Halfspace hspace(0, 0, 1, 0);
285 2 const Scalar radius = 0.25;
286 2 const Scalar height = 1.;
287
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 const Cylinder cylinder(radius, height);
288
289
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 const Transform3s tf1;
290
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s tf2;
291 // set translation to have a collision
292 2 const Scalar offset = Scalar(0.001);
293
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 tf2.setTranslation(Vec3s(0, 0, height / 2 - offset));
294
295 2 const size_t num_max_contact = 1;
296 const CollisionRequest col_req(CollisionRequestFlag::CONTACT,
297
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 num_max_contact);
298
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 CollisionResult col_res;
299
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 coal::collide(&hspace, tf1, &cylinder, tf2, col_req, col_res);
300
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
2 BOOST_CHECK(col_res.isCollision());
301
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 if (col_res.isCollision()) {
302
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ContactPatchRequest patch_req;
303
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ContactPatchResult patch_res(patch_req);
304
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 coal::computeContactPatch(&hspace, tf1, &cylinder, tf2, col_res,
305 patch_req, patch_res);
306
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
2 BOOST_CHECK(patch_res.numContactPatches() == 1);
307
308 // Serialize patch request, result and the patch itself
309
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(patch_req);
310
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(patch_res);
311
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 if (patch_res.numContactPatches() > 0) {
312
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 test_serialization(patch_res.getContactPatch(0));
313 }
314 2 }
315 2 }
316 2 }
317
318 template <typename T>
319 8 void checkEqualStdVector(const std::vector<T>& v1, const std::vector<T>& v2) {
320
5/10
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 9 taken 4 times.
✗ Branch 10 not taken.
✓ Branch 14 taken 4 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 4 times.
✗ Branch 18 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 4 times.
8 BOOST_CHECK(v1.size() == v2.size());
321
1/2
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
8 if (v1.size() == v2.size()) {
322
2/2
✓ Branch 1 taken 9584 times.
✓ Branch 2 taken 4 times.
19176 for (size_t i = 0; i < v1.size(); i++) {
323
9/16
✓ Branch 3 taken 9584 times.
✗ Branch 4 not taken.
✓ Branch 9 taken 9584 times.
✗ Branch 10 not taken.
✓ Branch 14 taken 7188 times.
✓ Branch 15 taken 2396 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 7188 times.
✓ Branch 18 taken 2396 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 7188 times.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 2396 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 7188 times.
19168 BOOST_CHECK(v1[i] == v2[i]);
324 }
325 }
326 8 }
327
328
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_BVHModel) {
329 2 std::vector<Vec3s> p1, p2;
330 2 std::vector<Triangle> t1, t2;
331
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 boost::filesystem::path path(TEST_RESOURCES_DIR);
332
333
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
2 loadOBJFile((path / "env.obj").string().c_str(), p1, t1);
334
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
2 loadOBJFile((path / "rob.obj").string().c_str(), p2, t2);
335
336
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 BVHModel<OBBRSS> m1, m2;
337
338
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 m1.beginModel();
339
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 m1.addSubModel(p1, t1);
340
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 m1.endModel();
341
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
2 BOOST_CHECK(m1.num_vertices == p1.size());
342
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
2 BOOST_CHECK(m1.num_tris == t1.size());
343
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 checkEqualStdVector(*m1.vertices, p1);
344
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 checkEqualStdVector(*m1.tri_indices, t1);
345
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 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
2 BOOST_CHECK(m1 == m1);
346
347
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 m2.beginModel();
348
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 m2.addSubModel(p2, t2);
349
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 m2.endModel();
350
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
2 BOOST_CHECK(m2.num_vertices == p2.size());
351
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 1 times.
2 BOOST_CHECK(m2.num_tris == t2.size());
352
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 checkEqualStdVector(*m2.vertices, p2);
353
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 checkEqualStdVector(*m2.tri_indices, t2);
354
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 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
2 BOOST_CHECK(m2 == m2);
355
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 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
2 BOOST_CHECK(m1 != m2);
356
357 // Test BVHModel
358 {
359
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 BVHModel<OBBRSS> m1_copy;
360
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(m1, m1_copy);
361 2 }
362 {
363
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 BVHModel<OBBRSS> m1_copy;
364
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(m1, m1_copy, STREAM);
365 2 }
366 2 }
367
368 #ifdef COAL_HAS_QHULL
369 BOOST_AUTO_TEST_CASE(test_Convex) {
370 std::vector<Vec3s> p1;
371 std::vector<Triangle> t1;
372 boost::filesystem::path path(TEST_RESOURCES_DIR);
373
374 loadOBJFile((path / "env.obj").string().c_str(), p1, t1);
375
376 BVHModel<OBBRSS> m1;
377
378 m1.beginModel();
379 m1.addSubModel(p1, t1);
380 m1.endModel();
381
382 m1.buildConvexHull(true);
383
384 Convex<Triangle>& convex = static_cast<Convex<Triangle>&>(*m1.convex.get());
385
386 // Test Convex
387 {
388 Convex<Triangle> convex_copy;
389 test_serialization(convex, convex_copy);
390 }
391
392 // Test std::shared_ptr<CollisionGeometry>
393 {
394 const boost::filesystem::path tmp_dir(boost::archive::tmpdir());
395 // TODO(louis): understand why serializing a shared_ptr<CollisionGeometry>
396 // in TXT format fails only on MacOS + -O0.
397 // const boost::filesystem::path txt_filename = tmp_dir / "file.txt";
398 // const boost::filesystem::path bin_filename = tmp_dir / "file.bin";
399 const boost::filesystem::path xml_filename = tmp_dir / "file.xml";
400 Convex<Triangle> convex_copy;
401
402 std::shared_ptr<CollisionGeometry> ptr =
403 std::make_shared<Convex<Triangle>>(convex);
404 BOOST_CHECK(ptr.get());
405 const std::string filename = xml_filename.string();
406 const std::string tag_name = "CollisionGeometry";
407 coal::serialization::saveToXML(ptr, filename, tag_name);
408 BOOST_CHECK(check(*reinterpret_cast<Convex<Triangle>*>(ptr.get()), convex));
409
410 std::shared_ptr<CollisionGeometry> other_ptr = nullptr;
411 BOOST_CHECK(!other_ptr.get());
412 coal::serialization::loadFromXML(other_ptr, filename, tag_name);
413 BOOST_CHECK(
414 check(convex, *reinterpret_cast<Convex<Triangle>*>(other_ptr.get())));
415 }
416 }
417 #endif
418
419
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_HeightField) {
420 2 const Scalar min_altitude = -1.;
421 2 const Scalar x_dim = 1., y_dim = 2.;
422 2 const Eigen::DenseIndex nx = 100, ny = 200;
423
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const MatrixXs heights = MatrixXs::Random(ny, nx);
424
425
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 HeightField<OBBRSS> hfield(x_dim, y_dim, heights, min_altitude);
426
427 // Test HeightField
428 {
429
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 HeightField<OBBRSS> hfield_copy;
430
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(hfield, hfield_copy);
431 2 }
432 {
433
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 HeightField<OBBRSS> hfield_copy;
434
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(hfield, hfield_copy, STREAM);
435 2 }
436 2 }
437
438
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_transform) {
439
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s T;
440
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 T.setQuatRotation(Quaternion3f::UnitRandom());
441
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 T.setTranslation(Vec3s::Random());
442
443
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s T_copy;
444
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(T, T_copy);
445 2 }
446
447
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_shapes) {
448 {
449
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 TriangleP triangle(Vec3s::UnitX(), Vec3s::UnitY(), Vec3s::UnitZ());
450
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 triangle.setSweptSphereRadius(1.);
451
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 triangle.computeLocalAABB();
452
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
2 TriangleP triangle_copy(Vec3s::Random(), Vec3s::Random(), Vec3s::Random());
453
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(triangle, triangle_copy);
454 2 }
455
456 {
457
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
2 Box box(Vec3s::UnitX()), box_copy(Vec3s::Random());
458
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 box.setSweptSphereRadius(1.);
459
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 box.computeLocalAABB();
460
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(box, box_copy);
461 2 }
462
463 {
464
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Sphere sphere(1.), sphere_copy(2.);
465
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 sphere.setSweptSphereRadius(1.);
466
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 sphere.computeLocalAABB();
467
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(sphere, sphere_copy);
468 2 }
469
470 {
471
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Ellipsoid ellipsoid(1., 2., 3.), ellipsoid_copy(0., 0., 0.);
472
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ellipsoid.setSweptSphereRadius(1.);
473
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ellipsoid.computeLocalAABB();
474
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(ellipsoid, ellipsoid_copy);
475 2 }
476
477 {
478
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Capsule capsule(1., 2.), capsule_copy(10., 10.);
479
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 capsule.setSweptSphereRadius(1.);
480
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 capsule.computeLocalAABB();
481
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(capsule, capsule_copy);
482 2 }
483
484 {
485
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Cone cone(1., 2.), cone_copy(10., 10.);
486
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 cone.setSweptSphereRadius(1.);
487
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 cone.computeLocalAABB();
488
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(cone, cone_copy);
489 2 }
490
491 {
492
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Cylinder cylinder(1., 2.), cylinder_copy(10., 10.);
493
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 cylinder.setSweptSphereRadius(1.);
494
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 cylinder.computeLocalAABB();
495
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(cylinder, cylinder_copy);
496 2 }
497
498 {
499
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
2 Halfspace hs(Vec3s::Random(), 1.), hs_copy(Vec3s::Zero(), 0.);
500
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 hs.setSweptSphereRadius(1.);
501
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 hs.computeLocalAABB();
502
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(hs, hs_copy);
503 2 }
504
505 {
506
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
2 Plane plane(Vec3s::Random(), 1.), plane_copy(Vec3s::Zero(), 0.);
507
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 plane.setSweptSphereRadius(1.);
508
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 plane.computeLocalAABB();
509
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(plane, plane_copy);
510 2 }
511
512 #ifdef HPP_FCL_HAS_QHULL
513 {
514 const size_t num_points = 500;
515 std::shared_ptr<std::vector<Vec3s>> points =
516 std::make_shared<std::vector<Vec3s>>();
517 points->reserve(num_points);
518 for (size_t i = 0; i < num_points; i++) {
519 points->emplace_back(Vec3s::Random());
520 }
521 using Convex = Convex<Triangle>;
522 std::unique_ptr<Convex> convex =
523 std::unique_ptr<Convex>(static_cast<Convex*>(ConvexBase::convexHull(
524 points, static_cast<unsigned int>(points->size()), true)));
525 convex->setSweptSphereRadius(1.);
526 convex->computeLocalAABB();
527
528 Convex convex_copy;
529 test_serialization(*convex, convex_copy);
530 }
531 #endif
532 2 }
533
534 #ifdef COAL_HAS_OCTOMAP
535
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_octree) {
536 2 const Scalar resolution = Scalar(1e-2);
537
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const MatrixX3s points = MatrixX3s::Random(1000, 3);
538
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 OcTreePtr_t octree_ptr = makeOctree(points, resolution);
539 2 const OcTree& octree = *octree_ptr.get();
540
541
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 const boost::filesystem::path tmp_dir(boost::archive::tmpdir());
542
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const boost::filesystem::path txt_filename = tmp_dir / "file.txt";
543
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const boost::filesystem::path bin_filename = tmp_dir / "file.bin";
544
545 {
546
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::ofstream ofs(bin_filename.c_str(), std::ios::binary);
547
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 boost::archive::binary_oarchive oa(ofs);
548
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 oa << octree;
549 2 }
550
551
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 OcTree octree_value(1.);
552 {
553 std::ifstream ifs(bin_filename.c_str(),
554
1/2
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
2 std::fstream::binary | std::fstream::in);
555
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 boost::archive::binary_iarchive ia(ifs);
556
557
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ia >> octree_value;
558 2 }
559
560
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
2 BOOST_CHECK(octree.getTree() == octree.getTree());
561
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
2 BOOST_CHECK(octree_value.getTree() == octree_value.getTree());
562 // BOOST_CHECK(octree.getTree() == octree_value.getTree());
563
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
2 BOOST_CHECK(octree.getResolution() == octree_value.getResolution());
564
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 34 not taken.
✓ Branch 35 taken 1 times.
2 BOOST_CHECK(octree.getTree()->size() == octree_value.getTree()->size());
565
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 1 times.
2 BOOST_CHECK(octree.toBoxes().size() == octree_value.toBoxes().size());
566
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 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
2 BOOST_CHECK(octree == octree_value);
567
568
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 OcTree octree_copy(1.);
569
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(octree, octree_copy);
570 2 }
571 #endif
572
573
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_memory_footprint) {
574
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Sphere sphere(1.);
575
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 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
2 BOOST_CHECK(sizeof(Sphere) == computeMemoryFootprint(sphere));
576
577 2 std::vector<Vec3s> p1;
578 2 std::vector<Triangle> t1;
579
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 boost::filesystem::path path(TEST_RESOURCES_DIR);
580
581
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
2 loadOBJFile((path / "env.obj").string().c_str(), p1, t1);
582
583
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 BVHModel<OBBRSS> m1;
584
585
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 m1.beginModel();
586
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 m1.addSubModel(p1, t1);
587
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 m1.endModel();
588
589
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 std::cout << "computeMemoryFootprint(m1): " << computeMemoryFootprint(m1)
590
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 << std::endl;
591
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 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
2 BOOST_CHECK(sizeof(BVHModel<OBBRSS>) < computeMemoryFootprint(m1));
592
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 times.
2 BOOST_CHECK(static_cast<size_t>(m1.memUsage(false)) ==
593 computeMemoryFootprint(m1));
594 2 }
595
596 COAL_COMPILER_DIAGNOSTIC_POP
597