@@ -1518,5 +1518,111 @@ def test_gh_99240_double_free(self):
1518
1518
ac_tester .gh_99240_double_free ('a' , '\0 b' )
1519
1519
1520
1520
1521
+ class PermutationTests (unittest .TestCase ):
1522
+ """Test permutation support functions."""
1523
+
1524
+ def test_permute_left_option_groups (self ):
1525
+ expected = (
1526
+ (),
1527
+ (3 ,),
1528
+ (2 , 3 ),
1529
+ (1 , 2 , 3 ),
1530
+ )
1531
+ data = list (zip ([1 , 2 , 3 ])) # Generate a list of 1-tuples.
1532
+ actual = tuple (clinic .permute_left_option_groups (data ))
1533
+ self .assertEqual (actual , expected )
1534
+
1535
+ def test_permute_right_option_groups (self ):
1536
+ expected = (
1537
+ (),
1538
+ (1 ,),
1539
+ (1 , 2 ),
1540
+ (1 , 2 , 3 ),
1541
+ )
1542
+ data = list (zip ([1 , 2 , 3 ])) # Generate a list of 1-tuples.
1543
+ actual = tuple (clinic .permute_right_option_groups (data ))
1544
+ self .assertEqual (actual , expected )
1545
+
1546
+ def test_permute_optional_groups (self ):
1547
+ empty = {
1548
+ "left" : (), "required" : (), "right" : (),
1549
+ "expected" : ((),),
1550
+ }
1551
+ noleft1 = {
1552
+ "left" : (), "required" : ("b" ,), "right" : ("c" ,),
1553
+ "expected" : (
1554
+ ("b" ,),
1555
+ ("b" , "c" ),
1556
+ ),
1557
+ }
1558
+ noleft2 = {
1559
+ "left" : (), "required" : ("b" , "c" ,), "right" : ("d" ,),
1560
+ "expected" : (
1561
+ ("b" , "c" ),
1562
+ ("b" , "c" , "d" ),
1563
+ ),
1564
+ }
1565
+ noleft3 = {
1566
+ "left" : (), "required" : ("b" , "c" ,), "right" : ("d" , "e" ),
1567
+ "expected" : (
1568
+ ("b" , "c" ),
1569
+ ("b" , "c" , "d" ),
1570
+ ("b" , "c" , "d" , "e" ),
1571
+ ),
1572
+ }
1573
+ noright1 = {
1574
+ "left" : ("a" ,), "required" : ("b" ,), "right" : (),
1575
+ "expected" : (
1576
+ ("b" ,),
1577
+ ("a" , "b" ),
1578
+ ),
1579
+ }
1580
+ noright2 = {
1581
+ "left" : ("a" ,), "required" : ("b" , "c" ), "right" : (),
1582
+ "expected" : (
1583
+ ("b" , "c" ),
1584
+ ("a" , "b" , "c" ),
1585
+ ),
1586
+ }
1587
+ noright3 = {
1588
+ "left" : ("a" , "b" ), "required" : ("c" ,), "right" : (),
1589
+ "expected" : (
1590
+ ("c" ,),
1591
+ ("b" , "c" ),
1592
+ ("a" , "b" , "c" ),
1593
+ ),
1594
+ }
1595
+ leftandright1 = {
1596
+ "left" : ("a" ,), "required" : ("b" ,), "right" : ("c" ,),
1597
+ "expected" : (
1598
+ ("b" ,),
1599
+ ("a" , "b" ), # Prefer left.
1600
+ ("a" , "b" , "c" ),
1601
+ ),
1602
+ }
1603
+ leftandright2 = {
1604
+ "left" : ("a" , "b" ), "required" : ("c" , "d" ), "right" : ("e" , "f" ),
1605
+ "expected" : (
1606
+ ("c" , "d" ),
1607
+ ("b" , "c" , "d" ), # Prefer left.
1608
+ ("a" , "b" , "c" , "d" ), # Prefer left.
1609
+ ("a" , "b" , "c" , "d" , "e" ),
1610
+ ("a" , "b" , "c" , "d" , "e" , "f" ),
1611
+ ),
1612
+ }
1613
+ dataset = (
1614
+ empty ,
1615
+ noleft1 , noleft2 , noleft3 ,
1616
+ noright1 , noright2 , noright3 ,
1617
+ leftandright1 , leftandright2 ,
1618
+ )
1619
+ for params in dataset :
1620
+ with self .subTest (** params ):
1621
+ left , required , right , expected = params .values ()
1622
+ permutations = clinic .permute_optional_groups (left , required , right )
1623
+ actual = tuple (permutations )
1624
+ self .assertEqual (actual , expected )
1625
+
1626
+
1521
1627
if __name__ == "__main__" :
1522
1628
unittest .main ()
0 commit comments