|
| 1 | +#pragma once |
| 2 | + |
| 3 | +#include "test_utility.hpp" |
| 4 | +#include "../draw.hpp" |
| 5 | + |
| 6 | +class OverlapFindTests |
| 7 | + : public ::testing::Test |
| 8 | +{ |
| 9 | +public: |
| 10 | + using types = IntervalTypes <double>; |
| 11 | +protected: |
| 12 | + IntervalTypes <double>::tree_type tree; |
| 13 | +}; |
| 14 | + |
| 15 | +TEST_F(OverlapFindTests, FloatOverlapTest) |
| 16 | +{ |
| 17 | + tree.insert(lib_interval_tree::make_safe_interval<double>(-1.483529864195180e+00, -1.296053859335657e+00)); |
| 18 | + tree.insert(lib_interval_tree::make_safe_interval<double>(-1.308996938995747e+00, -1.127801743538376e+00)); |
| 19 | + tree.insert(lib_interval_tree::make_safe_interval<double>(-1.134464013796314e+00, -9.562870818388700e-01)); |
| 20 | + tree.insert(lib_interval_tree::make_safe_interval<double>(-9.599310885968813e-01, -7.834918877708545e-01)); |
| 21 | + tree.insert(lib_interval_tree::make_safe_interval<double>(-7.853981633974484e-01, -6.090750919515169e-01)); |
| 22 | + tree.insert(lib_interval_tree::make_safe_interval<double>(-6.108652381980154e-01, -4.348738075675338e-01)); |
| 23 | + tree.insert(lib_interval_tree::make_safe_interval<double>(-4.363323129985824e-01, -2.608478200480425e-01)); |
| 24 | + tree.insert(lib_interval_tree::make_safe_interval<double>(-2.617993877991495e-01, -8.693606119038631e-02)); |
| 25 | + tree.insert(lib_interval_tree::make_safe_interval<double>(-8.726646259971654e-02, 8.726646259971654e-02)); |
| 26 | + tree.insert(lib_interval_tree::make_safe_interval<double>(8.693606119038631e-02, 2.617993877991493e-01)); |
| 27 | + tree.insert(lib_interval_tree::make_safe_interval<double>(2.608478200480422e-01, 4.363323129985823e-01)); |
| 28 | + tree.insert(lib_interval_tree::make_safe_interval<double>(4.348738075675337e-01, 6.108652381980154e-01)); |
| 29 | + tree.insert(lib_interval_tree::make_safe_interval<double>(6.090750919515169e-01, 7.853981633974484e-01)); |
| 30 | + tree.insert(lib_interval_tree::make_safe_interval<double>(7.834918877708545e-01, 9.599310885968813e-01)); |
| 31 | + tree.insert(lib_interval_tree::make_safe_interval<double>(9.562870818388700e-01, 1.134464013796314e+00)); // |
| 32 | + tree.insert(lib_interval_tree::make_safe_interval<double>(1.127801743538376e+00, 1.308996938995747e+00)); // |
| 33 | + tree.insert(lib_interval_tree::make_safe_interval<double>(1.296053859335657e+00, 1.483529864195180e+00)); // |
| 34 | + |
| 35 | + double lat0 = 1.040893537045970; |
| 36 | + double lat1 = 1.570796326794897; |
| 37 | + |
| 38 | + std::vector <lib_interval_tree::interval<double>> vecOverlapsA; |
| 39 | + lib_interval_tree::interval <double> intSource({lat0, lat1}); |
| 40 | + for (auto itTargetInterval : tree) |
| 41 | + { |
| 42 | + if (itTargetInterval.overlaps(intSource)) |
| 43 | + { |
| 44 | + vecOverlapsA.push_back(itTargetInterval); |
| 45 | + } |
| 46 | + } |
| 47 | + |
| 48 | + std::vector <lib_interval_tree::interval<double>> vecOverlapsB; |
| 49 | + tree.overlap_find_all |
| 50 | + ( |
| 51 | + {lat0, lat1}, |
| 52 | + [&vecOverlapsB](lib_interval_tree::interval_tree_t<double>::iterator ittarget) |
| 53 | + { |
| 54 | + vecOverlapsB.push_back(*ittarget); |
| 55 | + return true; |
| 56 | + }, |
| 57 | + false |
| 58 | + ); |
| 59 | + |
| 60 | + for (auto const& i : vecOverlapsA) |
| 61 | + { |
| 62 | + std::cout << i.low() << ", " << i.high() << "\n"; |
| 63 | + } |
| 64 | + std::cout << "\n"; |
| 65 | + for (auto const& i : vecOverlapsB) |
| 66 | + { |
| 67 | + std::cout << i.low() << ", " << i.high() << "\n"; |
| 68 | + } |
| 69 | + |
| 70 | + lib_interval_tree::drawTree("here.png", tree); |
| 71 | + |
| 72 | + ASSERT_EQ(vecOverlapsA, vecOverlapsB); |
| 73 | +} |
0 commit comments