GCC Code Coverage Report


Directory: ./
File: test/serialization.cpp
Date: 2025-05-02 10:16:21
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<Triangle32> 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<Triangle32> 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 ConvexTpl<Triangle32>& convex =
385 static_cast<ConvexTpl<Triangle32>&>(*m1.convex.get());
386
387 // Test Convex
388 {
389 ConvexTpl<Triangle32> convex_copy;
390 test_serialization(convex, convex_copy);
391 }
392
393 // Test std::shared_ptr<CollisionGeometry>
394 {
395 const boost::filesystem::path tmp_dir(boost::archive::tmpdir());
396 // TODO(louis): understand why serializing a shared_ptr<CollisionGeometry>
397 // in TXT format fails only on MacOS + -O0.
398 // const boost::filesystem::path txt_filename = tmp_dir / "file.txt";
399 // const boost::filesystem::path bin_filename = tmp_dir / "file.bin";
400 const boost::filesystem::path xml_filename = tmp_dir / "file.xml";
401 ConvexTpl<Triangle32> convex_copy;
402
403 std::shared_ptr<CollisionGeometry> ptr =
404 std::make_shared<ConvexTpl<Triangle32>>(convex);
405 BOOST_CHECK(ptr.get());
406 const std::string filename = xml_filename.string();
407 const std::string tag_name = "CollisionGeometry";
408 coal::serialization::saveToXML(ptr, filename, tag_name);
409 BOOST_CHECK(
410 check(*reinterpret_cast<ConvexTpl<Triangle32>*>(ptr.get()), convex));
411
412 std::shared_ptr<CollisionGeometry> other_ptr = nullptr;
413 BOOST_CHECK(!other_ptr.get());
414 coal::serialization::loadFromXML(other_ptr, filename, tag_name);
415 BOOST_CHECK(check(
416 convex, *reinterpret_cast<ConvexTpl<Triangle32>*>(other_ptr.get())));
417 }
418 }
419 #endif
420
421
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) {
422 2 const Scalar min_altitude = -1.;
423 2 const Scalar x_dim = 1., y_dim = 2.;
424 2 const Eigen::DenseIndex nx = 100, ny = 200;
425
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);
426
427
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 HeightField<OBBRSS> hfield(x_dim, y_dim, heights, min_altitude);
428
429 // Test HeightField
430 {
431
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 HeightField<OBBRSS> hfield_copy;
432
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(hfield, hfield_copy);
433 2 }
434 {
435
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 HeightField<OBBRSS> hfield_copy;
436
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(hfield, hfield_copy, STREAM);
437 2 }
438 2 }
439
440
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) {
441
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s T;
442
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());
443
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());
444
445
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Transform3s T_copy;
446
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(T, T_copy);
447 2 }
448
449
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) {
450 {
451
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());
452
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 triangle.setSweptSphereRadius(1.);
453
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 triangle.computeLocalAABB();
454
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());
455
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(triangle, triangle_copy);
456 2 }
457
458 {
459
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());
460
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 box.setSweptSphereRadius(1.);
461
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 box.computeLocalAABB();
462
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(box, box_copy);
463 2 }
464
465 {
466
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.);
467
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 sphere.setSweptSphereRadius(1.);
468
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 sphere.computeLocalAABB();
469
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(sphere, sphere_copy);
470 2 }
471
472 {
473
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.);
474
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ellipsoid.setSweptSphereRadius(1.);
475
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ellipsoid.computeLocalAABB();
476
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(ellipsoid, ellipsoid_copy);
477 2 }
478
479 {
480
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.);
481
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 capsule.setSweptSphereRadius(1.);
482
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 capsule.computeLocalAABB();
483
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(capsule, capsule_copy);
484 2 }
485
486 {
487
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.);
488
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 cone.setSweptSphereRadius(1.);
489
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 cone.computeLocalAABB();
490
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(cone, cone_copy);
491 2 }
492
493 {
494
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.);
495
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 cylinder.setSweptSphereRadius(1.);
496
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 cylinder.computeLocalAABB();
497
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(cylinder, cylinder_copy);
498 2 }
499
500 {
501
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.);
502
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 hs.setSweptSphereRadius(1.);
503
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 hs.computeLocalAABB();
504
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(hs, hs_copy);
505 2 }
506
507 {
508
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.);
509
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 plane.setSweptSphereRadius(1.);
510
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 plane.computeLocalAABB();
511
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(plane, plane_copy);
512 2 }
513
514 #ifdef COAL_HAS_QHULL
515 {
516 const size_t num_points = 500;
517 std::shared_ptr<std::vector<Vec3s>> points =
518 std::make_shared<std::vector<Vec3s>>();
519 points->reserve(num_points);
520 for (size_t i = 0; i < num_points; i++) {
521 points->emplace_back(Vec3s::Random());
522 }
523 using Convex = ConvexTpl<Triangle32>;
524 std::unique_ptr<Convex> convex =
525 std::unique_ptr<Convex>(static_cast<Convex*>(ConvexBase32::convexHull(
526 points, static_cast<unsigned int>(points->size()), true)));
527 convex->setSweptSphereRadius(1.);
528 convex->computeLocalAABB();
529
530 Convex convex_copy;
531 test_serialization(*convex, convex_copy);
532 }
533 #endif
534 2 }
535
536 #ifdef COAL_HAS_OCTOMAP
537
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) {
538 2 const Scalar resolution = Scalar(1e-2);
539
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);
540
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);
541 2 const OcTree& octree = *octree_ptr.get();
542
543
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 const boost::filesystem::path tmp_dir(boost::archive::tmpdir());
544
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";
545
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";
546
547 {
548
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 std::ofstream ofs(bin_filename.c_str(), std::ios::binary);
549
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 boost::archive::binary_oarchive oa(ofs);
550
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 oa << octree;
551 2 }
552
553
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 OcTree octree_value(1.);
554 {
555 std::ifstream ifs(bin_filename.c_str(),
556
1/2
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
2 std::fstream::binary | std::fstream::in);
557
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 boost::archive::binary_iarchive ia(ifs);
558
559
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 ia >> octree_value;
560 2 }
561
562
6/12
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 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());
563
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());
564 // BOOST_CHECK(octree.getTree() == octree_value.getTree());
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 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());
566
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());
567
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());
568
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);
569
570
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 OcTree octree_copy(1.);
571
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 test_serialization(octree, octree_copy);
572 2 }
573 #endif
574
575
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) {
576
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Sphere sphere(1.);
577
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));
578
579 2 std::vector<Vec3s> p1;
580 2 std::vector<Triangle32> t1;
581
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 boost::filesystem::path path(TEST_RESOURCES_DIR);
582
583
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);
584
585
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 BVHModel<OBBRSS> m1;
586
587
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 m1.beginModel();
588
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 m1.addSubModel(p1, t1);
589
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 m1.endModel();
590
591
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)
592
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 << std::endl;
593
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));
594
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)) ==
595 computeMemoryFootprint(m1));
596 2 }
597
598 COAL_COMPILER_DIAGNOSTIC_POP
599