| 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.
|
96 | const boost::filesystem::path txt_filename(tmp_path / txt_path); |
| 154 |
1/2✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
|
96 | const boost::filesystem::path xml_filename(tmp_path / xml_path); |
| 155 |
1/2✓ Branch 1 taken 24 times.
✗ Branch 2 not taken.
|
96 | 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 1 taken 22 times.
✗ Branch 2 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 2 taken 24 times.
✗ Branch 3 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.
|
96 | 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 |
6/12✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 4 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 4 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 4 times.
✗ Branch 20 not taken.
✗ Branch 24 not taken.
✓ Branch 25 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 |
10/18✓ Branch 1 taken 9584 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 9584 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 9584 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 7188 times.
✓ Branch 17 taken 2396 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 7188 times.
✓ Branch 20 taken 2396 times.
✗ Branch 21 not taken.
✓ Branch 22 taken 7188 times.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 2396 times.
✗ Branch 27 not taken.
✓ Branch 28 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 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | loadOBJFile((path / "env.obj").string().c_str(), p1, t1); |
| 334 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | 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 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | const boost::filesystem::path txt_filename = tmp_dir / "file.txt"; |
| 545 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | 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 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
4 | 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 |