From 1aa488bbfde82a0b4f2c496bb7c1cd2bb591aade Mon Sep 17 00:00:00 2001
From: Tom Fischer <thomas.fischer@ufz.de>
Date: Thu, 14 Mar 2024 09:54:03 +0100
Subject: [PATCH] [T/GL/OctTree] Range query for range not intersecting domain

---
 Tests/GeoLib/TestOctTree.cpp | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/Tests/GeoLib/TestOctTree.cpp b/Tests/GeoLib/TestOctTree.cpp
index e4a3d9b287c..c05519c14b8 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());
+}
-- 
GitLab