@@ -263,6 +263,31 @@ def test_gauss(self):
263
263
self .assertEqual (x1 , x2 )
264
264
self .assertEqual (y1 , y2 )
265
265
266
+ def test_getrandbits (self ):
267
+ # Verify ranges
268
+ for k in range (1 , 1000 ):
269
+ self .assertTrue (0 <= self .gen .getrandbits (k ) < 2 ** k )
270
+ self .assertEqual (self .gen .getrandbits (0 ), 0 )
271
+
272
+ # Verify all bits active
273
+ getbits = self .gen .getrandbits
274
+ for span in [1 , 2 , 3 , 4 , 31 , 32 , 32 , 52 , 53 , 54 , 119 , 127 , 128 , 129 ]:
275
+ all_bits = 2 ** span - 1
276
+ cum = 0
277
+ cpl_cum = 0
278
+ for i in range (100 ):
279
+ v = getbits (span )
280
+ cum |= v
281
+ cpl_cum |= all_bits ^ v
282
+ self .assertEqual (cum , all_bits )
283
+ self .assertEqual (cpl_cum , all_bits )
284
+
285
+ # Verify argument checking
286
+ self .assertRaises (TypeError , self .gen .getrandbits )
287
+ self .assertRaises (TypeError , self .gen .getrandbits , 1 , 2 )
288
+ self .assertRaises (ValueError , self .gen .getrandbits , - 1 )
289
+ self .assertRaises (TypeError , self .gen .getrandbits , 10.1 )
290
+
266
291
def test_pickling (self ):
267
292
for proto in range (pickle .HIGHEST_PROTOCOL + 1 ):
268
293
state = pickle .dumps (self .gen , proto )
@@ -390,26 +415,6 @@ def test_randrange_errors(self):
390
415
raises (0 , 42 , 0 )
391
416
raises (0 , 42 , 3.14159 )
392
417
393
- def test_genrandbits (self ):
394
- # Verify ranges
395
- for k in range (1 , 1000 ):
396
- self .assertTrue (0 <= self .gen .getrandbits (k ) < 2 ** k )
397
-
398
- # Verify all bits active
399
- getbits = self .gen .getrandbits
400
- for span in [1 , 2 , 3 , 4 , 31 , 32 , 32 , 52 , 53 , 54 , 119 , 127 , 128 , 129 ]:
401
- cum = 0
402
- for i in range (100 ):
403
- cum |= getbits (span )
404
- self .assertEqual (cum , 2 ** span - 1 )
405
-
406
- # Verify argument checking
407
- self .assertRaises (TypeError , self .gen .getrandbits )
408
- self .assertRaises (TypeError , self .gen .getrandbits , 1 , 2 )
409
- self .assertRaises (ValueError , self .gen .getrandbits , 0 )
410
- self .assertRaises (ValueError , self .gen .getrandbits , - 1 )
411
- self .assertRaises (TypeError , self .gen .getrandbits , 10.1 )
412
-
413
418
def test_randbelow_logic (self , _log = log , int = int ):
414
419
# check bitcount transition points: 2**i and 2**(i+1)-1
415
420
# show that: k = int(1.001 + _log(n, 2))
@@ -629,34 +634,18 @@ def test_rangelimits(self):
629
634
self .assertEqual (set (range (start ,stop )),
630
635
set ([self .gen .randrange (start ,stop ) for i in range (100 )]))
631
636
632
- def test_genrandbits (self ):
637
+ def test_getrandbits (self ):
638
+ super ().test_getrandbits ()
639
+
633
640
# Verify cross-platform repeatability
634
641
self .gen .seed (1234567 )
635
642
self .assertEqual (self .gen .getrandbits (100 ),
636
643
97904845777343510404718956115 )
637
- # Verify ranges
638
- for k in range (1 , 1000 ):
639
- self .assertTrue (0 <= self .gen .getrandbits (k ) < 2 ** k )
640
-
641
- # Verify all bits active
642
- getbits = self .gen .getrandbits
643
- for span in [1 , 2 , 3 , 4 , 31 , 32 , 32 , 52 , 53 , 54 , 119 , 127 , 128 , 129 ]:
644
- cum = 0
645
- for i in range (100 ):
646
- cum |= getbits (span )
647
- self .assertEqual (cum , 2 ** span - 1 )
648
-
649
- # Verify argument checking
650
- self .assertRaises (TypeError , self .gen .getrandbits )
651
- self .assertRaises (TypeError , self .gen .getrandbits , 'a' )
652
- self .assertRaises (TypeError , self .gen .getrandbits , 1 , 2 )
653
- self .assertRaises (ValueError , self .gen .getrandbits , 0 )
654
- self .assertRaises (ValueError , self .gen .getrandbits , - 1 )
655
644
656
645
def test_randrange_uses_getrandbits (self ):
657
646
# Verify use of getrandbits by randrange
658
647
# Use same seed as in the cross-platform repeatability test
659
- # in test_genrandbits above.
648
+ # in test_getrandbits above.
660
649
self .gen .seed (1234567 )
661
650
# If randrange uses getrandbits, it should pick getrandbits(100)
662
651
# when called with a 100-bits stop argument.
0 commit comments