1 #include "engine/api/match_parameters_tidy.hpp"
2
3 #include <boost/test/unit_test.hpp>
4
5 #include <algorithm>
6 #include <iterator>
7 #include <vector>
8
9 BOOST_AUTO_TEST_SUITE(tidy_test)
10
11 using namespace osrm;
12 using namespace osrm::util;
13 using namespace osrm::engine::api;
14
BOOST_AUTO_TEST_CASE(two_item_trace_already_tidied_test)15 BOOST_AUTO_TEST_CASE(two_item_trace_already_tidied_test)
16 {
17 MatchParameters params;
18 params.coordinates.emplace_back(FloatLongitude{13.207993}, FloatLatitude{52.446379});
19 params.coordinates.emplace_back(FloatLongitude{13.231658}, FloatLatitude{52.465416});
20
21 params.timestamps.emplace_back(1477090402);
22 params.timestamps.emplace_back(1477090663);
23
24 tidy::Thresholds thresholds;
25 thresholds.distance_in_meters = 15.;
26 thresholds.duration_in_seconds = 5;
27
28 auto result = tidy::tidy(params, thresholds);
29
30 BOOST_CHECK_EQUAL(result.can_be_removed.size(), 2);
31 BOOST_CHECK_EQUAL(result.tidied_to_original.size(), 2);
32
33 BOOST_CHECK(result.can_be_removed[0] == false);
34 BOOST_CHECK(result.can_be_removed[1] == false);
35 BOOST_CHECK_EQUAL(result.tidied_to_original[0], 0);
36 BOOST_CHECK_EQUAL(result.tidied_to_original[1], 1);
37 }
38
BOOST_AUTO_TEST_CASE(two_item_trace_needs_tidiying_test)39 BOOST_AUTO_TEST_CASE(two_item_trace_needs_tidiying_test)
40 {
41 MatchParameters params;
42 params.coordinates.emplace_back(FloatLongitude{13.207993}, FloatLatitude{52.446379});
43 params.coordinates.emplace_back(FloatLongitude{13.231658}, FloatLatitude{52.465416});
44
45 params.timestamps.emplace_back(1477090402);
46 params.timestamps.emplace_back(1477090663);
47
48 tidy::Thresholds thresholds;
49 thresholds.distance_in_meters = 5000;
50 thresholds.duration_in_seconds = 5 * 60;
51
52 auto result = tidy::tidy(params, thresholds);
53
54 BOOST_CHECK_EQUAL(result.can_be_removed.size(), 2);
55 BOOST_CHECK_EQUAL(result.tidied_to_original.size(), 2);
56
57 BOOST_CHECK_EQUAL(result.can_be_removed[0], false);
58 BOOST_CHECK_EQUAL(result.can_be_removed[1], false);
59 BOOST_CHECK_EQUAL(result.tidied_to_original[0], 0);
60 }
61
BOOST_AUTO_TEST_CASE(two_blobs_in_traces_needs_tidiying_test)62 BOOST_AUTO_TEST_CASE(two_blobs_in_traces_needs_tidiying_test)
63 {
64 MatchParameters params;
65
66 params.coordinates.emplace_back(FloatLongitude{13.207993}, FloatLatitude{52.446379});
67 params.coordinates.emplace_back(FloatLongitude{13.207994}, FloatLatitude{52.446380});
68 params.coordinates.emplace_back(FloatLongitude{13.207995}, FloatLatitude{52.446381});
69
70 params.coordinates.emplace_back(FloatLongitude{13.231658}, FloatLatitude{52.465416});
71 params.coordinates.emplace_back(FloatLongitude{13.231659}, FloatLatitude{52.465417});
72 params.coordinates.emplace_back(FloatLongitude{13.231660}, FloatLatitude{52.465417});
73
74 params.timestamps.emplace_back(1477090402);
75 params.timestamps.emplace_back(1477090403);
76 params.timestamps.emplace_back(1477090404);
77
78 params.timestamps.emplace_back(1477090661);
79 params.timestamps.emplace_back(1477090662);
80 params.timestamps.emplace_back(1477090663);
81
82 tidy::Thresholds thresholds;
83 thresholds.distance_in_meters = 15;
84 thresholds.duration_in_seconds = 5;
85
86 auto result = tidy::tidy(params, thresholds);
87
88 BOOST_CHECK_EQUAL(result.can_be_removed.size(), params.coordinates.size());
89 BOOST_CHECK_EQUAL(result.tidied_to_original.size(), 3);
90
91 BOOST_CHECK_EQUAL(result.tidied_to_original[0], 0);
92 BOOST_CHECK_EQUAL(result.tidied_to_original[1], 3);
93 BOOST_CHECK_EQUAL(result.tidied_to_original[2], 5);
94
95 const auto redundant = result.can_be_removed.count();
96 BOOST_CHECK_EQUAL(redundant, params.coordinates.size() - 3);
97
98 BOOST_CHECK_EQUAL(result.can_be_removed[0], false);
99 BOOST_CHECK_EQUAL(result.can_be_removed[3], false);
100 BOOST_CHECK_EQUAL(result.can_be_removed[5], false);
101 }
102
BOOST_AUTO_TEST_CASE(two_blobs_in_traces_needs_tidiying_no_timestamps_test)103 BOOST_AUTO_TEST_CASE(two_blobs_in_traces_needs_tidiying_no_timestamps_test)
104 {
105 MatchParameters params;
106
107 params.coordinates.emplace_back(FloatLongitude{13.207993}, FloatLatitude{52.446379});
108 params.coordinates.emplace_back(FloatLongitude{13.207994}, FloatLatitude{52.446380});
109 params.coordinates.emplace_back(FloatLongitude{13.207995}, FloatLatitude{52.446381});
110
111 params.coordinates.emplace_back(FloatLongitude{13.231658}, FloatLatitude{52.465416});
112 params.coordinates.emplace_back(FloatLongitude{13.231659}, FloatLatitude{52.465417});
113 params.coordinates.emplace_back(FloatLongitude{13.231660}, FloatLatitude{52.465417});
114
115 tidy::Thresholds thresholds;
116 thresholds.distance_in_meters = 15;
117 thresholds.duration_in_seconds = 5;
118
119 auto result = tidy::tidy(params, thresholds);
120
121 BOOST_CHECK_EQUAL(result.can_be_removed.size(), params.coordinates.size());
122 BOOST_CHECK_EQUAL(result.tidied_to_original.size(), 3);
123 BOOST_CHECK_EQUAL(result.tidied_to_original[0], 0);
124 BOOST_CHECK_EQUAL(result.tidied_to_original[1], 3);
125 BOOST_CHECK_EQUAL(result.tidied_to_original[2], 5);
126
127 const auto redundant = result.can_be_removed.count();
128 BOOST_CHECK_EQUAL(redundant, params.coordinates.size() - 3);
129
130 BOOST_CHECK_EQUAL(result.can_be_removed[0], false);
131 BOOST_CHECK_EQUAL(result.can_be_removed[3], false);
132 BOOST_CHECK_EQUAL(result.can_be_removed[5], false);
133 }
134
135 BOOST_AUTO_TEST_SUITE_END()
136