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