@@ -493,6 +493,35 @@ def test_range_iterators(self):
493493 test_id = "reversed(range({}, {}, {}))" .format (start , end , step )
494494 self .assert_iterators_equal (iter1 , iter2 , test_id , limit = 100 )
495495
496+ @test .support .cpython_only
497+ def test_range_iterator_invocation (self ):
498+ import _testcapi
499+ rangeiter_type = type (iter (range (0 )))
500+
501+ # rangeiter_new doesn't take keyword arguments
502+ with self .assertRaises (TypeError ):
503+ rangeiter_type (a = 1 )
504+
505+ # rangeiter_new takes exactly 3 arguments
506+ self .assertRaises (TypeError , rangeiter_type )
507+ self .assertRaises (TypeError , rangeiter_type , 1 )
508+ self .assertRaises (TypeError , rangeiter_type , 1 , 1 )
509+ self .assertRaises (TypeError , rangeiter_type , 1 , 1 , 1 , 1 )
510+
511+ # start, stop and stop must fit in C long
512+ for good_val in [_testcapi .LONG_MAX , _testcapi .LONG_MIN ]:
513+ rangeiter_type (good_val , good_val , good_val )
514+ for bad_val in [_testcapi .LONG_MAX + 1 , _testcapi .LONG_MIN - 1 ]:
515+ self .assertRaises (OverflowError ,
516+ rangeiter_type , bad_val , 1 , 1 )
517+ self .assertRaises (OverflowError ,
518+ rangeiter_type , 1 , bad_val , 1 )
519+ self .assertRaises (OverflowError ,
520+ rangeiter_type , 1 , 1 , bad_val )
521+
522+ # step mustn't be zero
523+ self .assertRaises (ValueError , rangeiter_type , 1 , 1 , 0 )
524+
496525 def test_slice (self ):
497526 def check (start , stop , step = None ):
498527 i = slice (start , stop , step )
0 commit comments