14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test import test_support 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport textwrap 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass ComplexArgsTestCase(unittest.TestCase): 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def check(self, func, expected, *args): 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertEqual(func(*args), expected) 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # These functions are tested below as lambdas too. If you add a 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # function test, also add a similar lambda test. 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Functions are wrapped in "exec" statements in order to 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # silence Py3k warnings. 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_func_parens_no_unpacking(self): 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec textwrap.dedent(""" 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f(((((x))))): return x 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, 1, 1) 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Inner parens are elided, same as: f(x,) 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f(((x)),): return x 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, 2, 2) 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """) 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_func_1(self): 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec textwrap.dedent(""" 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f(((((x),)))): return x 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, 3, (3,)) 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f(((((x)),))): return x 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, 4, (4,)) 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f(((((x))),)): return x 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, 5, (5,)) 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f(((x),)): return x 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, 6, (6,)) 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """) 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_func_2(self): 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec textwrap.dedent(""" 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f(((((x)),),)): return x 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, 2, ((2,),)) 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """) 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_func_3(self): 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec textwrap.dedent(""" 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f((((((x)),),),)): return x 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, 3, (((3,),),)) 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """) 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_func_complex(self): 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec textwrap.dedent(""" 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f((((((x)),),),), a, b, c): return x, a, b, c 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7) 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f(((((((x)),)),),), a, b, c): return x, a, b, c 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7) 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def f(a, b, c, ((((((x)),)),),)): return a, b, c, x 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, (9, 8, 7, 3), 9, 8, 7, (((3,),),)) 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """) 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Duplicate the tests above, but for lambda. If you add a lambda test, 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # also add a similar function test above. 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_lambda_parens_no_unpacking(self): 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec textwrap.dedent(""" 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f = lambda (((((x))))): x 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, 1, 1) 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # Inner parens are elided, same as: f(x,) 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f = lambda ((x)),: x 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, 2, 2) 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """) 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_lambda_1(self): 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec textwrap.dedent(""" 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f = lambda (((((x),)))): x 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, 3, (3,)) 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f = lambda (((((x)),))): x 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, 4, (4,)) 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f = lambda (((((x))),)): x 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, 5, (5,)) 824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f = lambda (((x),)): x 834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, 6, (6,)) 844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """) 854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_lambda_2(self): 874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec textwrap.dedent(""" 884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f = lambda (((((x)),),)): x 894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, 2, ((2,),)) 904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """) 914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_lambda_3(self): 934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec textwrap.dedent(""" 944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f = lambda ((((((x)),),),)): x 954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, 3, (((3,),),)) 964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """) 974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_lambda_complex(self): 994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm exec textwrap.dedent(""" 1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f = lambda (((((x)),),),), a, b, c: (x, a, b, c) 1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7) 1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f = lambda ((((((x)),)),),), a, b, c: (x, a, b, c) 1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, (3, 9, 8, 7), (((3,),),), 9, 8, 7) 1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm f = lambda a, b, c, ((((((x)),)),),): (a, b, c, x) 1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.check(f, (9, 8, 7, 3), 9, 8, 7, (((3,),),)) 1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """) 1094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_main(): 1124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm with test_support.check_py3k_warnings( 1134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ("tuple parameter unpacking has been removed", SyntaxWarning), 1144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm ("parenthesized argument names are invalid", SyntaxWarning)): 1154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_support.run_unittest(ComplexArgsTestCase) 1164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == "__main__": 1184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_main() 119