@@ -76,14 +76,6 @@ def test_triangulation_raises_exception_for_1d_list():
7676 with pytest .raises (TypeError ):
7777 Triangulation (pts )
7878
79-
80- def test_triangulation_supports_1d_points ():
81- pts = [(0 ,), (1 ,)]
82- t = Triangulation (pts )
83- assert t .simplices == {(0 , 1 )}
84- assert t .hull == {0 , 1 }
85-
86-
8779@with_dimension_incl_1d
8880def test_triangulation_of_standard_simplex (dim ):
8981 t = Triangulation (_make_standard_simplex (dim ))
@@ -336,61 +328,44 @@ def test_initialisation_accepts_more_than_one_simplex(dim):
336328# ---- 1D-specific triangulation tests ----
337329
338330
339- def test_1d_triangulation_basic ():
340- """Test basic 1D triangulation with two points."""
341- t = Triangulation ([(0.0 ,), (1.0 ,)])
342- assert t .simplices == {(0 , 1 )}
343- assert t .hull == {0 , 1 }
344- assert t .volume ((0 , 1 )) == 1.0
345- _check_triangulation_is_valid (t )
346-
347-
348- def test_1d_triangulation_multiple_points ():
349- """Test 1D triangulation with multiple initial points."""
350- pts = [(0.0 ,), (0.5 ,), (1.0 ,)]
351- t = Triangulation (pts )
352- # Points 0=(0.0,), 1=(0.5,), 2=(1.0,) → sorted: 0, 1, 2
353- assert len (t .simplices ) == 2
354- assert t .hull == {0 , 2 } # endpoints
355- _check_triangulation_is_valid (t )
356- assert np .isclose (sum (t .volumes ()), 1.0 )
357-
358-
359- def test_1d_triangulation_unsorted_points ():
360- """Test that 1D triangulation handles unsorted initial points."""
361- pts = [(1.0 ,), (0.0 ,), (0.5 ,)]
362- t = Triangulation (pts )
363- assert len (t .simplices ) == 2
331+ @pytest .mark .parametrize (
332+ ("points" , "expected_simplices" , "expected_hull" , "expected_total_volume" ),
333+ [
334+ ([(0.0 ,), (1.0 ,)], {(0 , 1 )}, {0 , 1 }, 1.0 ),
335+ ([(0.0 ,), (0.5 ,), (1.0 ,)], {(0 , 1 ), (1 , 2 )}, {0 , 2 }, 1.0 ),
336+ ([(1.0 ,), (0.0 ,), (0.5 ,)], {(0 , 2 ), (1 , 2 )}, {0 , 1 }, 1.0 ),
337+ ],
338+ ids = ["two-points" , "sorted" , "unsorted" ],
339+ )
340+ def test_1d_triangulation_initialisation (
341+ points , expected_simplices , expected_hull , expected_total_volume
342+ ):
343+ t = Triangulation (points )
344+
345+ assert t .simplices == expected_simplices
346+ assert t .hull == expected_hull
364347 _check_triangulation_is_valid (t )
365- assert np .isclose (sum (t .volumes ()), 1.0 )
366-
367-
368- def test_1d_add_point_inside ():
369- """Test adding a point inside a 1D interval."""
370- t = Triangulation ([(0.0 ,), (1.0 ,)])
371- _add_point_with_check (t , (0.5 ,))
372- assert len (t .simplices ) == 2
373- assert t .hull == {0 , 1 } # original endpoints are still hull
374- _check_triangulation_is_valid (t )
375- assert np .isclose (sum (t .volumes ()), 1.0 )
376-
377-
378- def test_1d_add_point_outside_right ():
379- """Test adding a point to the right of a 1D triangulation."""
348+ assert np .isclose (sum (t .volumes ()), expected_total_volume )
349+
350+
351+ @pytest .mark .parametrize (
352+ ("point" , "expected_simplices" , "expected_hull" , "expected_total_volume" ),
353+ [
354+ ((0.5 ,), {(0 , 2 ), (1 , 2 )}, {0 , 1 }, 1.0 ),
355+ ((2.0 ,), {(0 , 1 ), (1 , 2 )}, {0 , 2 }, 2.0 ),
356+ ((- 1.0 ,), {(0 , 1 ), (0 , 2 )}, {1 , 2 }, 2.0 ),
357+ ],
358+ ids = ["inside" , "outside-right" , "outside-left" ],
359+ )
360+ def test_1d_add_point (point , expected_simplices , expected_hull , expected_total_volume ):
380361 t = Triangulation ([(0.0 ,), (1.0 ,)])
381- _add_point_with_check (t , (2.0 ,))
382- assert t .simplices == {(0 , 1 ), (1 , 2 )}
383- assert t .hull == {0 , 2 }
384- _check_triangulation_is_valid (t )
385362
363+ _add_point_with_check (t , point )
386364
387- def test_1d_add_point_outside_left ():
388- """Test adding a point to the left of a 1D triangulation."""
389- t = Triangulation ([(0.0 ,), (1.0 ,)])
390- _add_point_with_check (t , (- 1.0 ,))
391- assert t .simplices == {(0 , 1 ), (0 , 2 )}
392- assert t .hull == {1 , 2 }
365+ assert t .simplices == expected_simplices
366+ assert t .hull == expected_hull
393367 _check_triangulation_is_valid (t )
368+ assert np .isclose (sum (t .volumes ()), expected_total_volume )
394369
395370
396371def test_1d_locate_point ():
@@ -407,18 +382,23 @@ def test_1d_locate_point():
407382 assert simplex == ()
408383
409384
410- def test_1d_duplicate_coordinates_skipped ():
385+ @pytest .mark .parametrize (
386+ ("points" , "expected_simplices" ),
387+ [
388+ ([(0.0 ,), (1.0 ,), (1.0 ,)], {(0 , 1 )}),
389+ ([(0.0 ,), (0.0 ,), (0.5 ,), (1.0 ,), (1.0 ,)], None ),
390+ ],
391+ ids = ["single-duplicate" , "multiple-duplicates" ],
392+ )
393+ def test_1d_duplicate_coordinates_skipped (points , expected_simplices ):
411394 """Test that duplicate 1D coordinates don't create degenerate simplices."""
412- t = Triangulation ([(0.0 ,), (1.0 ,), (1.0 ,)])
413- # The duplicate (1.0,) should be skipped, leaving only one simplex
414- assert t .simplices == {(0 , 1 )}
395+ t = Triangulation (points )
396+
397+ if expected_simplices is not None :
398+ assert t .simplices == expected_simplices
415399 assert all (v > 0 for v in t .volumes ())
416400 _check_triangulation_is_valid (t )
417-
418- # Multiple duplicates
419- t2 = Triangulation ([(0.0 ,), (0.0 ,), (0.5 ,), (1.0 ,), (1.0 ,)])
420- assert all (v > 0 for v in t2 .volumes ())
421- _check_triangulation_is_valid (t2 )
401+ assert np .isclose (sum (t .volumes ()), 1.0 )
422402
423403
424404def test_1d_opposing_vertices ():
0 commit comments