@@ -453,6 +453,19 @@ public function testSpatialOneToMany(): void
453453 ], Database::PERMISSION_READ );
454454 $ this ->assertCount (2 , $ notFarSmall );
455455
456+ // Equal-distance semantics: distance (<=) and notDistance (>), threshold exactly at 0
457+ $ equalZero = $ database ->find ($ child , [
458+ Query::distance ('coord ' , [[[10.0 , 10.0 ], 0.0 ]])
459+ ], Database::PERMISSION_READ );
460+ $ this ->assertNotEmpty ($ equalZero );
461+ $ this ->assertEquals ('p1 ' , $ equalZero [0 ]->getId ());
462+
463+ $ notEqualZero = $ database ->find ($ child , [
464+ Query::notDistance ('coord ' , [[[10.0 , 10.0 ], 0.0 ]])
465+ ], Database::PERMISSION_READ );
466+ $ this ->assertNotEmpty ($ notEqualZero );
467+ $ this ->assertEquals ('p2 ' , $ notEqualZero [0 ]->getId ());
468+
456469 $ region = $ database ->getDocument ($ parent , 'r1 ' );
457470 $ this ->assertArrayHasKey ('places ' , $ region );
458471 $ this ->assertEquals (2 , \count ($ region ['places ' ]));
@@ -572,6 +585,19 @@ public function testSpatialManyToOne(): void
572585 ], Database::PERMISSION_READ );
573586 $ this ->assertCount (2 , $ notFarSmall );
574587
588+ // Equal-distance semantics: distance (<=) and notDistance (>), threshold exactly at 0
589+ $ equalZero = $ database ->find ($ child , [
590+ Query::distance ('coord ' , [[[20.0 , 20.0 ], 0.0 ]])
591+ ], Database::PERMISSION_READ );
592+ $ this ->assertNotEmpty ($ equalZero );
593+ $ this ->assertEquals ('s1 ' , $ equalZero [0 ]->getId ());
594+
595+ $ notEqualZero = $ database ->find ($ child , [
596+ Query::notDistance ('coord ' , [[[20.0 , 20.0 ], 0.0 ]])
597+ ], Database::PERMISSION_READ );
598+ $ this ->assertNotEmpty ($ notEqualZero );
599+ $ this ->assertEquals ('s2 ' , $ notEqualZero [0 ]->getId ());
600+
575601 $ city = $ database ->getDocument ($ parent , 'c1 ' );
576602 $ this ->assertArrayHasKey ('stops ' , $ city );
577603 $ this ->assertEquals (2 , \count ($ city ['stops ' ]));
@@ -691,6 +717,18 @@ public function testSpatialManyToMany(): void
691717 $ this ->assertNotEmpty ($ notFarSmall );
692718 $ this ->assertEquals ('d1 ' , $ notFarSmall [0 ]->getId ());
693719
720+ // Equal-distance semantics: distance (<=) and notDistance (>), threshold exactly at 0
721+ $ equalZero = $ database ->find ($ a , [
722+ Query::distance ('home ' , [[[30.0 , 30.0 ], 0.0 ]])
723+ ], Database::PERMISSION_READ );
724+ $ this ->assertNotEmpty ($ equalZero );
725+ $ this ->assertEquals ('d1 ' , $ equalZero [0 ]->getId ());
726+
727+ $ notEqualZero = $ database ->find ($ a , [
728+ Query::notDistance ('home ' , [[[30.0 , 30.0 ], 0.0 ]])
729+ ], Database::PERMISSION_READ );
730+ $ this ->assertEmpty ($ notEqualZero );
731+
694732 // Ensure relationship present
695733 $ d1 = $ database ->getDocument ($ a , 'd1 ' );
696734 $ this ->assertArrayHasKey ('routes ' , $ d1 );
@@ -1291,6 +1329,20 @@ public function testComplexGeometricShapes(): void
12911329 ], Database::PERMISSION_READ );
12921330 $ this ->assertCount (2 , $ notFarHuge );
12931331
1332+ // Equal-distance semantics for circle_center
1333+ // rect1 is exactly at [10,5], so distance 0
1334+ $ equalZero = $ database ->find ($ collectionName , [
1335+ Query::distance ('circle_center ' , [[[10 , 5 ], 0.0 ]])
1336+ ], Database::PERMISSION_READ );
1337+ $ this ->assertNotEmpty ($ equalZero );
1338+ $ this ->assertEquals ('rect1 ' , $ equalZero [0 ]->getId ());
1339+
1340+ $ notEqualZero = $ database ->find ($ collectionName , [
1341+ Query::notDistance ('circle_center ' , [[[10 , 5 ], 0.0 ]])
1342+ ], Database::PERMISSION_READ );
1343+ $ this ->assertNotEmpty ($ notEqualZero );
1344+ $ this ->assertEquals ('rect2 ' , $ notEqualZero [0 ]->getId ());
1345+
12941346 } finally {
12951347 $ database ->deleteCollection ($ collectionName );
12961348 }
0 commit comments