@@ -392,6 +392,8 @@ def test_getrandbits(self):
392392 self .assertRaises (TypeError , self .gen .getrandbits )
393393 self .assertRaises (TypeError , self .gen .getrandbits , 1 , 2 )
394394 self .assertRaises (ValueError , self .gen .getrandbits , - 1 )
395+ self .assertRaises (OverflowError , self .gen .getrandbits , 1 << 1000 )
396+ self .assertRaises (ValueError , self .gen .getrandbits , - 1 << 1000 )
395397 self .assertRaises (TypeError , self .gen .getrandbits , 10.1 )
396398
397399 def test_pickling (self ):
@@ -435,6 +437,8 @@ def test_randbytes(self):
435437 self .assertRaises (TypeError , self .gen .randbytes )
436438 self .assertRaises (TypeError , self .gen .randbytes , 1 , 2 )
437439 self .assertRaises (ValueError , self .gen .randbytes , - 1 )
440+ self .assertRaises (OverflowError , self .gen .randbytes , 1 << 1000 )
441+ self .assertRaises ((ValueError , OverflowError ), self .gen .randbytes , - 1 << 1000 )
438442 self .assertRaises (TypeError , self .gen .randbytes , 1.0 )
439443
440444 def test_mu_sigma_default_args (self ):
@@ -806,6 +810,22 @@ def test_getrandbits(self):
806810 self .assertEqual (self .gen .getrandbits (100 ),
807811 97904845777343510404718956115 )
808812
813+ def test_getrandbits_2G_bits (self ):
814+ size = 2 ** 31
815+ self .gen .seed (1234567 )
816+ x = self .gen .getrandbits (size )
817+ self .assertEqual (x .bit_length (), size )
818+ self .assertEqual (x & (2 ** 100 - 1 ), 890186470919986886340158459475 )
819+ self .assertEqual (x >> (size - 100 ), 1226514312032729439655761284440 )
820+
821+ @support .bigmemtest (size = 2 ** 32 , memuse = 1 / 8 + 2 / 15 , dry_run = False )
822+ def test_getrandbits_4G_bits (self , size ):
823+ self .gen .seed (1234568 )
824+ x = self .gen .getrandbits (size )
825+ self .assertEqual (x .bit_length (), size )
826+ self .assertEqual (x & (2 ** 100 - 1 ), 287241425661104632871036099814 )
827+ self .assertEqual (x >> (size - 100 ), 739728759900339699429794460738 )
828+
809829 def test_randrange_uses_getrandbits (self ):
810830 # Verify use of getrandbits by randrange
811831 # Use same seed as in the cross-platform repeatability test
@@ -962,6 +982,14 @@ def test_randbytes_getrandbits(self):
962982 self .assertEqual (self .gen .randbytes (n ),
963983 gen2 .getrandbits (n * 8 ).to_bytes (n , 'little' ))
964984
985+ @support .bigmemtest (size = 2 ** 29 , memuse = 1 + 16 / 15 , dry_run = False )
986+ def test_randbytes_256M (self , size ):
987+ self .gen .seed (2849427419 )
988+ x = self .gen .randbytes (size )
989+ self .assertEqual (len (x ), size )
990+ self .assertEqual (x [:12 ].hex (), 'f6fd9ae63855ab91ea238b4f' )
991+ self .assertEqual (x [- 12 :].hex (), '0e7af69a84ee99bf4a11becc' )
992+
965993 def test_sample_counts_equivalence (self ):
966994 # Test the documented strong equivalence to a sample with repeated elements.
967995 # We run this test on random.Random() which makes deterministic selections
0 commit comments