|
16 | 16 | #include "../src/types.hpp"
|
17 | 17 |
|
18 | 18 | #include <chrono>
|
| 19 | +#include <iostream> |
19 | 20 | #include <random>
|
20 | 21 | #include <vector>
|
21 | 22 |
|
@@ -55,45 +56,53 @@ polygon_t random_polygon()
|
55 | 56 |
|
56 | 57 | int main()
|
57 | 58 | {
|
58 |
| - Obstacles obstacles; |
59 |
| - std::vector<polygon_t> polygons; |
60 |
| - polygons.reserve(100); |
61 |
| - for (auto i = 0; i < 100; ++i) { |
62 |
| - polygons.push_back(random_polygon()); |
63 |
| - } |
64 |
| - for (auto nb_lines = 1lu; nb_lines < 1000lu; nb_lines += 10) { |
65 |
| - obstacles.lines.push_back(random_line()); |
66 |
| - obstacles.points.clear(); |
67 |
| - for (auto nb_points = 1lu; nb_points < 1000lu; nb_points += 10) { |
68 |
| - obstacles.points.push_back(random_point()); |
69 |
| - const auto rtt_constr_start = std::chrono::system_clock::now(); |
70 |
| - CollisionChecker rtree_collision_checker(obstacles, 0, 0); |
71 |
| - const auto rtt_constr_end = std::chrono::system_clock::now(); |
72 |
| - const auto naive_constr_start = std::chrono::system_clock::now(); |
73 |
| - CollisionChecker naive_collision_checker(obstacles, nb_points + 1, nb_lines * 100); |
74 |
| - const auto naive_constr_end = std::chrono::system_clock::now(); |
75 |
| - const auto rtt_check_start = std::chrono::system_clock::now(); |
76 |
| - for (const auto & polygon : polygons) |
77 |
| - // cppcheck-suppress unreadVariable |
78 |
| - const auto rtree_result = rtree_collision_checker.intersections(polygon); |
79 |
| - const auto rtt_check_end = std::chrono::system_clock::now(); |
80 |
| - const auto naive_check_start = std::chrono::system_clock::now(); |
81 |
| - for (const auto & polygon : polygons) |
82 |
| - // cppcheck-suppress unreadVariable |
83 |
| - const auto naive_result = naive_collision_checker.intersections(polygon); |
84 |
| - const auto naive_check_end = std::chrono::system_clock::now(); |
85 |
| - const auto rtt_constr_time = |
86 |
| - std::chrono::duration_cast<std::chrono::nanoseconds>(rtt_constr_end - rtt_constr_start); |
87 |
| - const auto naive_constr_time = |
88 |
| - std::chrono::duration_cast<std::chrono::nanoseconds>(naive_constr_end - naive_constr_start); |
89 |
| - const auto rtt_check_time = |
90 |
| - std::chrono::duration_cast<std::chrono::nanoseconds>(rtt_check_end - rtt_check_start); |
91 |
| - const auto naive_check_time = |
92 |
| - std::chrono::duration_cast<std::chrono::nanoseconds>(naive_check_end - naive_check_start); |
93 |
| - std::printf( |
94 |
| - "%lu, %lu, %ld, %ld, %ld, %ld\n", nb_lines, nb_points, rtt_constr_time.count(), |
95 |
| - rtt_check_time.count(), naive_constr_time.count(), naive_check_time.count()); |
| 59 | + try { |
| 60 | + Obstacles obstacles; |
| 61 | + std::vector<polygon_t> polygons; |
| 62 | + polygons.reserve(100); |
| 63 | + for (auto i = 0; i < 100; ++i) { |
| 64 | + polygons.push_back(random_polygon()); |
| 65 | + } |
| 66 | + for (auto nb_lines = 1lu; nb_lines < 1000lu; nb_lines += 10) { |
| 67 | + obstacles.lines.push_back(random_line()); |
| 68 | + obstacles.points.clear(); |
| 69 | + for (auto nb_points = 1lu; nb_points < 1000lu; nb_points += 10) { |
| 70 | + obstacles.points.push_back(random_point()); |
| 71 | + const auto rtt_constr_start = std::chrono::system_clock::now(); |
| 72 | + CollisionChecker rtree_collision_checker(obstacles, 0, 0); |
| 73 | + const auto rtt_constr_end = std::chrono::system_clock::now(); |
| 74 | + const auto naive_constr_start = std::chrono::system_clock::now(); |
| 75 | + CollisionChecker naive_collision_checker(obstacles, nb_points + 1, nb_lines * 100); |
| 76 | + const auto naive_constr_end = std::chrono::system_clock::now(); |
| 77 | + const auto rtt_check_start = std::chrono::system_clock::now(); |
| 78 | + for (const auto & polygon : polygons) |
| 79 | + // cppcheck-suppress unreadVariable |
| 80 | + const auto rtree_result = rtree_collision_checker.intersections(polygon); |
| 81 | + const auto rtt_check_end = std::chrono::system_clock::now(); |
| 82 | + const auto naive_check_start = std::chrono::system_clock::now(); |
| 83 | + for (const auto & polygon : polygons) |
| 84 | + // cppcheck-suppress unreadVariable |
| 85 | + const auto naive_result = naive_collision_checker.intersections(polygon); |
| 86 | + const auto naive_check_end = std::chrono::system_clock::now(); |
| 87 | + const auto rtt_constr_time = |
| 88 | + std::chrono::duration_cast<std::chrono::nanoseconds>(rtt_constr_end - rtt_constr_start); |
| 89 | + const auto naive_constr_time = std::chrono::duration_cast<std::chrono::nanoseconds>( |
| 90 | + naive_constr_end - naive_constr_start); |
| 91 | + const auto rtt_check_time = |
| 92 | + std::chrono::duration_cast<std::chrono::nanoseconds>(rtt_check_end - rtt_check_start); |
| 93 | + const auto naive_check_time = |
| 94 | + std::chrono::duration_cast<std::chrono::nanoseconds>(naive_check_end - naive_check_start); |
| 95 | + std::printf( |
| 96 | + "%lu, %lu, %ld, %ld, %ld, %ld\n", nb_lines, nb_points, rtt_constr_time.count(), |
| 97 | + rtt_check_time.count(), naive_constr_time.count(), naive_check_time.count()); |
| 98 | + } |
96 | 99 | }
|
| 100 | + } catch (const std::exception & e) { |
| 101 | + std::cerr << "Exception in main(): " << e.what() << std::endl; |
| 102 | + return {}; |
| 103 | + } catch (...) { |
| 104 | + std::cerr << "Unknown exception in main()" << std::endl; |
| 105 | + return {}; |
97 | 106 | }
|
98 | 107 | return 0;
|
99 | 108 | }
|
0 commit comments