@@ -1016,6 +1016,71 @@ def test_st_pointm(eng, x, y, m, expected):
10161016 )
10171017
10181018
1019+ @pytest .mark .parametrize ("eng" , [SedonaDB , PostGIS ])
1020+ @pytest .mark .parametrize (
1021+ ("geometry" , "expected" ),
1022+ [
1023+ (None , None ),
1024+ ("POINT EMPTY" , None ),
1025+ ("LINESTRING EMPTY" , None ),
1026+ ("POLYGON EMPTY" , None ),
1027+ ("MULTIPOINT EMPTY" , None ),
1028+ ("MULTILINESTRING EMPTY" , None ),
1029+ ("MULTIPOLYGON EMPTY" , None ),
1030+ ("GEOMETRYCOLLECTION EMPTY" , None ),
1031+ ("LINESTRING (1 2, 3 4, 5 6)" , "POINT (1 2)" ),
1032+ ("LINESTRING Z (1 2 3, 3 4 5, 5 6 7)" , "POINT Z (1 2 3)" ),
1033+ ("LINESTRING M (1 2 3, 3 4 5, 5 6 7)" , "POINT M (1 2 3)" ),
1034+ ("LINESTRING ZM (1 2 3 4, 3 4 5 6, 5 6 7 8)" , "POINT ZM (1 2 3 4)" ),
1035+ ("POINT (1 2)" , "POINT (1 2)" ),
1036+ ("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))" , "POINT (0 0)" ),
1037+ ("MULTIPOINT (0 0, 10 0, 10 10, 0 10, 0 0)" , "POINT (0 0)" ),
1038+ ("MULTILINESTRING ((1 2, 3 4), (5 6, 7 8))" , "POINT (1 2)" ),
1039+ ("MULTIPOLYGON (((0 0, 10 0, 10 10, 0 10, 0 0)))" , "POINT (0 0)" ),
1040+ ("GEOMETRYCOLLECTION (POINT (1 2), LINESTRING (3 4, 5 6))" , "POINT (1 2)" ),
1041+ (
1042+ "GEOMETRYCOLLECTION (GEOMETRYCOLLECTION (GEOMETRYCOLLECTION (POINT (1 2), LINESTRING (3 4, 5 6))))" ,
1043+ "POINT (1 2)" ,
1044+ ),
1045+ ],
1046+ )
1047+ def test_st_start_point (eng , geometry , expected ):
1048+ eng = eng .create_or_skip ()
1049+ eng .assert_query_result (
1050+ f"SELECT ST_StartPoint({ geom_or_null (geometry )} )" ,
1051+ expected ,
1052+ )
1053+
1054+
1055+ @pytest .mark .parametrize ("eng" , [SedonaDB , PostGIS ])
1056+ @pytest .mark .parametrize (
1057+ ("geometry" , "expected" ),
1058+ [
1059+ (None , None ),
1060+ ("POINT EMPTY" , None ),
1061+ ("LINESTRING EMPTY" , None ),
1062+ ("POLYGON EMPTY" , None ),
1063+ ("MULTIPOINT EMPTY" , None ),
1064+ ("MULTILINESTRING EMPTY" , None ),
1065+ ("MULTIPOLYGON EMPTY" , None ),
1066+ ("GEOMETRYCOLLECTION EMPTY" , None ),
1067+ ("LINESTRING (1 2, 3 4, 5 6)" , "POINT (5 6)" ),
1068+ ("LINESTRING Z (1 2 3, 3 4 5, 5 6 7)" , "POINT Z (5 6 7)" ),
1069+ ("LINESTRING M (1 2 3, 3 4 5, 5 6 7)" , "POINT M (5 6 7)" ),
1070+ ("LINESTRING ZM (1 2 3 4, 3 4 5 6, 5 6 7 8)" , "POINT ZM (5 6 7 8)" ),
1071+ ("POINT (1 2)" , None ),
1072+ ("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))" , None ),
1073+ ("MULTILINESTRING ((1 2, 3 4), (5 6, 7 8))" , None ),
1074+ ],
1075+ )
1076+ def test_st_end_point (eng , geometry , expected ):
1077+ eng = eng .create_or_skip ()
1078+ eng .assert_query_result (
1079+ f"SELECT ST_EndPoint({ geom_or_null (geometry )} )" ,
1080+ expected ,
1081+ )
1082+
1083+
10191084@pytest .mark .parametrize ("eng" , [SedonaDB , PostGIS ])
10201085@pytest .mark .parametrize (
10211086 ("x" , "y" , "z" , "m" , "expected" ),
0 commit comments