@@ -79,7 +79,7 @@ def test_illegal_assignment(self):
7979 compile ("{x: y for y, x in ((1, 2), (3, 4))} = 5" , "<test>" ,
8080 "exec" )
8181
82- with self .assertRaisesRegex (SyntaxError , "cannot assign " ):
82+ with self .assertRaisesRegex (SyntaxError , "illegal expression " ):
8383 compile ("{x: y for y, x in ((1, 2), (3, 4))} += 5" , "<test>" ,
8484 "exec" )
8585
@@ -113,5 +113,22 @@ def add_call(pos, value):
113113 self .assertEqual (actual , expected )
114114 self .assertEqual (actual_calls , expected_calls )
115115
116+ def test_assignment_idiom_in_comprehensions (self ):
117+ expected = {1 : 1 , 2 : 4 , 3 : 9 , 4 : 16 }
118+ actual = {j : j * j for i in range (4 ) for j in [i + 1 ]}
119+ self .assertEqual (actual , expected )
120+ expected = {3 : 2 , 5 : 6 , 7 : 12 , 9 : 20 }
121+ actual = {j + k : j * k for i in range (4 ) for j in [i + 1 ] for k in [j + 1 ]}
122+ self .assertEqual (actual , expected )
123+ expected = {3 : 2 , 5 : 6 , 7 : 12 , 9 : 20 }
124+ actual = {j + k : j * k for i in range (4 ) for j , k in [(i + 1 , i + 2 )]}
125+ self .assertEqual (actual , expected )
126+
127+ def test_star_expression (self ):
128+ expected = {0 : 0 , 1 : 1 , 2 : 4 , 3 : 9 }
129+ self .assertEqual ({i : i * i for i in [* range (4 )]}, expected )
130+ self .assertEqual ({i : i * i for i in (* range (4 ),)}, expected )
131+
132+
116133if __name__ == "__main__" :
117134 unittest .main ()
0 commit comments