@@ -946,8 +946,13 @@ def test_huge_lshift(self, size):
946
946
self .assertEqual (1 << (sys .maxsize + 1000 ), 1 << 1000 << sys .maxsize )
947
947
948
948
def test_huge_rshift (self ):
949
- self .assertEqual (42 >> (1 << 1000 ), 0 )
950
- self .assertEqual ((- 42 ) >> (1 << 1000 ), - 1 )
949
+ huge_shift = 1 << 1000
950
+ self .assertEqual (42 >> huge_shift , 0 )
951
+ self .assertEqual ((- 42 ) >> huge_shift , - 1 )
952
+ self .assertEqual (1123 >> huge_shift , 0 )
953
+ self .assertEqual ((- 1123 ) >> huge_shift , - 1 )
954
+ self .assertEqual (2 ** 128 >> huge_shift , 0 )
955
+ self .assertEqual (- 2 ** 128 >> huge_shift , - 1 )
951
956
952
957
@support .cpython_only
953
958
@support .bigmemtest (sys .maxsize + 500 , memuse = 2 / 15 , dry_run = False )
@@ -956,6 +961,60 @@ def test_huge_rshift_of_huge(self, size):
956
961
self .assertEqual (huge >> (sys .maxsize + 1 ), (1 << 499 ) + 5 )
957
962
self .assertEqual (huge >> (sys .maxsize + 1000 ), 0 )
958
963
964
+ def test_small_rshift (self ):
965
+ self .assertEqual (42 >> 1 , 21 )
966
+ self .assertEqual ((- 42 ) >> 1 , - 21 )
967
+ self .assertEqual (43 >> 1 , 21 )
968
+ self .assertEqual ((- 43 ) >> 1 , - 22 )
969
+
970
+ self .assertEqual (1122 >> 1 , 561 )
971
+ self .assertEqual ((- 1122 ) >> 1 , - 561 )
972
+ self .assertEqual (1123 >> 1 , 561 )
973
+ self .assertEqual ((- 1123 ) >> 1 , - 562 )
974
+
975
+ self .assertEqual (2 ** 128 >> 1 , 2 ** 127 )
976
+ self .assertEqual (- 2 ** 128 >> 1 , - 2 ** 127 )
977
+ self .assertEqual ((2 ** 128 + 1 ) >> 1 , 2 ** 127 )
978
+ self .assertEqual (- (2 ** 128 + 1 ) >> 1 , - 2 ** 127 - 1 )
979
+
980
+ def test_medium_rshift (self ):
981
+ self .assertEqual (42 >> 9 , 0 )
982
+ self .assertEqual ((- 42 ) >> 9 , - 1 )
983
+ self .assertEqual (1122 >> 9 , 2 )
984
+ self .assertEqual ((- 1122 ) >> 9 , - 3 )
985
+ self .assertEqual (2 ** 128 >> 9 , 2 ** 119 )
986
+ self .assertEqual (- 2 ** 128 >> 9 , - 2 ** 119 )
987
+
988
+ def test_big_rshift (self ):
989
+ self .assertEqual (42 >> 32 , 0 )
990
+ self .assertEqual ((- 42 ) >> 32 , - 1 )
991
+ self .assertEqual (1122 >> 32 , 0 )
992
+ self .assertEqual ((- 1122 ) >> 32 , - 1 )
993
+ self .assertEqual (2 ** 128 >> 32 , 2 ** 96 )
994
+ self .assertEqual (- 2 ** 128 >> 32 , - 2 ** 96 )
995
+
996
+ def test_small_lshift (self ):
997
+ self .assertEqual (42 << 1 , 84 )
998
+ self .assertEqual ((- 42 ) << 1 , - 84 )
999
+ self .assertEqual (561 << 1 , 1122 )
1000
+ self .assertEqual ((- 561 ) << 1 , - 1122 )
1001
+ self .assertEqual (2 ** 127 << 1 , 2 ** 128 )
1002
+ self .assertEqual (- 2 ** 127 << 1 , - 2 ** 128 )
1003
+
1004
+ def test_medium_lshift (self ):
1005
+ self .assertEqual (42 << 9 , 21504 )
1006
+ self .assertEqual ((- 42 ) << 9 , - 21504 )
1007
+ self .assertEqual (1122 << 9 , 574464 )
1008
+ self .assertEqual ((- 1122 ) << 9 , - 574464 )
1009
+
1010
+ def test_big_lshift (self ):
1011
+ self .assertEqual (42 << 32 , 42 * 2 ** 32 )
1012
+ self .assertEqual ((- 42 ) << 32 , - 42 * 2 ** 32 )
1013
+ self .assertEqual (1122 << 32 , 1122 * 2 ** 32 )
1014
+ self .assertEqual ((- 1122 ) << 32 , - 1122 * 2 ** 32 )
1015
+ self .assertEqual (2 ** 128 << 32 , 2 ** 160 )
1016
+ self .assertEqual (- 2 ** 128 << 32 , - 2 ** 160 )
1017
+
959
1018
@support .cpython_only
960
1019
def test_small_ints_in_huge_calculation (self ):
961
1020
a = 2 ** 100
0 commit comments