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