From fe514aebc0c8d394a39a0bcdf85bec36fcc9d9da Mon Sep 17 00:00:00 2001 From: George Panchuk Date: Mon, 13 Apr 2026 21:52:00 +0700 Subject: [PATCH] tests: add test --- .../test_geo_polygon_filter_query.py | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/tests/congruence_tests/test_geo_polygon_filter_query.py b/tests/congruence_tests/test_geo_polygon_filter_query.py index 1123a015..a173c771 100644 --- a/tests/congruence_tests/test_geo_polygon_filter_query.py +++ b/tests/congruence_tests/test_geo_polygon_filter_query.py @@ -4,10 +4,12 @@ import random from qdrant_client.http.models import models from tests.congruence_tests.test_common import ( COLLECTION_NAME, + compare_client_results, generate_fixtures, init_client, init_local, init_remote, + initialize_fixture_collection, ) @@ -85,3 +87,71 @@ def test_geo_polygon_filter_query(): print(f"Remote:", json.dumps(remote.payload["nested"]["array"], indent=2)) assert False + + +def test_geo_bounding_box_edge_point(): + """Points on bounding box edges use strict inequalities and should be excluded.""" + collection_name = COLLECTION_NAME + + local_client = init_local() + remote_client = init_remote() + + vectors_config = models.VectorParams(size=2, distance=models.Distance.DOT) + initialize_fixture_collection(local_client, collection_name, vectors_config=vectors_config) + initialize_fixture_collection(remote_client, collection_name, vectors_config=vectors_config) + + # bbox: top_left=(lon=158.75, lat=90.0), bottom_right=(lon=180.0, lat=69.4) + points = [ + # on top edge (lat == top_left.lat) + models.PointStruct( + id=1, vector=[0.1, 0.1], payload={"location": {"lat": 90.0, "lon": 170.0}} + ), + # on bottom edge (lat == bottom_right.lat) + models.PointStruct( + id=2, vector=[0.2, 0.2], payload={"location": {"lat": 69.4, "lon": 170.0}} + ), + # on left edge (lon == top_left.lon) + models.PointStruct( + id=3, vector=[0.3, 0.3], payload={"location": {"lat": 80.0, "lon": 158.75}} + ), + # on right edge (lon == bottom_right.lon) + models.PointStruct( + id=4, vector=[0.4, 0.4], payload={"location": {"lat": 80.0, "lon": 180.0}} + ), + # corner: top-right + models.PointStruct( + id=5, vector=[0.5, 0.5], payload={"location": {"lat": 90.0, "lon": 180.0}} + ), + # corner: bottom-left + models.PointStruct( + id=6, vector=[0.6, 0.6], payload={"location": {"lat": 69.4, "lon": 158.75}} + ), + # strictly inside + models.PointStruct( + id=7, vector=[0.7, 0.7], payload={"location": {"lat": 80.0, "lon": 170.0}} + ), + # strictly outside + models.PointStruct( + id=8, vector=[0.8, 0.8], payload={"location": {"lat": 50.0, "lon": 170.0}} + ), + ] + + local_client.upload_points(collection_name, points, wait=True) + remote_client.upload_points(collection_name, points, wait=True) + + bbox = models.GeoBoundingBox( + top_left=models.GeoPoint(lon=158.75, lat=90.0), + bottom_right=models.GeoPoint(lon=180.0, lat=69.4), + ) + geo_filter = models.Filter(must=[models.FieldCondition(key="location", geo_bounding_box=bbox)]) + + compare_client_results( + local_client, + remote_client, + lambda client: client.scroll( + collection_name=collection_name, + scroll_filter=geo_filter, + limit=100, + with_payload=True, + ), + )