blob: b4f2bf868c2cbd56a1937134dba7f62fe02768e0 [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 io
11import math
12import struct
Serhiy Storchaka43767632013-11-03 21:31:38 +020013import sys
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +000014import warnings
Alexandre Vassalottiad077152009-07-15 17:49:23 +000015
16import array
17from array import _array_reconstructor as array_reconstructor
18
Meador Inge1c9f0c92011-09-20 19:55:51 -050019try:
20 # Try to determine availability of long long independently
21 # of the array module under test
22 struct.calcsize('@q')
23 have_long_long = True
24except struct.error:
25 have_long_long = False
Raymond Hettingerb0900e62004-12-16 16:23:40 +000026
Victor Stinner29c00342013-03-08 02:33:06 +010027sizeof_wchar = array.array('u').itemsize
Victor Stinnerc472c5d2013-02-26 22:52:11 +010028
29
Raymond Hettingerb0900e62004-12-16 16:23:40 +000030class ArraySubclass(array.array):
31 pass
Guido van Rossumc9f8f141997-04-09 20:51:54 +000032
Thomas Woutersb2137042007-02-01 18:02:27 +000033class ArraySubclassWithKwargs(array.array):
34 def __init__(self, typecode, newarg=None):
Victor Stinner7a6a0092011-01-04 00:04:44 +000035 array.array.__init__(self)
Thomas Woutersb2137042007-02-01 18:02:27 +000036
Guido van Rossum31f72d72007-06-18 18:44:28 +000037typecodes = "ubBhHiIlLfd"
Meador Inge1c9f0c92011-09-20 19:55:51 -050038if have_long_long:
39 typecodes += 'qQ'
Martin v. Löwis99866332002-03-01 10:27:01 +000040
Walter Dörwald7fd94242003-05-18 00:47:47 +000041class BadConstructorTest(unittest.TestCase):
Martin v. Löwis99866332002-03-01 10:27:01 +000042
Walter Dörwald7fd94242003-05-18 00:47:47 +000043 def test_constructor(self):
44 self.assertRaises(TypeError, array.array)
45 self.assertRaises(TypeError, array.array, spam=42)
46 self.assertRaises(TypeError, array.array, 'xx')
47 self.assertRaises(ValueError, array.array, 'x')
Martin v. Löwis99866332002-03-01 10:27:01 +000048
Martin v. Löwis99866332002-03-01 10:27:01 +000049
Alexandre Vassalottiad077152009-07-15 17:49:23 +000050# Machine format codes.
51#
52# Search for "enum machine_format_code" in Modules/arraymodule.c to get the
53# authoritative values.
54UNKNOWN_FORMAT = -1
55UNSIGNED_INT8 = 0
56SIGNED_INT8 = 1
57UNSIGNED_INT16_LE = 2
58UNSIGNED_INT16_BE = 3
59SIGNED_INT16_LE = 4
60SIGNED_INT16_BE = 5
61UNSIGNED_INT32_LE = 6
62UNSIGNED_INT32_BE = 7
63SIGNED_INT32_LE = 8
64SIGNED_INT32_BE = 9
65UNSIGNED_INT64_LE = 10
66UNSIGNED_INT64_BE = 11
67SIGNED_INT64_LE = 12
68SIGNED_INT64_BE = 13
69IEEE_754_FLOAT_LE = 14
70IEEE_754_FLOAT_BE = 15
71IEEE_754_DOUBLE_LE = 16
72IEEE_754_DOUBLE_BE = 17
73UTF16_LE = 18
74UTF16_BE = 19
75UTF32_LE = 20
76UTF32_BE = 21
77
78class ArrayReconstructorTest(unittest.TestCase):
79
80 def test_error(self):
81 self.assertRaises(TypeError, array_reconstructor,
82 "", "b", 0, b"")
83 self.assertRaises(TypeError, array_reconstructor,
84 str, "b", 0, b"")
85 self.assertRaises(TypeError, array_reconstructor,
86 array.array, "b", '', b"")
87 self.assertRaises(TypeError, array_reconstructor,
88 array.array, "b", 0, "")
89 self.assertRaises(ValueError, array_reconstructor,
90 array.array, "?", 0, b"")
91 self.assertRaises(ValueError, array_reconstructor,
92 array.array, "b", UNKNOWN_FORMAT, b"")
93 self.assertRaises(ValueError, array_reconstructor,
94 array.array, "b", 22, b"")
95 self.assertRaises(ValueError, array_reconstructor,
96 array.array, "d", 16, b"a")
97
98 def test_numbers(self):
99 testcases = (
100 (['B', 'H', 'I', 'L'], UNSIGNED_INT8, '=BBBB',
101 [0x80, 0x7f, 0, 0xff]),
102 (['b', 'h', 'i', 'l'], SIGNED_INT8, '=bbb',
103 [-0x80, 0x7f, 0]),
104 (['H', 'I', 'L'], UNSIGNED_INT16_LE, '<HHHH',
105 [0x8000, 0x7fff, 0, 0xffff]),
106 (['H', 'I', 'L'], UNSIGNED_INT16_BE, '>HHHH',
107 [0x8000, 0x7fff, 0, 0xffff]),
108 (['h', 'i', 'l'], SIGNED_INT16_LE, '<hhh',
109 [-0x8000, 0x7fff, 0]),
110 (['h', 'i', 'l'], SIGNED_INT16_BE, '>hhh',
111 [-0x8000, 0x7fff, 0]),
112 (['I', 'L'], UNSIGNED_INT32_LE, '<IIII',
113 [1<<31, (1<<31)-1, 0, (1<<32)-1]),
114 (['I', 'L'], UNSIGNED_INT32_BE, '>IIII',
115 [1<<31, (1<<31)-1, 0, (1<<32)-1]),
116 (['i', 'l'], SIGNED_INT32_LE, '<iii',
117 [-1<<31, (1<<31)-1, 0]),
118 (['i', 'l'], SIGNED_INT32_BE, '>iii',
119 [-1<<31, (1<<31)-1, 0]),
120 (['L'], UNSIGNED_INT64_LE, '<QQQQ',
Alexandre Vassalotti0027d4b2009-07-15 20:53:55 +0000121 [1<<31, (1<<31)-1, 0, (1<<32)-1]),
122 (['L'], UNSIGNED_INT64_BE, '>QQQQ',
123 [1<<31, (1<<31)-1, 0, (1<<32)-1]),
124 (['l'], SIGNED_INT64_LE, '<qqq',
125 [-1<<31, (1<<31)-1, 0]),
126 (['l'], SIGNED_INT64_BE, '>qqq',
127 [-1<<31, (1<<31)-1, 0]),
128 # The following tests for INT64 will raise an OverflowError
129 # when run on a 32-bit machine. The tests are simply skipped
130 # in that case.
131 (['L'], UNSIGNED_INT64_LE, '<QQQQ',
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000132 [1<<63, (1<<63)-1, 0, (1<<64)-1]),
133 (['L'], UNSIGNED_INT64_BE, '>QQQQ',
134 [1<<63, (1<<63)-1, 0, (1<<64)-1]),
135 (['l'], SIGNED_INT64_LE, '<qqq',
136 [-1<<63, (1<<63)-1, 0]),
137 (['l'], SIGNED_INT64_BE, '>qqq',
138 [-1<<63, (1<<63)-1, 0]),
139 (['f'], IEEE_754_FLOAT_LE, '<ffff',
140 [16711938.0, float('inf'), float('-inf'), -0.0]),
141 (['f'], IEEE_754_FLOAT_BE, '>ffff',
142 [16711938.0, float('inf'), float('-inf'), -0.0]),
143 (['d'], IEEE_754_DOUBLE_LE, '<dddd',
144 [9006104071832581.0, float('inf'), float('-inf'), -0.0]),
145 (['d'], IEEE_754_DOUBLE_BE, '>dddd',
146 [9006104071832581.0, float('inf'), float('-inf'), -0.0])
147 )
148 for testcase in testcases:
149 valid_typecodes, mformat_code, struct_fmt, values = testcase
150 arraystr = struct.pack(struct_fmt, *values)
151 for typecode in valid_typecodes:
Alexandre Vassalotti0027d4b2009-07-15 20:53:55 +0000152 try:
153 a = array.array(typecode, values)
154 except OverflowError:
155 continue # Skip this test case.
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000156 b = array_reconstructor(
157 array.array, typecode, mformat_code, arraystr)
158 self.assertEqual(a, b,
159 msg="{0!r} != {1!r}; testcase={2!r}".format(a, b, testcase))
160
161 def test_unicode(self):
162 teststr = "Bonne Journ\xe9e \U0002030a\U00020347"
163 testcases = (
164 (UTF16_LE, "UTF-16-LE"),
165 (UTF16_BE, "UTF-16-BE"),
166 (UTF32_LE, "UTF-32-LE"),
167 (UTF32_BE, "UTF-32-BE")
168 )
169 for testcase in testcases:
170 mformat_code, encoding = testcase
171 a = array.array('u', teststr)
172 b = array_reconstructor(
173 array.array, 'u', mformat_code, teststr.encode(encoding))
174 self.assertEqual(a, b,
175 msg="{0!r} != {1!r}; testcase={2!r}".format(a, b, testcase))
176
177
Ezio Melotti1d3e96d2013-01-10 06:04:50 +0200178class BaseTest:
Walter Dörwald7fd94242003-05-18 00:47:47 +0000179 # Required class attributes (provided by subclasses
180 # typecode: the typecode to test
181 # example: an initializer usable in the constructor for this type
182 # smallerexample: the same length as example, but smaller
183 # biggerexample: the same length as example, but bigger
184 # outside: An entry that is not in example
185 # minitemsize: the minimum guaranteed itemsize
Martin v. Löwis99866332002-03-01 10:27:01 +0000186
Walter Dörwald7fd94242003-05-18 00:47:47 +0000187 def assertEntryEqual(self, entry1, entry2):
188 self.assertEqual(entry1, entry2)
Martin v. Löwis99866332002-03-01 10:27:01 +0000189
Walter Dörwald7fd94242003-05-18 00:47:47 +0000190 def badtypecode(self):
191 # Return a typecode that is different from our own
192 return typecodes[(typecodes.index(self.typecode)+1) % len(typecodes)]
Martin v. Löwis99866332002-03-01 10:27:01 +0000193
Walter Dörwald7fd94242003-05-18 00:47:47 +0000194 def test_constructor(self):
195 a = array.array(self.typecode)
196 self.assertEqual(a.typecode, self.typecode)
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200197 self.assertGreaterEqual(a.itemsize, self.minitemsize)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000198 self.assertRaises(TypeError, array.array, self.typecode, None)
Martin v. Löwis99866332002-03-01 10:27:01 +0000199
Walter Dörwald7fd94242003-05-18 00:47:47 +0000200 def test_len(self):
201 a = array.array(self.typecode)
202 a.append(self.example[0])
203 self.assertEqual(len(a), 1)
Martin v. Löwis99866332002-03-01 10:27:01 +0000204
Walter Dörwald7fd94242003-05-18 00:47:47 +0000205 a = array.array(self.typecode, self.example)
206 self.assertEqual(len(a), len(self.example))
Martin v. Löwis99866332002-03-01 10:27:01 +0000207
Walter Dörwald7fd94242003-05-18 00:47:47 +0000208 def test_buffer_info(self):
209 a = array.array(self.typecode, self.example)
210 self.assertRaises(TypeError, a.buffer_info, 42)
211 bi = a.buffer_info()
Ezio Melottie9615932010-01-24 19:26:24 +0000212 self.assertIsInstance(bi, tuple)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000213 self.assertEqual(len(bi), 2)
Ezio Melottie9615932010-01-24 19:26:24 +0000214 self.assertIsInstance(bi[0], int)
215 self.assertIsInstance(bi[1], int)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000216 self.assertEqual(bi[1], len(a))
Martin v. Löwis99866332002-03-01 10:27:01 +0000217
Walter Dörwald7fd94242003-05-18 00:47:47 +0000218 def test_byteswap(self):
Victor Stinner8dba4e02011-09-30 00:51:10 +0200219 if self.typecode == 'u':
220 example = '\U00100100'
221 else:
222 example = self.example
223 a = array.array(self.typecode, example)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000224 self.assertRaises(TypeError, a.byteswap, 42)
225 if a.itemsize in (1, 2, 4, 8):
Victor Stinner8dba4e02011-09-30 00:51:10 +0200226 b = array.array(self.typecode, example)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000227 b.byteswap()
228 if a.itemsize==1:
229 self.assertEqual(a, b)
230 else:
231 self.assertNotEqual(a, b)
232 b.byteswap()
233 self.assertEqual(a, b)
Martin v. Löwis99866332002-03-01 10:27:01 +0000234
Raymond Hettinger3aa82c02004-03-13 18:18:51 +0000235 def test_copy(self):
236 import copy
237 a = array.array(self.typecode, self.example)
238 b = copy.copy(a)
239 self.assertNotEqual(id(a), id(b))
240 self.assertEqual(a, b)
241
Thomas Wouters89f507f2006-12-13 04:49:30 +0000242 def test_deepcopy(self):
243 import copy
244 a = array.array(self.typecode, self.example)
245 b = copy.deepcopy(a)
246 self.assertNotEqual(id(a), id(b))
247 self.assertEqual(a, b)
248
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000249 def test_reduce_ex(self):
250 a = array.array(self.typecode, self.example)
251 for protocol in range(3):
Ezio Melottib3aedd42010-11-20 19:04:17 +0000252 self.assertIs(a.__reduce_ex__(protocol)[0], array.array)
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000253 for protocol in range(3, pickle.HIGHEST_PROTOCOL):
Ezio Melottib3aedd42010-11-20 19:04:17 +0000254 self.assertIs(a.__reduce_ex__(protocol)[0], array_reconstructor)
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000255
Raymond Hettingerb0900e62004-12-16 16:23:40 +0000256 def test_pickle(self):
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000257 for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
Raymond Hettingerb0900e62004-12-16 16:23:40 +0000258 a = array.array(self.typecode, self.example)
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000259 b = pickle.loads(pickle.dumps(a, protocol))
Raymond Hettingerb0900e62004-12-16 16:23:40 +0000260 self.assertNotEqual(id(a), id(b))
261 self.assertEqual(a, b)
262
263 a = ArraySubclass(self.typecode, self.example)
264 a.x = 10
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000265 b = pickle.loads(pickle.dumps(a, protocol))
Raymond Hettingerb0900e62004-12-16 16:23:40 +0000266 self.assertNotEqual(id(a), id(b))
267 self.assertEqual(a, b)
268 self.assertEqual(a.x, b.x)
269 self.assertEqual(type(a), type(b))
270
Guido van Rossumd8faa362007-04-27 19:54:29 +0000271 def test_pickle_for_empty_array(self):
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000272 for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
Guido van Rossumd8faa362007-04-27 19:54:29 +0000273 a = array.array(self.typecode)
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000274 b = pickle.loads(pickle.dumps(a, protocol))
Guido van Rossumd8faa362007-04-27 19:54:29 +0000275 self.assertNotEqual(id(a), id(b))
276 self.assertEqual(a, b)
277
278 a = ArraySubclass(self.typecode)
279 a.x = 10
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000280 b = pickle.loads(pickle.dumps(a, protocol))
Guido van Rossumd8faa362007-04-27 19:54:29 +0000281 self.assertNotEqual(id(a), id(b))
282 self.assertEqual(a, b)
283 self.assertEqual(a.x, b.x)
284 self.assertEqual(type(a), type(b))
285
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000286 def test_iterator_pickle(self):
Serhiy Storchakaaabafe72016-03-06 14:10:24 +0200287 orig = array.array(self.typecode, self.example)
288 data = list(orig)
289 data2 = data[::-1]
Serhiy Storchakabad12572014-12-15 14:03:42 +0200290 for proto in range(pickle.HIGHEST_PROTOCOL + 1):
Serhiy Storchakaaabafe72016-03-06 14:10:24 +0200291 # initial iterator
292 itorig = iter(orig)
293 d = pickle.dumps((itorig, orig), proto)
294 it, a = pickle.loads(d)
295 a.fromlist(data2)
296 self.assertEqual(type(it), type(itorig))
297 self.assertEqual(list(it), data + data2)
Serhiy Storchakabad12572014-12-15 14:03:42 +0200298
Serhiy Storchakaaabafe72016-03-06 14:10:24 +0200299 # running iterator
300 next(itorig)
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[1:] + data2)
306
307 # empty iterator
308 for i in range(1, len(data)):
309 next(itorig)
310 d = pickle.dumps((itorig, orig), proto)
311 it, a = pickle.loads(d)
312 a.fromlist(data2)
313 self.assertEqual(type(it), type(itorig))
314 self.assertEqual(list(it), data2)
315
316 # exhausted iterator
317 self.assertRaises(StopIteration, next, itorig)
318 d = pickle.dumps((itorig, orig), proto)
319 it, a = pickle.loads(d)
320 a.fromlist(data2)
Serhiy Storchakaab0d1982016-03-30 21:11:16 +0300321 self.assertEqual(list(it), [])
322
323 def test_exhausted_iterator(self):
324 a = array.array(self.typecode, self.example)
325 self.assertEqual(list(a), list(self.example))
326 exhit = iter(a)
327 empit = iter(a)
328 for x in exhit: # exhaust the iterator
329 next(empit) # not exhausted
330 a.append(self.outside)
331 self.assertEqual(list(exhit), [])
332 self.assertEqual(list(empit), [self.outside])
333 self.assertEqual(list(a), list(self.example) + [self.outside])
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000334
Walter Dörwald7fd94242003-05-18 00:47:47 +0000335 def test_insert(self):
336 a = array.array(self.typecode, self.example)
337 a.insert(0, self.example[0])
338 self.assertEqual(len(a), 1+len(self.example))
339 self.assertEqual(a[0], a[1])
340 self.assertRaises(TypeError, a.insert)
341 self.assertRaises(TypeError, a.insert, None)
Walter Dörwaldba39d9c2003-05-18 01:56:25 +0000342 self.assertRaises(TypeError, a.insert, 0, None)
Martin v. Löwis99866332002-03-01 10:27:01 +0000343
Walter Dörwald9e46abe2003-05-18 03:15:10 +0000344 a = array.array(self.typecode, self.example)
345 a.insert(-1, self.example[0])
346 self.assertEqual(
347 a,
348 array.array(
349 self.typecode,
350 self.example[:-1] + self.example[:1] + self.example[-1:]
351 )
352 )
353
354 a = array.array(self.typecode, self.example)
355 a.insert(-1000, self.example[0])
356 self.assertEqual(
357 a,
358 array.array(self.typecode, self.example[:1] + self.example)
359 )
360
361 a = array.array(self.typecode, self.example)
362 a.insert(1000, self.example[0])
363 self.assertEqual(
364 a,
365 array.array(self.typecode, self.example + self.example[:1])
366 )
367
Walter Dörwald7fd94242003-05-18 00:47:47 +0000368 def test_tofromfile(self):
369 a = array.array(self.typecode, 2*self.example)
370 self.assertRaises(TypeError, a.tofile)
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000371 support.unlink(support.TESTFN)
372 f = open(support.TESTFN, 'wb')
Walter Dörwald7fd94242003-05-18 00:47:47 +0000373 try:
374 a.tofile(f)
375 f.close()
376 b = array.array(self.typecode)
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000377 f = open(support.TESTFN, 'rb')
Walter Dörwald7fd94242003-05-18 00:47:47 +0000378 self.assertRaises(TypeError, b.fromfile)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000379 b.fromfile(f, len(self.example))
380 self.assertEqual(b, array.array(self.typecode, self.example))
381 self.assertNotEqual(a, b)
Hirokazu Yamamoto54d0df62009-03-06 03:04:07 +0000382 self.assertRaises(EOFError, b.fromfile, f, len(self.example)+1)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000383 self.assertEqual(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000384 f.close()
385 finally:
386 if not f.closed:
387 f.close()
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000388 support.unlink(support.TESTFN)
Roger E. Masse8db1b071996-12-09 20:09:16 +0000389
Antoine Pitrou8cb6dbf2010-07-21 16:41:31 +0000390 def test_fromfile_ioerror(self):
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200391 # Issue #5395: Check if fromfile raises a proper OSError
Antoine Pitrou8cb6dbf2010-07-21 16:41:31 +0000392 # instead of EOFError.
393 a = array.array(self.typecode)
394 f = open(support.TESTFN, 'wb')
395 try:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200396 self.assertRaises(OSError, a.fromfile, f, len(self.example))
Antoine Pitrou8cb6dbf2010-07-21 16:41:31 +0000397 finally:
398 f.close()
399 support.unlink(support.TESTFN)
400
Frank Wierzbicki17683432009-08-16 20:30:12 +0000401 def test_filewrite(self):
402 a = array.array(self.typecode, 2*self.example)
403 f = open(support.TESTFN, 'wb')
404 try:
405 f.write(a)
406 f.close()
407 b = array.array(self.typecode)
408 f = open(support.TESTFN, 'rb')
409 b.fromfile(f, len(self.example))
410 self.assertEqual(b, array.array(self.typecode, self.example))
411 self.assertNotEqual(a, b)
412 b.fromfile(f, len(self.example))
413 self.assertEqual(a, b)
414 f.close()
415 finally:
416 if not f.closed:
417 f.close()
418 support.unlink(support.TESTFN)
419
Walter Dörwald7fd94242003-05-18 00:47:47 +0000420 def test_tofromlist(self):
421 a = array.array(self.typecode, 2*self.example)
422 b = array.array(self.typecode)
423 self.assertRaises(TypeError, a.tolist, 42)
424 self.assertRaises(TypeError, b.fromlist)
425 self.assertRaises(TypeError, b.fromlist, 42)
426 self.assertRaises(TypeError, b.fromlist, [None])
427 b.fromlist(a.tolist())
428 self.assertEqual(a, b)
Fred Drake78334472000-06-28 17:50:51 +0000429
Walter Dörwald7fd94242003-05-18 00:47:47 +0000430 def test_tofromstring(self):
Brett Cannon1eb32c22014-10-10 16:26:45 -0400431 # Warnings not raised when arguments are incorrect as Argument Clinic
432 # handles that before the warning can be raised.
433 nb_warnings = 2
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +0000434 with warnings.catch_warnings(record=True) as r:
435 warnings.filterwarnings("always",
436 message=r"(to|from)string\(\) is deprecated",
437 category=DeprecationWarning)
438 a = array.array(self.typecode, 2*self.example)
439 b = array.array(self.typecode)
440 self.assertRaises(TypeError, a.tostring, 42)
441 self.assertRaises(TypeError, b.fromstring)
442 self.assertRaises(TypeError, b.fromstring, 42)
443 b.fromstring(a.tostring())
444 self.assertEqual(a, b)
445 if a.itemsize>1:
446 self.assertRaises(ValueError, b.fromstring, "x")
447 nb_warnings += 1
448 self.assertEqual(len(r), nb_warnings)
449
450 def test_tofrombytes(self):
Walter Dörwald7fd94242003-05-18 00:47:47 +0000451 a = array.array(self.typecode, 2*self.example)
452 b = array.array(self.typecode)
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +0000453 self.assertRaises(TypeError, a.tobytes, 42)
454 self.assertRaises(TypeError, b.frombytes)
455 self.assertRaises(TypeError, b.frombytes, 42)
456 b.frombytes(a.tobytes())
457 c = array.array(self.typecode, bytearray(a.tobytes()))
Walter Dörwald7fd94242003-05-18 00:47:47 +0000458 self.assertEqual(a, b)
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +0000459 self.assertEqual(a, c)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000460 if a.itemsize>1:
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +0000461 self.assertRaises(ValueError, b.frombytes, b"x")
Fred Drake78334472000-06-28 17:50:51 +0000462
Alexander Belopolskyef4a03f2011-01-11 21:44:00 +0000463 def test_fromarray(self):
464 a = array.array(self.typecode, self.example)
465 b = array.array(self.typecode, a)
466 self.assertEqual(a, b)
467
Walter Dörwald7fd94242003-05-18 00:47:47 +0000468 def test_repr(self):
469 a = array.array(self.typecode, 2*self.example)
470 self.assertEqual(a, eval(repr(a), {"array": array.array}))
Fred Drake78334472000-06-28 17:50:51 +0000471
Walter Dörwald7fd94242003-05-18 00:47:47 +0000472 a = array.array(self.typecode)
473 self.assertEqual(repr(a), "array('%s')" % self.typecode)
Roger E. Masse8db1b071996-12-09 20:09:16 +0000474
Walter Dörwald7fd94242003-05-18 00:47:47 +0000475 def test_str(self):
476 a = array.array(self.typecode, 2*self.example)
477 str(a)
Roger E. Masse8db1b071996-12-09 20:09:16 +0000478
Walter Dörwald7fd94242003-05-18 00:47:47 +0000479 def test_cmp(self):
480 a = array.array(self.typecode, self.example)
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200481 self.assertIs(a == 42, False)
482 self.assertIs(a != 42, True)
Tim Peterscc78e472000-11-14 21:36:07 +0000483
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200484 self.assertIs(a == a, True)
485 self.assertIs(a != a, False)
486 self.assertIs(a < a, False)
487 self.assertIs(a <= a, True)
488 self.assertIs(a > a, False)
489 self.assertIs(a >= a, True)
Tim Peterscc78e472000-11-14 21:36:07 +0000490
Neal Norwitzbd2835c2006-03-17 08:54:15 +0000491 al = array.array(self.typecode, self.smallerexample)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000492 ab = array.array(self.typecode, self.biggerexample)
Guido van Rossum7f1d3aa1998-07-16 15:31:43 +0000493
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200494 self.assertIs(a == 2*a, False)
495 self.assertIs(a != 2*a, True)
496 self.assertIs(a < 2*a, True)
497 self.assertIs(a <= 2*a, True)
498 self.assertIs(a > 2*a, False)
499 self.assertIs(a >= 2*a, False)
Martin v. Löwis99866332002-03-01 10:27:01 +0000500
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200501 self.assertIs(a == al, False)
502 self.assertIs(a != al, True)
503 self.assertIs(a < al, False)
504 self.assertIs(a <= al, False)
505 self.assertIs(a > al, True)
506 self.assertIs(a >= al, True)
Martin v. Löwis99866332002-03-01 10:27:01 +0000507
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200508 self.assertIs(a == ab, False)
509 self.assertIs(a != ab, True)
510 self.assertIs(a < ab, True)
511 self.assertIs(a <= ab, True)
512 self.assertIs(a > ab, False)
513 self.assertIs(a >= ab, False)
Martin v. Löwis99866332002-03-01 10:27:01 +0000514
Walter Dörwald7fd94242003-05-18 00:47:47 +0000515 def test_add(self):
516 a = array.array(self.typecode, self.example) \
517 + array.array(self.typecode, self.example[::-1])
518 self.assertEqual(
519 a,
520 array.array(self.typecode, self.example + self.example[::-1])
521 )
Martin v. Löwis99866332002-03-01 10:27:01 +0000522
Walter Dörwald7fd94242003-05-18 00:47:47 +0000523 b = array.array(self.badtypecode())
524 self.assertRaises(TypeError, a.__add__, b)
525
526 self.assertRaises(TypeError, a.__add__, "bad")
527
528 def test_iadd(self):
529 a = array.array(self.typecode, self.example[::-1])
530 b = a
531 a += array.array(self.typecode, 2*self.example)
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200532 self.assertIs(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000533 self.assertEqual(
534 a,
535 array.array(self.typecode, self.example[::-1]+2*self.example)
536 )
Alexandre Vassalottie503cf92009-07-05 06:25:14 +0000537 a = array.array(self.typecode, self.example)
538 a += a
539 self.assertEqual(
540 a,
541 array.array(self.typecode, self.example + self.example)
542 )
Walter Dörwald7fd94242003-05-18 00:47:47 +0000543
544 b = array.array(self.badtypecode())
545 self.assertRaises(TypeError, a.__add__, b)
546
547 self.assertRaises(TypeError, a.__iadd__, "bad")
548
549 def test_mul(self):
550 a = 5*array.array(self.typecode, self.example)
551 self.assertEqual(
552 a,
553 array.array(self.typecode, 5*self.example)
554 )
555
556 a = array.array(self.typecode, self.example)*5
557 self.assertEqual(
558 a,
559 array.array(self.typecode, self.example*5)
560 )
561
562 a = 0*array.array(self.typecode, self.example)
563 self.assertEqual(
564 a,
565 array.array(self.typecode)
566 )
567
568 a = (-1)*array.array(self.typecode, self.example)
569 self.assertEqual(
570 a,
571 array.array(self.typecode)
572 )
573
Georg Brandlc29cc6a2010-12-04 11:02:04 +0000574 a = 5 * array.array(self.typecode, self.example[:1])
575 self.assertEqual(
576 a,
577 array.array(self.typecode, [a[0]] * 5)
578 )
579
Walter Dörwald7fd94242003-05-18 00:47:47 +0000580 self.assertRaises(TypeError, a.__mul__, "bad")
581
582 def test_imul(self):
583 a = array.array(self.typecode, self.example)
584 b = a
585
586 a *= 5
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200587 self.assertIs(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000588 self.assertEqual(
589 a,
590 array.array(self.typecode, 5*self.example)
591 )
592
593 a *= 0
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200594 self.assertIs(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000595 self.assertEqual(a, array.array(self.typecode))
596
597 a *= 1000
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200598 self.assertIs(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000599 self.assertEqual(a, array.array(self.typecode))
600
601 a *= -1
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 = array.array(self.typecode, self.example)
606 a *= -1
607 self.assertEqual(a, array.array(self.typecode))
608
609 self.assertRaises(TypeError, a.__imul__, "bad")
610
611 def test_getitem(self):
612 a = array.array(self.typecode, self.example)
613 self.assertEntryEqual(a[0], self.example[0])
Guido van Rossume2a383d2007-01-15 16:59:06 +0000614 self.assertEntryEqual(a[0], self.example[0])
Walter Dörwald7fd94242003-05-18 00:47:47 +0000615 self.assertEntryEqual(a[-1], self.example[-1])
Guido van Rossume2a383d2007-01-15 16:59:06 +0000616 self.assertEntryEqual(a[-1], self.example[-1])
Walter Dörwald7fd94242003-05-18 00:47:47 +0000617 self.assertEntryEqual(a[len(self.example)-1], self.example[-1])
618 self.assertEntryEqual(a[-len(self.example)], self.example[0])
619 self.assertRaises(TypeError, a.__getitem__)
620 self.assertRaises(IndexError, a.__getitem__, len(self.example))
621 self.assertRaises(IndexError, a.__getitem__, -len(self.example)-1)
622
623 def test_setitem(self):
624 a = array.array(self.typecode, self.example)
625 a[0] = a[-1]
626 self.assertEntryEqual(a[0], a[-1])
627
628 a = array.array(self.typecode, self.example)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000629 a[0] = a[-1]
Walter Dörwald7fd94242003-05-18 00:47:47 +0000630 self.assertEntryEqual(a[0], a[-1])
631
632 a = array.array(self.typecode, self.example)
633 a[-1] = a[0]
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[-1] = a[0]
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[len(self.example)-1] = a[0]
642 self.assertEntryEqual(a[0], a[-1])
643
644 a = array.array(self.typecode, self.example)
645 a[-len(self.example)] = a[-1]
646 self.assertEntryEqual(a[0], a[-1])
647
648 self.assertRaises(TypeError, a.__setitem__)
649 self.assertRaises(TypeError, a.__setitem__, None)
650 self.assertRaises(TypeError, a.__setitem__, 0, None)
651 self.assertRaises(
652 IndexError,
653 a.__setitem__,
654 len(self.example), self.example[0]
655 )
656 self.assertRaises(
657 IndexError,
658 a.__setitem__,
659 -len(self.example)-1, self.example[0]
660 )
661
662 def test_delitem(self):
663 a = array.array(self.typecode, self.example)
664 del a[0]
665 self.assertEqual(
666 a,
667 array.array(self.typecode, self.example[1:])
668 )
669
670 a = array.array(self.typecode, self.example)
671 del a[-1]
672 self.assertEqual(
673 a,
674 array.array(self.typecode, self.example[:-1])
675 )
676
677 a = array.array(self.typecode, self.example)
678 del a[len(self.example)-1]
679 self.assertEqual(
680 a,
681 array.array(self.typecode, self.example[:-1])
682 )
683
684 a = array.array(self.typecode, self.example)
685 del a[-len(self.example)]
686 self.assertEqual(
687 a,
688 array.array(self.typecode, self.example[1:])
689 )
690
691 self.assertRaises(TypeError, a.__delitem__)
692 self.assertRaises(TypeError, a.__delitem__, None)
693 self.assertRaises(IndexError, a.__delitem__, len(self.example))
694 self.assertRaises(IndexError, a.__delitem__, -len(self.example)-1)
695
696 def test_getslice(self):
697 a = array.array(self.typecode, self.example)
698 self.assertEqual(a[:], a)
699
700 self.assertEqual(
701 a[1:],
702 array.array(self.typecode, self.example[1:])
703 )
704
705 self.assertEqual(
706 a[:1],
707 array.array(self.typecode, self.example[:1])
708 )
709
710 self.assertEqual(
711 a[:-1],
712 array.array(self.typecode, self.example[:-1])
713 )
714
715 self.assertEqual(
716 a[-1:],
717 array.array(self.typecode, self.example[-1:])
718 )
719
720 self.assertEqual(
721 a[-1:-1],
722 array.array(self.typecode)
723 )
724
725 self.assertEqual(
Walter Dörwald1083c242005-01-21 21:16:51 +0000726 a[2:1],
727 array.array(self.typecode)
728 )
729
730 self.assertEqual(
Walter Dörwald7fd94242003-05-18 00:47:47 +0000731 a[1000:],
732 array.array(self.typecode)
733 )
734 self.assertEqual(a[-1000:], a)
735 self.assertEqual(a[:1000], a)
736 self.assertEqual(
737 a[:-1000],
738 array.array(self.typecode)
739 )
740 self.assertEqual(a[-1000:1000], a)
741 self.assertEqual(
742 a[2000:1000],
743 array.array(self.typecode)
744 )
745
Thomas Woutersed03b412007-08-28 21:37:11 +0000746 def test_extended_getslice(self):
747 # Test extended slicing by comparing with list slicing
748 # (Assumes list conversion works correctly, too)
749 a = array.array(self.typecode, self.example)
750 indices = (0, None, 1, 3, 19, 100, -1, -2, -31, -100)
751 for start in indices:
752 for stop in indices:
753 # Everything except the initial 0 (invalid step)
754 for step in indices[1:]:
755 self.assertEqual(list(a[start:stop:step]),
756 list(a)[start:stop:step])
757
Walter Dörwald7fd94242003-05-18 00:47:47 +0000758 def test_setslice(self):
759 a = array.array(self.typecode, self.example)
760 a[:1] = a
761 self.assertEqual(
762 a,
763 array.array(self.typecode, self.example + self.example[1:])
764 )
765
766 a = array.array(self.typecode, self.example)
Fred Drake004d5e62000-10-23 17:22:08 +0000767 a[:-1] = a
Walter Dörwald7fd94242003-05-18 00:47:47 +0000768 self.assertEqual(
769 a,
770 array.array(self.typecode, self.example + self.example[-1:])
771 )
772
773 a = array.array(self.typecode, self.example)
774 a[-1:] = a
775 self.assertEqual(
776 a,
777 array.array(self.typecode, self.example[:-1] + self.example)
778 )
779
780 a = array.array(self.typecode, self.example)
Fred Drake004d5e62000-10-23 17:22:08 +0000781 a[1:] = a
Walter Dörwald7fd94242003-05-18 00:47:47 +0000782 self.assertEqual(
783 a,
784 array.array(self.typecode, self.example[:1] + self.example)
785 )
786
787 a = array.array(self.typecode, self.example)
Fred Drake004d5e62000-10-23 17:22:08 +0000788 a[1:-1] = a
Walter Dörwald7fd94242003-05-18 00:47:47 +0000789 self.assertEqual(
790 a,
791 array.array(
792 self.typecode,
793 self.example[:1] + self.example + self.example[-1:]
794 )
795 )
796
797 a = array.array(self.typecode, self.example)
798 a[1000:] = a
799 self.assertEqual(
800 a,
801 array.array(self.typecode, 2*self.example)
802 )
803
804 a = array.array(self.typecode, self.example)
805 a[-1000:] = a
806 self.assertEqual(
807 a,
808 array.array(self.typecode, self.example)
809 )
810
811 a = array.array(self.typecode, self.example)
812 a[:1000] = a
813 self.assertEqual(
814 a,
815 array.array(self.typecode, self.example)
816 )
817
818 a = array.array(self.typecode, self.example)
819 a[:-1000] = a
820 self.assertEqual(
821 a,
822 array.array(self.typecode, 2*self.example)
823 )
824
825 a = array.array(self.typecode, self.example)
826 a[1:0] = a
827 self.assertEqual(
828 a,
829 array.array(self.typecode, self.example[:1] + self.example + self.example[1:])
830 )
831
832 a = array.array(self.typecode, self.example)
833 a[2000:1000] = a
834 self.assertEqual(
835 a,
836 array.array(self.typecode, 2*self.example)
837 )
838
839 a = array.array(self.typecode, self.example)
Thomas Woutersed03b412007-08-28 21:37:11 +0000840 self.assertRaises(TypeError, a.__setitem__, slice(0, 0), None)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000841 self.assertRaises(TypeError, a.__setitem__, slice(0, 1), None)
842
843 b = array.array(self.badtypecode())
Thomas Woutersed03b412007-08-28 21:37:11 +0000844 self.assertRaises(TypeError, a.__setitem__, slice(0, 0), b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000845 self.assertRaises(TypeError, a.__setitem__, slice(0, 1), b)
846
Thomas Woutersed03b412007-08-28 21:37:11 +0000847 def test_extended_set_del_slice(self):
848 indices = (0, None, 1, 3, 19, 100, -1, -2, -31, -100)
849 for start in indices:
850 for stop in indices:
851 # Everything except the initial 0 (invalid step)
852 for step in indices[1:]:
853 a = array.array(self.typecode, self.example)
854 L = list(a)
855 # Make sure we have a slice of exactly the right length,
856 # but with (hopefully) different data.
857 data = L[start:stop:step]
858 data.reverse()
859 L[start:stop:step] = data
860 a[start:stop:step] = array.array(self.typecode, data)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000861 self.assertEqual(a, array.array(self.typecode, L))
Thomas Woutersed03b412007-08-28 21:37:11 +0000862
863 del L[start:stop:step]
864 del a[start:stop:step]
Ezio Melottib3aedd42010-11-20 19:04:17 +0000865 self.assertEqual(a, array.array(self.typecode, L))
Thomas Woutersed03b412007-08-28 21:37:11 +0000866
Walter Dörwald7fd94242003-05-18 00:47:47 +0000867 def test_index(self):
868 example = 2*self.example
869 a = array.array(self.typecode, example)
870 self.assertRaises(TypeError, a.index)
871 for x in example:
872 self.assertEqual(a.index(x), example.index(x))
873 self.assertRaises(ValueError, a.index, None)
874 self.assertRaises(ValueError, a.index, self.outside)
875
876 def test_count(self):
877 example = 2*self.example
878 a = array.array(self.typecode, example)
879 self.assertRaises(TypeError, a.count)
880 for x in example:
881 self.assertEqual(a.count(x), example.count(x))
882 self.assertEqual(a.count(self.outside), 0)
883 self.assertEqual(a.count(None), 0)
884
885 def test_remove(self):
886 for x in self.example:
887 example = 2*self.example
888 a = array.array(self.typecode, example)
889 pos = example.index(x)
890 example2 = example[:pos] + example[pos+1:]
891 a.remove(x)
892 self.assertEqual(a, array.array(self.typecode, example2))
893
894 a = array.array(self.typecode, self.example)
895 self.assertRaises(ValueError, a.remove, self.outside)
896
897 self.assertRaises(ValueError, a.remove, None)
898
899 def test_pop(self):
900 a = array.array(self.typecode)
901 self.assertRaises(IndexError, a.pop)
902
903 a = array.array(self.typecode, 2*self.example)
904 self.assertRaises(TypeError, a.pop, 42, 42)
905 self.assertRaises(TypeError, a.pop, None)
906 self.assertRaises(IndexError, a.pop, len(a))
907 self.assertRaises(IndexError, a.pop, -len(a)-1)
908
909 self.assertEntryEqual(a.pop(0), self.example[0])
910 self.assertEqual(
911 a,
912 array.array(self.typecode, self.example[1:]+self.example)
913 )
914 self.assertEntryEqual(a.pop(1), self.example[2])
915 self.assertEqual(
916 a,
917 array.array(self.typecode, self.example[1:2]+self.example[3:]+self.example)
918 )
919 self.assertEntryEqual(a.pop(0), self.example[1])
920 self.assertEntryEqual(a.pop(), self.example[-1])
921 self.assertEqual(
922 a,
923 array.array(self.typecode, self.example[3:]+self.example[:-1])
924 )
925
926 def test_reverse(self):
927 a = array.array(self.typecode, self.example)
928 self.assertRaises(TypeError, a.reverse, 42)
Fred Drake004d5e62000-10-23 17:22:08 +0000929 a.reverse()
Walter Dörwald7fd94242003-05-18 00:47:47 +0000930 self.assertEqual(
931 a,
932 array.array(self.typecode, self.example[::-1])
933 )
934
935 def test_extend(self):
936 a = array.array(self.typecode, self.example)
937 self.assertRaises(TypeError, a.extend)
938 a.extend(array.array(self.typecode, self.example[::-1]))
939 self.assertEqual(
940 a,
941 array.array(self.typecode, self.example+self.example[::-1])
942 )
943
Alexandre Vassalottie503cf92009-07-05 06:25:14 +0000944 a = array.array(self.typecode, self.example)
945 a.extend(a)
946 self.assertEqual(
947 a,
948 array.array(self.typecode, self.example+self.example)
949 )
950
Walter Dörwald7fd94242003-05-18 00:47:47 +0000951 b = array.array(self.badtypecode())
952 self.assertRaises(TypeError, a.extend, b)
953
Raymond Hettinger49f9bd12004-03-14 05:43:59 +0000954 a = array.array(self.typecode, self.example)
955 a.extend(self.example[::-1])
956 self.assertEqual(
957 a,
958 array.array(self.typecode, self.example+self.example[::-1])
959 )
960
Raymond Hettinger6ab78cd2004-08-29 07:50:43 +0000961 def test_constructor_with_iterable_argument(self):
962 a = array.array(self.typecode, iter(self.example))
963 b = array.array(self.typecode, self.example)
964 self.assertEqual(a, b)
965
966 # non-iterable argument
967 self.assertRaises(TypeError, array.array, self.typecode, 10)
968
969 # pass through errors raised in __iter__
970 class A:
971 def __iter__(self):
972 raise UnicodeError
973 self.assertRaises(UnicodeError, array.array, self.typecode, A())
974
975 # pass through errors raised in next()
976 def B():
977 raise UnicodeError
978 yield None
979 self.assertRaises(UnicodeError, array.array, self.typecode, B())
980
Walter Dörwald7fd94242003-05-18 00:47:47 +0000981 def test_coveritertraverse(self):
982 try:
983 import gc
984 except ImportError:
Zachary Ware9fe6d862013-12-08 00:20:35 -0600985 self.skipTest('gc module not available')
Walter Dörwald7fd94242003-05-18 00:47:47 +0000986 a = array.array(self.typecode)
987 l = [iter(a)]
988 l.append(l)
989 gc.collect()
990
991 def test_buffer(self):
992 a = array.array(self.typecode, self.example)
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +0000993 m = memoryview(a)
Alexandre Vassalotti47137252009-07-05 19:57:00 +0000994 expected = m.tobytes()
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +0000995 self.assertEqual(a.tobytes(), expected)
996 self.assertEqual(a.tobytes()[0], expected[0])
Alexandre Vassalotti47137252009-07-05 19:57:00 +0000997 # Resizing is forbidden when there are buffer exports.
998 # For issue 4509, we also check after each error that
999 # the array was not modified.
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +00001000 self.assertRaises(BufferError, a.append, a[0])
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001001 self.assertEqual(m.tobytes(), expected)
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +00001002 self.assertRaises(BufferError, a.extend, a[0:1])
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001003 self.assertEqual(m.tobytes(), expected)
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +00001004 self.assertRaises(BufferError, a.remove, a[0])
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001005 self.assertEqual(m.tobytes(), expected)
1006 self.assertRaises(BufferError, a.pop, 0)
1007 self.assertEqual(m.tobytes(), expected)
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +00001008 self.assertRaises(BufferError, a.fromlist, a.tolist())
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001009 self.assertEqual(m.tobytes(), expected)
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +00001010 self.assertRaises(BufferError, a.frombytes, a.tobytes())
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001011 self.assertEqual(m.tobytes(), expected)
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +00001012 if self.typecode == 'u':
1013 self.assertRaises(BufferError, a.fromunicode, a.tounicode())
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001014 self.assertEqual(m.tobytes(), expected)
Raymond Hettinger3471b1c2009-01-27 11:06:40 +00001015 self.assertRaises(BufferError, operator.imul, a, 2)
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001016 self.assertEqual(m.tobytes(), expected)
Raymond Hettinger3471b1c2009-01-27 11:06:40 +00001017 self.assertRaises(BufferError, operator.imul, a, 0)
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001018 self.assertEqual(m.tobytes(), expected)
1019 self.assertRaises(BufferError, operator.setitem, a, slice(0, 0), a)
1020 self.assertEqual(m.tobytes(), expected)
1021 self.assertRaises(BufferError, operator.delitem, a, 0)
1022 self.assertEqual(m.tobytes(), expected)
1023 self.assertRaises(BufferError, operator.delitem, a, slice(0, 1))
1024 self.assertEqual(m.tobytes(), expected)
Walter Dörwald7fd94242003-05-18 00:47:47 +00001025
Raymond Hettingercb87bc82004-05-31 00:35:52 +00001026 def test_weakref(self):
1027 s = array.array(self.typecode, self.example)
Alexandre Vassalottiad077152009-07-15 17:49:23 +00001028 p = weakref.proxy(s)
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +00001029 self.assertEqual(p.tobytes(), s.tobytes())
Raymond Hettingercb87bc82004-05-31 00:35:52 +00001030 s = None
1031 self.assertRaises(ReferenceError, len, p)
1032
Serhiy Storchaka43767632013-11-03 21:31:38 +02001033 @unittest.skipUnless(hasattr(sys, 'getrefcount'),
1034 'test needs sys.getrefcount()')
Skip Montanarod5cf0b82003-08-03 23:02:10 +00001035 def test_bug_782369(self):
Serhiy Storchaka43767632013-11-03 21:31:38 +02001036 for i in range(10):
1037 b = array.array('B', range(64))
1038 rc = sys.getrefcount(10)
1039 for i in range(10):
1040 b = array.array('B', range(64))
1041 self.assertEqual(rc, sys.getrefcount(10))
Skip Montanarod5cf0b82003-08-03 23:02:10 +00001042
Thomas Woutersb2137042007-02-01 18:02:27 +00001043 def test_subclass_with_kwargs(self):
1044 # SF bug #1486663 -- this used to erroneously raise a TypeError
1045 ArraySubclassWithKwargs('b', newarg=1)
Raymond Hettingercb87bc82004-05-31 00:35:52 +00001046
Guido van Rossum6b826ab2007-07-03 16:22:09 +00001047 def test_create_from_bytes(self):
Alexandre Vassalotti7e4f3212009-07-05 05:38:18 +00001048 # XXX This test probably needs to be moved in a subclass or
1049 # generalized to use self.typecode.
Guido van Rossum6b826ab2007-07-03 16:22:09 +00001050 a = array.array('H', b"1234")
1051 self.assertEqual(len(a) * a.itemsize, 4)
1052
Meador Inge03b4d502012-08-10 22:35:45 -05001053 @support.cpython_only
1054 def test_sizeof_with_buffer(self):
1055 a = array.array(self.typecode, self.example)
Meador Inge80dd1af2012-08-10 23:21:39 -05001056 basesize = support.calcvobjsize('Pn2Pi')
Meador Inge03b4d502012-08-10 22:35:45 -05001057 buffer_size = a.buffer_info()[1] * a.itemsize
1058 support.check_sizeof(self, a, basesize + buffer_size)
1059
1060 @support.cpython_only
1061 def test_sizeof_without_buffer(self):
1062 a = array.array(self.typecode)
Meador Inge80dd1af2012-08-10 23:21:39 -05001063 basesize = support.calcvobjsize('Pn2Pi')
Meador Inge03b4d502012-08-10 22:35:45 -05001064 support.check_sizeof(self, a, basesize)
1065
Alexandre Vassalotti9730e332013-11-29 20:47:15 -08001066 def test_initialize_with_unicode(self):
1067 if self.typecode != 'u':
1068 with self.assertRaises(TypeError) as cm:
1069 a = array.array(self.typecode, 'foo')
1070 self.assertIn("cannot use a str", str(cm.exception))
1071 with self.assertRaises(TypeError) as cm:
1072 a = array.array(self.typecode, array.array('u', 'foo'))
1073 self.assertIn("cannot use a unicode array", str(cm.exception))
1074 else:
1075 a = array.array(self.typecode, "foo")
1076 a = array.array(self.typecode, array.array('u', 'foo'))
1077
Stefan Krah650c1e82015-02-03 21:43:23 +01001078 @support.cpython_only
1079 def test_obsolete_write_lock(self):
1080 from _testcapi import getbuffer_with_null_view
1081 a = array.array('B', b"")
1082 self.assertRaises(BufferError, getbuffer_with_null_view, a)
Raymond Hettingercb87bc82004-05-31 00:35:52 +00001083
Serhiy Storchakaab0d1982016-03-30 21:11:16 +03001084 def test_free_after_iterating(self):
1085 support.check_free_after_iterating(self, iter, array.array,
1086 (self.typecode,))
1087 support.check_free_after_iterating(self, reversed, array.array,
1088 (self.typecode,))
1089
Walter Dörwald7fd94242003-05-18 00:47:47 +00001090class StringTest(BaseTest):
1091
1092 def test_setitem(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001093 super().test_setitem()
Walter Dörwald7fd94242003-05-18 00:47:47 +00001094 a = array.array(self.typecode, self.example)
1095 self.assertRaises(TypeError, a.__setitem__, 0, self.example[:2])
1096
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001097class UnicodeTest(StringTest, unittest.TestCase):
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001098 typecode = 'u'
1099 example = '\x01\u263a\x00\ufeff'
1100 smallerexample = '\x01\u263a\x00\ufefe'
1101 biggerexample = '\x01\u263a\x01\ufeff'
1102 outside = str('\x33')
Victor Stinner8d4734f2012-08-08 20:09:21 +02001103 minitemsize = 2
Walter Dörwald7fd94242003-05-18 00:47:47 +00001104
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001105 def test_unicode(self):
1106 self.assertRaises(TypeError, array.array, 'b', 'foo')
Walter Dörwald7fd94242003-05-18 00:47:47 +00001107
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001108 a = array.array('u', '\xa0\xc2\u1234')
1109 a.fromunicode(' ')
1110 a.fromunicode('')
1111 a.fromunicode('')
1112 a.fromunicode('\x11abc\xff\u1234')
1113 s = a.tounicode()
1114 self.assertEqual(s, '\xa0\xc2\u1234 \x11abc\xff\u1234')
Victor Stinner9d512ab2012-08-09 00:43:56 +02001115 self.assertEqual(a.itemsize, sizeof_wchar)
Walter Dörwald7fd94242003-05-18 00:47:47 +00001116
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001117 s = '\x00="\'a\\b\x80\xff\u0000\u0001\u1234'
1118 a = array.array('u', s)
1119 self.assertEqual(
1120 repr(a),
Georg Brandl559e5d72008-06-11 18:37:52 +00001121 "array('u', '\\x00=\"\\'a\\\\b\\x80\xff\\x00\\x01\u1234')")
Walter Dörwald7fd94242003-05-18 00:47:47 +00001122
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001123 self.assertRaises(TypeError, a.fromunicode)
Walter Dörwald7fd94242003-05-18 00:47:47 +00001124
Victor Stinner29ec5952013-02-26 00:27:38 +01001125 def test_issue17223(self):
1126 # this used to crash
Victor Stinnerc472c5d2013-02-26 22:52:11 +01001127 if sizeof_wchar == 4:
1128 # U+FFFFFFFF is an invalid code point in Unicode 6.0
1129 invalid_str = b'\xff\xff\xff\xff'
1130 else:
Victor Stinner29c00342013-03-08 02:33:06 +01001131 # PyUnicode_FromUnicode() cannot fail with 16-bit wchar_t
1132 self.skipTest("specific to 32-bit wchar_t")
Victor Stinnerc472c5d2013-02-26 22:52:11 +01001133 a = array.array('u', invalid_str)
Victor Stinner29ec5952013-02-26 00:27:38 +01001134 self.assertRaises(ValueError, a.tounicode)
1135 self.assertRaises(ValueError, str, a)
1136
Walter Dörwald7fd94242003-05-18 00:47:47 +00001137class NumberTest(BaseTest):
1138
1139 def test_extslice(self):
1140 a = array.array(self.typecode, range(5))
1141 self.assertEqual(a[::], a)
1142 self.assertEqual(a[::2], array.array(self.typecode, [0,2,4]))
1143 self.assertEqual(a[1::2], array.array(self.typecode, [1,3]))
1144 self.assertEqual(a[::-1], array.array(self.typecode, [4,3,2,1,0]))
1145 self.assertEqual(a[::-2], array.array(self.typecode, [4,2,0]))
1146 self.assertEqual(a[3::-2], array.array(self.typecode, [3,1]))
1147 self.assertEqual(a[-100:100:], a)
1148 self.assertEqual(a[100:-100:-1], a[::-1])
Guido van Rossume2a383d2007-01-15 16:59:06 +00001149 self.assertEqual(a[-100:100:2], array.array(self.typecode, [0,2,4]))
Walter Dörwald7fd94242003-05-18 00:47:47 +00001150 self.assertEqual(a[1000:2000:2], array.array(self.typecode, []))
1151 self.assertEqual(a[-1000:-2000:-2], array.array(self.typecode, []))
1152
1153 def test_delslice(self):
1154 a = array.array(self.typecode, range(5))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001155 del a[::2]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001156 self.assertEqual(a, array.array(self.typecode, [1,3]))
1157 a = array.array(self.typecode, range(5))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001158 del a[1::2]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001159 self.assertEqual(a, array.array(self.typecode, [0,2,4]))
1160 a = array.array(self.typecode, range(5))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001161 del a[1::-2]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001162 self.assertEqual(a, array.array(self.typecode, [0,2,3,4]))
1163 a = array.array(self.typecode, range(10))
Michael W. Hudson56796f62002-07-29 14:35:04 +00001164 del a[::1000]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001165 self.assertEqual(a, array.array(self.typecode, [1,2,3,4,5,6,7,8,9]))
Mark Dickinsonbc099642010-01-29 17:27:24 +00001166 # test issue7788
1167 a = array.array(self.typecode, range(10))
1168 del a[9::1<<333]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001169
1170 def test_assignment(self):
1171 a = array.array(self.typecode, range(10))
1172 a[::2] = array.array(self.typecode, [42]*5)
1173 self.assertEqual(a, array.array(self.typecode, [42, 1, 42, 3, 42, 5, 42, 7, 42, 9]))
1174 a = array.array(self.typecode, range(10))
1175 a[::-4] = array.array(self.typecode, [10]*3)
1176 self.assertEqual(a, array.array(self.typecode, [0, 10, 2, 3, 4, 10, 6, 7, 8 ,10]))
1177 a = array.array(self.typecode, range(4))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001178 a[::-1] = a
Walter Dörwald7fd94242003-05-18 00:47:47 +00001179 self.assertEqual(a, array.array(self.typecode, [3, 2, 1, 0]))
1180 a = array.array(self.typecode, range(10))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001181 b = a[:]
1182 c = a[:]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001183 ins = array.array(self.typecode, range(2))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001184 a[2:3] = ins
1185 b[slice(2,3)] = ins
1186 c[2:3:] = ins
Fred Drake004d5e62000-10-23 17:22:08 +00001187
Walter Dörwald7fd94242003-05-18 00:47:47 +00001188 def test_iterationcontains(self):
1189 a = array.array(self.typecode, range(10))
Guido van Rossum805365e2007-05-07 22:24:25 +00001190 self.assertEqual(list(a), list(range(10)))
Walter Dörwald7fd94242003-05-18 00:47:47 +00001191 b = array.array(self.typecode, [20])
1192 self.assertEqual(a[-1] in a, True)
1193 self.assertEqual(b[0] not in a, True)
1194
1195 def check_overflow(self, lower, upper):
1196 # method to be used by subclasses
1197
1198 # should not overflow assigning lower limit
1199 a = array.array(self.typecode, [lower])
1200 a[0] = lower
1201 # should overflow assigning less than lower limit
1202 self.assertRaises(OverflowError, array.array, self.typecode, [lower-1])
1203 self.assertRaises(OverflowError, a.__setitem__, 0, lower-1)
1204 # should not overflow assigning upper limit
1205 a = array.array(self.typecode, [upper])
1206 a[0] = upper
1207 # should overflow assigning more than upper limit
1208 self.assertRaises(OverflowError, array.array, self.typecode, [upper+1])
1209 self.assertRaises(OverflowError, a.__setitem__, 0, upper+1)
1210
1211 def test_subclassing(self):
1212 typecode = self.typecode
1213 class ExaggeratingArray(array.array):
1214 __slots__ = ['offset']
1215
1216 def __new__(cls, typecode, data, offset):
1217 return array.array.__new__(cls, typecode, data)
1218
1219 def __init__(self, typecode, data, offset):
1220 self.offset = offset
1221
1222 def __getitem__(self, i):
1223 return array.array.__getitem__(self, i) + self.offset
1224
1225 a = ExaggeratingArray(self.typecode, [3, 6, 7, 11], 4)
1226 self.assertEntryEqual(a[0], 7)
1227
1228 self.assertRaises(AttributeError, setattr, a, "color", "blue")
1229
Alexander Belopolskyef4a03f2011-01-11 21:44:00 +00001230 def test_frombytearray(self):
1231 a = array.array('b', range(10))
1232 b = array.array(self.typecode, a)
1233 self.assertEqual(a, b)
1234
Walter Dörwald7fd94242003-05-18 00:47:47 +00001235class SignedNumberTest(NumberTest):
1236 example = [-1, 0, 1, 42, 0x7f]
1237 smallerexample = [-1, 0, 1, 42, 0x7e]
1238 biggerexample = [-1, 0, 1, 43, 0x7f]
1239 outside = 23
1240
1241 def test_overflow(self):
1242 a = array.array(self.typecode)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001243 lower = -1 * int(pow(2, a.itemsize * 8 - 1))
1244 upper = int(pow(2, a.itemsize * 8 - 1)) - 1
Walter Dörwald7fd94242003-05-18 00:47:47 +00001245 self.check_overflow(lower, upper)
1246
1247class UnsignedNumberTest(NumberTest):
1248 example = [0, 1, 17, 23, 42, 0xff]
1249 smallerexample = [0, 1, 17, 23, 42, 0xfe]
1250 biggerexample = [0, 1, 17, 23, 43, 0xff]
1251 outside = 0xaa
1252
1253 def test_overflow(self):
1254 a = array.array(self.typecode)
1255 lower = 0
Guido van Rossume2a383d2007-01-15 16:59:06 +00001256 upper = int(pow(2, a.itemsize * 8)) - 1
Walter Dörwald7fd94242003-05-18 00:47:47 +00001257 self.check_overflow(lower, upper)
Fred Drake004d5e62000-10-23 17:22:08 +00001258
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +00001259 def test_bytes_extend(self):
1260 s = bytes(self.example)
1261
1262 a = array.array(self.typecode, self.example)
1263 a.extend(s)
1264 self.assertEqual(
1265 a,
1266 array.array(self.typecode, self.example+self.example)
1267 )
1268
1269 a = array.array(self.typecode, self.example)
1270 a.extend(bytearray(reversed(s)))
1271 self.assertEqual(
1272 a,
1273 array.array(self.typecode, self.example+self.example[::-1])
1274 )
1275
Fred Drake004d5e62000-10-23 17:22:08 +00001276
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001277class ByteTest(SignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001278 typecode = 'b'
1279 minitemsize = 1
Fred Drake004d5e62000-10-23 17:22:08 +00001280
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001281class UnsignedByteTest(UnsignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001282 typecode = 'B'
1283 minitemsize = 1
Walter Dörwald7fd94242003-05-18 00:47:47 +00001284
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001285class ShortTest(SignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001286 typecode = 'h'
1287 minitemsize = 2
Walter Dörwald7fd94242003-05-18 00:47:47 +00001288
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001289class UnsignedShortTest(UnsignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001290 typecode = 'H'
1291 minitemsize = 2
Walter Dörwald7fd94242003-05-18 00:47:47 +00001292
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001293class IntTest(SignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001294 typecode = 'i'
1295 minitemsize = 2
Walter Dörwald7fd94242003-05-18 00:47:47 +00001296
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001297class UnsignedIntTest(UnsignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001298 typecode = 'I'
1299 minitemsize = 2
Walter Dörwald7fd94242003-05-18 00:47:47 +00001300
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001301class LongTest(SignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001302 typecode = 'l'
1303 minitemsize = 4
Walter Dörwald7fd94242003-05-18 00:47:47 +00001304
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001305class UnsignedLongTest(UnsignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001306 typecode = 'L'
1307 minitemsize = 4
Walter Dörwald7fd94242003-05-18 00:47:47 +00001308
Meador Inge1c9f0c92011-09-20 19:55:51 -05001309@unittest.skipIf(not have_long_long, 'need long long support')
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001310class LongLongTest(SignedNumberTest, unittest.TestCase):
Meador Inge1c9f0c92011-09-20 19:55:51 -05001311 typecode = 'q'
1312 minitemsize = 8
Meador Inge1c9f0c92011-09-20 19:55:51 -05001313
1314@unittest.skipIf(not have_long_long, 'need long long support')
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001315class UnsignedLongLongTest(UnsignedNumberTest, unittest.TestCase):
Meador Inge1c9f0c92011-09-20 19:55:51 -05001316 typecode = 'Q'
1317 minitemsize = 8
Meador Inge1c9f0c92011-09-20 19:55:51 -05001318
Walter Dörwald7fd94242003-05-18 00:47:47 +00001319class FPTest(NumberTest):
1320 example = [-42.0, 0, 42, 1e5, -1e10]
1321 smallerexample = [-42.0, 0, 42, 1e5, -2e10]
1322 biggerexample = [-42.0, 0, 42, 1e5, 1e10]
1323 outside = 23
1324
1325 def assertEntryEqual(self, entry1, entry2):
1326 self.assertAlmostEqual(entry1, entry2)
1327
Walter Dörwaldcf99b0a2003-05-22 13:15:31 +00001328 def test_byteswap(self):
1329 a = array.array(self.typecode, self.example)
1330 self.assertRaises(TypeError, a.byteswap, 42)
1331 if a.itemsize in (1, 2, 4, 8):
1332 b = array.array(self.typecode, self.example)
1333 b.byteswap()
1334 if a.itemsize==1:
1335 self.assertEqual(a, b)
1336 else:
1337 # On alphas treating the byte swapped bit patters as
1338 # floats/doubles results in floating point exceptions
1339 # => compare the 8bit string values instead
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +00001340 self.assertNotEqual(a.tobytes(), b.tobytes())
Walter Dörwaldcf99b0a2003-05-22 13:15:31 +00001341 b.byteswap()
1342 self.assertEqual(a, b)
1343
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001344class FloatTest(FPTest, unittest.TestCase):
Neal Norwitz35c6cd02003-05-22 13:29:15 +00001345 typecode = 'f'
1346 minitemsize = 4
Walter Dörwald7fd94242003-05-18 00:47:47 +00001347
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001348class DoubleTest(FPTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001349 typecode = 'd'
1350 minitemsize = 8
Amaury Forgeot d'Arc9c74b142008-06-18 00:47:36 +00001351
1352 def test_alloc_overflow(self):
Benjamin Petersonbcd8ac32008-10-10 22:20:52 +00001353 from sys import maxsize
Amaury Forgeot d'Arc9c74b142008-06-18 00:47:36 +00001354 a = array.array('d', [-1]*65536)
1355 try:
Benjamin Petersonbcd8ac32008-10-10 22:20:52 +00001356 a *= maxsize//65536 + 1
Amaury Forgeot d'Arc9c74b142008-06-18 00:47:36 +00001357 except MemoryError:
1358 pass
1359 else:
Benjamin Petersonbcd8ac32008-10-10 22:20:52 +00001360 self.fail("Array of size > maxsize created - MemoryError expected")
Amaury Forgeot d'Arc9c74b142008-06-18 00:47:36 +00001361 b = array.array('d', [ 2.71828183, 3.14159265, -1])
1362 try:
Benjamin Petersonbcd8ac32008-10-10 22:20:52 +00001363 b * (maxsize//3 + 1)
Amaury Forgeot d'Arc9c74b142008-06-18 00:47:36 +00001364 except MemoryError:
1365 pass
1366 else:
Benjamin Petersonbcd8ac32008-10-10 22:20:52 +00001367 self.fail("Array of size > maxsize created - MemoryError expected")
Amaury Forgeot d'Arc9c74b142008-06-18 00:47:36 +00001368
Raymond Hettinger6ab78cd2004-08-29 07:50:43 +00001369
1370if __name__ == "__main__":
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001371 unittest.main()