1414import array
1515from array import _array_reconstructor as array_reconstructor
1616
17- try :
18- # Try to determine availability of long long independently
19- # of the array module under test
20- struct .calcsize ('@q' )
21- have_long_long = True
22- except struct .error :
23- have_long_long = False
24-
2517sizeof_wchar = array .array ('u' ).itemsize
2618
2719
@@ -32,9 +24,7 @@ class ArraySubclassWithKwargs(array.array):
3224 def __init__ (self , typecode , newarg = None ):
3325 array .array .__init__ (self )
3426
35- typecodes = "ubBhHiIlLfd"
36- if have_long_long :
37- typecodes += 'qQ'
27+ typecodes = 'ubBhHiIlLfdqQ'
3828
3929class MiscTest (unittest .TestCase ):
4030
@@ -1240,7 +1230,26 @@ def test_frombytearray(self):
12401230 b = array .array (self .typecode , a )
12411231 self .assertEqual (a , b )
12421232
1243- class SignedNumberTest (NumberTest ):
1233+ class IntegerNumberTest (NumberTest ):
1234+ def test_type_error (self ):
1235+ a = array .array (self .typecode )
1236+ a .append (42 )
1237+ with self .assertRaises (TypeError ):
1238+ a .append (42.0 )
1239+ with self .assertRaises (TypeError ):
1240+ a [0 ] = 42.0
1241+
1242+ class Intable :
1243+ def __init__ (self , num ):
1244+ self ._num = num
1245+ def __int__ (self ):
1246+ return self ._num
1247+ def __sub__ (self , other ):
1248+ return Intable (int (self ) - int (other ))
1249+ def __add__ (self , other ):
1250+ return Intable (int (self ) + int (other ))
1251+
1252+ class SignedNumberTest (IntegerNumberTest ):
12441253 example = [- 1 , 0 , 1 , 42 , 0x7f ]
12451254 smallerexample = [- 1 , 0 , 1 , 42 , 0x7e ]
12461255 biggerexample = [- 1 , 0 , 1 , 43 , 0x7f ]
@@ -1251,8 +1260,9 @@ def test_overflow(self):
12511260 lower = - 1 * int (pow (2 , a .itemsize * 8 - 1 ))
12521261 upper = int (pow (2 , a .itemsize * 8 - 1 )) - 1
12531262 self .check_overflow (lower , upper )
1263+ self .check_overflow (Intable (lower ), Intable (upper ))
12541264
1255- class UnsignedNumberTest (NumberTest ):
1265+ class UnsignedNumberTest (IntegerNumberTest ):
12561266 example = [0 , 1 , 17 , 23 , 42 , 0xff ]
12571267 smallerexample = [0 , 1 , 17 , 23 , 42 , 0xfe ]
12581268 biggerexample = [0 , 1 , 17 , 23 , 43 , 0xff ]
@@ -1263,6 +1273,7 @@ def test_overflow(self):
12631273 lower = 0
12641274 upper = int (pow (2 , a .itemsize * 8 )) - 1
12651275 self .check_overflow (lower , upper )
1276+ self .check_overflow (Intable (lower ), Intable (upper ))
12661277
12671278 def test_bytes_extend (self ):
12681279 s = bytes (self .example )
@@ -1314,12 +1325,10 @@ class UnsignedLongTest(UnsignedNumberTest, unittest.TestCase):
13141325 typecode = 'L'
13151326 minitemsize = 4
13161327
1317- @unittest .skipIf (not have_long_long , 'need long long support' )
13181328class LongLongTest (SignedNumberTest , unittest .TestCase ):
13191329 typecode = 'q'
13201330 minitemsize = 8
13211331
1322- @unittest .skipIf (not have_long_long , 'need long long support' )
13231332class UnsignedLongLongTest (UnsignedNumberTest , unittest .TestCase ):
13241333 typecode = 'Q'
13251334 minitemsize = 8
0 commit comments