Directory: | ./ |
---|---|
File: | test/broadphase_collision_1.cpp |
Date: | 2025-04-01 09:23:31 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 258 | 289 | 89.3% |
Branches: | 590 | 1198 | 49.2% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | /* | ||
2 | * Software License Agreement (BSD License) | ||
3 | * | ||
4 | * Copyright (c) 2011-2014, Willow Garage, Inc. | ||
5 | * Copyright (c) 2014-2016, Open Source Robotics Foundation | ||
6 | * Copyright (c) 2022, INRIA | ||
7 | * All rights reserved. | ||
8 | * | ||
9 | * Redistribution and use in source and binary forms, with or without | ||
10 | * modification, are permitted provided that the following conditions | ||
11 | * are met: | ||
12 | * | ||
13 | * * Redistributions of source code must retain the above copyright | ||
14 | * notice, this list of conditions and the following disclaimer. | ||
15 | * * Redistributions in binary form must reproduce the above | ||
16 | * copyright notice, this list of conditions and the following | ||
17 | * disclaimer in the documentation and/or other materials provided | ||
18 | * with the distribution. | ||
19 | * * Neither the name of Open Source Robotics Foundation nor the names of its | ||
20 | * contributors may be used to endorse or promote products derived | ||
21 | * from this software without specific prior written permission. | ||
22 | * | ||
23 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
24 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
25 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||
26 | * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||
27 | * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
28 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||
29 | * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
30 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||
31 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||
32 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | ||
33 | * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
34 | * POSSIBILITY OF SUCH DAMAGE. | ||
35 | */ | ||
36 | /** @author Jia Pan */ | ||
37 | |||
38 | #define BOOST_TEST_MODULE COAL_BROADPHASE_COLLISION_1 | ||
39 | #include <boost/test/included/unit_test.hpp> | ||
40 | |||
41 | #include "coal/broadphase/broadphase_bruteforce.h" | ||
42 | #include "coal/broadphase/broadphase_spatialhash.h" | ||
43 | #include "coal/broadphase/broadphase_SaP.h" | ||
44 | #include "coal/broadphase/broadphase_SSaP.h" | ||
45 | #include "coal/broadphase/broadphase_interval_tree.h" | ||
46 | #include "coal/broadphase/broadphase_dynamic_AABB_tree.h" | ||
47 | #include "coal/broadphase/broadphase_dynamic_AABB_tree_array.h" | ||
48 | #include "coal/broadphase/default_broadphase_callbacks.h" | ||
49 | #include "coal/broadphase/detail/sparse_hash_table.h" | ||
50 | #include "coal/broadphase/detail/spatial_hash.h" | ||
51 | #include "utility.h" | ||
52 | |||
53 | #include <boost/math/constants/constants.hpp> | ||
54 | |||
55 | #if USE_GOOGLEHASH | ||
56 | #include <sparsehash/sparse_hash_map> | ||
57 | #include <sparsehash/dense_hash_map> | ||
58 | #include <hash_map> | ||
59 | #endif | ||
60 | |||
61 | #include <iostream> | ||
62 | #include <iomanip> | ||
63 | |||
64 | using namespace coal; | ||
65 | |||
66 | /// @brief make sure if broadphase algorithms doesn't check twice for the same | ||
67 | /// collision object pair | ||
68 | void broad_phase_duplicate_check_test(Scalar env_scale, std::size_t env_size, | ||
69 | bool verbose = false); | ||
70 | |||
71 | /// @brief test for broad phase update | ||
72 | void broad_phase_update_collision_test(Scalar env_scale, std::size_t env_size, | ||
73 | std::size_t query_size, | ||
74 | std::size_t num_max_contacts = 1, | ||
75 | bool exhaustive = false, | ||
76 | bool use_mesh = false); | ||
77 | |||
78 | #if USE_GOOGLEHASH | ||
79 | template <typename U, typename V> | ||
80 | struct GoogleSparseHashTable | ||
81 | : public google::sparse_hash_map<U, V, std::tr1::hash<size_t>, | ||
82 | std::equal_to<size_t>> {}; | ||
83 | |||
84 | template <typename U, typename V> | ||
85 | struct GoogleDenseHashTable | ||
86 | : public google::dense_hash_map<U, V, std::tr1::hash<size_t>, | ||
87 | std::equal_to<size_t>> { | ||
88 | GoogleDenseHashTable() | ||
89 | : google::dense_hash_map<U, V, std::tr1::hash<size_t>, | ||
90 | std::equal_to<size_t>>() { | ||
91 | this->set_empty_key(nullptr); | ||
92 | } | ||
93 | }; | ||
94 | #endif | ||
95 | |||
96 | /// make sure if broadphase algorithms doesn't check twice for the same | ||
97 | /// collision object pair | ||
98 |
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_broad_phase_dont_duplicate_check) { |
99 | #ifdef NDEBUG | ||
100 | broad_phase_duplicate_check_test(2000, 1000); | ||
101 | #else | ||
102 | 2 | broad_phase_duplicate_check_test(2000, 100); | |
103 | #endif | ||
104 | 2 | } | |
105 | |||
106 | /// check the update, only return collision or not | ||
107 |
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_core_bf_broad_phase_update_collision_binary) { |
108 | #ifdef NDEBUG | ||
109 | broad_phase_update_collision_test(2000, 100, 1000, 1, false); | ||
110 | broad_phase_update_collision_test(2000, 1000, 1000, 1, false); | ||
111 | #else | ||
112 | 2 | broad_phase_update_collision_test(2000, 10, 100, 1, false); | |
113 | 2 | broad_phase_update_collision_test(2000, 100, 100, 1, false); | |
114 | #endif | ||
115 | 2 | } | |
116 | |||
117 | /// check the update, return 10 contacts | ||
118 |
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_core_bf_broad_phase_update_collision) { |
119 | #ifdef NDEBUG | ||
120 | broad_phase_update_collision_test(2000, 100, 1000, 10, false); | ||
121 | broad_phase_update_collision_test(2000, 1000, 1000, 10, false); | ||
122 | #else | ||
123 | 2 | broad_phase_update_collision_test(2000, 10, 100, 10, false); | |
124 | 2 | broad_phase_update_collision_test(2000, 100, 100, 10, false); | |
125 | #endif | ||
126 | 2 | } | |
127 | |||
128 | /// check the update, exhaustive | ||
129 |
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_core_bf_broad_phase_update_collision_exhaustive) { |
130 | #ifdef NDEBUG | ||
131 | broad_phase_update_collision_test(2000, 100, 1000, 1, true); | ||
132 | broad_phase_update_collision_test(2000, 1000, 1000, 1, true); | ||
133 | #else | ||
134 | 2 | broad_phase_update_collision_test(2000, 10, 100, 1, true); | |
135 | 2 | broad_phase_update_collision_test(2000, 100, 100, 1, true); | |
136 | #endif | ||
137 | 2 | } | |
138 | |||
139 | /// check broad phase update, in mesh, only return collision or not | ||
140 |
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( |
141 | test_core_mesh_bf_broad_phase_update_collision_mesh_binary) { | ||
142 | #ifdef NDEBUG | ||
143 | broad_phase_update_collision_test(2000, 100, 1000, 1, false, true); | ||
144 | broad_phase_update_collision_test(2000, 1000, 1000, 1, false, true); | ||
145 | #else | ||
146 | 2 | broad_phase_update_collision_test(2000, 2, 4, 1, false, true); | |
147 | 2 | broad_phase_update_collision_test(2000, 4, 4, 1, false, true); | |
148 | #endif | ||
149 | 2 | } | |
150 | |||
151 | /// check broad phase update, in mesh, return 10 contacts | ||
152 |
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_core_mesh_bf_broad_phase_update_collision_mesh) { |
153 | #ifdef NDEBUG | ||
154 | broad_phase_update_collision_test(2000, 100, 1000, 10, false, true); | ||
155 | broad_phase_update_collision_test(2000, 1000, 1000, 10, false, true); | ||
156 | #else | ||
157 | 2 | broad_phase_update_collision_test(200, 2, 4, 10, false, true); | |
158 | 2 | broad_phase_update_collision_test(200, 4, 4, 10, false, true); | |
159 | #endif | ||
160 | 2 | } | |
161 | |||
162 | /// check broad phase update, in mesh, exhaustive | ||
163 |
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( |
164 | test_core_mesh_bf_broad_phase_update_collision_mesh_exhaustive) { | ||
165 | #ifdef NDEBUG | ||
166 | broad_phase_update_collision_test(2000, 100, 1000, 1, true, true); | ||
167 | broad_phase_update_collision_test(2000, 1000, 1000, 1, true, true); | ||
168 | #else | ||
169 | 2 | broad_phase_update_collision_test(2000, 2, 4, 1, true, true); | |
170 | 2 | broad_phase_update_collision_test(2000, 4, 4, 1, true, true); | |
171 | #endif | ||
172 | 2 | } | |
173 | |||
174 | //============================================================================== | ||
175 | struct CollisionDataForUniquenessChecking { | ||
176 | std::set<std::pair<CollisionObject*, CollisionObject*>> checkedPairs; | ||
177 | |||
178 | 43 | bool checkUniquenessAndAddPair(CollisionObject* o1, CollisionObject* o2) { | |
179 |
2/4✓ Branch 1 taken 43 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 43 times.
✗ Branch 5 not taken.
|
43 | auto search = checkedPairs.find(std::make_pair(o1, o2)); |
180 | |||
181 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 43 times.
|
43 | if (search != checkedPairs.end()) return false; |
182 | |||
183 |
1/2✓ Branch 1 taken 43 times.
✗ Branch 2 not taken.
|
43 | checkedPairs.emplace(o1, o2); |
184 | |||
185 | 43 | return true; | |
186 | } | ||
187 | }; | ||
188 | |||
189 | //============================================================================== | ||
190 | struct CollisionFunctionForUniquenessChecking : CollisionCallBackBase { | ||
191 | 43 | bool collide(CollisionObject* o1, CollisionObject* o2) { | |
192 |
6/12✓ Branch 3 taken 43 times.
✗ Branch 4 not taken.
✓ Branch 9 taken 43 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 43 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 43 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 43 times.
✗ Branch 19 not taken.
✗ Branch 23 not taken.
✓ Branch 24 taken 43 times.
|
43 | BOOST_CHECK(data.checkUniquenessAndAddPair(o1, o2)); |
193 | 43 | return false; | |
194 | } | ||
195 | |||
196 | CollisionDataForUniquenessChecking data; | ||
197 | }; | ||
198 | |||
199 | //============================================================================== | ||
200 | 1 | void broad_phase_duplicate_check_test(Scalar env_scale, std::size_t env_size, | |
201 | bool verbose) { | ||
202 | 1 | std::vector<TStruct> ts; | |
203 | 1 | std::vector<BenchTimer> timers; | |
204 | |||
205 | 1 | std::vector<CollisionObject*> env; | |
206 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | generateEnvironments(env, env_scale, env_size); |
207 | |||
208 | 1 | std::vector<BroadPhaseCollisionManager*> managers; | |
209 |
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.
|
1 | managers.push_back(new NaiveCollisionManager()); |
210 |
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.
|
1 | managers.push_back(new SSaPCollisionManager()); |
211 |
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.
|
1 | managers.push_back(new SaPCollisionManager()); |
212 |
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.
|
1 | managers.push_back(new IntervalTreeCollisionManager()); |
213 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | Vec3s lower_limit, upper_limit; |
214 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | SpatialHashingCollisionManager<>::computeBound(env, lower_limit, upper_limit); |
215 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | Scalar cell_size = std::min(std::min((upper_limit[0] - lower_limit[0]) / 20, |
216 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | (upper_limit[1] - lower_limit[1]) / 20), |
217 |
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.
|
1 | (upper_limit[2] - lower_limit[2]) / 20); |
218 | 1 | managers.push_back( | |
219 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | new SpatialHashingCollisionManager< |
220 | detail::SparseHashTable<AABB, CollisionObject*, detail::SpatialHash>>( | ||
221 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | cell_size, lower_limit, upper_limit)); |
222 | #if USE_GOOGLEHASH | ||
223 | managers.push_back( | ||
224 | new SpatialHashingCollisionManager<detail::SparseHashTable< | ||
225 | AABB, CollisionObject*, detail::SpatialHash, GoogleSparseHashTable>>( | ||
226 | cell_size, lower_limit, upper_limit)); | ||
227 | managers.push_back( | ||
228 | new SpatialHashingCollisionManager<detail::SparseHashTable< | ||
229 | AABB, CollisionObject*, detail::SpatialHash, GoogleDenseHashTable>>( | ||
230 | cell_size, lower_limit, upper_limit)); | ||
231 | #endif | ||
232 |
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.
|
1 | managers.push_back(new DynamicAABBTreeCollisionManager()); |
233 |
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.
|
1 | managers.push_back(new DynamicAABBTreeArrayCollisionManager()); |
234 | |||
235 | { | ||
236 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | DynamicAABBTreeCollisionManager* m = new DynamicAABBTreeCollisionManager(); |
237 | 1 | m->tree_init_level = 2; | |
238 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | managers.push_back(m); |
239 | } | ||
240 | |||
241 | { | ||
242 | DynamicAABBTreeArrayCollisionManager* m = | ||
243 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | new DynamicAABBTreeArrayCollisionManager(); |
244 | 1 | m->tree_init_level = 2; | |
245 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | managers.push_back(m); |
246 | } | ||
247 | |||
248 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | ts.resize(managers.size()); |
249 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | timers.resize(managers.size()); |
250 | |||
251 |
2/2✓ Branch 1 taken 9 times.
✓ Branch 2 taken 1 times.
|
10 | for (size_t i = 0; i < managers.size(); ++i) { |
252 |
1/2✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
|
9 | timers[i].start(); |
253 |
1/2✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
|
9 | managers[i]->registerObjects(env); |
254 |
1/2✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
|
9 | timers[i].stop(); |
255 |
2/4✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
|
9 | ts[i].push_back(timers[i].getElapsedTime()); |
256 | } | ||
257 | |||
258 |
2/2✓ Branch 1 taken 9 times.
✓ Branch 2 taken 1 times.
|
10 | for (size_t i = 0; i < managers.size(); ++i) { |
259 |
1/2✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
|
9 | timers[i].start(); |
260 |
1/2✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
|
9 | managers[i]->setup(); |
261 |
1/2✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
|
9 | timers[i].stop(); |
262 |
2/4✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
|
9 | ts[i].push_back(timers[i].getElapsedTime()); |
263 | } | ||
264 | |||
265 | // update the environment | ||
266 | 1 | Scalar delta_angle_max = | |
267 | Scalar(10) / Scalar(360 * 2) * boost::math::constants::pi<Scalar>(); | ||
268 | 1 | Scalar delta_trans_max = Scalar(0.01) * env_scale; | |
269 | 1 | const Scalar half = Scalar(0.5); | |
270 |
2/2✓ Branch 1 taken 300 times.
✓ Branch 2 taken 1 times.
|
301 | for (size_t i = 0; i < env.size(); ++i) { |
271 | Scalar rand_angle_x = | ||
272 | 300 | 2 * (Scalar(rand()) / Scalar(RAND_MAX) - half) * delta_angle_max; | |
273 | Scalar rand_trans_x = | ||
274 | 300 | 2 * (Scalar(rand()) / Scalar(RAND_MAX) - half) * delta_trans_max; | |
275 | Scalar rand_angle_y = | ||
276 | 300 | 2 * (Scalar(rand()) / Scalar(RAND_MAX) - half) * delta_angle_max; | |
277 | Scalar rand_trans_y = | ||
278 | 300 | 2 * (Scalar(rand()) / Scalar(RAND_MAX) - half) * delta_trans_max; | |
279 | Scalar rand_angle_z = | ||
280 | 300 | 2 * (Scalar(rand()) / Scalar(RAND_MAX) - half) * delta_angle_max; | |
281 | Scalar rand_trans_z = | ||
282 | 300 | 2 * (Scalar(rand()) / Scalar(RAND_MAX) - half) * delta_trans_max; | |
283 | |||
284 | using AngleAxis = Eigen::AngleAxis<Scalar>; | ||
285 |
3/6✓ Branch 1 taken 300 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 300 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 300 times.
✗ Branch 8 not taken.
|
300 | Matrix3s dR(AngleAxis(rand_angle_x, Vec3s::UnitX()) * |
286 |
3/6✓ Branch 1 taken 300 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 300 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 300 times.
✗ Branch 8 not taken.
|
600 | AngleAxis(rand_angle_y, Vec3s::UnitY()) * |
287 |
3/6✓ Branch 1 taken 300 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 300 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 300 times.
✗ Branch 8 not taken.
|
600 | AngleAxis(rand_angle_z, Vec3s::UnitZ())); |
288 |
1/2✓ Branch 1 taken 300 times.
✗ Branch 2 not taken.
|
300 | Vec3s dT(rand_trans_x, rand_trans_y, rand_trans_z); |
289 | |||
290 |
1/2✓ Branch 3 taken 300 times.
✗ Branch 4 not taken.
|
300 | Matrix3s R = env[i]->getRotation(); |
291 |
1/2✓ Branch 3 taken 300 times.
✗ Branch 4 not taken.
|
300 | Vec3s T = env[i]->getTranslation(); |
292 |
6/12✓ Branch 2 taken 300 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 300 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 300 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 300 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 300 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 300 times.
✗ Branch 18 not taken.
|
300 | env[i]->setTransform(dR * R, dR * T + dT); |
293 |
1/2✓ Branch 2 taken 300 times.
✗ Branch 3 not taken.
|
300 | env[i]->computeAABB(); |
294 | } | ||
295 | |||
296 |
2/2✓ Branch 1 taken 9 times.
✓ Branch 2 taken 1 times.
|
10 | for (size_t i = 0; i < managers.size(); ++i) { |
297 |
1/2✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
|
9 | timers[i].start(); |
298 |
1/2✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
|
9 | managers[i]->update(); |
299 |
1/2✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
|
9 | timers[i].stop(); |
300 |
2/4✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
|
9 | ts[i].push_back(timers[i].getElapsedTime()); |
301 | } | ||
302 | |||
303 |
1/2✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
1 | std::vector<CollisionDataForUniquenessChecking> self_data(managers.size()); |
304 | |||
305 |
2/2✓ Branch 1 taken 9 times.
✓ Branch 2 taken 1 times.
|
10 | for (size_t i = 0; i < managers.size(); ++i) { |
306 | 9 | CollisionFunctionForUniquenessChecking callback; | |
307 |
1/2✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
|
9 | timers[i].start(); |
308 |
1/2✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
|
9 | managers[i]->collide(&callback); |
309 |
1/2✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
|
9 | timers[i].stop(); |
310 |
2/4✓ Branch 3 taken 9 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 9 times.
✗ Branch 7 not taken.
|
9 | ts[i].push_back(timers[i].getElapsedTime()); |
311 | 9 | } | |
312 | |||
313 |
3/4✓ Branch 3 taken 300 times.
✗ Branch 4 not taken.
✓ Branch 9 taken 300 times.
✓ Branch 10 taken 1 times.
|
301 | for (auto obj : env) delete obj; |
314 | |||
315 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | if (!verbose) return; |
316 | |||
317 | ✗ | std::cout.setf(std::ios_base::left, std::ios_base::adjustfield); | |
318 | ✗ | int w = 7; | |
319 | |||
320 | ✗ | std::cout << "collision timing summary" << std::endl; | |
321 | ✗ | std::cout << env_size << " objs" << std::endl; | |
322 | ✗ | std::cout << "register time" << std::endl; | |
323 | ✗ | for (size_t i = 0; i < ts.size(); ++i) | |
324 | ✗ | std::cout << std::setw(w) << ts[i].records[0] << " "; | |
325 | ✗ | std::cout << std::endl; | |
326 | |||
327 | ✗ | std::cout << "setup time" << std::endl; | |
328 | ✗ | for (size_t i = 0; i < ts.size(); ++i) | |
329 | ✗ | std::cout << std::setw(w) << ts[i].records[1] << " "; | |
330 | ✗ | std::cout << std::endl; | |
331 | |||
332 | ✗ | std::cout << "update time" << std::endl; | |
333 | ✗ | for (size_t i = 0; i < ts.size(); ++i) | |
334 | ✗ | std::cout << std::setw(w) << ts[i].records[2] << " "; | |
335 | ✗ | std::cout << std::endl; | |
336 | |||
337 | ✗ | std::cout << "self collision time" << std::endl; | |
338 | ✗ | for (size_t i = 0; i < ts.size(); ++i) | |
339 | ✗ | std::cout << std::setw(w) << ts[i].records[3] << " "; | |
340 | ✗ | std::cout << std::endl; | |
341 | |||
342 | ✗ | std::cout << "collision time" << std::endl; | |
343 | ✗ | for (size_t i = 0; i < ts.size(); ++i) { | |
344 | ✗ | double tmp = 0; | |
345 | ✗ | for (size_t j = 4; j < ts[i].records.size(); ++j) tmp += ts[i].records[j]; | |
346 | ✗ | std::cout << std::setw(w) << tmp << " "; | |
347 | } | ||
348 | ✗ | std::cout << std::endl; | |
349 | |||
350 | ✗ | std::cout << "overall time" << std::endl; | |
351 | ✗ | for (size_t i = 0; i < ts.size(); ++i) | |
352 | ✗ | std::cout << std::setw(w) << ts[i].overall_time << " "; | |
353 | ✗ | std::cout << std::endl; | |
354 | ✗ | std::cout << std::endl; | |
355 |
5/10✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
|
5 | } |
356 | |||
357 | 12 | void broad_phase_update_collision_test(Scalar env_scale, std::size_t env_size, | |
358 | std::size_t query_size, | ||
359 | std::size_t num_max_contacts, | ||
360 | bool exhaustive, bool use_mesh) { | ||
361 | 12 | std::vector<TStruct> ts; | |
362 | 12 | std::vector<BenchTimer> timers; | |
363 | |||
364 | 12 | std::vector<CollisionObject*> env; | |
365 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 6 times.
|
12 | if (use_mesh) |
366 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
6 | generateEnvironmentsMesh(env, env_scale, env_size); |
367 | else | ||
368 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
6 | generateEnvironments(env, env_scale, env_size); |
369 | |||
370 | 12 | std::vector<CollisionObject*> query; | |
371 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 6 times.
|
12 | if (use_mesh) |
372 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
6 | generateEnvironmentsMesh(query, env_scale, query_size); |
373 | else | ||
374 |
1/2✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
|
6 | generateEnvironments(query, env_scale, query_size); |
375 | |||
376 | 12 | std::vector<BroadPhaseCollisionManager*> managers; | |
377 | |||
378 |
3/6✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
|
12 | managers.push_back(new NaiveCollisionManager()); |
379 |
3/6✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
|
12 | managers.push_back(new SSaPCollisionManager()); |
380 | |||
381 |
3/6✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
|
12 | managers.push_back(new SaPCollisionManager()); |
382 |
3/6✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
|
12 | managers.push_back(new IntervalTreeCollisionManager()); |
383 | |||
384 |
2/4✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
|
12 | Vec3s lower_limit, upper_limit; |
385 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
12 | SpatialHashingCollisionManager<>::computeBound(env, lower_limit, upper_limit); |
386 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
12 | Scalar cell_size = std::min(std::min((upper_limit[0] - lower_limit[0]) / 20, |
387 |
2/4✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
|
12 | (upper_limit[1] - lower_limit[1]) / 20), |
388 |
3/6✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
|
12 | (upper_limit[2] - lower_limit[2]) / 20); |
389 | // managers.push_back(new SpatialHashingCollisionManager(cell_size, | ||
390 | // lower_limit, upper_limit)); | ||
391 | 12 | managers.push_back( | |
392 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
12 | new SpatialHashingCollisionManager< |
393 | detail::SparseHashTable<AABB, CollisionObject*, detail::SpatialHash>>( | ||
394 |
2/4✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
|
12 | cell_size, lower_limit, upper_limit)); |
395 | #if USE_GOOGLEHASH | ||
396 | managers.push_back( | ||
397 | new SpatialHashingCollisionManager<detail::SparseHashTable< | ||
398 | AABB, CollisionObject*, detail::SpatialHash, GoogleSparseHashTable>>( | ||
399 | cell_size, lower_limit, upper_limit)); | ||
400 | managers.push_back( | ||
401 | new SpatialHashingCollisionManager<detail::SparseHashTable< | ||
402 | AABB, CollisionObject*, detail::SpatialHash, GoogleDenseHashTable>>( | ||
403 | cell_size, lower_limit, upper_limit)); | ||
404 | #endif | ||
405 |
3/6✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
|
12 | managers.push_back(new DynamicAABBTreeCollisionManager()); |
406 |
3/6✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
|
12 | managers.push_back(new DynamicAABBTreeArrayCollisionManager()); |
407 | |||
408 | { | ||
409 |
2/4✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
|
12 | DynamicAABBTreeCollisionManager* m = new DynamicAABBTreeCollisionManager(); |
410 | 12 | m->tree_init_level = 2; | |
411 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
12 | managers.push_back(m); |
412 | } | ||
413 | |||
414 | { | ||
415 | DynamicAABBTreeArrayCollisionManager* m = | ||
416 |
2/4✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
|
12 | new DynamicAABBTreeArrayCollisionManager(); |
417 | 12 | m->tree_init_level = 2; | |
418 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
12 | managers.push_back(m); |
419 | } | ||
420 | |||
421 |
1/2✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
|
12 | ts.resize(managers.size()); |
422 |
1/2✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
|
12 | timers.resize(managers.size()); |
423 | |||
424 |
2/2✓ Branch 1 taken 108 times.
✓ Branch 2 taken 12 times.
|
120 | for (size_t i = 0; i < managers.size(); ++i) { |
425 |
1/2✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
|
108 | timers[i].start(); |
426 |
1/2✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
|
108 | managers[i]->registerObjects(env); |
427 |
1/2✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
|
108 | timers[i].stop(); |
428 |
2/4✓ Branch 3 taken 108 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 108 times.
✗ Branch 7 not taken.
|
108 | ts[i].push_back(timers[i].getElapsedTime()); |
429 | } | ||
430 | |||
431 |
2/2✓ Branch 1 taken 108 times.
✓ Branch 2 taken 12 times.
|
120 | for (size_t i = 0; i < managers.size(); ++i) { |
432 |
1/2✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
|
108 | timers[i].start(); |
433 |
1/2✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
|
108 | managers[i]->setup(); |
434 |
1/2✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
|
108 | timers[i].stop(); |
435 |
2/4✓ Branch 3 taken 108 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 108 times.
✗ Branch 7 not taken.
|
108 | ts[i].push_back(timers[i].getElapsedTime()); |
436 | } | ||
437 | |||
438 | // update the environment | ||
439 | 12 | Scalar delta_angle_max = | |
440 | Scalar(10) / Scalar(360 * 2) * boost::math::constants::pi<Scalar>(); | ||
441 | 12 | Scalar delta_trans_max = Scalar(0.01) * env_scale; | |
442 | 12 | const Scalar half = Scalar(0.5); | |
443 |
2/2✓ Branch 1 taken 1044 times.
✓ Branch 2 taken 12 times.
|
1056 | for (size_t i = 0; i < env.size(); ++i) { |
444 | Scalar rand_angle_x = | ||
445 | 1044 | 2 * (Scalar(rand()) / Scalar(RAND_MAX) - half) * delta_angle_max; | |
446 | Scalar rand_trans_x = | ||
447 | 1044 | 2 * (Scalar(rand()) / Scalar(RAND_MAX) - half) * delta_trans_max; | |
448 | Scalar rand_angle_y = | ||
449 | 1044 | 2 * (Scalar(rand()) / Scalar(RAND_MAX) - half) * delta_angle_max; | |
450 | Scalar rand_trans_y = | ||
451 | 1044 | 2 * (Scalar(rand()) / Scalar(RAND_MAX) - half) * delta_trans_max; | |
452 | Scalar rand_angle_z = | ||
453 | 1044 | 2 * (Scalar(rand()) / Scalar(RAND_MAX) - half) * delta_angle_max; | |
454 | Scalar rand_trans_z = | ||
455 | 1044 | 2 * (Scalar(rand()) / Scalar(RAND_MAX) - half) * delta_trans_max; | |
456 | |||
457 | using AngleAxis = Eigen::AngleAxis<Scalar>; | ||
458 |
3/6✓ Branch 1 taken 1044 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1044 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1044 times.
✗ Branch 8 not taken.
|
1044 | Matrix3s dR(AngleAxis(rand_angle_x, Vec3s::UnitX()) * |
459 |
3/6✓ Branch 1 taken 1044 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1044 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1044 times.
✗ Branch 8 not taken.
|
2088 | AngleAxis(rand_angle_y, Vec3s::UnitY()) * |
460 |
3/6✓ Branch 1 taken 1044 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1044 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1044 times.
✗ Branch 8 not taken.
|
2088 | AngleAxis(rand_angle_z, Vec3s::UnitZ())); |
461 |
1/2✓ Branch 1 taken 1044 times.
✗ Branch 2 not taken.
|
1044 | Vec3s dT(rand_trans_x, rand_trans_y, rand_trans_z); |
462 | |||
463 |
1/2✓ Branch 3 taken 1044 times.
✗ Branch 4 not taken.
|
1044 | Matrix3s R = env[i]->getRotation(); |
464 |
1/2✓ Branch 3 taken 1044 times.
✗ Branch 4 not taken.
|
1044 | Vec3s T = env[i]->getTranslation(); |
465 |
6/12✓ Branch 2 taken 1044 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1044 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1044 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1044 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1044 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1044 times.
✗ Branch 18 not taken.
|
1044 | env[i]->setTransform(dR * R, dR * T + dT); |
466 |
1/2✓ Branch 2 taken 1044 times.
✗ Branch 3 not taken.
|
1044 | env[i]->computeAABB(); |
467 | } | ||
468 | |||
469 |
2/2✓ Branch 1 taken 108 times.
✓ Branch 2 taken 12 times.
|
120 | for (size_t i = 0; i < managers.size(); ++i) { |
470 |
1/2✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
|
108 | timers[i].start(); |
471 |
1/2✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
|
108 | managers[i]->update(); |
472 |
1/2✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
|
108 | timers[i].stop(); |
473 |
2/4✓ Branch 3 taken 108 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 108 times.
✗ Branch 7 not taken.
|
108 | ts[i].push_back(timers[i].getElapsedTime()); |
474 | } | ||
475 | |||
476 |
1/2✓ Branch 3 taken 12 times.
✗ Branch 4 not taken.
|
12 | std::vector<CollisionData> self_data(managers.size()); |
477 |
2/2✓ Branch 1 taken 108 times.
✓ Branch 2 taken 12 times.
|
120 | for (size_t i = 0; i < managers.size(); ++i) { |
478 |
2/2✓ Branch 0 taken 36 times.
✓ Branch 1 taken 72 times.
|
108 | if (exhaustive) |
479 | 36 | self_data[i].request.num_max_contacts = 100000; | |
480 | else | ||
481 | 72 | self_data[i].request.num_max_contacts = num_max_contacts; | |
482 | } | ||
483 | |||
484 |
2/2✓ Branch 1 taken 108 times.
✓ Branch 2 taken 12 times.
|
120 | for (size_t i = 0; i < managers.size(); ++i) { |
485 |
1/2✓ Branch 1 taken 108 times.
✗ Branch 2 not taken.
|
108 | CollisionCallBackDefault callback; |
486 |
1/2✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
|
108 | timers[i].start(); |
487 |
1/2✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
|
108 | managers[i]->collide(&callback); |
488 |
1/2✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
|
108 | timers[i].stop(); |
489 |
2/4✓ Branch 3 taken 108 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 108 times.
✗ Branch 7 not taken.
|
108 | ts[i].push_back(timers[i].getElapsedTime()); |
490 | 108 | } | |
491 | |||
492 |
2/2✓ Branch 1 taken 108 times.
✓ Branch 2 taken 12 times.
|
120 | for (size_t i = 0; i < managers.size(); ++i) |
493 |
2/4✓ Branch 3 taken 108 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 108 times.
✗ Branch 7 not taken.
|
108 | std::cout << self_data[i].result.numContacts() << " "; |
494 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
12 | std::cout << std::endl; |
495 | |||
496 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 8 times.
|
12 | if (exhaustive) { |
497 |
2/2✓ Branch 1 taken 32 times.
✓ Branch 2 taken 4 times.
|
36 | for (size_t i = 1; i < managers.size(); ++i) |
498 |
6/12✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 32 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 32 times.
✗ Branch 12 not taken.
✓ Branch 18 taken 32 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 32 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 32 times.
|
32 | BOOST_CHECK(self_data[i].result.numContacts() == |
499 | self_data[0].result.numContacts()); | ||
500 | } else { | ||
501 |
1/2✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
|
8 | std::vector<bool> self_res(managers.size()); |
502 |
2/2✓ Branch 1 taken 72 times.
✓ Branch 2 taken 8 times.
|
80 | for (size_t i = 0; i < self_res.size(); ++i) |
503 |
1/2✓ Branch 3 taken 72 times.
✗ Branch 4 not taken.
|
72 | self_res[i] = (self_data[i].result.numContacts() > 0); |
504 | |||
505 |
2/2✓ Branch 1 taken 64 times.
✓ Branch 2 taken 8 times.
|
72 | for (size_t i = 1; i < self_res.size(); ++i) |
506 |
8/16✓ Branch 1 taken 64 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 64 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 64 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 64 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 64 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 64 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 64 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 64 times.
|
64 | BOOST_CHECK(self_res[0] == self_res[i]); |
507 | |||
508 |
2/2✓ Branch 1 taken 64 times.
✓ Branch 2 taken 8 times.
|
72 | for (size_t i = 1; i < managers.size(); ++i) |
509 |
6/12✓ Branch 1 taken 64 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 64 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 64 times.
✗ Branch 12 not taken.
✓ Branch 18 taken 64 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 64 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 64 times.
|
64 | BOOST_CHECK(self_data[i].result.numContacts() == |
510 | self_data[0].result.numContacts()); | ||
511 | 8 | } | |
512 | |||
513 |
2/2✓ Branch 1 taken 1872 times.
✓ Branch 2 taken 12 times.
|
1884 | for (size_t i = 0; i < query.size(); ++i) { |
514 |
1/2✓ Branch 3 taken 1872 times.
✗ Branch 4 not taken.
|
1872 | std::vector<CollisionCallBackDefault> query_callbacks(managers.size()); |
515 | |||
516 |
2/2✓ Branch 1 taken 16848 times.
✓ Branch 2 taken 1872 times.
|
18720 | for (size_t j = 0; j < query_callbacks.size(); ++j) { |
517 |
2/2✓ Branch 0 taken 5616 times.
✓ Branch 1 taken 11232 times.
|
16848 | if (exhaustive) |
518 | 5616 | query_callbacks[j].data.request.num_max_contacts = 100000; | |
519 | else | ||
520 | 11232 | query_callbacks[j].data.request.num_max_contacts = num_max_contacts; | |
521 | } | ||
522 | |||
523 |
2/2✓ Branch 1 taken 16848 times.
✓ Branch 2 taken 1872 times.
|
18720 | for (size_t j = 0; j < query_callbacks.size(); ++j) { |
524 |
1/2✓ Branch 2 taken 16848 times.
✗ Branch 3 not taken.
|
16848 | timers[j].start(); |
525 |
1/2✓ Branch 4 taken 16848 times.
✗ Branch 5 not taken.
|
16848 | managers[j]->collide(query[i], &query_callbacks[j]); |
526 |
1/2✓ Branch 2 taken 16848 times.
✗ Branch 3 not taken.
|
16848 | timers[j].stop(); |
527 |
2/4✓ Branch 3 taken 16848 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 16848 times.
✗ Branch 7 not taken.
|
16848 | ts[j].push_back(timers[j].getElapsedTime()); |
528 | } | ||
529 | |||
530 | // for(size_t j = 0; j < managers.size(); ++j) | ||
531 | // std::cout << query_callbacks[j].result.numContacts() << " "; | ||
532 | // std::cout << std::endl; | ||
533 | |||
534 |
2/2✓ Branch 0 taken 624 times.
✓ Branch 1 taken 1248 times.
|
1872 | if (exhaustive) { |
535 |
2/2✓ Branch 1 taken 4992 times.
✓ Branch 2 taken 624 times.
|
5616 | for (size_t j = 1; j < managers.size(); ++j) |
536 |
6/12✓ Branch 1 taken 4992 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 4992 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 4992 times.
✗ Branch 12 not taken.
✓ Branch 18 taken 4992 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 4992 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 4992 times.
|
4992 | BOOST_CHECK(query_callbacks[j].data.result.numContacts() == |
537 | query_callbacks[0].data.result.numContacts()); | ||
538 | } else { | ||
539 |
1/2✓ Branch 3 taken 1248 times.
✗ Branch 4 not taken.
|
1248 | std::vector<bool> query_res(managers.size()); |
540 |
2/2✓ Branch 1 taken 11232 times.
✓ Branch 2 taken 1248 times.
|
12480 | for (size_t j = 0; j < query_res.size(); ++j) |
541 |
1/2✓ Branch 3 taken 11232 times.
✗ Branch 4 not taken.
|
11232 | query_res[j] = (query_callbacks[j].data.result.numContacts() > 0); |
542 |
2/2✓ Branch 1 taken 9984 times.
✓ Branch 2 taken 1248 times.
|
11232 | for (size_t j = 1; j < query_res.size(); ++j) |
543 |
8/16✓ Branch 1 taken 9984 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 9984 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 9984 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 9984 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 9984 times.
✗ Branch 18 not taken.
✓ Branch 21 taken 9984 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 9984 times.
✗ Branch 25 not taken.
✗ Branch 29 not taken.
✓ Branch 30 taken 9984 times.
|
9984 | BOOST_CHECK(query_res[0] == query_res[j]); |
544 | |||
545 |
2/2✓ Branch 1 taken 9984 times.
✓ Branch 2 taken 1248 times.
|
11232 | for (size_t j = 1; j < managers.size(); ++j) |
546 |
6/12✓ Branch 1 taken 9984 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 9984 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 9984 times.
✗ Branch 12 not taken.
✓ Branch 18 taken 9984 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 9984 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 9984 times.
|
9984 | BOOST_CHECK(query_callbacks[j].data.result.numContacts() == |
547 | query_callbacks[0].data.result.numContacts()); | ||
548 | 1248 | } | |
549 | 1872 | } | |
550 | |||
551 |
3/4✓ Branch 1 taken 1044 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 1044 times.
✓ Branch 7 taken 12 times.
|
1056 | for (size_t i = 0; i < env.size(); ++i) delete env[i]; |
552 |
3/4✓ Branch 1 taken 1872 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 1872 times.
✓ Branch 7 taken 12 times.
|
1884 | for (size_t i = 0; i < query.size(); ++i) delete query[i]; |
553 | |||
554 |
3/4✓ Branch 1 taken 108 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 108 times.
✓ Branch 6 taken 12 times.
|
120 | for (size_t i = 0; i < managers.size(); ++i) delete managers[i]; |
555 | |||
556 | 12 | std::cout.setf(std::ios_base::left, std::ios_base::adjustfield); | |
557 | 12 | int w = 7; | |
558 | |||
559 |
2/4✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
|
12 | std::cout << "collision timing summary" << std::endl; |
560 |
5/10✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 12 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 12 times.
✗ Branch 14 not taken.
|
12 | std::cout << env_size << " objs, " << query_size << " queries" << std::endl; |
561 |
2/4✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
|
12 | std::cout << "register time" << std::endl; |
562 |
2/2✓ Branch 1 taken 108 times.
✓ Branch 2 taken 12 times.
|
120 | for (size_t i = 0; i < ts.size(); ++i) |
563 |
3/6✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
✓ Branch 7 taken 108 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 108 times.
✗ Branch 11 not taken.
|
108 | std::cout << std::setw(w) << ts[i].records[0] << " "; |
564 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
12 | std::cout << std::endl; |
565 | |||
566 |
2/4✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
|
12 | std::cout << "setup time" << std::endl; |
567 |
2/2✓ Branch 1 taken 108 times.
✓ Branch 2 taken 12 times.
|
120 | for (size_t i = 0; i < ts.size(); ++i) |
568 |
3/6✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
✓ Branch 7 taken 108 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 108 times.
✗ Branch 11 not taken.
|
108 | std::cout << std::setw(w) << ts[i].records[1] << " "; |
569 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
12 | std::cout << std::endl; |
570 | |||
571 |
2/4✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
|
12 | std::cout << "update time" << std::endl; |
572 |
2/2✓ Branch 1 taken 108 times.
✓ Branch 2 taken 12 times.
|
120 | for (size_t i = 0; i < ts.size(); ++i) |
573 |
3/6✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
✓ Branch 7 taken 108 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 108 times.
✗ Branch 11 not taken.
|
108 | std::cout << std::setw(w) << ts[i].records[2] << " "; |
574 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
12 | std::cout << std::endl; |
575 | |||
576 |
2/4✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
|
12 | std::cout << "self collision time" << std::endl; |
577 |
2/2✓ Branch 1 taken 108 times.
✓ Branch 2 taken 12 times.
|
120 | for (size_t i = 0; i < ts.size(); ++i) |
578 |
3/6✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
✓ Branch 7 taken 108 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 108 times.
✗ Branch 11 not taken.
|
108 | std::cout << std::setw(w) << ts[i].records[3] << " "; |
579 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
12 | std::cout << std::endl; |
580 | |||
581 |
2/4✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
|
12 | std::cout << "collision time" << std::endl; |
582 |
2/2✓ Branch 1 taken 108 times.
✓ Branch 2 taken 12 times.
|
120 | for (size_t i = 0; i < ts.size(); ++i) { |
583 | 108 | double tmp = 0; | |
584 |
2/2✓ Branch 4 taken 16848 times.
✓ Branch 5 taken 108 times.
|
16956 | for (size_t j = 4; j < ts[i].records.size(); ++j) tmp += ts[i].records[j]; |
585 |
3/6✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 108 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 108 times.
✗ Branch 9 not taken.
|
108 | std::cout << std::setw(w) << tmp << " "; |
586 | } | ||
587 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
12 | std::cout << std::endl; |
588 | |||
589 |
2/4✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
|
12 | std::cout << "overall time" << std::endl; |
590 |
2/2✓ Branch 1 taken 108 times.
✓ Branch 2 taken 12 times.
|
120 | for (size_t i = 0; i < ts.size(); ++i) |
591 |
3/6✓ Branch 2 taken 108 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 108 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 108 times.
✗ Branch 10 not taken.
|
108 | std::cout << std::setw(w) << ts[i].overall_time << " "; |
592 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
12 | std::cout << std::endl; |
593 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
12 | std::cout << std::endl; |
594 | 12 | } | |
595 |