@@ -284,6 +284,78 @@ def f():
284284 f1 , f2 = f ()
285285 self .assertNotEqual (id (f1 .func_code ), id (f2 .func_code ))
286286
287+ def test_subscripts (self ):
288+ # SF bug 1448804
289+ # Class to make testing subscript results easy
290+ class str_map (object ):
291+ def __init__ (self ):
292+ self .data = {}
293+ def __getitem__ (self , key ):
294+ return self .data [str (key )]
295+ def __setitem__ (self , key , value ):
296+ self .data [str (key )] = value
297+ def __delitem__ (self , key ):
298+ del self .data [str (key )]
299+ def __contains__ (self , key ):
300+ return str (key ) in self .data
301+ d = str_map ()
302+ # Index
303+ d [1 ] = 1
304+ self .assertEqual (d [1 ], 1 )
305+ d [1 ] += 1
306+ self .assertEqual (d [1 ], 2 )
307+ del d [1 ]
308+ self .assertEqual (1 in d , False )
309+ # Tuple of indices
310+ d [1 , 1 ] = 1
311+ self .assertEqual (d [1 , 1 ], 1 )
312+ d [1 , 1 ] += 1
313+ self .assertEqual (d [1 , 1 ], 2 )
314+ del d [1 , 1 ]
315+ self .assertEqual ((1 , 1 ) in d , False )
316+ # Simple slice
317+ d [1 :2 ] = 1
318+ self .assertEqual (d [1 :2 ], 1 )
319+ d [1 :2 ] += 1
320+ self .assertEqual (d [1 :2 ], 2 )
321+ del d [1 :2 ]
322+ self .assertEqual (slice (1 , 2 ) in d , False )
323+ # Tuple of simple slices
324+ d [1 :2 , 1 :2 ] = 1
325+ self .assertEqual (d [1 :2 , 1 :2 ], 1 )
326+ d [1 :2 , 1 :2 ] += 1
327+ self .assertEqual (d [1 :2 , 1 :2 ], 2 )
328+ del d [1 :2 , 1 :2 ]
329+ self .assertEqual ((slice (1 , 2 ), slice (1 , 2 )) in d , False )
330+ # Extended slice
331+ d [1 :2 :3 ] = 1
332+ self .assertEqual (d [1 :2 :3 ], 1 )
333+ d [1 :2 :3 ] += 1
334+ self .assertEqual (d [1 :2 :3 ], 2 )
335+ del d [1 :2 :3 ]
336+ self .assertEqual (slice (1 , 2 , 3 ) in d , False )
337+ # Tuple of extended slices
338+ d [1 :2 :3 , 1 :2 :3 ] = 1
339+ self .assertEqual (d [1 :2 :3 , 1 :2 :3 ], 1 )
340+ d [1 :2 :3 , 1 :2 :3 ] += 1
341+ self .assertEqual (d [1 :2 :3 , 1 :2 :3 ], 2 )
342+ del d [1 :2 :3 , 1 :2 :3 ]
343+ self .assertEqual ((slice (1 , 2 , 3 ), slice (1 , 2 , 3 )) in d , False )
344+ # Ellipsis
345+ d [...] = 1
346+ self .assertEqual (d [...], 1 )
347+ d [...] += 1
348+ self .assertEqual (d [...], 2 )
349+ del d [...]
350+ self .assertEqual (Ellipsis in d , False )
351+ # Tuple of Ellipses
352+ d [..., ...] = 1
353+ self .assertEqual (d [..., ...], 1 )
354+ d [..., ...] += 1
355+ self .assertEqual (d [..., ...], 2 )
356+ del d [..., ...]
357+ self .assertEqual ((Ellipsis , Ellipsis ) in d , False )
358+
287359def test_main ():
288360 test_support .run_unittest (TestSpecifics )
289361
0 commit comments