# Tests for minkowskiSum3D function
# Format: testName|geometryA|geometryB|checkType|expectedResult|options
#
# checkType values:
#   covers3D  - verifies algorithm::covers3D(result, expectedResult) is true
#   empty     - verifies result->isEmpty() is true
#   not_empty - verifies result->isEmpty() is false and geometryTypeId matches expectedResult
#   type_only - only verifies geometryTypeId matches expectedResult
#
# options values:
#   nocheck   - use NoValidityCheck variant of minkowskiSum3D
#   (empty)   - use default minkowskiSum3D

# ============================================================================
# Test: Sphere + Polyline
# A sphere (radius 10, center origin, subdivision 1) with a 3D polyline
# ============================================================================
Sphere_Polyline|POLYHEDRALSURFACE Z (((-5.257311 8.506508 0.000000,-8.090170 5.000000 3.090170,-3.090170 8.090170 5.000000,-5.257311 8.506508 0.000000)),((-8.506508 0.000000 5.257311,-5.000000 3.090170 8.090170,-8.090170 5.000000 3.090170,-8.506508 0.000000 5.257311)),((0.000000 5.257311 8.506508,-3.090170 8.090170 5.000000,-5.000000 3.090170 8.090170,0.000000 5.257311 8.506508)),((-8.090170 5.000000 3.090170,-5.000000 3.090170 8.090170,-3.090170 8.090170 5.000000,-8.090170 5.000000 3.090170)),((-5.257311 8.506508 0.000000,-3.090170 8.090170 5.000000,0.000000 10.000000 0.000000,-5.257311 8.506508 0.000000)),((0.000000 5.257311 8.506508,3.090170 8.090170 5.000000,-3.090170 8.090170 5.000000,0.000000 5.257311 8.506508)),((5.257311 8.506508 0.000000,0.000000 10.000000 0.000000,3.090170 8.090170 5.000000,5.257311 8.506508 0.000000)),((-3.090170 8.090170 5.000000,3.090170 8.090170 5.000000,0.000000 10.000000 0.000000,-3.090170 8.090170 5.000000)),((-5.257311 8.506508 0.000000,0.000000 10.000000 0.000000,-3.090170 8.090170 -5.000000,-5.257311 8.506508 0.000000)),((5.257311 8.506508 0.000000,3.090170 8.090170 -5.000000,0.000000 10.000000 0.000000,5.257311 8.506508 0.000000)),((0.000000 5.257311 -8.506508,-3.090170 8.090170 -5.000000,3.090170 8.090170 -5.000000,0.000000 5.257311 -8.506508)),((0.000000 10.000000 0.000000,3.090170 8.090170 -5.000000,-3.090170 8.090170 -5.000000,0.000000 10.000000 0.000000)),((-5.257311 8.506508 0.000000,-3.090170 8.090170 -5.000000,-8.090170 5.000000 -3.090170,-5.257311 8.506508 0.000000)),((0.000000 5.257311 -8.506508,-5.000000 3.090170 -8.090170,-3.090170 8.090170 -5.000000,0.000000 5.257311 -8.506508)),((-8.506508 0.000000 -5.257311,-8.090170 5.000000 -3.090170,-5.000000 3.090170 -8.090170,-8.506508 0.000000 -5.257311)),((-3.090170 8.090170 -5.000000,-5.000000 3.090170 -8.090170,-8.090170 5.000000 -3.090170,-3.090170 8.090170 -5.000000)),((-5.257311 8.506508 0.000000,-8.090170 5.000000 -3.090170,-8.090170 5.000000 3.090170,-5.257311 8.506508 0.000000)),((-8.506508 0.000000 -5.257311,-10.000000 0.000000 0.000000,-8.090170 5.000000 -3.090170,-8.506508 0.000000 -5.257311)),((-8.506508 0.000000 5.257311,-8.090170 5.000000 3.090170,-10.000000 0.000000 0.000000,-8.506508 0.000000 5.257311)),((-8.090170 5.000000 -3.090170,-10.000000 0.000000 0.000000,-8.090170 5.000000 3.090170,-8.090170 5.000000 -3.090170)),((5.257311 8.506508 0.000000,3.090170 8.090170 5.000000,8.090170 5.000000 3.090170,5.257311 8.506508 0.000000)),((0.000000 5.257311 8.506508,5.000000 3.090170 8.090170,3.090170 8.090170 5.000000,0.000000 5.257311 8.506508)),((8.506508 0.000000 5.257311,8.090170 5.000000 3.090170,5.000000 3.090170 8.090170,8.506508 0.000000 5.257311)),((3.090170 8.090170 5.000000,5.000000 3.090170 8.090170,8.090170 5.000000 3.090170,3.090170 8.090170 5.000000)),((0.000000 5.257311 8.506508,-5.000000 3.090170 8.090170,0.000000 0.000000 10.000000,0.000000 5.257311 8.506508)),((-8.506508 0.000000 5.257311,-5.000000 -3.090170 8.090170,-5.000000 3.090170 8.090170,-8.506508 0.000000 5.257311)),((0.000000 -5.257311 8.506508,0.000000 0.000000 10.000000,-5.000000 -3.090170 8.090170,0.000000 -5.257311 8.506508)),((-5.000000 3.090170 8.090170,-5.000000 -3.090170 8.090170,0.000000 0.000000 10.000000,-5.000000 3.090170 8.090170)),((-8.506508 0.000000 5.257311,-10.000000 0.000000 0.000000,-8.090170 -5.000000 3.090170,-8.506508 0.000000 5.257311)),((-8.506508 0.000000 -5.257311,-8.090170 -5.000000 -3.090170,-10.000000 0.000000 0.000000,-8.506508 0.000000 -5.257311)),((-5.257311 -8.506508 0.000000,-8.090170 -5.000000 3.090170,-8.090170 -5.000000 -3.090170,-5.257311 -8.506508 0.000000)),((-10.000000 0.000000 0.000000,-8.090170 -5.000000 -3.090170,-8.090170 -5.000000 3.090170,-10.000000 0.000000 0.000000)),((-8.506508 0.000000 -5.257311,-5.000000 3.090170 -8.090170,-5.000000 -3.090170 -8.090170,-8.506508 0.000000 -5.257311)),((0.000000 5.257311 -8.506508,0.000000 0.000000 -10.000000,-5.000000 3.090170 -8.090170,0.000000 5.257311 -8.506508)),((0.000000 -5.257311 -8.506508,-5.000000 -3.090170 -8.090170,0.000000 0.000000 -10.000000,0.000000 -5.257311 -8.506508)),((-5.000000 3.090170 -8.090170,0.000000 0.000000 -10.000000,-5.000000 -3.090170 -8.090170,-5.000000 3.090170 -8.090170)),((0.000000 5.257311 -8.506508,3.090170 8.090170 -5.000000,5.000000 3.090170 -8.090170,0.000000 5.257311 -8.506508)),((5.257311 8.506508 0.000000,8.090170 5.000000 -3.090170,3.090170 8.090170 -5.000000,5.257311 8.506508 0.000000)),((8.506508 0.000000 -5.257311,5.000000 3.090170 -8.090170,8.090170 5.000000 -3.090170,8.506508 0.000000 -5.257311)),((3.090170 8.090170 -5.000000,8.090170 5.000000 -3.090170,5.000000 3.090170 -8.090170,3.090170 8.090170 -5.000000)),((5.257311 -8.506508 0.000000,8.090170 -5.000000 3.090170,3.090170 -8.090170 5.000000,5.257311 -8.506508 0.000000)),((8.506508 0.000000 5.257311,5.000000 -3.090170 8.090170,8.090170 -5.000000 3.090170,8.506508 0.000000 5.257311)),((0.000000 -5.257311 8.506508,3.090170 -8.090170 5.000000,5.000000 -3.090170 8.090170,0.000000 -5.257311 8.506508)),((8.090170 -5.000000 3.090170,5.000000 -3.090170 8.090170,3.090170 -8.090170 5.000000,8.090170 -5.000000 3.090170)),((5.257311 -8.506508 0.000000,3.090170 -8.090170 5.000000,0.000000 -10.000000 0.000000,5.257311 -8.506508 0.000000)),((0.000000 -5.257311 8.506508,-3.090170 -8.090170 5.000000,3.090170 -8.090170 5.000000,0.000000 -5.257311 8.506508)),((-5.257311 -8.506508 0.000000,0.000000 -10.000000 0.000000,-3.090170 -8.090170 5.000000,-5.257311 -8.506508 0.000000)),((3.090170 -8.090170 5.000000,-3.090170 -8.090170 5.000000,0.000000 -10.000000 0.000000,3.090170 -8.090170 5.000000)),((5.257311 -8.506508 0.000000,0.000000 -10.000000 0.000000,3.090170 -8.090170 -5.000000,5.257311 -8.506508 0.000000)),((-5.257311 -8.506508 0.000000,-3.090170 -8.090170 -5.000000,0.000000 -10.000000 0.000000,-5.257311 -8.506508 0.000000)),((0.000000 -5.257311 -8.506508,3.090170 -8.090170 -5.000000,-3.090170 -8.090170 -5.000000,0.000000 -5.257311 -8.506508)),((0.000000 -10.000000 0.000000,-3.090170 -8.090170 -5.000000,3.090170 -8.090170 -5.000000,0.000000 -10.000000 0.000000)),((5.257311 -8.506508 0.000000,3.090170 -8.090170 -5.000000,8.090170 -5.000000 -3.090170,5.257311 -8.506508 0.000000)),((0.000000 -5.257311 -8.506508,5.000000 -3.090170 -8.090170,3.090170 -8.090170 -5.000000,0.000000 -5.257311 -8.506508)),((8.506508 0.000000 -5.257311,8.090170 -5.000000 -3.090170,5.000000 -3.090170 -8.090170,8.506508 0.000000 -5.257311)),((3.090170 -8.090170 -5.000000,5.000000 -3.090170 -8.090170,8.090170 -5.000000 -3.090170,3.090170 -8.090170 -5.000000)),((5.257311 -8.506508 0.000000,8.090170 -5.000000 -3.090170,8.090170 -5.000000 3.090170,5.257311 -8.506508 0.000000)),((8.506508 0.000000 -5.257311,10.000000 0.000000 0.000000,8.090170 -5.000000 -3.090170,8.506508 0.000000 -5.257311)),((8.506508 0.000000 5.257311,8.090170 -5.000000 3.090170,10.000000 0.000000 0.000000,8.506508 0.000000 5.257311)),((8.090170 -5.000000 -3.090170,10.000000 0.000000 0.000000,8.090170 -5.000000 3.090170,8.090170 -5.000000 -3.090170)),((0.000000 -5.257311 8.506508,5.000000 -3.090170 8.090170,0.000000 0.000000 10.000000,0.000000 -5.257311 8.506508)),((8.506508 0.000000 5.257311,5.000000 3.090170 8.090170,5.000000 -3.090170 8.090170,8.506508 0.000000 5.257311)),((0.000000 5.257311 8.506508,0.000000 0.000000 10.000000,5.000000 3.090170 8.090170,0.000000 5.257311 8.506508)),((5.000000 -3.090170 8.090170,5.000000 3.090170 8.090170,0.000000 0.000000 10.000000,5.000000 -3.090170 8.090170)),((-5.257311 -8.506508 0.000000,-3.090170 -8.090170 5.000000,-8.090170 -5.000000 3.090170,-5.257311 -8.506508 0.000000)),((0.000000 -5.257311 8.506508,-5.000000 -3.090170 8.090170,-3.090170 -8.090170 5.000000,0.000000 -5.257311 8.506508)),((-8.506508 0.000000 5.257311,-8.090170 -5.000000 3.090170,-5.000000 -3.090170 8.090170,-8.506508 0.000000 5.257311)),((-3.090170 -8.090170 5.000000,-5.000000 -3.090170 8.090170,-8.090170 -5.000000 3.090170,-3.090170 -8.090170 5.000000)),((0.000000 -5.257311 -8.506508,-3.090170 -8.090170 -5.000000,-5.000000 -3.090170 -8.090170,0.000000 -5.257311 -8.506508)),((-5.257311 -8.506508 0.000000,-8.090170 -5.000000 -3.090170,-3.090170 -8.090170 -5.000000,-5.257311 -8.506508 0.000000)),((-8.506508 0.000000 -5.257311,-5.000000 -3.090170 -8.090170,-8.090170 -5.000000 -3.090170,-8.506508 0.000000 -5.257311)),((-3.090170 -8.090170 -5.000000,-8.090170 -5.000000 -3.090170,-5.000000 -3.090170 -8.090170,-3.090170 -8.090170 -5.000000)),((8.506508 0.000000 -5.257311,5.000000 -3.090170 -8.090170,5.000000 3.090170 -8.090170,8.506508 0.000000 -5.257311)),((0.000000 -5.257311 -8.506508,0.000000 0.000000 -10.000000,5.000000 -3.090170 -8.090170,0.000000 -5.257311 -8.506508)),((0.000000 5.257311 -8.506508,5.000000 3.090170 -8.090170,0.000000 0.000000 -10.000000,0.000000 5.257311 -8.506508)),((5.000000 -3.090170 -8.090170,0.000000 0.000000 -10.000000,5.000000 3.090170 -8.090170,5.000000 -3.090170 -8.090170)),((8.506508 0.000000 5.257311,10.000000 0.000000 0.000000,8.090170 5.000000 3.090170,8.506508 0.000000 5.257311)),((8.506508 0.000000 -5.257311,8.090170 5.000000 -3.090170,10.000000 0.000000 0.000000,8.506508 0.000000 -5.257311)),((5.257311 8.506508 0.000000,8.090170 5.000000 3.090170,8.090170 5.000000 -3.090170,5.257311 8.506508 0.000000)),((10.000000 0.000000 0.000000,8.090170 5.000000 -3.090170,8.090170 5.000000 3.090170,10.000000 0.000000 0.000000)))|LINESTRING Z (-100 0 0, 40 -70 0, 40 50 40, -90 -60 60, 0 0 -100, 30 0 150)|not_empty|TYPE_POLYHEDRALSURFACE|

# ============================================================================
# Test: Cube + Point
# A unit cube solid translated by point (5, 5, 5)
# ============================================================================
Cube_Point|SOLID ((((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 1, 0 1 1, 0 0 1, 1 0 1, 1 1 1)), ((1 1 1, 1 0 1, 1 0 0, 1 1 0, 1 1 1)), ((1 1 1, 1 1 0, 0 1 0, 0 1 1, 1 1 1))))|POINT Z (5 5 5)|covers3D|POLYHEDRALSURFACE Z (((5/1 6/1 6/1,5/1 6/1 5/1,5/1 5/1 6/1,5/1 6/1 6/1)),((5/1 5/1 6/1,5/1 6/1 5/1,5/1 5/1 5/1,5/1 5/1 6/1)),((6/1 5/1 5/1,6/1 5/1 6/1,5/1 5/1 6/1,6/1 5/1 5/1)),((5/1 5/1 5/1,6/1 5/1 5/1,5/1 5/1 6/1,5/1 5/1 5/1)),((5/1 5/1 5/1,5/1 6/1 5/1,6/1 5/1 5/1,5/1 5/1 5/1)),((6/1 5/1 5/1,5/1 6/1 5/1,6/1 6/1 5/1,6/1 5/1 5/1)),((6/1 5/1 6/1,6/1 6/1 6/1,5/1 6/1 6/1,6/1 5/1 6/1)),((5/1 5/1 6/1,6/1 5/1 6/1,5/1 6/1 6/1,5/1 5/1 6/1)),((5/1 6/1 5/1,5/1 6/1 6/1,6/1 6/1 5/1,5/1 6/1 5/1)),((6/1 6/1 5/1,5/1 6/1 6/1,6/1 6/1 6/1,6/1 6/1 5/1)),((6/1 5/1 6/1,6/1 5/1 5/1,6/1 6/1 5/1,6/1 5/1 6/1)),((6/1 6/1 6/1,6/1 5/1 6/1,6/1 6/1 5/1,6/1 6/1 6/1)))|

# ============================================================================
# Test: Empty geometries
# Two empty geometry collections should produce empty result
# ============================================================================
EmptyGeometries|GEOMETRYCOLLECTION EMPTY|GEOMETRYCOLLECTION EMPTY|empty|GEOMETRYCOLLECTION EMPTY|

# ============================================================================
# Test: Square + Polyline 2D
# 2D polygon + 2D polyline = degenerate 3D result (coplanar)
# ============================================================================
# Square_Polyline_2D|POLYGON ((0 0, 0 1, 1 1, 1 0, 0 0))|LINESTRING (0 0, 1 1, 2 0)|empty|TYPE_GEOMETRYCOLLECTION|

# ============================================================================
# Test: Cube + Polyline 3D
# 3D solid + 3D polyline should produce valid 3D result
# ============================================================================
Cube_Polyline_3D|SOLID ((((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 1, 0 1 1, 0 0 1, 1 0 1, 1 1 1)), ((1 1 1, 1 0 1, 1 0 0, 1 1 0, 1 1 1)), ((1 1 1, 1 1 0, 0 1 0, 0 1 1, 1 1 1))))|LINESTRING Z (0 0 0, 1 1 1, 2 0 0)|not_empty|TYPE_POLYHEDRALSURFACE|

# ============================================================================
# Test: WKT Cube + Point
# Cube translated by point (2, 2, 2)
# ============================================================================
WKT_Cube_Point|SOLID ((((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 1, 0 1 1, 0 0 1, 1 0 1, 1 1 1)), ((1 1 1, 1 0 1, 1 0 0, 1 1 0, 1 1 1)), ((1 1 1, 1 1 0, 0 1 0, 0 1 1, 1 1 1))))|POINT Z (2 2 2)|covers3D|POLYHEDRALSURFACE Z (((2/1 3/1 3/1,2/1 3/1 2/1,2/1 2/1 3/1,2/1 3/1 3/1)),((2/1 2/1 3/1,2/1 3/1 2/1,2/1 2/1 2/1,2/1 2/1 3/1)),((3/1 2/1 2/1,3/1 2/1 3/1,2/1 2/1 3/1,3/1 2/1 2/1)),((2/1 2/1 2/1,3/1 2/1 2/1,2/1 2/1 3/1,2/1 2/1 2/1)),((2/1 2/1 2/1,2/1 3/1 2/1,3/1 2/1 2/1,2/1 2/1 2/1)),((3/1 2/1 2/1,2/1 3/1 2/1,3/1 3/1 2/1,3/1 2/1 2/1)),((3/1 2/1 3/1,3/1 3/1 3/1,2/1 3/1 3/1,3/1 2/1 3/1)),((2/1 2/1 3/1,3/1 2/1 3/1,2/1 3/1 3/1,2/1 2/1 3/1)),((2/1 3/1 2/1,2/1 3/1 3/1,3/1 3/1 2/1,2/1 3/1 2/1)),((3/1 3/1 2/1,2/1 3/1 3/1,3/1 3/1 3/1,3/1 3/1 2/1)),((3/1 2/1 3/1,3/1 2/1 2/1,3/1 3/1 2/1,3/1 2/1 3/1)),((3/1 3/1 3/1,3/1 2/1 3/1,3/1 3/1 2/1,3/1 3/1 3/1)))|

# ============================================================================
# Test: Tetrahedron + Segment
# Tetrahedron swept along segment direction
# ============================================================================
WKT_Tetrahedron_Segment|SOLID ((((0 0 0, 1 0 0, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 0 0 1, 0 0 0)), ((0 0 0, 0 0 1, 1 0 0, 0 0 0)), ((1 0 0, 0 0 1, 0 1 0, 1 0 0))))|LINESTRING Z (0 0 0, 1 1 1)|covers3D|POLYHEDRALSURFACE Z (((0/1 0/1 0/1,1/1 0/1 0/1,0/1 0/1 1/1,0/1 0/1 0/1)),((0/1 0/1 0/1,0/1 0/1 1/1,0/1 1/1 0/1,0/1 0/1 0/1)),((1/1 1/1 2/1,1/1 2/1 1/1,0/1 0/1 1/1,1/1 1/1 2/1)),((0/1 0/1 1/1,1/1 2/1 1/1,0/1 1/1 0/1,0/1 0/1 1/1)),((0/1 0/1 1/1,1/1 0/1 0/1,2/1 1/1 1/1,0/1 0/1 1/1)),((1/1 1/1 2/1,0/1 0/1 1/1,2/1 1/1 1/1,1/1 1/1 2/1)),((0/1 0/1 0/1,0/1 1/1 0/1,1/1 0/1 0/1,0/1 0/1 0/1)),((1/1 2/1 1/1,2/1 1/1 1/1,0/1 1/1 0/1,1/1 2/1 1/1)),((0/1 1/1 0/1,2/1 1/1 1/1,1/1 0/1 0/1,0/1 1/1 0/1)),((1/1 1/1 2/1,2/1 1/1 1/1,1/1 2/1 1/1,1/1 1/1 2/1)))|

# ============================================================================
# Test: Point + Point
# Two points produce a singular vertex
# ============================================================================
Point_Point|POINT Z (1 2 3)|POINT Z (4 5 6)|type_only|TYPE_POINT|

# ============================================================================
# Test: Polygon with hole
# 2D polygon with hole + point produces result
# ============================================================================
Polygon_With_Hole|POLYGON Z ((0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0), (2 2 0, 2 8 0, 8 8 0, 8 2 0, 2 2 0))|POINT Z (0 0 1)|type_only|TYPE_POLYGON|

# ============================================================================
# Test: MultiPoint + Solid
# Union of cube at each multipoint location
# ============================================================================
MultiPoint_Solid|SOLID ((((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 1, 0 1 1, 0 0 1, 1 0 1, 1 1 1)), ((1 1 1, 1 0 1, 1 0 0, 1 1 0, 1 1 1)), ((1 1 1, 1 1 0, 0 1 0, 0 1 1, 1 1 1))))|MULTIPOINT Z (0 0 0, 5 5 5)|not_empty|TYPE_POLYHEDRALSURFACE|

# ============================================================================
# Test: Triangle + LineString
# Triangle swept along Z axis produces prism shape
# ============================================================================
Triangle_LineString|TRIANGLE Z ((0 0 0, 1 0 0, 0.5 1 0, 0 0 0))|LINESTRING Z (0 0 0, 0 0 1)|not_empty|TYPE_POLYHEDRALSURFACE|

# ============================================================================
# Test: NoValidityCheck variant
# Cube + Point with NoValidityCheck option
# ============================================================================
NoValidityCheck|SOLID ((((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 1, 0 1 1, 0 0 1, 1 0 1, 1 1 1)), ((1 1 1, 1 0 1, 1 0 0, 1 1 0, 1 1 1)), ((1 1 1, 1 1 0, 0 1 0, 0 1 1, 1 1 1))))|POINT Z (1 1 1)|not_empty|TYPE_SOLID|nocheck

# ============================================================================
# Test: MultiLineString
# Cube + MultiLineString
# ============================================================================
MultiLineString|SOLID ((((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 1, 0 1 1, 0 0 1, 1 0 1, 1 1 1)), ((1 1 1, 1 0 1, 1 0 0, 1 1 0, 1 1 1)), ((1 1 1, 1 1 0, 0 1 0, 0 1 1, 1 1 1))))|MULTILINESTRING Z ((0 0 0, 1 0 0))|not_empty|TYPE_POLYHEDRALSURFACE|

# ============================================================================
# Test: TriangulatedSurface + Point
# Tetrahedron surface + point translation
# ============================================================================
TriangulatedSurface_Point|TIN Z (((0 0 0, 0 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 0 0 1, 0 0 0)), ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((1 0 0, 0 1 0, 0 0 1, 1 0 0)))|POINT Z (2 2 2)|not_empty|TYPE_TRIANGULATEDSURFACE|

# ============================================================================
# Test: NURBS Curve + Solid
# NURBS curve swept along solid should produce non-empty result
# ============================================================================
NURBSCurve_Solid|NURBSCURVE Z (1, (0 0 0, 1 0 1))|SOLID ((((0 0 0, 1 0 0, 1 1 0, 0 1 0, 0 0 0)), ((0 0 0, 0 0 1, 1 0 1, 1 0 0, 0 0 0)), ((0 0 0, 0 1 0, 0 1 1, 0 0 1, 0 0 0)), ((1 1 1, 1 0 1, 0 0 1, 0 1 1, 1 1 1)), ((1 1 1, 0 1 1, 0 1 0, 1 1 0, 1 1 1)), ((1 1 1, 1 1 0, 1 0 0, 1 0 1, 1 1 1))))|not_empty|TYPE_POLYHEDRALSURFACE|

# ============================================================================
# Test: Two LineStrings (both dimension < 2)
# Minkowski sum of two 1D geometries is empty in 3D (no Gaussian map)
# ============================================================================
TwoLineStrings|LINESTRING Z (0 0 0, 1 0 0)|LINESTRING Z (2 0 0, 3 0 0)|empty|TYPE_GEOMETRYCOLLECTION|

# ============================================================================
# Test: Empty TIN + Point
# Empty triangulated surface should produce empty result
# ============================================================================
EmptyTIN|TIN EMPTY|POINT Z (0 0 0)|empty|TYPE_GEOMETRYCOLLECTION|

# ============================================================================
# Test: Solid with interior shell + Point
# Solid with void translated by point
# ============================================================================
SolidInteriorShell|SOLID Z ((((0 0 0, 0 10 0, 10 10 0, 10 0 0, 0 0 0)),((0 0 0, 0 0 10, 0 10 10, 0 10 0, 0 0 0)),((0 0 0, 10 0 0, 10 0 10, 0 0 10, 0 0 0)),((10 10 10, 0 10 10, 0 0 10, 10 0 10, 10 10 10)),((10 10 10, 10 0 10, 10 0 0, 10 10 0, 10 10 10)),((10 10 10, 10 10 0, 0 10 0, 0 10 10, 10 10 10))),(((2 2 2, 8 2 2, 8 8 2, 2 8 2, 2 2 2)),((2 2 2, 2 2 8, 8 2 8, 8 2 2, 2 2 2)),((2 2 2, 2 8 2, 2 8 8, 2 2 8, 2 2 2)),((8 8 8, 2 8 8, 2 2 8, 8 2 8, 8 8 8)),((8 8 8, 8 2 8, 8 2 2, 8 8 2, 8 8 8)),((8 8 8, 8 8 2, 2 8 2, 2 8 8, 8 8 8))))|POINT Z (1 1 1)|not_empty|TYPE_SOLID|nocheck
