@@ -415,6 +415,86 @@ class SubDict(dict):
415
415
self .assertTrue (_testcapi .mapping_has_key (dct2 , 'a' ))
416
416
self .assertFalse (_testcapi .mapping_has_key (dct2 , 'b' ))
417
417
418
+ def test_sequence_set_slice (self ):
419
+ # Correct case:
420
+ data = [1 , 2 , 3 , 4 , 5 ]
421
+ data_copy = data .copy ()
422
+
423
+ _testcapi .sequence_set_slice (data , 1 , 3 , [8 , 9 ])
424
+ data_copy [1 :3 ] = [8 , 9 ]
425
+ self .assertEqual (data , data_copy )
426
+ self .assertEqual (data , [1 , 8 , 9 , 4 , 5 ])
427
+
428
+ # Custom class:
429
+ class Custom :
430
+ def __setitem__ (self , index , value ):
431
+ self .index = index
432
+ self .value = value
433
+
434
+ c = Custom ()
435
+ _testcapi .sequence_set_slice (c , 0 , 5 , 'abc' )
436
+ self .assertEqual (c .index , slice (0 , 5 ))
437
+ self .assertEqual (c .value , 'abc' )
438
+
439
+ # Immutable sequences must raise:
440
+ bad_seq1 = (1 , 2 , 3 , 4 )
441
+ with self .assertRaises (TypeError ):
442
+ _testcapi .sequence_set_slice (bad_seq1 , 1 , 3 , (8 , 9 ))
443
+ self .assertEqual (bad_seq1 , (1 , 2 , 3 , 4 ))
444
+
445
+ bad_seq2 = 'abcd'
446
+ with self .assertRaises (TypeError ):
447
+ _testcapi .sequence_set_slice (bad_seq2 , 1 , 3 , 'xy' )
448
+ self .assertEqual (bad_seq2 , 'abcd' )
449
+
450
+ # Not a sequence:
451
+ with self .assertRaises (TypeError ):
452
+ _testcapi .sequence_set_slice (None , 1 , 3 , 'xy' )
453
+
454
+ mapping = {1 : 'a' , 2 : 'b' , 3 : 'c' }
455
+ with self .assertRaises (TypeError ):
456
+ _testcapi .sequence_set_slice (mapping , 1 , 3 , 'xy' )
457
+ self .assertEqual (mapping , {1 : 'a' , 2 : 'b' , 3 : 'c' })
458
+
459
+ def test_sequence_del_slice (self ):
460
+ # Correct case:
461
+ data = [1 , 2 , 3 , 4 , 5 ]
462
+ data_copy = data .copy ()
463
+
464
+ _testcapi .sequence_del_slice (data , 1 , 3 )
465
+ del data_copy [1 :3 ]
466
+ self .assertEqual (data , data_copy )
467
+ self .assertEqual (data , [1 , 4 , 5 ])
468
+
469
+ # Custom class:
470
+ class Custom :
471
+ def __delitem__ (self , index ):
472
+ self .index = index
473
+
474
+ c = Custom ()
475
+ _testcapi .sequence_del_slice (c , 0 , 5 )
476
+ self .assertEqual (c .index , slice (0 , 5 ))
477
+
478
+ # Immutable sequences must raise:
479
+ bad_seq1 = (1 , 2 , 3 , 4 )
480
+ with self .assertRaises (TypeError ):
481
+ _testcapi .sequence_del_slice (bad_seq1 , 1 , 3 )
482
+ self .assertEqual (bad_seq1 , (1 , 2 , 3 , 4 ))
483
+
484
+ bad_seq2 = 'abcd'
485
+ with self .assertRaises (TypeError ):
486
+ _testcapi .sequence_del_slice (bad_seq2 , 1 , 3 )
487
+ self .assertEqual (bad_seq2 , 'abcd' )
488
+
489
+ # Not a sequence:
490
+ with self .assertRaises (TypeError ):
491
+ _testcapi .sequence_del_slice (None , 1 , 3 )
492
+
493
+ mapping = {1 : 'a' , 2 : 'b' , 3 : 'c' }
494
+ with self .assertRaises (TypeError ):
495
+ _testcapi .sequence_del_slice (mapping , 1 , 3 )
496
+ self .assertEqual (mapping , {1 : 'a' , 2 : 'b' , 3 : 'c' })
497
+
418
498
@unittest .skipUnless (hasattr (_testcapi , 'negative_refcount' ),
419
499
'need _testcapi.negative_refcount' )
420
500
def test_negative_refcount (self ):
0 commit comments