@@ -473,6 +473,12 @@ def test_float_conversion(self):
473
473
self .check_float_conversion (value )
474
474
self .check_float_conversion (- value )
475
475
476
+ @support .requires_IEEE_754
477
+ @support .bigmemtest (2 ** 32 , memuse = 0.2 )
478
+ def test_float_conversion_huge_integer (self , size ):
479
+ v = 1 << size
480
+ self .assertRaises (OverflowError , float , v )
481
+
476
482
def test_float_overflow (self ):
477
483
for x in - 2.0 , - 1.0 , 0.0 , 1.0 , 2.0 :
478
484
self .assertEqual (float (int (x )), x )
@@ -614,6 +620,56 @@ def __lt__(self, other):
614
620
eq (x > y , Rcmp > 0 )
615
621
eq (x >= y , Rcmp >= 0 )
616
622
623
+ @support .requires_IEEE_754
624
+ @support .bigmemtest (2 ** 32 , memuse = 0.2 )
625
+ def test_mixed_compares_huge_integer (self , size ):
626
+ v = 1 << size
627
+ f = sys .float_info .max
628
+ self .assertIs (f == v , False )
629
+ self .assertIs (f != v , True )
630
+ self .assertIs (f < v , True )
631
+ self .assertIs (f <= v , True )
632
+ self .assertIs (f > v , False )
633
+ self .assertIs (f >= v , False )
634
+ f = float ('inf' )
635
+ self .assertIs (f == v , False )
636
+ self .assertIs (f != v , True )
637
+ self .assertIs (f < v , False )
638
+ self .assertIs (f <= v , False )
639
+ self .assertIs (f > v , True )
640
+ self .assertIs (f >= v , True )
641
+ f = float ('nan' )
642
+ self .assertIs (f == v , False )
643
+ self .assertIs (f != v , True )
644
+ self .assertIs (f < v , False )
645
+ self .assertIs (f <= v , False )
646
+ self .assertIs (f > v , False )
647
+ self .assertIs (f >= v , False )
648
+
649
+ del v
650
+ v = (- 1 ) << size
651
+ f = - sys .float_info .max
652
+ self .assertIs (f == v , False )
653
+ self .assertIs (f != v , True )
654
+ self .assertIs (f < v , False )
655
+ self .assertIs (f <= v , False )
656
+ self .assertIs (f > v , True )
657
+ self .assertIs (f >= v , True )
658
+ f = float ('-inf' )
659
+ self .assertIs (f == v , False )
660
+ self .assertIs (f != v , True )
661
+ self .assertIs (f < v , True )
662
+ self .assertIs (f <= v , True )
663
+ self .assertIs (f > v , False )
664
+ self .assertIs (f >= v , False )
665
+ f = float ('nan' )
666
+ self .assertIs (f == v , False )
667
+ self .assertIs (f != v , True )
668
+ self .assertIs (f < v , False )
669
+ self .assertIs (f <= v , False )
670
+ self .assertIs (f > v , False )
671
+ self .assertIs (f >= v , False )
672
+
617
673
def test__format__ (self ):
618
674
self .assertEqual (format (123456789 , 'd' ), '123456789' )
619
675
self .assertEqual (format (123456789 , 'd' ), '123456789' )
@@ -933,9 +989,12 @@ def test_huge_lshift_of_zero(self):
933
989
self .assertEqual (0 << (sys .maxsize + 1 ), 0 )
934
990
935
991
@support .cpython_only
936
- @support .bigmemtest (sys . maxsize + 1000 , memuse = 2 / 15 * 2 , dry_run = False )
992
+ @support .bigmemtest (2 ** 32 , memuse = 0.2 )
937
993
def test_huge_lshift (self , size ):
938
- self .assertEqual (1 << (sys .maxsize + 1000 ), 1 << 1000 << sys .maxsize )
994
+ v = 5 << size
995
+ self .assertEqual (v .bit_length (), size + 3 )
996
+ self .assertEqual (v .bit_count (), 2 )
997
+ self .assertEqual (v >> size , 5 )
939
998
940
999
def test_huge_rshift (self ):
941
1000
huge_shift = 1 << 1000
@@ -947,11 +1006,13 @@ def test_huge_rshift(self):
947
1006
self .assertEqual (- 2 ** 128 >> huge_shift , - 1 )
948
1007
949
1008
@support .cpython_only
950
- @support .bigmemtest (sys . maxsize + 500 , memuse = 2 / 15 , dry_run = False )
1009
+ @support .bigmemtest (2 ** 32 , memuse = 0.2 )
951
1010
def test_huge_rshift_of_huge (self , size ):
952
- huge = ((1 << 500 ) + 11 ) << sys .maxsize
953
- self .assertEqual (huge >> (sys .maxsize + 1 ), (1 << 499 ) + 5 )
954
- self .assertEqual (huge >> (sys .maxsize + 1000 ), 0 )
1011
+ huge = ((1 << 500 ) + 11 ) << size
1012
+ self .assertEqual (huge .bit_length (), size + 501 )
1013
+ self .assertEqual (huge .bit_count (), 4 )
1014
+ self .assertEqual (huge >> (size + 1 ), (1 << 499 ) + 5 )
1015
+ self .assertEqual (huge >> (size + 1000 ), 0 )
955
1016
956
1017
def test_small_rshift (self ):
957
1018
self .assertEqual (42 >> 1 , 21 )
0 commit comments