| 192 | |
| 193 | template <typename RTreeT> |
| 194 | void sampling_verify_rtree(RTreeT &rtree, |
| 195 | LinearSearchNN<TestData> &lsnn, |
| 196 | const std::vector<Coordinate> &coords, |
| 197 | unsigned num_samples) |
| 198 | { |
| 199 | std::mt19937 g(osrm::test::getTestRandomSeed()); |
| 200 | std::uniform_int_distribution<> lat_udist(WORLD_MIN_LAT, WORLD_MAX_LAT); |
| 201 | std::uniform_int_distribution<> lon_udist(WORLD_MIN_LON, WORLD_MAX_LON); |
| 202 | std::vector<Coordinate> queries; |
| 203 | queries.reserve(num_samples); |
| 204 | for (unsigned i = 0; i < num_samples; i++) |
| 205 | { |
| 206 | queries.emplace_back(FixedLongitude{lon_udist(g)}, FixedLatitude{lat_udist(g)}); |
| 207 | } |
| 208 | |
| 209 | for (const auto &q : queries) |
| 210 | { |
| 211 | auto result_rtree = rtree.Nearest(q, 1); |
| 212 | auto result_lsnn = lsnn.Nearest(q, 1); |
| 213 | BOOST_CHECK(result_rtree.size() == 1); |
| 214 | BOOST_CHECK(result_lsnn.size() == 1); |
| 215 | auto rtree_u = result_rtree.back().data.u; |
| 216 | auto rtree_v = result_rtree.back().data.v; |
| 217 | auto lsnn_u = result_lsnn.back().u; |
| 218 | auto lsnn_v = result_lsnn.back().v; |
| 219 | |
| 220 | const double rtree_dist = |
| 221 | coordinate_calculation::perpendicularDistance(coords[rtree_u], coords[rtree_v], q); |
| 222 | const double lsnn_dist = |
| 223 | coordinate_calculation::perpendicularDistance(coords[lsnn_u], coords[lsnn_v], q); |
| 224 | |
| 225 | BOOST_CHECK_CLOSE(rtree_dist, lsnn_dist, 0.0001); |
| 226 | } |
| 227 | } |
| 228 | |
| 229 | template <typename RTreeT, typename FixtureT> |
| 230 | auto make_rtree(const std::filesystem::path &path, FixtureT &fixture) |
no test coverage detected