blob: 1f8967ccff3e7c7c9ce899e664eb437e161071c8 [file] [log] [blame]
Roger E. Masse8db1b071996-12-09 20:09:16 +00001"""Test the arraymodule.
Roger E. Massefab8ab81996-12-20 22:36:52 +00002 Roger E. Masse
Roger E. Masse8db1b071996-12-09 20:09:16 +00003"""
Roger E. Massefab8ab81996-12-20 22:36:52 +00004
Walter Dörwald7fd94242003-05-18 00:47:47 +00005import unittest
Benjamin Petersonee8712c2008-05-20 21:35:26 +00006from test import support
Alexandre Vassalottiad077152009-07-15 17:49:23 +00007import weakref
8import pickle
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +00009import operator
Alexandre Vassalottiad077152009-07-15 17:49:23 +000010import struct
Serhiy Storchaka43767632013-11-03 21:31:38 +020011import sys
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +000012import warnings
Alexandre Vassalottiad077152009-07-15 17:49:23 +000013
14import array
15from array import _array_reconstructor as array_reconstructor
16
Meador Inge1c9f0c92011-09-20 19:55:51 -050017try:
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
22except struct.error:
23 have_long_long = False
Raymond Hettingerb0900e62004-12-16 16:23:40 +000024
Victor Stinner29c00342013-03-08 02:33:06 +010025sizeof_wchar = array.array('u').itemsize
Victor Stinnerc472c5d2013-02-26 22:52:11 +010026
27
Raymond Hettingerb0900e62004-12-16 16:23:40 +000028class ArraySubclass(array.array):
29 pass
Guido van Rossumc9f8f141997-04-09 20:51:54 +000030
Thomas Woutersb2137042007-02-01 18:02:27 +000031class ArraySubclassWithKwargs(array.array):
32 def __init__(self, typecode, newarg=None):
Victor Stinner7a6a0092011-01-04 00:04:44 +000033 array.array.__init__(self)
Thomas Woutersb2137042007-02-01 18:02:27 +000034
Guido van Rossum31f72d72007-06-18 18:44:28 +000035typecodes = "ubBhHiIlLfd"
Meador Inge1c9f0c92011-09-20 19:55:51 -050036if have_long_long:
37 typecodes += 'qQ'
Martin v. Löwis99866332002-03-01 10:27:01 +000038
Martin Panterbe8da9c2016-09-07 11:04:41 +000039class MiscTest(unittest.TestCase):
Martin v. Löwis99866332002-03-01 10:27:01 +000040
Martin Panterbe8da9c2016-09-07 11:04:41 +000041 def test_bad_constructor(self):
Walter Dörwald7fd94242003-05-18 00:47:47 +000042 self.assertRaises(TypeError, array.array)
43 self.assertRaises(TypeError, array.array, spam=42)
44 self.assertRaises(TypeError, array.array, 'xx')
45 self.assertRaises(ValueError, array.array, 'x')
Martin v. Löwis99866332002-03-01 10:27:01 +000046
Martin Panterbe8da9c2016-09-07 11:04:41 +000047 def test_empty(self):
48 # Exercise code for handling zero-length arrays
49 a = array.array('B')
50 a[:] = a
51 self.assertEqual(len(a), 0)
52 self.assertEqual(len(a + a), 0)
53 self.assertEqual(len(a * 3), 0)
54 a += a
55 self.assertEqual(len(a), 0)
56
Martin v. Löwis99866332002-03-01 10:27:01 +000057
Alexandre Vassalottiad077152009-07-15 17:49:23 +000058# Machine format codes.
59#
60# Search for "enum machine_format_code" in Modules/arraymodule.c to get the
61# authoritative values.
62UNKNOWN_FORMAT = -1
63UNSIGNED_INT8 = 0
64SIGNED_INT8 = 1
65UNSIGNED_INT16_LE = 2
66UNSIGNED_INT16_BE = 3
67SIGNED_INT16_LE = 4
68SIGNED_INT16_BE = 5
69UNSIGNED_INT32_LE = 6
70UNSIGNED_INT32_BE = 7
71SIGNED_INT32_LE = 8
72SIGNED_INT32_BE = 9
73UNSIGNED_INT64_LE = 10
74UNSIGNED_INT64_BE = 11
75SIGNED_INT64_LE = 12
76SIGNED_INT64_BE = 13
77IEEE_754_FLOAT_LE = 14
78IEEE_754_FLOAT_BE = 15
79IEEE_754_DOUBLE_LE = 16
80IEEE_754_DOUBLE_BE = 17
81UTF16_LE = 18
82UTF16_BE = 19
83UTF32_LE = 20
84UTF32_BE = 21
85
86class ArrayReconstructorTest(unittest.TestCase):
87
88 def test_error(self):
89 self.assertRaises(TypeError, array_reconstructor,
90 "", "b", 0, b"")
91 self.assertRaises(TypeError, array_reconstructor,
92 str, "b", 0, b"")
93 self.assertRaises(TypeError, array_reconstructor,
94 array.array, "b", '', b"")
95 self.assertRaises(TypeError, array_reconstructor,
96 array.array, "b", 0, "")
97 self.assertRaises(ValueError, array_reconstructor,
98 array.array, "?", 0, b"")
99 self.assertRaises(ValueError, array_reconstructor,
100 array.array, "b", UNKNOWN_FORMAT, b"")
101 self.assertRaises(ValueError, array_reconstructor,
102 array.array, "b", 22, b"")
103 self.assertRaises(ValueError, array_reconstructor,
104 array.array, "d", 16, b"a")
105
106 def test_numbers(self):
107 testcases = (
108 (['B', 'H', 'I', 'L'], UNSIGNED_INT8, '=BBBB',
109 [0x80, 0x7f, 0, 0xff]),
110 (['b', 'h', 'i', 'l'], SIGNED_INT8, '=bbb',
111 [-0x80, 0x7f, 0]),
112 (['H', 'I', 'L'], UNSIGNED_INT16_LE, '<HHHH',
113 [0x8000, 0x7fff, 0, 0xffff]),
114 (['H', 'I', 'L'], UNSIGNED_INT16_BE, '>HHHH',
115 [0x8000, 0x7fff, 0, 0xffff]),
116 (['h', 'i', 'l'], SIGNED_INT16_LE, '<hhh',
117 [-0x8000, 0x7fff, 0]),
118 (['h', 'i', 'l'], SIGNED_INT16_BE, '>hhh',
119 [-0x8000, 0x7fff, 0]),
120 (['I', 'L'], UNSIGNED_INT32_LE, '<IIII',
121 [1<<31, (1<<31)-1, 0, (1<<32)-1]),
122 (['I', 'L'], UNSIGNED_INT32_BE, '>IIII',
123 [1<<31, (1<<31)-1, 0, (1<<32)-1]),
124 (['i', 'l'], SIGNED_INT32_LE, '<iii',
125 [-1<<31, (1<<31)-1, 0]),
126 (['i', 'l'], SIGNED_INT32_BE, '>iii',
127 [-1<<31, (1<<31)-1, 0]),
128 (['L'], UNSIGNED_INT64_LE, '<QQQQ',
Alexandre Vassalotti0027d4b2009-07-15 20:53:55 +0000129 [1<<31, (1<<31)-1, 0, (1<<32)-1]),
130 (['L'], UNSIGNED_INT64_BE, '>QQQQ',
131 [1<<31, (1<<31)-1, 0, (1<<32)-1]),
132 (['l'], SIGNED_INT64_LE, '<qqq',
133 [-1<<31, (1<<31)-1, 0]),
134 (['l'], SIGNED_INT64_BE, '>qqq',
135 [-1<<31, (1<<31)-1, 0]),
136 # The following tests for INT64 will raise an OverflowError
137 # when run on a 32-bit machine. The tests are simply skipped
138 # in that case.
139 (['L'], UNSIGNED_INT64_LE, '<QQQQ',
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000140 [1<<63, (1<<63)-1, 0, (1<<64)-1]),
141 (['L'], UNSIGNED_INT64_BE, '>QQQQ',
142 [1<<63, (1<<63)-1, 0, (1<<64)-1]),
143 (['l'], SIGNED_INT64_LE, '<qqq',
144 [-1<<63, (1<<63)-1, 0]),
145 (['l'], SIGNED_INT64_BE, '>qqq',
146 [-1<<63, (1<<63)-1, 0]),
147 (['f'], IEEE_754_FLOAT_LE, '<ffff',
148 [16711938.0, float('inf'), float('-inf'), -0.0]),
149 (['f'], IEEE_754_FLOAT_BE, '>ffff',
150 [16711938.0, float('inf'), float('-inf'), -0.0]),
151 (['d'], IEEE_754_DOUBLE_LE, '<dddd',
152 [9006104071832581.0, float('inf'), float('-inf'), -0.0]),
153 (['d'], IEEE_754_DOUBLE_BE, '>dddd',
154 [9006104071832581.0, float('inf'), float('-inf'), -0.0])
155 )
156 for testcase in testcases:
157 valid_typecodes, mformat_code, struct_fmt, values = testcase
158 arraystr = struct.pack(struct_fmt, *values)
159 for typecode in valid_typecodes:
Alexandre Vassalotti0027d4b2009-07-15 20:53:55 +0000160 try:
161 a = array.array(typecode, values)
162 except OverflowError:
163 continue # Skip this test case.
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000164 b = array_reconstructor(
165 array.array, typecode, mformat_code, arraystr)
166 self.assertEqual(a, b,
167 msg="{0!r} != {1!r}; testcase={2!r}".format(a, b, testcase))
168
169 def test_unicode(self):
170 teststr = "Bonne Journ\xe9e \U0002030a\U00020347"
171 testcases = (
172 (UTF16_LE, "UTF-16-LE"),
173 (UTF16_BE, "UTF-16-BE"),
174 (UTF32_LE, "UTF-32-LE"),
175 (UTF32_BE, "UTF-32-BE")
176 )
177 for testcase in testcases:
178 mformat_code, encoding = testcase
179 a = array.array('u', teststr)
180 b = array_reconstructor(
181 array.array, 'u', mformat_code, teststr.encode(encoding))
182 self.assertEqual(a, b,
183 msg="{0!r} != {1!r}; testcase={2!r}".format(a, b, testcase))
184
185
Ezio Melotti1d3e96d2013-01-10 06:04:50 +0200186class BaseTest:
Walter Dörwald7fd94242003-05-18 00:47:47 +0000187 # Required class attributes (provided by subclasses
188 # typecode: the typecode to test
189 # example: an initializer usable in the constructor for this type
190 # smallerexample: the same length as example, but smaller
191 # biggerexample: the same length as example, but bigger
192 # outside: An entry that is not in example
193 # minitemsize: the minimum guaranteed itemsize
Martin v. Löwis99866332002-03-01 10:27:01 +0000194
Walter Dörwald7fd94242003-05-18 00:47:47 +0000195 def assertEntryEqual(self, entry1, entry2):
196 self.assertEqual(entry1, entry2)
Martin v. Löwis99866332002-03-01 10:27:01 +0000197
Walter Dörwald7fd94242003-05-18 00:47:47 +0000198 def badtypecode(self):
199 # Return a typecode that is different from our own
200 return typecodes[(typecodes.index(self.typecode)+1) % len(typecodes)]
Martin v. Löwis99866332002-03-01 10:27:01 +0000201
Walter Dörwald7fd94242003-05-18 00:47:47 +0000202 def test_constructor(self):
203 a = array.array(self.typecode)
204 self.assertEqual(a.typecode, self.typecode)
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200205 self.assertGreaterEqual(a.itemsize, self.minitemsize)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000206 self.assertRaises(TypeError, array.array, self.typecode, None)
Martin v. Löwis99866332002-03-01 10:27:01 +0000207
Walter Dörwald7fd94242003-05-18 00:47:47 +0000208 def test_len(self):
209 a = array.array(self.typecode)
210 a.append(self.example[0])
211 self.assertEqual(len(a), 1)
Martin v. Löwis99866332002-03-01 10:27:01 +0000212
Walter Dörwald7fd94242003-05-18 00:47:47 +0000213 a = array.array(self.typecode, self.example)
214 self.assertEqual(len(a), len(self.example))
Martin v. Löwis99866332002-03-01 10:27:01 +0000215
Walter Dörwald7fd94242003-05-18 00:47:47 +0000216 def test_buffer_info(self):
217 a = array.array(self.typecode, self.example)
218 self.assertRaises(TypeError, a.buffer_info, 42)
219 bi = a.buffer_info()
Ezio Melottie9615932010-01-24 19:26:24 +0000220 self.assertIsInstance(bi, tuple)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000221 self.assertEqual(len(bi), 2)
Ezio Melottie9615932010-01-24 19:26:24 +0000222 self.assertIsInstance(bi[0], int)
223 self.assertIsInstance(bi[1], int)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000224 self.assertEqual(bi[1], len(a))
Martin v. Löwis99866332002-03-01 10:27:01 +0000225
Walter Dörwald7fd94242003-05-18 00:47:47 +0000226 def test_byteswap(self):
Victor Stinner8dba4e02011-09-30 00:51:10 +0200227 if self.typecode == 'u':
228 example = '\U00100100'
229 else:
230 example = self.example
231 a = array.array(self.typecode, example)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000232 self.assertRaises(TypeError, a.byteswap, 42)
233 if a.itemsize in (1, 2, 4, 8):
Victor Stinner8dba4e02011-09-30 00:51:10 +0200234 b = array.array(self.typecode, example)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000235 b.byteswap()
236 if a.itemsize==1:
237 self.assertEqual(a, b)
238 else:
239 self.assertNotEqual(a, b)
240 b.byteswap()
241 self.assertEqual(a, b)
Martin v. Löwis99866332002-03-01 10:27:01 +0000242
Raymond Hettinger3aa82c02004-03-13 18:18:51 +0000243 def test_copy(self):
244 import copy
245 a = array.array(self.typecode, self.example)
246 b = copy.copy(a)
247 self.assertNotEqual(id(a), id(b))
248 self.assertEqual(a, b)
249
Thomas Wouters89f507f2006-12-13 04:49:30 +0000250 def test_deepcopy(self):
251 import copy
252 a = array.array(self.typecode, self.example)
253 b = copy.deepcopy(a)
254 self.assertNotEqual(id(a), id(b))
255 self.assertEqual(a, b)
256
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000257 def test_reduce_ex(self):
258 a = array.array(self.typecode, self.example)
259 for protocol in range(3):
Ezio Melottib3aedd42010-11-20 19:04:17 +0000260 self.assertIs(a.__reduce_ex__(protocol)[0], array.array)
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000261 for protocol in range(3, pickle.HIGHEST_PROTOCOL):
Ezio Melottib3aedd42010-11-20 19:04:17 +0000262 self.assertIs(a.__reduce_ex__(protocol)[0], array_reconstructor)
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000263
Raymond Hettingerb0900e62004-12-16 16:23:40 +0000264 def test_pickle(self):
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000265 for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
Raymond Hettingerb0900e62004-12-16 16:23:40 +0000266 a = array.array(self.typecode, self.example)
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000267 b = pickle.loads(pickle.dumps(a, protocol))
Raymond Hettingerb0900e62004-12-16 16:23:40 +0000268 self.assertNotEqual(id(a), id(b))
269 self.assertEqual(a, b)
270
271 a = ArraySubclass(self.typecode, self.example)
272 a.x = 10
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000273 b = pickle.loads(pickle.dumps(a, protocol))
Raymond Hettingerb0900e62004-12-16 16:23:40 +0000274 self.assertNotEqual(id(a), id(b))
275 self.assertEqual(a, b)
276 self.assertEqual(a.x, b.x)
277 self.assertEqual(type(a), type(b))
278
Guido van Rossumd8faa362007-04-27 19:54:29 +0000279 def test_pickle_for_empty_array(self):
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000280 for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
Guido van Rossumd8faa362007-04-27 19:54:29 +0000281 a = array.array(self.typecode)
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000282 b = pickle.loads(pickle.dumps(a, protocol))
Guido van Rossumd8faa362007-04-27 19:54:29 +0000283 self.assertNotEqual(id(a), id(b))
284 self.assertEqual(a, b)
285
286 a = ArraySubclass(self.typecode)
287 a.x = 10
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000288 b = pickle.loads(pickle.dumps(a, protocol))
Guido van Rossumd8faa362007-04-27 19:54:29 +0000289 self.assertNotEqual(id(a), id(b))
290 self.assertEqual(a, b)
291 self.assertEqual(a.x, b.x)
292 self.assertEqual(type(a), type(b))
293
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000294 def test_iterator_pickle(self):
Serhiy Storchakaaabafe72016-03-06 14:10:24 +0200295 orig = array.array(self.typecode, self.example)
296 data = list(orig)
297 data2 = data[::-1]
Serhiy Storchakabad12572014-12-15 14:03:42 +0200298 for proto in range(pickle.HIGHEST_PROTOCOL + 1):
Serhiy Storchakaaabafe72016-03-06 14:10:24 +0200299 # initial iterator
300 itorig = iter(orig)
301 d = pickle.dumps((itorig, orig), proto)
302 it, a = pickle.loads(d)
303 a.fromlist(data2)
304 self.assertEqual(type(it), type(itorig))
305 self.assertEqual(list(it), data + data2)
Serhiy Storchakabad12572014-12-15 14:03:42 +0200306
Serhiy Storchakaaabafe72016-03-06 14:10:24 +0200307 # running iterator
308 next(itorig)
309 d = pickle.dumps((itorig, orig), proto)
310 it, a = pickle.loads(d)
311 a.fromlist(data2)
312 self.assertEqual(type(it), type(itorig))
313 self.assertEqual(list(it), data[1:] + data2)
314
315 # empty iterator
316 for i in range(1, len(data)):
317 next(itorig)
318 d = pickle.dumps((itorig, orig), proto)
319 it, a = pickle.loads(d)
320 a.fromlist(data2)
321 self.assertEqual(type(it), type(itorig))
322 self.assertEqual(list(it), data2)
323
324 # exhausted iterator
325 self.assertRaises(StopIteration, next, itorig)
326 d = pickle.dumps((itorig, orig), proto)
327 it, a = pickle.loads(d)
328 a.fromlist(data2)
Serhiy Storchakaab0d1982016-03-30 21:11:16 +0300329 self.assertEqual(list(it), [])
330
331 def test_exhausted_iterator(self):
332 a = array.array(self.typecode, self.example)
333 self.assertEqual(list(a), list(self.example))
334 exhit = iter(a)
335 empit = iter(a)
336 for x in exhit: # exhaust the iterator
337 next(empit) # not exhausted
338 a.append(self.outside)
339 self.assertEqual(list(exhit), [])
340 self.assertEqual(list(empit), [self.outside])
341 self.assertEqual(list(a), list(self.example) + [self.outside])
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000342
Walter Dörwald7fd94242003-05-18 00:47:47 +0000343 def test_insert(self):
344 a = array.array(self.typecode, self.example)
345 a.insert(0, self.example[0])
346 self.assertEqual(len(a), 1+len(self.example))
347 self.assertEqual(a[0], a[1])
348 self.assertRaises(TypeError, a.insert)
349 self.assertRaises(TypeError, a.insert, None)
Walter Dörwaldba39d9c2003-05-18 01:56:25 +0000350 self.assertRaises(TypeError, a.insert, 0, None)
Martin v. Löwis99866332002-03-01 10:27:01 +0000351
Walter Dörwald9e46abe2003-05-18 03:15:10 +0000352 a = array.array(self.typecode, self.example)
353 a.insert(-1, self.example[0])
354 self.assertEqual(
355 a,
356 array.array(
357 self.typecode,
358 self.example[:-1] + self.example[:1] + self.example[-1:]
359 )
360 )
361
362 a = array.array(self.typecode, self.example)
363 a.insert(-1000, self.example[0])
364 self.assertEqual(
365 a,
366 array.array(self.typecode, self.example[:1] + self.example)
367 )
368
369 a = array.array(self.typecode, self.example)
370 a.insert(1000, self.example[0])
371 self.assertEqual(
372 a,
373 array.array(self.typecode, self.example + self.example[:1])
374 )
375
Walter Dörwald7fd94242003-05-18 00:47:47 +0000376 def test_tofromfile(self):
377 a = array.array(self.typecode, 2*self.example)
378 self.assertRaises(TypeError, a.tofile)
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000379 support.unlink(support.TESTFN)
380 f = open(support.TESTFN, 'wb')
Walter Dörwald7fd94242003-05-18 00:47:47 +0000381 try:
382 a.tofile(f)
383 f.close()
384 b = array.array(self.typecode)
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000385 f = open(support.TESTFN, 'rb')
Walter Dörwald7fd94242003-05-18 00:47:47 +0000386 self.assertRaises(TypeError, b.fromfile)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000387 b.fromfile(f, len(self.example))
388 self.assertEqual(b, array.array(self.typecode, self.example))
389 self.assertNotEqual(a, b)
Hirokazu Yamamoto54d0df62009-03-06 03:04:07 +0000390 self.assertRaises(EOFError, b.fromfile, f, len(self.example)+1)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000391 self.assertEqual(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000392 f.close()
393 finally:
394 if not f.closed:
395 f.close()
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000396 support.unlink(support.TESTFN)
Roger E. Masse8db1b071996-12-09 20:09:16 +0000397
Antoine Pitrou8cb6dbf2010-07-21 16:41:31 +0000398 def test_fromfile_ioerror(self):
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200399 # Issue #5395: Check if fromfile raises a proper OSError
Antoine Pitrou8cb6dbf2010-07-21 16:41:31 +0000400 # instead of EOFError.
401 a = array.array(self.typecode)
402 f = open(support.TESTFN, 'wb')
403 try:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200404 self.assertRaises(OSError, a.fromfile, f, len(self.example))
Antoine Pitrou8cb6dbf2010-07-21 16:41:31 +0000405 finally:
406 f.close()
407 support.unlink(support.TESTFN)
408
Frank Wierzbicki17683432009-08-16 20:30:12 +0000409 def test_filewrite(self):
410 a = array.array(self.typecode, 2*self.example)
411 f = open(support.TESTFN, 'wb')
412 try:
413 f.write(a)
414 f.close()
415 b = array.array(self.typecode)
416 f = open(support.TESTFN, 'rb')
417 b.fromfile(f, len(self.example))
418 self.assertEqual(b, array.array(self.typecode, self.example))
419 self.assertNotEqual(a, b)
420 b.fromfile(f, len(self.example))
421 self.assertEqual(a, b)
422 f.close()
423 finally:
424 if not f.closed:
425 f.close()
426 support.unlink(support.TESTFN)
427
Walter Dörwald7fd94242003-05-18 00:47:47 +0000428 def test_tofromlist(self):
429 a = array.array(self.typecode, 2*self.example)
430 b = array.array(self.typecode)
431 self.assertRaises(TypeError, a.tolist, 42)
432 self.assertRaises(TypeError, b.fromlist)
433 self.assertRaises(TypeError, b.fromlist, 42)
434 self.assertRaises(TypeError, b.fromlist, [None])
435 b.fromlist(a.tolist())
436 self.assertEqual(a, b)
Fred Drake78334472000-06-28 17:50:51 +0000437
Walter Dörwald7fd94242003-05-18 00:47:47 +0000438 def test_tofromstring(self):
Brett Cannon1eb32c22014-10-10 16:26:45 -0400439 # Warnings not raised when arguments are incorrect as Argument Clinic
440 # handles that before the warning can be raised.
441 nb_warnings = 2
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +0000442 with warnings.catch_warnings(record=True) as r:
443 warnings.filterwarnings("always",
444 message=r"(to|from)string\(\) is deprecated",
445 category=DeprecationWarning)
446 a = array.array(self.typecode, 2*self.example)
447 b = array.array(self.typecode)
448 self.assertRaises(TypeError, a.tostring, 42)
449 self.assertRaises(TypeError, b.fromstring)
450 self.assertRaises(TypeError, b.fromstring, 42)
451 b.fromstring(a.tostring())
452 self.assertEqual(a, b)
453 if a.itemsize>1:
454 self.assertRaises(ValueError, b.fromstring, "x")
455 nb_warnings += 1
456 self.assertEqual(len(r), nb_warnings)
457
458 def test_tofrombytes(self):
Walter Dörwald7fd94242003-05-18 00:47:47 +0000459 a = array.array(self.typecode, 2*self.example)
460 b = array.array(self.typecode)
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +0000461 self.assertRaises(TypeError, a.tobytes, 42)
462 self.assertRaises(TypeError, b.frombytes)
463 self.assertRaises(TypeError, b.frombytes, 42)
464 b.frombytes(a.tobytes())
465 c = array.array(self.typecode, bytearray(a.tobytes()))
Walter Dörwald7fd94242003-05-18 00:47:47 +0000466 self.assertEqual(a, b)
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +0000467 self.assertEqual(a, c)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000468 if a.itemsize>1:
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +0000469 self.assertRaises(ValueError, b.frombytes, b"x")
Fred Drake78334472000-06-28 17:50:51 +0000470
Alexander Belopolskyef4a03f2011-01-11 21:44:00 +0000471 def test_fromarray(self):
472 a = array.array(self.typecode, self.example)
473 b = array.array(self.typecode, a)
474 self.assertEqual(a, b)
475
Walter Dörwald7fd94242003-05-18 00:47:47 +0000476 def test_repr(self):
477 a = array.array(self.typecode, 2*self.example)
478 self.assertEqual(a, eval(repr(a), {"array": array.array}))
Fred Drake78334472000-06-28 17:50:51 +0000479
Walter Dörwald7fd94242003-05-18 00:47:47 +0000480 a = array.array(self.typecode)
481 self.assertEqual(repr(a), "array('%s')" % self.typecode)
Roger E. Masse8db1b071996-12-09 20:09:16 +0000482
Walter Dörwald7fd94242003-05-18 00:47:47 +0000483 def test_str(self):
484 a = array.array(self.typecode, 2*self.example)
485 str(a)
Roger E. Masse8db1b071996-12-09 20:09:16 +0000486
Walter Dörwald7fd94242003-05-18 00:47:47 +0000487 def test_cmp(self):
488 a = array.array(self.typecode, self.example)
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200489 self.assertIs(a == 42, False)
490 self.assertIs(a != 42, True)
Tim Peterscc78e472000-11-14 21:36:07 +0000491
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200492 self.assertIs(a == a, True)
493 self.assertIs(a != a, False)
494 self.assertIs(a < a, False)
495 self.assertIs(a <= a, True)
496 self.assertIs(a > a, False)
497 self.assertIs(a >= a, True)
Tim Peterscc78e472000-11-14 21:36:07 +0000498
Neal Norwitzbd2835c2006-03-17 08:54:15 +0000499 al = array.array(self.typecode, self.smallerexample)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000500 ab = array.array(self.typecode, self.biggerexample)
Guido van Rossum7f1d3aa1998-07-16 15:31:43 +0000501
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200502 self.assertIs(a == 2*a, False)
503 self.assertIs(a != 2*a, True)
504 self.assertIs(a < 2*a, True)
505 self.assertIs(a <= 2*a, True)
506 self.assertIs(a > 2*a, False)
507 self.assertIs(a >= 2*a, False)
Martin v. Löwis99866332002-03-01 10:27:01 +0000508
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200509 self.assertIs(a == al, False)
510 self.assertIs(a != al, True)
511 self.assertIs(a < al, False)
512 self.assertIs(a <= al, False)
513 self.assertIs(a > al, True)
514 self.assertIs(a >= al, True)
Martin v. Löwis99866332002-03-01 10:27:01 +0000515
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200516 self.assertIs(a == ab, False)
517 self.assertIs(a != ab, True)
518 self.assertIs(a < ab, True)
519 self.assertIs(a <= ab, True)
520 self.assertIs(a > ab, False)
521 self.assertIs(a >= ab, False)
Martin v. Löwis99866332002-03-01 10:27:01 +0000522
Walter Dörwald7fd94242003-05-18 00:47:47 +0000523 def test_add(self):
524 a = array.array(self.typecode, self.example) \
525 + array.array(self.typecode, self.example[::-1])
526 self.assertEqual(
527 a,
528 array.array(self.typecode, self.example + self.example[::-1])
529 )
Martin v. Löwis99866332002-03-01 10:27:01 +0000530
Walter Dörwald7fd94242003-05-18 00:47:47 +0000531 b = array.array(self.badtypecode())
532 self.assertRaises(TypeError, a.__add__, b)
533
534 self.assertRaises(TypeError, a.__add__, "bad")
535
536 def test_iadd(self):
537 a = array.array(self.typecode, self.example[::-1])
538 b = a
539 a += array.array(self.typecode, 2*self.example)
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200540 self.assertIs(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000541 self.assertEqual(
542 a,
543 array.array(self.typecode, self.example[::-1]+2*self.example)
544 )
Alexandre Vassalottie503cf92009-07-05 06:25:14 +0000545 a = array.array(self.typecode, self.example)
546 a += a
547 self.assertEqual(
548 a,
549 array.array(self.typecode, self.example + self.example)
550 )
Walter Dörwald7fd94242003-05-18 00:47:47 +0000551
552 b = array.array(self.badtypecode())
553 self.assertRaises(TypeError, a.__add__, b)
554
555 self.assertRaises(TypeError, a.__iadd__, "bad")
556
557 def test_mul(self):
558 a = 5*array.array(self.typecode, self.example)
559 self.assertEqual(
560 a,
561 array.array(self.typecode, 5*self.example)
562 )
563
564 a = array.array(self.typecode, self.example)*5
565 self.assertEqual(
566 a,
567 array.array(self.typecode, self.example*5)
568 )
569
570 a = 0*array.array(self.typecode, self.example)
571 self.assertEqual(
572 a,
573 array.array(self.typecode)
574 )
575
576 a = (-1)*array.array(self.typecode, self.example)
577 self.assertEqual(
578 a,
579 array.array(self.typecode)
580 )
581
Georg Brandlc29cc6a2010-12-04 11:02:04 +0000582 a = 5 * array.array(self.typecode, self.example[:1])
583 self.assertEqual(
584 a,
585 array.array(self.typecode, [a[0]] * 5)
586 )
587
Walter Dörwald7fd94242003-05-18 00:47:47 +0000588 self.assertRaises(TypeError, a.__mul__, "bad")
589
590 def test_imul(self):
591 a = array.array(self.typecode, self.example)
592 b = a
593
594 a *= 5
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200595 self.assertIs(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000596 self.assertEqual(
597 a,
598 array.array(self.typecode, 5*self.example)
599 )
600
601 a *= 0
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200602 self.assertIs(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000603 self.assertEqual(a, array.array(self.typecode))
604
605 a *= 1000
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200606 self.assertIs(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000607 self.assertEqual(a, array.array(self.typecode))
608
609 a *= -1
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200610 self.assertIs(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000611 self.assertEqual(a, array.array(self.typecode))
612
613 a = array.array(self.typecode, self.example)
614 a *= -1
615 self.assertEqual(a, array.array(self.typecode))
616
617 self.assertRaises(TypeError, a.__imul__, "bad")
618
619 def test_getitem(self):
620 a = array.array(self.typecode, self.example)
621 self.assertEntryEqual(a[0], self.example[0])
Guido van Rossume2a383d2007-01-15 16:59:06 +0000622 self.assertEntryEqual(a[0], self.example[0])
Walter Dörwald7fd94242003-05-18 00:47:47 +0000623 self.assertEntryEqual(a[-1], self.example[-1])
Guido van Rossume2a383d2007-01-15 16:59:06 +0000624 self.assertEntryEqual(a[-1], self.example[-1])
Walter Dörwald7fd94242003-05-18 00:47:47 +0000625 self.assertEntryEqual(a[len(self.example)-1], self.example[-1])
626 self.assertEntryEqual(a[-len(self.example)], self.example[0])
627 self.assertRaises(TypeError, a.__getitem__)
628 self.assertRaises(IndexError, a.__getitem__, len(self.example))
629 self.assertRaises(IndexError, a.__getitem__, -len(self.example)-1)
630
631 def test_setitem(self):
632 a = array.array(self.typecode, self.example)
633 a[0] = a[-1]
634 self.assertEntryEqual(a[0], a[-1])
635
636 a = array.array(self.typecode, self.example)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000637 a[0] = a[-1]
Walter Dörwald7fd94242003-05-18 00:47:47 +0000638 self.assertEntryEqual(a[0], a[-1])
639
640 a = array.array(self.typecode, self.example)
641 a[-1] = a[0]
642 self.assertEntryEqual(a[0], a[-1])
643
644 a = array.array(self.typecode, self.example)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000645 a[-1] = a[0]
Walter Dörwald7fd94242003-05-18 00:47:47 +0000646 self.assertEntryEqual(a[0], a[-1])
647
648 a = array.array(self.typecode, self.example)
649 a[len(self.example)-1] = a[0]
650 self.assertEntryEqual(a[0], a[-1])
651
652 a = array.array(self.typecode, self.example)
653 a[-len(self.example)] = a[-1]
654 self.assertEntryEqual(a[0], a[-1])
655
656 self.assertRaises(TypeError, a.__setitem__)
657 self.assertRaises(TypeError, a.__setitem__, None)
658 self.assertRaises(TypeError, a.__setitem__, 0, None)
659 self.assertRaises(
660 IndexError,
661 a.__setitem__,
662 len(self.example), self.example[0]
663 )
664 self.assertRaises(
665 IndexError,
666 a.__setitem__,
667 -len(self.example)-1, self.example[0]
668 )
669
670 def test_delitem(self):
671 a = array.array(self.typecode, self.example)
672 del a[0]
673 self.assertEqual(
674 a,
675 array.array(self.typecode, self.example[1:])
676 )
677
678 a = array.array(self.typecode, self.example)
679 del a[-1]
680 self.assertEqual(
681 a,
682 array.array(self.typecode, self.example[:-1])
683 )
684
685 a = array.array(self.typecode, self.example)
686 del a[len(self.example)-1]
687 self.assertEqual(
688 a,
689 array.array(self.typecode, self.example[:-1])
690 )
691
692 a = array.array(self.typecode, self.example)
693 del a[-len(self.example)]
694 self.assertEqual(
695 a,
696 array.array(self.typecode, self.example[1:])
697 )
698
699 self.assertRaises(TypeError, a.__delitem__)
700 self.assertRaises(TypeError, a.__delitem__, None)
701 self.assertRaises(IndexError, a.__delitem__, len(self.example))
702 self.assertRaises(IndexError, a.__delitem__, -len(self.example)-1)
703
704 def test_getslice(self):
705 a = array.array(self.typecode, self.example)
706 self.assertEqual(a[:], a)
707
708 self.assertEqual(
709 a[1:],
710 array.array(self.typecode, self.example[1:])
711 )
712
713 self.assertEqual(
714 a[:1],
715 array.array(self.typecode, self.example[:1])
716 )
717
718 self.assertEqual(
719 a[:-1],
720 array.array(self.typecode, self.example[:-1])
721 )
722
723 self.assertEqual(
724 a[-1:],
725 array.array(self.typecode, self.example[-1:])
726 )
727
728 self.assertEqual(
729 a[-1:-1],
730 array.array(self.typecode)
731 )
732
733 self.assertEqual(
Walter Dörwald1083c242005-01-21 21:16:51 +0000734 a[2:1],
735 array.array(self.typecode)
736 )
737
738 self.assertEqual(
Walter Dörwald7fd94242003-05-18 00:47:47 +0000739 a[1000:],
740 array.array(self.typecode)
741 )
742 self.assertEqual(a[-1000:], a)
743 self.assertEqual(a[:1000], a)
744 self.assertEqual(
745 a[:-1000],
746 array.array(self.typecode)
747 )
748 self.assertEqual(a[-1000:1000], a)
749 self.assertEqual(
750 a[2000:1000],
751 array.array(self.typecode)
752 )
753
Thomas Woutersed03b412007-08-28 21:37:11 +0000754 def test_extended_getslice(self):
755 # Test extended slicing by comparing with list slicing
756 # (Assumes list conversion works correctly, too)
757 a = array.array(self.typecode, self.example)
758 indices = (0, None, 1, 3, 19, 100, -1, -2, -31, -100)
759 for start in indices:
760 for stop in indices:
761 # Everything except the initial 0 (invalid step)
762 for step in indices[1:]:
763 self.assertEqual(list(a[start:stop:step]),
764 list(a)[start:stop:step])
765
Walter Dörwald7fd94242003-05-18 00:47:47 +0000766 def test_setslice(self):
767 a = array.array(self.typecode, self.example)
768 a[:1] = a
769 self.assertEqual(
770 a,
771 array.array(self.typecode, self.example + self.example[1:])
772 )
773
774 a = array.array(self.typecode, self.example)
Fred Drake004d5e62000-10-23 17:22:08 +0000775 a[:-1] = a
Walter Dörwald7fd94242003-05-18 00:47:47 +0000776 self.assertEqual(
777 a,
778 array.array(self.typecode, self.example + self.example[-1:])
779 )
780
781 a = array.array(self.typecode, self.example)
782 a[-1:] = a
783 self.assertEqual(
784 a,
785 array.array(self.typecode, self.example[:-1] + self.example)
786 )
787
788 a = array.array(self.typecode, self.example)
Fred Drake004d5e62000-10-23 17:22:08 +0000789 a[1:] = a
Walter Dörwald7fd94242003-05-18 00:47:47 +0000790 self.assertEqual(
791 a,
792 array.array(self.typecode, self.example[:1] + self.example)
793 )
794
795 a = array.array(self.typecode, self.example)
Fred Drake004d5e62000-10-23 17:22:08 +0000796 a[1:-1] = a
Walter Dörwald7fd94242003-05-18 00:47:47 +0000797 self.assertEqual(
798 a,
799 array.array(
800 self.typecode,
801 self.example[:1] + self.example + self.example[-1:]
802 )
803 )
804
805 a = array.array(self.typecode, self.example)
806 a[1000:] = a
807 self.assertEqual(
808 a,
809 array.array(self.typecode, 2*self.example)
810 )
811
812 a = array.array(self.typecode, self.example)
813 a[-1000:] = a
814 self.assertEqual(
815 a,
816 array.array(self.typecode, self.example)
817 )
818
819 a = array.array(self.typecode, self.example)
820 a[:1000] = a
821 self.assertEqual(
822 a,
823 array.array(self.typecode, self.example)
824 )
825
826 a = array.array(self.typecode, self.example)
827 a[:-1000] = a
828 self.assertEqual(
829 a,
830 array.array(self.typecode, 2*self.example)
831 )
832
833 a = array.array(self.typecode, self.example)
834 a[1:0] = a
835 self.assertEqual(
836 a,
837 array.array(self.typecode, self.example[:1] + self.example + self.example[1:])
838 )
839
840 a = array.array(self.typecode, self.example)
841 a[2000:1000] = a
842 self.assertEqual(
843 a,
844 array.array(self.typecode, 2*self.example)
845 )
846
847 a = array.array(self.typecode, self.example)
Thomas Woutersed03b412007-08-28 21:37:11 +0000848 self.assertRaises(TypeError, a.__setitem__, slice(0, 0), None)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000849 self.assertRaises(TypeError, a.__setitem__, slice(0, 1), None)
850
851 b = array.array(self.badtypecode())
Thomas Woutersed03b412007-08-28 21:37:11 +0000852 self.assertRaises(TypeError, a.__setitem__, slice(0, 0), b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000853 self.assertRaises(TypeError, a.__setitem__, slice(0, 1), b)
854
Thomas Woutersed03b412007-08-28 21:37:11 +0000855 def test_extended_set_del_slice(self):
856 indices = (0, None, 1, 3, 19, 100, -1, -2, -31, -100)
857 for start in indices:
858 for stop in indices:
859 # Everything except the initial 0 (invalid step)
860 for step in indices[1:]:
861 a = array.array(self.typecode, self.example)
862 L = list(a)
863 # Make sure we have a slice of exactly the right length,
864 # but with (hopefully) different data.
865 data = L[start:stop:step]
866 data.reverse()
867 L[start:stop:step] = data
868 a[start:stop:step] = array.array(self.typecode, data)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000869 self.assertEqual(a, array.array(self.typecode, L))
Thomas Woutersed03b412007-08-28 21:37:11 +0000870
871 del L[start:stop:step]
872 del a[start:stop:step]
Ezio Melottib3aedd42010-11-20 19:04:17 +0000873 self.assertEqual(a, array.array(self.typecode, L))
Thomas Woutersed03b412007-08-28 21:37:11 +0000874
Walter Dörwald7fd94242003-05-18 00:47:47 +0000875 def test_index(self):
876 example = 2*self.example
877 a = array.array(self.typecode, example)
878 self.assertRaises(TypeError, a.index)
879 for x in example:
880 self.assertEqual(a.index(x), example.index(x))
881 self.assertRaises(ValueError, a.index, None)
882 self.assertRaises(ValueError, a.index, self.outside)
883
884 def test_count(self):
885 example = 2*self.example
886 a = array.array(self.typecode, example)
887 self.assertRaises(TypeError, a.count)
888 for x in example:
889 self.assertEqual(a.count(x), example.count(x))
890 self.assertEqual(a.count(self.outside), 0)
891 self.assertEqual(a.count(None), 0)
892
893 def test_remove(self):
894 for x in self.example:
895 example = 2*self.example
896 a = array.array(self.typecode, example)
897 pos = example.index(x)
898 example2 = example[:pos] + example[pos+1:]
899 a.remove(x)
900 self.assertEqual(a, array.array(self.typecode, example2))
901
902 a = array.array(self.typecode, self.example)
903 self.assertRaises(ValueError, a.remove, self.outside)
904
905 self.assertRaises(ValueError, a.remove, None)
906
907 def test_pop(self):
908 a = array.array(self.typecode)
909 self.assertRaises(IndexError, a.pop)
910
911 a = array.array(self.typecode, 2*self.example)
912 self.assertRaises(TypeError, a.pop, 42, 42)
913 self.assertRaises(TypeError, a.pop, None)
914 self.assertRaises(IndexError, a.pop, len(a))
915 self.assertRaises(IndexError, a.pop, -len(a)-1)
916
917 self.assertEntryEqual(a.pop(0), self.example[0])
918 self.assertEqual(
919 a,
920 array.array(self.typecode, self.example[1:]+self.example)
921 )
922 self.assertEntryEqual(a.pop(1), self.example[2])
923 self.assertEqual(
924 a,
925 array.array(self.typecode, self.example[1:2]+self.example[3:]+self.example)
926 )
927 self.assertEntryEqual(a.pop(0), self.example[1])
928 self.assertEntryEqual(a.pop(), self.example[-1])
929 self.assertEqual(
930 a,
931 array.array(self.typecode, self.example[3:]+self.example[:-1])
932 )
933
934 def test_reverse(self):
935 a = array.array(self.typecode, self.example)
936 self.assertRaises(TypeError, a.reverse, 42)
Fred Drake004d5e62000-10-23 17:22:08 +0000937 a.reverse()
Walter Dörwald7fd94242003-05-18 00:47:47 +0000938 self.assertEqual(
939 a,
940 array.array(self.typecode, self.example[::-1])
941 )
942
943 def test_extend(self):
944 a = array.array(self.typecode, self.example)
945 self.assertRaises(TypeError, a.extend)
946 a.extend(array.array(self.typecode, self.example[::-1]))
947 self.assertEqual(
948 a,
949 array.array(self.typecode, self.example+self.example[::-1])
950 )
951
Alexandre Vassalottie503cf92009-07-05 06:25:14 +0000952 a = array.array(self.typecode, self.example)
953 a.extend(a)
954 self.assertEqual(
955 a,
956 array.array(self.typecode, self.example+self.example)
957 )
958
Walter Dörwald7fd94242003-05-18 00:47:47 +0000959 b = array.array(self.badtypecode())
960 self.assertRaises(TypeError, a.extend, b)
961
Raymond Hettinger49f9bd12004-03-14 05:43:59 +0000962 a = array.array(self.typecode, self.example)
963 a.extend(self.example[::-1])
964 self.assertEqual(
965 a,
966 array.array(self.typecode, self.example+self.example[::-1])
967 )
968
Raymond Hettinger6ab78cd2004-08-29 07:50:43 +0000969 def test_constructor_with_iterable_argument(self):
970 a = array.array(self.typecode, iter(self.example))
971 b = array.array(self.typecode, self.example)
972 self.assertEqual(a, b)
973
974 # non-iterable argument
975 self.assertRaises(TypeError, array.array, self.typecode, 10)
976
977 # pass through errors raised in __iter__
978 class A:
979 def __iter__(self):
980 raise UnicodeError
981 self.assertRaises(UnicodeError, array.array, self.typecode, A())
982
983 # pass through errors raised in next()
984 def B():
985 raise UnicodeError
986 yield None
987 self.assertRaises(UnicodeError, array.array, self.typecode, B())
988
Walter Dörwald7fd94242003-05-18 00:47:47 +0000989 def test_coveritertraverse(self):
990 try:
991 import gc
992 except ImportError:
Zachary Ware9fe6d862013-12-08 00:20:35 -0600993 self.skipTest('gc module not available')
Walter Dörwald7fd94242003-05-18 00:47:47 +0000994 a = array.array(self.typecode)
995 l = [iter(a)]
996 l.append(l)
997 gc.collect()
998
999 def test_buffer(self):
1000 a = array.array(self.typecode, self.example)
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +00001001 m = memoryview(a)
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001002 expected = m.tobytes()
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +00001003 self.assertEqual(a.tobytes(), expected)
1004 self.assertEqual(a.tobytes()[0], expected[0])
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001005 # Resizing is forbidden when there are buffer exports.
1006 # For issue 4509, we also check after each error that
1007 # the array was not modified.
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +00001008 self.assertRaises(BufferError, a.append, a[0])
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001009 self.assertEqual(m.tobytes(), expected)
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +00001010 self.assertRaises(BufferError, a.extend, a[0:1])
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001011 self.assertEqual(m.tobytes(), expected)
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +00001012 self.assertRaises(BufferError, a.remove, a[0])
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001013 self.assertEqual(m.tobytes(), expected)
1014 self.assertRaises(BufferError, a.pop, 0)
1015 self.assertEqual(m.tobytes(), expected)
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +00001016 self.assertRaises(BufferError, a.fromlist, a.tolist())
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001017 self.assertEqual(m.tobytes(), expected)
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +00001018 self.assertRaises(BufferError, a.frombytes, a.tobytes())
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001019 self.assertEqual(m.tobytes(), expected)
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +00001020 if self.typecode == 'u':
1021 self.assertRaises(BufferError, a.fromunicode, a.tounicode())
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001022 self.assertEqual(m.tobytes(), expected)
Raymond Hettinger3471b1c2009-01-27 11:06:40 +00001023 self.assertRaises(BufferError, operator.imul, a, 2)
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001024 self.assertEqual(m.tobytes(), expected)
Raymond Hettinger3471b1c2009-01-27 11:06:40 +00001025 self.assertRaises(BufferError, operator.imul, a, 0)
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001026 self.assertEqual(m.tobytes(), expected)
1027 self.assertRaises(BufferError, operator.setitem, a, slice(0, 0), a)
1028 self.assertEqual(m.tobytes(), expected)
1029 self.assertRaises(BufferError, operator.delitem, a, 0)
1030 self.assertEqual(m.tobytes(), expected)
1031 self.assertRaises(BufferError, operator.delitem, a, slice(0, 1))
1032 self.assertEqual(m.tobytes(), expected)
Walter Dörwald7fd94242003-05-18 00:47:47 +00001033
Raymond Hettingercb87bc82004-05-31 00:35:52 +00001034 def test_weakref(self):
1035 s = array.array(self.typecode, self.example)
Alexandre Vassalottiad077152009-07-15 17:49:23 +00001036 p = weakref.proxy(s)
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +00001037 self.assertEqual(p.tobytes(), s.tobytes())
Raymond Hettingercb87bc82004-05-31 00:35:52 +00001038 s = None
1039 self.assertRaises(ReferenceError, len, p)
1040
Serhiy Storchaka43767632013-11-03 21:31:38 +02001041 @unittest.skipUnless(hasattr(sys, 'getrefcount'),
1042 'test needs sys.getrefcount()')
Skip Montanarod5cf0b82003-08-03 23:02:10 +00001043 def test_bug_782369(self):
Serhiy Storchaka43767632013-11-03 21:31:38 +02001044 for i in range(10):
1045 b = array.array('B', range(64))
1046 rc = sys.getrefcount(10)
1047 for i in range(10):
1048 b = array.array('B', range(64))
1049 self.assertEqual(rc, sys.getrefcount(10))
Skip Montanarod5cf0b82003-08-03 23:02:10 +00001050
Thomas Woutersb2137042007-02-01 18:02:27 +00001051 def test_subclass_with_kwargs(self):
1052 # SF bug #1486663 -- this used to erroneously raise a TypeError
1053 ArraySubclassWithKwargs('b', newarg=1)
Raymond Hettingercb87bc82004-05-31 00:35:52 +00001054
Guido van Rossum6b826ab2007-07-03 16:22:09 +00001055 def test_create_from_bytes(self):
Alexandre Vassalotti7e4f3212009-07-05 05:38:18 +00001056 # XXX This test probably needs to be moved in a subclass or
1057 # generalized to use self.typecode.
Guido van Rossum6b826ab2007-07-03 16:22:09 +00001058 a = array.array('H', b"1234")
1059 self.assertEqual(len(a) * a.itemsize, 4)
1060
Meador Inge03b4d502012-08-10 22:35:45 -05001061 @support.cpython_only
1062 def test_sizeof_with_buffer(self):
1063 a = array.array(self.typecode, self.example)
Meador Inge80dd1af2012-08-10 23:21:39 -05001064 basesize = support.calcvobjsize('Pn2Pi')
Meador Inge03b4d502012-08-10 22:35:45 -05001065 buffer_size = a.buffer_info()[1] * a.itemsize
1066 support.check_sizeof(self, a, basesize + buffer_size)
1067
1068 @support.cpython_only
1069 def test_sizeof_without_buffer(self):
1070 a = array.array(self.typecode)
Meador Inge80dd1af2012-08-10 23:21:39 -05001071 basesize = support.calcvobjsize('Pn2Pi')
Meador Inge03b4d502012-08-10 22:35:45 -05001072 support.check_sizeof(self, a, basesize)
1073
Alexandre Vassalotti9730e332013-11-29 20:47:15 -08001074 def test_initialize_with_unicode(self):
1075 if self.typecode != 'u':
1076 with self.assertRaises(TypeError) as cm:
1077 a = array.array(self.typecode, 'foo')
1078 self.assertIn("cannot use a str", str(cm.exception))
1079 with self.assertRaises(TypeError) as cm:
1080 a = array.array(self.typecode, array.array('u', 'foo'))
1081 self.assertIn("cannot use a unicode array", str(cm.exception))
1082 else:
1083 a = array.array(self.typecode, "foo")
1084 a = array.array(self.typecode, array.array('u', 'foo'))
1085
Stefan Krah650c1e82015-02-03 21:43:23 +01001086 @support.cpython_only
1087 def test_obsolete_write_lock(self):
1088 from _testcapi import getbuffer_with_null_view
1089 a = array.array('B', b"")
1090 self.assertRaises(BufferError, getbuffer_with_null_view, a)
Raymond Hettingercb87bc82004-05-31 00:35:52 +00001091
Serhiy Storchakaab0d1982016-03-30 21:11:16 +03001092 def test_free_after_iterating(self):
1093 support.check_free_after_iterating(self, iter, array.array,
1094 (self.typecode,))
1095 support.check_free_after_iterating(self, reversed, array.array,
1096 (self.typecode,))
1097
Walter Dörwald7fd94242003-05-18 00:47:47 +00001098class StringTest(BaseTest):
1099
1100 def test_setitem(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001101 super().test_setitem()
Walter Dörwald7fd94242003-05-18 00:47:47 +00001102 a = array.array(self.typecode, self.example)
1103 self.assertRaises(TypeError, a.__setitem__, 0, self.example[:2])
1104
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001105class UnicodeTest(StringTest, unittest.TestCase):
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001106 typecode = 'u'
1107 example = '\x01\u263a\x00\ufeff'
1108 smallerexample = '\x01\u263a\x00\ufefe'
1109 biggerexample = '\x01\u263a\x01\ufeff'
1110 outside = str('\x33')
Victor Stinner8d4734f2012-08-08 20:09:21 +02001111 minitemsize = 2
Walter Dörwald7fd94242003-05-18 00:47:47 +00001112
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001113 def test_unicode(self):
1114 self.assertRaises(TypeError, array.array, 'b', 'foo')
Walter Dörwald7fd94242003-05-18 00:47:47 +00001115
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001116 a = array.array('u', '\xa0\xc2\u1234')
1117 a.fromunicode(' ')
1118 a.fromunicode('')
1119 a.fromunicode('')
1120 a.fromunicode('\x11abc\xff\u1234')
1121 s = a.tounicode()
1122 self.assertEqual(s, '\xa0\xc2\u1234 \x11abc\xff\u1234')
Victor Stinner9d512ab2012-08-09 00:43:56 +02001123 self.assertEqual(a.itemsize, sizeof_wchar)
Walter Dörwald7fd94242003-05-18 00:47:47 +00001124
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001125 s = '\x00="\'a\\b\x80\xff\u0000\u0001\u1234'
1126 a = array.array('u', s)
1127 self.assertEqual(
1128 repr(a),
Georg Brandl559e5d72008-06-11 18:37:52 +00001129 "array('u', '\\x00=\"\\'a\\\\b\\x80\xff\\x00\\x01\u1234')")
Walter Dörwald7fd94242003-05-18 00:47:47 +00001130
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001131 self.assertRaises(TypeError, a.fromunicode)
Walter Dörwald7fd94242003-05-18 00:47:47 +00001132
Victor Stinner29ec5952013-02-26 00:27:38 +01001133 def test_issue17223(self):
1134 # this used to crash
Victor Stinnerc472c5d2013-02-26 22:52:11 +01001135 if sizeof_wchar == 4:
1136 # U+FFFFFFFF is an invalid code point in Unicode 6.0
1137 invalid_str = b'\xff\xff\xff\xff'
1138 else:
Victor Stinner29c00342013-03-08 02:33:06 +01001139 # PyUnicode_FromUnicode() cannot fail with 16-bit wchar_t
1140 self.skipTest("specific to 32-bit wchar_t")
Victor Stinnerc472c5d2013-02-26 22:52:11 +01001141 a = array.array('u', invalid_str)
Victor Stinner29ec5952013-02-26 00:27:38 +01001142 self.assertRaises(ValueError, a.tounicode)
1143 self.assertRaises(ValueError, str, a)
1144
Walter Dörwald7fd94242003-05-18 00:47:47 +00001145class NumberTest(BaseTest):
1146
1147 def test_extslice(self):
1148 a = array.array(self.typecode, range(5))
1149 self.assertEqual(a[::], a)
1150 self.assertEqual(a[::2], array.array(self.typecode, [0,2,4]))
1151 self.assertEqual(a[1::2], array.array(self.typecode, [1,3]))
1152 self.assertEqual(a[::-1], array.array(self.typecode, [4,3,2,1,0]))
1153 self.assertEqual(a[::-2], array.array(self.typecode, [4,2,0]))
1154 self.assertEqual(a[3::-2], array.array(self.typecode, [3,1]))
1155 self.assertEqual(a[-100:100:], a)
1156 self.assertEqual(a[100:-100:-1], a[::-1])
Guido van Rossume2a383d2007-01-15 16:59:06 +00001157 self.assertEqual(a[-100:100:2], array.array(self.typecode, [0,2,4]))
Walter Dörwald7fd94242003-05-18 00:47:47 +00001158 self.assertEqual(a[1000:2000:2], array.array(self.typecode, []))
1159 self.assertEqual(a[-1000:-2000:-2], array.array(self.typecode, []))
1160
1161 def test_delslice(self):
1162 a = array.array(self.typecode, range(5))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001163 del a[::2]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001164 self.assertEqual(a, array.array(self.typecode, [1,3]))
1165 a = array.array(self.typecode, range(5))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001166 del a[1::2]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001167 self.assertEqual(a, array.array(self.typecode, [0,2,4]))
1168 a = array.array(self.typecode, range(5))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001169 del a[1::-2]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001170 self.assertEqual(a, array.array(self.typecode, [0,2,3,4]))
1171 a = array.array(self.typecode, range(10))
Michael W. Hudson56796f62002-07-29 14:35:04 +00001172 del a[::1000]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001173 self.assertEqual(a, array.array(self.typecode, [1,2,3,4,5,6,7,8,9]))
Mark Dickinsonbc099642010-01-29 17:27:24 +00001174 # test issue7788
1175 a = array.array(self.typecode, range(10))
1176 del a[9::1<<333]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001177
1178 def test_assignment(self):
1179 a = array.array(self.typecode, range(10))
1180 a[::2] = array.array(self.typecode, [42]*5)
1181 self.assertEqual(a, array.array(self.typecode, [42, 1, 42, 3, 42, 5, 42, 7, 42, 9]))
1182 a = array.array(self.typecode, range(10))
1183 a[::-4] = array.array(self.typecode, [10]*3)
1184 self.assertEqual(a, array.array(self.typecode, [0, 10, 2, 3, 4, 10, 6, 7, 8 ,10]))
1185 a = array.array(self.typecode, range(4))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001186 a[::-1] = a
Walter Dörwald7fd94242003-05-18 00:47:47 +00001187 self.assertEqual(a, array.array(self.typecode, [3, 2, 1, 0]))
1188 a = array.array(self.typecode, range(10))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001189 b = a[:]
1190 c = a[:]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001191 ins = array.array(self.typecode, range(2))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001192 a[2:3] = ins
1193 b[slice(2,3)] = ins
1194 c[2:3:] = ins
Fred Drake004d5e62000-10-23 17:22:08 +00001195
Walter Dörwald7fd94242003-05-18 00:47:47 +00001196 def test_iterationcontains(self):
1197 a = array.array(self.typecode, range(10))
Guido van Rossum805365e2007-05-07 22:24:25 +00001198 self.assertEqual(list(a), list(range(10)))
Walter Dörwald7fd94242003-05-18 00:47:47 +00001199 b = array.array(self.typecode, [20])
1200 self.assertEqual(a[-1] in a, True)
1201 self.assertEqual(b[0] not in a, True)
1202
1203 def check_overflow(self, lower, upper):
1204 # method to be used by subclasses
1205
1206 # should not overflow assigning lower limit
1207 a = array.array(self.typecode, [lower])
1208 a[0] = lower
1209 # should overflow assigning less than lower limit
1210 self.assertRaises(OverflowError, array.array, self.typecode, [lower-1])
1211 self.assertRaises(OverflowError, a.__setitem__, 0, lower-1)
1212 # should not overflow assigning upper limit
1213 a = array.array(self.typecode, [upper])
1214 a[0] = upper
1215 # should overflow assigning more than upper limit
1216 self.assertRaises(OverflowError, array.array, self.typecode, [upper+1])
1217 self.assertRaises(OverflowError, a.__setitem__, 0, upper+1)
1218
1219 def test_subclassing(self):
1220 typecode = self.typecode
1221 class ExaggeratingArray(array.array):
1222 __slots__ = ['offset']
1223
1224 def __new__(cls, typecode, data, offset):
1225 return array.array.__new__(cls, typecode, data)
1226
1227 def __init__(self, typecode, data, offset):
1228 self.offset = offset
1229
1230 def __getitem__(self, i):
1231 return array.array.__getitem__(self, i) + self.offset
1232
1233 a = ExaggeratingArray(self.typecode, [3, 6, 7, 11], 4)
1234 self.assertEntryEqual(a[0], 7)
1235
1236 self.assertRaises(AttributeError, setattr, a, "color", "blue")
1237
Alexander Belopolskyef4a03f2011-01-11 21:44:00 +00001238 def test_frombytearray(self):
1239 a = array.array('b', range(10))
1240 b = array.array(self.typecode, a)
1241 self.assertEqual(a, b)
1242
Walter Dörwald7fd94242003-05-18 00:47:47 +00001243class SignedNumberTest(NumberTest):
1244 example = [-1, 0, 1, 42, 0x7f]
1245 smallerexample = [-1, 0, 1, 42, 0x7e]
1246 biggerexample = [-1, 0, 1, 43, 0x7f]
1247 outside = 23
1248
1249 def test_overflow(self):
1250 a = array.array(self.typecode)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001251 lower = -1 * int(pow(2, a.itemsize * 8 - 1))
1252 upper = int(pow(2, a.itemsize * 8 - 1)) - 1
Walter Dörwald7fd94242003-05-18 00:47:47 +00001253 self.check_overflow(lower, upper)
1254
1255class UnsignedNumberTest(NumberTest):
1256 example = [0, 1, 17, 23, 42, 0xff]
1257 smallerexample = [0, 1, 17, 23, 42, 0xfe]
1258 biggerexample = [0, 1, 17, 23, 43, 0xff]
1259 outside = 0xaa
1260
1261 def test_overflow(self):
1262 a = array.array(self.typecode)
1263 lower = 0
Guido van Rossume2a383d2007-01-15 16:59:06 +00001264 upper = int(pow(2, a.itemsize * 8)) - 1
Walter Dörwald7fd94242003-05-18 00:47:47 +00001265 self.check_overflow(lower, upper)
Fred Drake004d5e62000-10-23 17:22:08 +00001266
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +00001267 def test_bytes_extend(self):
1268 s = bytes(self.example)
1269
1270 a = array.array(self.typecode, self.example)
1271 a.extend(s)
1272 self.assertEqual(
1273 a,
1274 array.array(self.typecode, self.example+self.example)
1275 )
1276
1277 a = array.array(self.typecode, self.example)
1278 a.extend(bytearray(reversed(s)))
1279 self.assertEqual(
1280 a,
1281 array.array(self.typecode, self.example+self.example[::-1])
1282 )
1283
Fred Drake004d5e62000-10-23 17:22:08 +00001284
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001285class ByteTest(SignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001286 typecode = 'b'
1287 minitemsize = 1
Fred Drake004d5e62000-10-23 17:22:08 +00001288
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001289class UnsignedByteTest(UnsignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001290 typecode = 'B'
1291 minitemsize = 1
Walter Dörwald7fd94242003-05-18 00:47:47 +00001292
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001293class ShortTest(SignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001294 typecode = 'h'
1295 minitemsize = 2
Walter Dörwald7fd94242003-05-18 00:47:47 +00001296
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001297class UnsignedShortTest(UnsignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001298 typecode = 'H'
1299 minitemsize = 2
Walter Dörwald7fd94242003-05-18 00:47:47 +00001300
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001301class IntTest(SignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001302 typecode = 'i'
1303 minitemsize = 2
Walter Dörwald7fd94242003-05-18 00:47:47 +00001304
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001305class UnsignedIntTest(UnsignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001306 typecode = 'I'
1307 minitemsize = 2
Walter Dörwald7fd94242003-05-18 00:47:47 +00001308
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001309class LongTest(SignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001310 typecode = 'l'
1311 minitemsize = 4
Walter Dörwald7fd94242003-05-18 00:47:47 +00001312
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001313class UnsignedLongTest(UnsignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001314 typecode = 'L'
1315 minitemsize = 4
Walter Dörwald7fd94242003-05-18 00:47:47 +00001316
Meador Inge1c9f0c92011-09-20 19:55:51 -05001317@unittest.skipIf(not have_long_long, 'need long long support')
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001318class LongLongTest(SignedNumberTest, unittest.TestCase):
Meador Inge1c9f0c92011-09-20 19:55:51 -05001319 typecode = 'q'
1320 minitemsize = 8
Meador Inge1c9f0c92011-09-20 19:55:51 -05001321
1322@unittest.skipIf(not have_long_long, 'need long long support')
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001323class UnsignedLongLongTest(UnsignedNumberTest, unittest.TestCase):
Meador Inge1c9f0c92011-09-20 19:55:51 -05001324 typecode = 'Q'
1325 minitemsize = 8
Meador Inge1c9f0c92011-09-20 19:55:51 -05001326
Walter Dörwald7fd94242003-05-18 00:47:47 +00001327class FPTest(NumberTest):
1328 example = [-42.0, 0, 42, 1e5, -1e10]
1329 smallerexample = [-42.0, 0, 42, 1e5, -2e10]
1330 biggerexample = [-42.0, 0, 42, 1e5, 1e10]
1331 outside = 23
1332
1333 def assertEntryEqual(self, entry1, entry2):
1334 self.assertAlmostEqual(entry1, entry2)
1335
Walter Dörwaldcf99b0a2003-05-22 13:15:31 +00001336 def test_byteswap(self):
1337 a = array.array(self.typecode, self.example)
1338 self.assertRaises(TypeError, a.byteswap, 42)
1339 if a.itemsize in (1, 2, 4, 8):
1340 b = array.array(self.typecode, self.example)
1341 b.byteswap()
1342 if a.itemsize==1:
1343 self.assertEqual(a, b)
1344 else:
1345 # On alphas treating the byte swapped bit patters as
1346 # floats/doubles results in floating point exceptions
1347 # => compare the 8bit string values instead
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +00001348 self.assertNotEqual(a.tobytes(), b.tobytes())
Walter Dörwaldcf99b0a2003-05-22 13:15:31 +00001349 b.byteswap()
1350 self.assertEqual(a, b)
1351
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001352class FloatTest(FPTest, unittest.TestCase):
Neal Norwitz35c6cd02003-05-22 13:29:15 +00001353 typecode = 'f'
1354 minitemsize = 4
Walter Dörwald7fd94242003-05-18 00:47:47 +00001355
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001356class DoubleTest(FPTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001357 typecode = 'd'
1358 minitemsize = 8
Amaury Forgeot d'Arc9c74b142008-06-18 00:47:36 +00001359
1360 def test_alloc_overflow(self):
Benjamin Petersonbcd8ac32008-10-10 22:20:52 +00001361 from sys import maxsize
Amaury Forgeot d'Arc9c74b142008-06-18 00:47:36 +00001362 a = array.array('d', [-1]*65536)
1363 try:
Benjamin Petersonbcd8ac32008-10-10 22:20:52 +00001364 a *= maxsize//65536 + 1
Amaury Forgeot d'Arc9c74b142008-06-18 00:47:36 +00001365 except MemoryError:
1366 pass
1367 else:
Benjamin Petersonbcd8ac32008-10-10 22:20:52 +00001368 self.fail("Array of size > maxsize created - MemoryError expected")
Amaury Forgeot d'Arc9c74b142008-06-18 00:47:36 +00001369 b = array.array('d', [ 2.71828183, 3.14159265, -1])
1370 try:
Benjamin Petersonbcd8ac32008-10-10 22:20:52 +00001371 b * (maxsize//3 + 1)
Amaury Forgeot d'Arc9c74b142008-06-18 00:47:36 +00001372 except MemoryError:
1373 pass
1374 else:
Benjamin Petersonbcd8ac32008-10-10 22:20:52 +00001375 self.fail("Array of size > maxsize created - MemoryError expected")
Amaury Forgeot d'Arc9c74b142008-06-18 00:47:36 +00001376
Raymond Hettinger6ab78cd2004-08-29 07:50:43 +00001377
1378if __name__ == "__main__":
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001379 unittest.main()