# TODO(sumeer): add more test cases

geometry name=point1
MULTIPOINT((12 12), (21 21))
----

geometry name=shortline1
LINESTRING (11 11,12 12)
----

geometry name=line-exceeds-bound
LINESTRING (12 15, 22 23)
----

geometry name=poly1
POLYGON((15 15,16 15.5,15.5 17,15 15))
----

geometry name=nan
0105000000060000000102000000020000002CF565DB1790F041010000000000F87F1C1E119D614AE7C1010000000000F87F010200000003000000809745B2972CF841010000000000F87FE0D03302F1C6D641010000000000F87FF83C7FD5C4ACD641010000000000F87F010200000004000000C4A695BE1FC2FD41010000000000F87F42F59F55FD780042010000000000F87FA07574B08DC0D941010000000000F87FD843A641FF49E741010000000000F87F010200000004000000781D60294113F241010000000000F87F100451CE196BED41010000000000F87F1430818C69A2EF41010000000000F87F00E4B02D00CB9341010000000000F87F01020000000400000040B0B6B74C96A0C1010000000000F87F1CD943F294E9E5C1010000000000F87F709F7E29F32AC4C1010000000000F87F607737DC4662E941010000000000F87F010200000004000000F097AF975517F441010000000000F87F5442BA391710F841010000000000F87FE01C9C5F7602B641010000000000F87F40E714D68300E2C1010000000000F87F
----

geometry name=poly1-different-orientation
POLYGON((15 15,15.5 17,16 15.5,15 15))
----

init minlevel=0 maxlevel=30 maxcells=4 minx=10 miny=10 maxx=20 maxy=20
----

# NaN
covers name=nan
----
cannot index a geometry with NaN coordinates

index-keys name=nan
----
cannot index a geometry with NaN coordinates

intersects name=nan
----
cannot index a geometry with NaN coordinates

# The orientation difference between the polygons has no effect on the
# index keys.

index-keys name=poly1
----
F0/L30/022222222222222222222222222222, F0/L30/133333333333333333333333333333, F0/L2/20, F0/L30/311111111111111111111111111111
BoundingBox: lo_x:15.000000 hi_x:16.000000 lo_y:15.000000 hi_y:17.000000

index-keys name=poly1-different-orientation
----
F0/L30/022222222222222222222222222222, F0/L30/133333333333333333333333333333, F0/L2/20, F0/L30/311111111111111111111111111111
BoundingBox: lo_x:15.000000 hi_x:16.000000 lo_y:15.000000 hi_y:17.000000

# Point exceeds the defined bounds.

index-keys name=point1
----
F0/L30/002200220022002200220022002200, spilled
BoundingBox: lo_x:12.000000 hi_x:21.000000 lo_y:12.000000 hi_y:21.000000

covers name=point1
----
F0/L2/00, F0/L3/002, F0/L6/002200, F0/L7/0022002, F0/L10/0022002200, 
F0/L11/00220022002, F0/L14/00220022002200, F0/L15/002200220022002, 
F0/L18/002200220022002200, F0/L19/0022002200220022002, F0/L22/0022002200220022002200, 
F0/L23/00220022002200220022002, F0/L26/00220022002200220022002200, 
F0/L27/002200220022002200220022002, F0/L30/002200220022002200220022002200, 
F0/L29/00220022002200220022002200220, F0/L28/0022002200220022002200220022, 
F0/L25/0022002200220022002200220, F0/L24/002200220022002200220022, 
F0/L21/002200220022002200220, F0/L20/00220022002200220022, F0/L17/00220022002200220, 
F0/L16/0022002200220022, F0/L13/0022002200220, F0/L12/002200220022, 
F0/L9/002200220, F0/L8/00220022, F0/L5/00220, F0/L4/0022, F0/L1/0, 
F0/L0/, spilled

intersects name=point1
----
F0/L2/00, F0/L3/002, F0/L6/002200, F0/L7/0022002, F0/L10/0022002200, 
F0/L11/00220022002, F0/L14/00220022002200, F0/L15/002200220022002, 
F0/L18/002200220022002200, F0/L19/0022002200220022002, F0/L22/0022002200220022002200, 
F0/L23/00220022002200220022002, F0/L26/00220022002200220022002200, 
F0/L27/002200220022002200220022002, F0/L30/002200220022002200220022002200, 
F0/L29/00220022002200220022002200220, F0/L28/0022002200220022002200220022, 
F0/L25/0022002200220022002200220, F0/L24/002200220022002200220022, 
F0/L21/002200220022002200220, F0/L20/00220022002200220022, F0/L17/00220022002200220, 
F0/L16/0022002200220022, F0/L13/0022002200220, F0/L12/002200220022, 
F0/L9/002200220, F0/L8/00220022, F0/L5/00220, F0/L4/0022, F0/L1/0, 
F0/L0/, spilled

inner-covering name=point1
----
F0/L30/002200220022002200220022002200

covered-by name=point1
----
0: spilled
1: F0/L30/002200220022002200220022002200, F0/L29/00220022002200220022002200220, 
F0/L28/0022002200220022002200220022, F0/L27/002200220022002200220022002, 
F0/L26/00220022002200220022002200, F0/L25/0022002200220022002200220, 
F0/L24/002200220022002200220022, F0/L23/00220022002200220022002, 
F0/L22/0022002200220022002200, F0/L21/002200220022002200220, 
F0/L20/00220022002200220022, F0/L19/0022002200220022002, F0/L18/002200220022002200, 
F0/L17/00220022002200220, F0/L16/0022002200220022, F0/L15/002200220022002, 
F0/L14/00220022002200, F0/L13/0022002200220, F0/L12/002200220022, 
F0/L11/00220022002, F0/L10/0022002200, F0/L9/002200220, F0/L8/00220022, 
F0/L7/0022002, F0/L6/002200, F0/L5/00220, F0/L4/0022, F0/L3/002, 
F0/L2/00, F0/L1/0, F0/L0/

index-keys name=shortline1
----
F0/L5/00022, F0/L3/002, F0/L30/003111111111111111111111111111
BoundingBox: lo_x:11.000000 hi_x:12.000000 lo_y:11.000000 hi_y:12.000000

covers name=shortline1
----
F0/L3/000, F0/L4/0002, [F0/L30/000220000000000000000000000000, F0/L30/000223333333333333333333333333], 
F0/L2/00, [F0/L30/002000000000000000000000000000, F0/L30/002333333333333333333333333333], 
F0/L30/003111111111111111111111111111, F0/L29/00311111111111111111111111111, 
F0/L28/0031111111111111111111111111, F0/L27/003111111111111111111111111, 
F0/L26/00311111111111111111111111, F0/L25/0031111111111111111111111, 
F0/L24/003111111111111111111111, F0/L23/00311111111111111111111, 
F0/L22/0031111111111111111111, F0/L21/003111111111111111111, 
F0/L20/00311111111111111111, F0/L19/0031111111111111111, F0/L18/003111111111111111, 
F0/L17/00311111111111111, F0/L16/0031111111111111, F0/L15/003111111111111, 
F0/L14/00311111111111, F0/L13/0031111111111, F0/L12/003111111111, 
F0/L11/00311111111, F0/L10/0031111111, F0/L9/003111111, F0/L8/00311111, 
F0/L7/0031111, F0/L6/003111, F0/L5/00311, F0/L4/0031, F0/L3/003, 
F0/L1/0, F0/L0/

intersects name=shortline1
----
F0/L3/000, F0/L4/0002, [F0/L30/000220000000000000000000000000, F0/L30/000223333333333333333333333333], 
F0/L2/00, [F0/L30/002000000000000000000000000000, F0/L30/002333333333333333333333333333], 
F0/L30/003111111111111111111111111111, F0/L29/00311111111111111111111111111, 
F0/L28/0031111111111111111111111111, F0/L27/003111111111111111111111111, 
F0/L26/00311111111111111111111111, F0/L25/0031111111111111111111111, 
F0/L24/003111111111111111111111, F0/L23/00311111111111111111111, 
F0/L22/0031111111111111111111, F0/L21/003111111111111111111, 
F0/L20/00311111111111111111, F0/L19/0031111111111111111, F0/L18/003111111111111111, 
F0/L17/00311111111111111, F0/L16/0031111111111111, F0/L15/003111111111111, 
F0/L14/00311111111111, F0/L13/0031111111111, F0/L12/003111111111, 
F0/L11/00311111111, F0/L10/0031111111, F0/L9/003111111, F0/L8/00311111, 
F0/L7/0031111, F0/L6/003111, F0/L5/00311, F0/L4/0031, F0/L3/003, 
F0/L1/0, F0/L0/

inner-covering name=shortline1
----
F0/L30/000220022002200220022002200220, F0/L30/002200220022002200220022002200

covered-by name=shortline1
----
0: F0/L30/002200220022002200220022002200, F0/L29/00220022002200220022002200220, 
F0/L28/0022002200220022002200220022, F0/L27/002200220022002200220022002, 
F0/L26/00220022002200220022002200, F0/L25/0022002200220022002200220, 
F0/L24/002200220022002200220022, F0/L23/00220022002200220022002, 
F0/L22/0022002200220022002200, F0/L21/002200220022002200220, 
F0/L20/00220022002200220022, F0/L19/0022002200220022002, F0/L18/002200220022002200, 
F0/L17/00220022002200220, F0/L16/0022002200220022, F0/L15/002200220022002, 
F0/L14/00220022002200, F0/L13/0022002200220, F0/L12/002200220022, 
F0/L11/00220022002, F0/L10/0022002200, F0/L9/002200220, F0/L8/00220022, 
F0/L7/0022002, F0/L6/002200, F0/L5/00220, F0/L4/0022, F0/L3/002, 
F0/L2/00, F0/L1/0, F0/L0/
1: F0/L30/000220022002200220022002200220, F0/L29/00022002200220022002200220022, 
F0/L28/0002200220022002200220022002, F0/L27/000220022002200220022002200, 
F0/L26/00022002200220022002200220, F0/L25/0002200220022002200220022, 
F0/L24/000220022002200220022002, F0/L23/00022002200220022002200, 
F0/L22/0002200220022002200220, F0/L21/000220022002200220022, 
F0/L20/00022002200220022002, F0/L19/0002200220022002200, F0/L18/000220022002200220, 
F0/L17/00022002200220022, F0/L16/0002200220022002, F0/L15/000220022002200, 
F0/L14/00022002200220, F0/L13/0002200220022, F0/L12/000220022002, 
F0/L11/00022002200, F0/L10/0002200220, F0/L9/000220022, F0/L8/00022002, 
F0/L7/0002200, F0/L6/000220, F0/L5/00022, F0/L4/0002, F0/L3/000, 
F0/L2/00, F0/L1/0, F0/L0/

index-keys name=line-exceeds-bound
----
F0/L30/030033003300330033003300330033, F0/L1/1, F0/L2/21, F0/L4/2211, spilled
BoundingBox: lo_x:12.000000 hi_x:22.000000 lo_y:15.000000 hi_y:23.000000

covers name=line-exceeds-bound
----
F0/L1/0, F0/L4/0300, F0/L5/03003, F0/L8/03003300, F0/L9/030033003, 
F0/L12/030033003300, F0/L13/0300330033003, F0/L16/0300330033003300, 
F0/L17/03003300330033003, F0/L20/03003300330033003300, F0/L21/030033003300330033003, 
F0/L24/030033003300330033003300, F0/L25/0300330033003300330033003, 
F0/L28/0300330033003300330033003300, F0/L29/03003300330033003300330033003, 
F0/L30/030033003300330033003300330033, F0/L27/030033003300330033003300330, 
F0/L26/03003300330033003300330033, F0/L23/03003300330033003300330, 
F0/L22/0300330033003300330033, F0/L19/0300330033003300330, F0/L18/030033003300330033, 
F0/L15/030033003300330, F0/L14/03003300330033, F0/L11/03003300330, 
F0/L10/0300330033, F0/L7/0300330, F0/L6/030033, F0/L3/030, F0/L2/03, 
[F0/L30/100000000000000000000000000000, F0/L30/133333333333333333333333333333], 
F0/L0/, [F0/L30/210000000000000000000000000000, F0/L30/213333333333333333333333333333], 
F0/L1/2, [F0/L30/221100000000000000000000000000, F0/L30/221133333333333333333333333333], 
F0/L3/221, F0/L2/22, spilled

intersects name=line-exceeds-bound
----
F0/L1/0, F0/L4/0300, F0/L5/03003, F0/L8/03003300, F0/L9/030033003, 
F0/L12/030033003300, F0/L13/0300330033003, F0/L16/0300330033003300, 
F0/L17/03003300330033003, F0/L20/03003300330033003300, F0/L21/030033003300330033003, 
F0/L24/030033003300330033003300, F0/L25/0300330033003300330033003, 
F0/L28/0300330033003300330033003300, F0/L29/03003300330033003300330033003, 
F0/L30/030033003300330033003300330033, F0/L27/030033003300330033003300330, 
F0/L26/03003300330033003300330033, F0/L23/03003300330033003300330, 
F0/L22/0300330033003300330033, F0/L19/0300330033003300330, F0/L18/030033003300330033, 
F0/L15/030033003300330, F0/L14/03003300330033, F0/L11/03003300330, 
F0/L10/0300330033, F0/L7/0300330, F0/L6/030033, F0/L3/030, F0/L2/03, 
[F0/L30/100000000000000000000000000000, F0/L30/133333333333333333333333333333], 
F0/L0/, [F0/L30/210000000000000000000000000000, F0/L30/213333333333333333333333333333], 
F0/L1/2, [F0/L30/221100000000000000000000000000, F0/L30/221133333333333333333333333333], 
F0/L3/221, F0/L2/22, spilled

inner-covering name=line-exceeds-bound
----
F0/L30/101100110011001100110011001100, F0/L30/221122301000333301033322223010

covered-by name=line-exceeds-bound
----
0: spilled
1: F0/L30/221122301000333301033322223010, F0/L29/22112230100033330103332222301, 
F0/L28/2211223010003333010333222230, F0/L27/221122301000333301033322223, 
F0/L26/22112230100033330103332222, F0/L25/2211223010003333010333222, 
F0/L24/221122301000333301033322, F0/L23/22112230100033330103332, 
F0/L22/2211223010003333010333, F0/L21/221122301000333301033, 
F0/L20/22112230100033330103, F0/L19/2211223010003333010, F0/L18/221122301000333301, 
F0/L17/22112230100033330, F0/L16/2211223010003333, F0/L15/221122301000333, 
F0/L14/22112230100033, F0/L13/2211223010003, F0/L12/221122301000, 
F0/L11/22112230100, F0/L10/2211223010, F0/L9/221122301, F0/L8/22112230, 
F0/L7/2211223, F0/L6/221122, F0/L5/22112, F0/L4/2211, F0/L3/221, 
F0/L2/22, F0/L1/2, F0/L0/
2: F0/L30/101100110011001100110011001100, F0/L29/10110011001100110011001100110, 
F0/L28/1011001100110011001100110011, F0/L27/101100110011001100110011001, 
F0/L26/10110011001100110011001100, F0/L25/1011001100110011001100110, 
F0/L24/101100110011001100110011, F0/L23/10110011001100110011001, 
F0/L22/1011001100110011001100, F0/L21/101100110011001100110, 
F0/L20/10110011001100110011, F0/L19/1011001100110011001, F0/L18/101100110011001100, 
F0/L17/10110011001100110, F0/L16/1011001100110011, F0/L15/101100110011001, 
F0/L14/10110011001100, F0/L13/1011001100110, F0/L12/101100110011, 
F0/L11/10110011001, F0/L10/1011001100, F0/L9/101100110, F0/L8/10110011, 
F0/L7/1011001, F0/L6/101100, F0/L5/10110, F0/L4/1011, F0/L3/101, 
F0/L2/10, F0/L1/1, F0/L0/

init minlevel=0 maxlevel=4 maxcells=1 minx=10 miny=10 maxx=20 maxy=20
----

inner-covering name=point1
----
F0/L4/0022

inner-covering name=shortline1
----
F0/L4/0002, F0/L4/0022

inner-covering name=line-exceeds-bound
----
F0/L4/1011, F0/L4/2211

init minlevel=0 maxlevel=2 maxcells=1 minx=10 miny=10 maxx=20 maxy=20
----

inner-covering name=point1
----
F0/L2/00

inner-covering name=shortline1
----
F0/L2/00

inner-covering name=line-exceeds-bound
----
F0/L2/10, F0/L2/22

init minlevel=0 maxlevel=4 maxcells=2 minx=10 miny=10 maxx=20 maxy=20
----

index-keys name=point1
----
F0/L4/0022, spilled
BoundingBox: lo_x:12.000000 hi_x:21.000000 lo_y:12.000000 hi_y:21.000000

covers name=point1
----
F0/L2/00, F0/L3/002, [F0/L30/002200000000000000000000000000, F0/L30/002233333333333333333333333333], 
F0/L1/0, F0/L0/, spilled

d-within distance=1 name=point1
----
[F0/L30/000000000000000000000000000000, F0/L30/033333333333333333333333333333], 
F0/L0/, spilled

# See https://github.com/cockroachdb/cockroach/issues/106954 for skip-arm64.
d-within distance=2 name=point1 skip-arm64
----
[F0/L30/000000000000000000000000000000, F0/L30/033333333333333333333333333333], 
F0/L0/, F0/L1/2, F0/L2/22, [F0/L30/222000000000000000000000000000, F0/L30/222333333333333333333333333333], 
spilled

# Since s2GeometryIndex.{Covers,Intersects} currently have the same implementation,
# the output of d-fully-within is the same as dwithin.

d-fully-within distance=1 name=point1
----
[F0/L30/000000000000000000000000000000, F0/L30/033333333333333333333333333333], 
F0/L0/, spilled

# See https://github.com/cockroachdb/cockroach/issues/106954 for skip-arm64.
d-fully-within distance=2 name=point1 skip-arm64
----
[F0/L30/000000000000000000000000000000, F0/L30/033333333333333333333333333333], 
F0/L0/, F0/L1/2, F0/L2/22, [F0/L30/222000000000000000000000000000, F0/L30/222333333333333333333333333333], 
spilled

# Empty shapes

geometry name=point-empty
POINT EMPTY
----

index-keys name=point-empty
----

covered-by name=point-empty
----

covers name=point-empty
----

inner-covering name=point-empty
----

geometry name=polygon-empty
POLYGON EMPTY
----

index-keys name=polygon-empty
----

covered-by name=polygon-empty
----

covers name=polygon-empty
----

inner-covering name=polygon-empty
----

geometry name=coll-empty
GEOMETRYCOLLECTION EMPTY
----

index-keys name=coll-empty
----

covered-by name=coll-empty
----

covers name=coll-empty
----

inner-covering name=coll-empty
----

# Rough bounds for SRID 26918, used in a data set with geometries that triggered
# bad coverings. If we did not fallback to using the bounding box, these coverings
# would be F0/L0/, F1/L0/, F2/L0/, F3/L0/, F4/L0/, F5/L0/.
init minlevel=0 maxlevel=30 maxcells=4 minx=-9102387 miny=680961 maxx=11819889 maxy=9646533
----

geometry name=troubled-poly1
MULTIPOLYGON (((586857.9475235254503786563873 4500244.4056084547191858291626, 586890.2225210913456976413727 4500184.1842294149100780487061, 586836.4119185773888602852821 4500155.4893597159534692764282, 586828.247425784822553396225 4500149.819862429983913898468, 586828.2344921003095805644989 4500149.8106948612257838249207, 586828.219571095774881541729 4500149.8045549383386969566345, 586818.8969909736188128590584 4500145.6565522141754627227783, 586818.8891138497274369001389 4500145.6525010699406266212463, 586818.8811029464704915881157 4500145.6504012979567050933838, 586808.8418830885784700512886 4500143.3347355769947171211243, 586808.8288800554582849144936 4500143.3316676989197731018066, 586808.8138911846326664090157 4500143.3314972892403602600098, 586798.6254629108589142560959 4500142.9746762989088892936707, 586798.606457170913927257061 4500142.9744602208957076072693, 586798.5874725470785051584244 4500142.9772946210578083992004, 586788.7675613947212696075439 4500144.4972309721633791923523, 586773.9053534916602075099945 4500232.9436314916238188743591, 586843.7861474975943565368652 4500270.3302134787663817405701, 586857.9475235254503786563873 4500244.4056084547191858291626)))
----

geometry name=troubled-poly2
MULTIPOLYGON (((592585.8247029320336878299713 4527600.0504941008985042572021, 592570.350101865711621940136 4527506.2746569896116852760315, 592565.788726658443920314312 4527515.0605620192363858222961, 592559.4958810925018042325974 4527523.4817722812294960021973, 592551.4831399817485362291336 4527531.0544084021821618080139, 592541.9410741194151341915131 4527537.281961767934262752533, 592531.242556162993423640728 4527541.7387133436277508735657, 592519.9064861471997573971748 4527544.1516027571633458137512, 592508.5146641617175191640854 4527544.4512635143473744392395, 592497.6182677873875945806503 4527542.7740788338705897331238, 592487.654849782935343682766 4527539.4209095872938632965088, 592478.9087759252870455384254 4527534.7839743737131357192993, 592426.5560151999816298484802 4527507.3111610254272818565369, 592391.1302773362258449196815 4527487.8251397302374243736267, 592380.5234924985561519861221 4527483.903793333098292350769, 592380.5135518473107367753983 4527483.8996622655540704727173, 592380.503569008316844701767 4527483.8975952444598078727722, 592369.0481809278717264533043 4527481.7931765085086226463318, 592369.0362646455178037285805 4527481.7910315934568643569946, 592369.0252366602653637528419 4527481.7909055659547448158264, 592357.2036226189229637384415 4527481.7277858173474669456482, 592357.1816224402282387018204 4527481.7275343947112560272217, 592357.1595949504990130662918 4527481.7313001239672303199768, 592345.5120095876045525074005 4527483.7616681559011340141296, 592345.5029671189840883016586 4527483.7635735515505075454712, 592345.4939884119667112827301 4527483.7664096402004361152649, 592334.5448844350175932049751 4527487.7513697473332285881042, 592334.5358300651423633098602 4527487.7543165665119886398315, 592334.5267987564438953995705 4527487.760127955116331577301, 592324.7216157623333856463432 4527493.3917804230004549026489, 592327.3960505314171314239502 4527512.0222137765958905220032, 592331.7675609502475708723068 4527530.52607412729412317276, 592337.8227386228973045945168 4527548.6721113082021474838257, 592345.5072859587380662560463 4527566.2330158911645412445068, 592354.7286294148070737719536 4527582.9927399819716811180115, 592365.3550374577753245830536 4527598.7585767218843102455139, 592377.2264194176532328128815 4527613.3650593571364879608154, 592387.9781726722139865159988 4527629.3583310637623071670532, 592452.8652935600839555263519 4527675.0458535477519035339355, 592492.8839034214615821838379 4527688.4662118805572390556335, 592592.2261793565703555941582 4527693.3977307192981243133545, 592585.8247029320336878299713 4527600.0504941008985042572021)))
----

index-keys name=troubled-poly1
----
F0/L17/02213031322200022, F0/L18/022130313222001333, F0/L16/0221303132220020, F0/L16/0221303132220031
BoundingBox: lo_x:586773.905353 hi_x:586890.222521 lo_y:4500142.974460 hi_y:4500270.330213

index-keys name=troubled-poly2
----
F0/L16/0221303121021212, F0/L16/0221303121021221, F0/L16/0221303121312112, F0/L16/0221303121312121
BoundingBox: lo_x:592324.721616 hi_x:592592.226179 lo_y:4527481.727534 hi_y:4527693.397731

# Index tests for geometries with Z/M coordinates.

geometry name=3d-line-exceeds-bounds
LINESTRING Z (-1126040592.69383 164687857.663771 -4874040605.86647,-1096532142.92787 -5330670539.80611 7585243782.68975,9489439383.13689 6909804458.78381 8297630805.37724,-6339483118.5989 1323767903.77216 -7534611690.78481)
----

init minlevel=0 maxlevel=30 maxcells=4 minx=-2104533975 miny=-2104533975 maxx=2104533975 maxy=2104533975
----

index-keys name=3d-line-exceeds-bounds
----
F0/L2/00, F0/L3/030, F0/L3/031, F0/L4/1011, F0/L4/3330, F0/L7/3332011, F0/L5/33323, F0/L5/33331, spilled
BoundingBox: lo_x:-6339483118.598900 hi_x:9489439383.136890 lo_y:-5330670539.806110 hi_y:6909804458.783810
