diff --git a/Tests/GeoLib/TestOctTree.cpp b/Tests/GeoLib/TestOctTree.cpp index e4a3d9b287c233bcb35f0bfb70d1790c86d8abfc..c05519c14b8b810299915afe44c78680f95bcf5a 100644 --- a/Tests/GeoLib/TestOctTree.cpp +++ b/Tests/GeoLib/TestOctTree.cpp @@ -556,3 +556,27 @@ TEST_F(GeoLibOctTree, TestRangeQueryEmptyRange) ASSERT_EQ(0u, query_points.size()); } } + +TEST_F(GeoLibOctTree, TestRangeQueryWithOutsideRange) +{ + generateEquidistantPoints3dUnitCube(21); + double const eps = std::numeric_limits<double>::epsilon() * 0.5; + GeoLib::AABB aabb(ps_ptr.begin(), ps_ptr.end()); + auto const& min(aabb.getMinPoint()); + auto const& max(aabb.getMaxPoint()); + std::unique_ptr<GeoLib::OctTree<GeoLib::Point, 2>> oct_tree( + GeoLib::OctTree<GeoLib::Point, 2>::createOctTree(min, max, eps)); + for (auto* p : ps_ptr) + { + GeoLib::Point* ret_pnt(nullptr); + ASSERT_TRUE(oct_tree->addPoint(p, ret_pnt)); + ASSERT_EQ(p, ret_pnt); + } + + // range query for range outside the cube domain [min, max) + std::vector<GeoLib::Point*> query_points; + Eigen::Vector3d const min_p(max); + Eigen::Vector3d const max_p = min_p.array() + 1.0; + oct_tree->getPointsInRange(min_p, max_p, query_points); + ASSERT_EQ(0u, query_points.size()); +}