@@ -357,3 +357,88 @@ def test_st_within_skipped(eng, geom1, geom2, expected):
357357 f"SELECT ST_Within({ geom_or_null (geom1 )} , { geom_or_null (geom2 )} )" ,
358358 expected ,
359359 )
360+
361+
362+ @pytest .mark .parametrize ("eng" , [SedonaDB , PostGIS ])
363+ @pytest .mark .parametrize (
364+ ("geom1" , "geom2" , "expected" ),
365+ [
366+ (None , None , None ),
367+ ("POINT (0 0)" , None , None ),
368+ (None , "POINT (0 0)" , None ),
369+ ("POINT (0 0)" , "POINT EMPTY" , False ),
370+ ("POINT (0 0)" , "POINT (0 0)" , False ),
371+ ("POINT (0.5 0.5)" , "LINESTRING (0 0, 1 1)" , False ),
372+ ("POINT (0 0)" , "LINESTRING (0 0, 1 1)" , False ),
373+ ("POINT (0.5 0.5)" , "POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))" , False ),
374+ ("POINT (0 0)" , "POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))" , False ),
375+ ("LINESTRING (0 0, 1 1)" , "LINESTRING (0 1, 1 0)" , True ),
376+ ("LINESTRING (0 0, 1 1)" , "LINESTRING (1 1, 2 2)" , False ),
377+ ("LINESTRING (0 0, 2 2)" , "LINESTRING (1 1, 3 3)" , False ),
378+ ("LINESTRING (-1 -1, 1 1)" , "POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))" , True ),
379+ ("LINESTRING (-1 0, 0 0)" , "POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))" , False ),
380+ (
381+ "LINESTRING (0.1 0.1, 0.5 0.5)" ,
382+ "POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))" ,
383+ False ,
384+ ),
385+ (
386+ "POLYGON ((0 0, 2 0, 2 2, 0 2, 0 0))" ,
387+ "POLYGON ((1 1, 3 1, 3 3, 1 3, 1 1))" ,
388+ False ,
389+ ),
390+ ],
391+ )
392+ def test_st_crosses (eng , geom1 , geom2 , expected ):
393+ eng = eng .create_or_skip ()
394+ eng .assert_query_result (
395+ f"SELECT ST_Crosses({ geom_or_null (geom1 )} , { geom_or_null (geom2 )} )" ,
396+ expected ,
397+ )
398+
399+
400+ @pytest .mark .parametrize ("eng" , [SedonaDB , PostGIS ])
401+ @pytest .mark .parametrize (
402+ ("geom1" , "geom2" , "expected" ),
403+ [
404+ (None , None , None ),
405+ ("POINT (0 0)" , None , None ),
406+ (None , "POINT (0 0)" , None ),
407+ ("POINT (0 0)" , "POINT EMPTY" , False ),
408+ ("POINT (0 0)" , "LINESTRING (0 0, 1 1)" , False ),
409+ ("LINESTRING (0 0, 2 2)" , "POLYGON ((1 1, 3 1, 3 3, 1 3, 1 1))" , False ),
410+ ("MULTIPOINT ((0 0), (1 1))" , "MULTIPOINT ((1 1), (2 2))" , True ),
411+ ("MULTIPOINT ((0 0), (1 1))" , "MULTIPOINT ((0 0), (1 1))" , False ),
412+ ("POINT (0 0)" , "POINT (0 0)" , False ),
413+ ("LINESTRING (0 0, 2 2)" , "LINESTRING (1 1, 3 3)" , True ),
414+ ("LINESTRING (0 0, 1 1)" , "LINESTRING (0 1, 1 0)" , False ),
415+ ("LINESTRING (0 0, 1 1)" , "LINESTRING (1 1, 2 2)" , False ),
416+ ("LINESTRING (0 0, 1 1)" , "LINESTRING (0 0, 1 1)" , False ),
417+ (
418+ "POLYGON ((0 0, 2 0, 2 2, 0 2, 0 0))" ,
419+ "POLYGON ((1 1, 3 1, 3 3, 1 3, 1 1))" ,
420+ True ,
421+ ),
422+ (
423+ "POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))" ,
424+ "POLYGON ((1 0, 2 0, 2 1, 1 1, 1 0))" ,
425+ False ,
426+ ),
427+ (
428+ "POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))" ,
429+ "POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))" ,
430+ False ,
431+ ),
432+ (
433+ "POLYGON ((0 0, 3 0, 3 3, 0 3, 0 0))" ,
434+ "POLYGON ((1 1, 2 1, 2 2, 1 2, 1 1))" ,
435+ False ,
436+ ),
437+ ],
438+ )
439+ def test_st_overlaps (eng , geom1 , geom2 , expected ):
440+ eng = eng .create_or_skip ()
441+ eng .assert_query_result (
442+ f"SELECT ST_Overlaps({ geom_or_null (geom1 )} , { geom_or_null (geom2 )} )" ,
443+ expected ,
444+ )
0 commit comments