blob: 2a21e745b1bcd27ebadecab684f3df0303b2901a [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
Martin Panterbe8da9c2016-09-07 11:04:41 +000041class MiscTest(unittest.TestCase):
Martin v. Löwis99866332002-03-01 10:27:01 +000042
Martin Panterbe8da9c2016-09-07 11:04:41 +000043 def test_bad_constructor(self):
Walter Dörwald7fd94242003-05-18 00:47:47 +000044 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 Panterbe8da9c2016-09-07 11:04:41 +000049 def test_empty(self):
50 # Exercise code for handling zero-length arrays
51 a = array.array('B')
52 a[:] = a
53 self.assertEqual(len(a), 0)
54 self.assertEqual(len(a + a), 0)
55 self.assertEqual(len(a * 3), 0)
56 a += a
57 self.assertEqual(len(a), 0)
58
Martin v. Löwis99866332002-03-01 10:27:01 +000059
Alexandre Vassalottiad077152009-07-15 17:49:23 +000060# Machine format codes.
61#
62# Search for "enum machine_format_code" in Modules/arraymodule.c to get the
63# authoritative values.
64UNKNOWN_FORMAT = -1
65UNSIGNED_INT8 = 0
66SIGNED_INT8 = 1
67UNSIGNED_INT16_LE = 2
68UNSIGNED_INT16_BE = 3
69SIGNED_INT16_LE = 4
70SIGNED_INT16_BE = 5
71UNSIGNED_INT32_LE = 6
72UNSIGNED_INT32_BE = 7
73SIGNED_INT32_LE = 8
74SIGNED_INT32_BE = 9
75UNSIGNED_INT64_LE = 10
76UNSIGNED_INT64_BE = 11
77SIGNED_INT64_LE = 12
78SIGNED_INT64_BE = 13
79IEEE_754_FLOAT_LE = 14
80IEEE_754_FLOAT_BE = 15
81IEEE_754_DOUBLE_LE = 16
82IEEE_754_DOUBLE_BE = 17
83UTF16_LE = 18
84UTF16_BE = 19
85UTF32_LE = 20
86UTF32_BE = 21
87
88class ArrayReconstructorTest(unittest.TestCase):
89
90 def test_error(self):
91 self.assertRaises(TypeError, array_reconstructor,
92 "", "b", 0, b"")
93 self.assertRaises(TypeError, array_reconstructor,
94 str, "b", 0, b"")
95 self.assertRaises(TypeError, array_reconstructor,
96 array.array, "b", '', b"")
97 self.assertRaises(TypeError, array_reconstructor,
98 array.array, "b", 0, "")
99 self.assertRaises(ValueError, array_reconstructor,
100 array.array, "?", 0, b"")
101 self.assertRaises(ValueError, array_reconstructor,
102 array.array, "b", UNKNOWN_FORMAT, b"")
103 self.assertRaises(ValueError, array_reconstructor,
104 array.array, "b", 22, b"")
105 self.assertRaises(ValueError, array_reconstructor,
106 array.array, "d", 16, b"a")
107
108 def test_numbers(self):
109 testcases = (
110 (['B', 'H', 'I', 'L'], UNSIGNED_INT8, '=BBBB',
111 [0x80, 0x7f, 0, 0xff]),
112 (['b', 'h', 'i', 'l'], SIGNED_INT8, '=bbb',
113 [-0x80, 0x7f, 0]),
114 (['H', 'I', 'L'], UNSIGNED_INT16_LE, '<HHHH',
115 [0x8000, 0x7fff, 0, 0xffff]),
116 (['H', 'I', 'L'], UNSIGNED_INT16_BE, '>HHHH',
117 [0x8000, 0x7fff, 0, 0xffff]),
118 (['h', 'i', 'l'], SIGNED_INT16_LE, '<hhh',
119 [-0x8000, 0x7fff, 0]),
120 (['h', 'i', 'l'], SIGNED_INT16_BE, '>hhh',
121 [-0x8000, 0x7fff, 0]),
122 (['I', 'L'], UNSIGNED_INT32_LE, '<IIII',
123 [1<<31, (1<<31)-1, 0, (1<<32)-1]),
124 (['I', 'L'], UNSIGNED_INT32_BE, '>IIII',
125 [1<<31, (1<<31)-1, 0, (1<<32)-1]),
126 (['i', 'l'], SIGNED_INT32_LE, '<iii',
127 [-1<<31, (1<<31)-1, 0]),
128 (['i', 'l'], SIGNED_INT32_BE, '>iii',
129 [-1<<31, (1<<31)-1, 0]),
130 (['L'], UNSIGNED_INT64_LE, '<QQQQ',
Alexandre Vassalotti0027d4b2009-07-15 20:53:55 +0000131 [1<<31, (1<<31)-1, 0, (1<<32)-1]),
132 (['L'], UNSIGNED_INT64_BE, '>QQQQ',
133 [1<<31, (1<<31)-1, 0, (1<<32)-1]),
134 (['l'], SIGNED_INT64_LE, '<qqq',
135 [-1<<31, (1<<31)-1, 0]),
136 (['l'], SIGNED_INT64_BE, '>qqq',
137 [-1<<31, (1<<31)-1, 0]),
138 # The following tests for INT64 will raise an OverflowError
139 # when run on a 32-bit machine. The tests are simply skipped
140 # in that case.
141 (['L'], UNSIGNED_INT64_LE, '<QQQQ',
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000142 [1<<63, (1<<63)-1, 0, (1<<64)-1]),
143 (['L'], UNSIGNED_INT64_BE, '>QQQQ',
144 [1<<63, (1<<63)-1, 0, (1<<64)-1]),
145 (['l'], SIGNED_INT64_LE, '<qqq',
146 [-1<<63, (1<<63)-1, 0]),
147 (['l'], SIGNED_INT64_BE, '>qqq',
148 [-1<<63, (1<<63)-1, 0]),
149 (['f'], IEEE_754_FLOAT_LE, '<ffff',
150 [16711938.0, float('inf'), float('-inf'), -0.0]),
151 (['f'], IEEE_754_FLOAT_BE, '>ffff',
152 [16711938.0, float('inf'), float('-inf'), -0.0]),
153 (['d'], IEEE_754_DOUBLE_LE, '<dddd',
154 [9006104071832581.0, float('inf'), float('-inf'), -0.0]),
155 (['d'], IEEE_754_DOUBLE_BE, '>dddd',
156 [9006104071832581.0, float('inf'), float('-inf'), -0.0])
157 )
158 for testcase in testcases:
159 valid_typecodes, mformat_code, struct_fmt, values = testcase
160 arraystr = struct.pack(struct_fmt, *values)
161 for typecode in valid_typecodes:
Alexandre Vassalotti0027d4b2009-07-15 20:53:55 +0000162 try:
163 a = array.array(typecode, values)
164 except OverflowError:
165 continue # Skip this test case.
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000166 b = array_reconstructor(
167 array.array, typecode, mformat_code, arraystr)
168 self.assertEqual(a, b,
169 msg="{0!r} != {1!r}; testcase={2!r}".format(a, b, testcase))
170
171 def test_unicode(self):
172 teststr = "Bonne Journ\xe9e \U0002030a\U00020347"
173 testcases = (
174 (UTF16_LE, "UTF-16-LE"),
175 (UTF16_BE, "UTF-16-BE"),
176 (UTF32_LE, "UTF-32-LE"),
177 (UTF32_BE, "UTF-32-BE")
178 )
179 for testcase in testcases:
180 mformat_code, encoding = testcase
181 a = array.array('u', teststr)
182 b = array_reconstructor(
183 array.array, 'u', mformat_code, teststr.encode(encoding))
184 self.assertEqual(a, b,
185 msg="{0!r} != {1!r}; testcase={2!r}".format(a, b, testcase))
186
187
Ezio Melotti1d3e96d2013-01-10 06:04:50 +0200188class BaseTest:
Walter Dörwald7fd94242003-05-18 00:47:47 +0000189 # Required class attributes (provided by subclasses
190 # typecode: the typecode to test
191 # example: an initializer usable in the constructor for this type
192 # smallerexample: the same length as example, but smaller
193 # biggerexample: the same length as example, but bigger
194 # outside: An entry that is not in example
195 # minitemsize: the minimum guaranteed itemsize
Martin v. Löwis99866332002-03-01 10:27:01 +0000196
Walter Dörwald7fd94242003-05-18 00:47:47 +0000197 def assertEntryEqual(self, entry1, entry2):
198 self.assertEqual(entry1, entry2)
Martin v. Löwis99866332002-03-01 10:27:01 +0000199
Walter Dörwald7fd94242003-05-18 00:47:47 +0000200 def badtypecode(self):
201 # Return a typecode that is different from our own
202 return typecodes[(typecodes.index(self.typecode)+1) % len(typecodes)]
Martin v. Löwis99866332002-03-01 10:27:01 +0000203
Walter Dörwald7fd94242003-05-18 00:47:47 +0000204 def test_constructor(self):
205 a = array.array(self.typecode)
206 self.assertEqual(a.typecode, self.typecode)
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200207 self.assertGreaterEqual(a.itemsize, self.minitemsize)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000208 self.assertRaises(TypeError, array.array, self.typecode, None)
Martin v. Löwis99866332002-03-01 10:27:01 +0000209
Walter Dörwald7fd94242003-05-18 00:47:47 +0000210 def test_len(self):
211 a = array.array(self.typecode)
212 a.append(self.example[0])
213 self.assertEqual(len(a), 1)
Martin v. Löwis99866332002-03-01 10:27:01 +0000214
Walter Dörwald7fd94242003-05-18 00:47:47 +0000215 a = array.array(self.typecode, self.example)
216 self.assertEqual(len(a), len(self.example))
Martin v. Löwis99866332002-03-01 10:27:01 +0000217
Walter Dörwald7fd94242003-05-18 00:47:47 +0000218 def test_buffer_info(self):
219 a = array.array(self.typecode, self.example)
220 self.assertRaises(TypeError, a.buffer_info, 42)
221 bi = a.buffer_info()
Ezio Melottie9615932010-01-24 19:26:24 +0000222 self.assertIsInstance(bi, tuple)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000223 self.assertEqual(len(bi), 2)
Ezio Melottie9615932010-01-24 19:26:24 +0000224 self.assertIsInstance(bi[0], int)
225 self.assertIsInstance(bi[1], int)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000226 self.assertEqual(bi[1], len(a))
Martin v. Löwis99866332002-03-01 10:27:01 +0000227
Walter Dörwald7fd94242003-05-18 00:47:47 +0000228 def test_byteswap(self):
Victor Stinner8dba4e02011-09-30 00:51:10 +0200229 if self.typecode == 'u':
230 example = '\U00100100'
231 else:
232 example = self.example
233 a = array.array(self.typecode, example)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000234 self.assertRaises(TypeError, a.byteswap, 42)
235 if a.itemsize in (1, 2, 4, 8):
Victor Stinner8dba4e02011-09-30 00:51:10 +0200236 b = array.array(self.typecode, example)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000237 b.byteswap()
238 if a.itemsize==1:
239 self.assertEqual(a, b)
240 else:
241 self.assertNotEqual(a, b)
242 b.byteswap()
243 self.assertEqual(a, b)
Martin v. Löwis99866332002-03-01 10:27:01 +0000244
Raymond Hettinger3aa82c02004-03-13 18:18:51 +0000245 def test_copy(self):
246 import copy
247 a = array.array(self.typecode, self.example)
248 b = copy.copy(a)
249 self.assertNotEqual(id(a), id(b))
250 self.assertEqual(a, b)
251
Thomas Wouters89f507f2006-12-13 04:49:30 +0000252 def test_deepcopy(self):
253 import copy
254 a = array.array(self.typecode, self.example)
255 b = copy.deepcopy(a)
256 self.assertNotEqual(id(a), id(b))
257 self.assertEqual(a, b)
258
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000259 def test_reduce_ex(self):
260 a = array.array(self.typecode, self.example)
261 for protocol in range(3):
Ezio Melottib3aedd42010-11-20 19:04:17 +0000262 self.assertIs(a.__reduce_ex__(protocol)[0], array.array)
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000263 for protocol in range(3, pickle.HIGHEST_PROTOCOL):
Ezio Melottib3aedd42010-11-20 19:04:17 +0000264 self.assertIs(a.__reduce_ex__(protocol)[0], array_reconstructor)
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000265
Raymond Hettingerb0900e62004-12-16 16:23:40 +0000266 def test_pickle(self):
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000267 for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
Raymond Hettingerb0900e62004-12-16 16:23:40 +0000268 a = array.array(self.typecode, self.example)
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000269 b = pickle.loads(pickle.dumps(a, protocol))
Raymond Hettingerb0900e62004-12-16 16:23:40 +0000270 self.assertNotEqual(id(a), id(b))
271 self.assertEqual(a, b)
272
273 a = ArraySubclass(self.typecode, self.example)
274 a.x = 10
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000275 b = pickle.loads(pickle.dumps(a, protocol))
Raymond Hettingerb0900e62004-12-16 16:23:40 +0000276 self.assertNotEqual(id(a), id(b))
277 self.assertEqual(a, b)
278 self.assertEqual(a.x, b.x)
279 self.assertEqual(type(a), type(b))
280
Guido van Rossumd8faa362007-04-27 19:54:29 +0000281 def test_pickle_for_empty_array(self):
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000282 for protocol in range(pickle.HIGHEST_PROTOCOL + 1):
Guido van Rossumd8faa362007-04-27 19:54:29 +0000283 a = array.array(self.typecode)
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000284 b = pickle.loads(pickle.dumps(a, protocol))
Guido van Rossumd8faa362007-04-27 19:54:29 +0000285 self.assertNotEqual(id(a), id(b))
286 self.assertEqual(a, b)
287
288 a = ArraySubclass(self.typecode)
289 a.x = 10
Alexandre Vassalottiad077152009-07-15 17:49:23 +0000290 b = pickle.loads(pickle.dumps(a, protocol))
Guido van Rossumd8faa362007-04-27 19:54:29 +0000291 self.assertNotEqual(id(a), id(b))
292 self.assertEqual(a, b)
293 self.assertEqual(a.x, b.x)
294 self.assertEqual(type(a), type(b))
295
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000296 def test_iterator_pickle(self):
Serhiy Storchakaaabafe72016-03-06 14:10:24 +0200297 orig = array.array(self.typecode, self.example)
298 data = list(orig)
299 data2 = data[::-1]
Serhiy Storchakabad12572014-12-15 14:03:42 +0200300 for proto in range(pickle.HIGHEST_PROTOCOL + 1):
Serhiy Storchakaaabafe72016-03-06 14:10:24 +0200301 # initial iterator
302 itorig = iter(orig)
303 d = pickle.dumps((itorig, orig), proto)
304 it, a = pickle.loads(d)
305 a.fromlist(data2)
306 self.assertEqual(type(it), type(itorig))
307 self.assertEqual(list(it), data + data2)
Serhiy Storchakabad12572014-12-15 14:03:42 +0200308
Serhiy Storchakaaabafe72016-03-06 14:10:24 +0200309 # running iterator
310 next(itorig)
311 d = pickle.dumps((itorig, orig), proto)
312 it, a = pickle.loads(d)
313 a.fromlist(data2)
314 self.assertEqual(type(it), type(itorig))
315 self.assertEqual(list(it), data[1:] + data2)
316
317 # empty iterator
318 for i in range(1, len(data)):
319 next(itorig)
320 d = pickle.dumps((itorig, orig), proto)
321 it, a = pickle.loads(d)
322 a.fromlist(data2)
323 self.assertEqual(type(it), type(itorig))
324 self.assertEqual(list(it), data2)
325
326 # exhausted iterator
327 self.assertRaises(StopIteration, next, itorig)
328 d = pickle.dumps((itorig, orig), proto)
329 it, a = pickle.loads(d)
330 a.fromlist(data2)
331 self.assertEqual(type(it), type(itorig))
332 self.assertEqual(list(it), data2)
Kristján Valur Jónsson31668b82012-04-03 10:49:41 +0000333
Walter Dörwald7fd94242003-05-18 00:47:47 +0000334 def test_insert(self):
335 a = array.array(self.typecode, self.example)
336 a.insert(0, self.example[0])
337 self.assertEqual(len(a), 1+len(self.example))
338 self.assertEqual(a[0], a[1])
339 self.assertRaises(TypeError, a.insert)
340 self.assertRaises(TypeError, a.insert, None)
Walter Dörwaldba39d9c2003-05-18 01:56:25 +0000341 self.assertRaises(TypeError, a.insert, 0, None)
Martin v. Löwis99866332002-03-01 10:27:01 +0000342
Walter Dörwald9e46abe2003-05-18 03:15:10 +0000343 a = array.array(self.typecode, self.example)
344 a.insert(-1, self.example[0])
345 self.assertEqual(
346 a,
347 array.array(
348 self.typecode,
349 self.example[:-1] + self.example[:1] + self.example[-1:]
350 )
351 )
352
353 a = array.array(self.typecode, self.example)
354 a.insert(-1000, self.example[0])
355 self.assertEqual(
356 a,
357 array.array(self.typecode, self.example[:1] + self.example)
358 )
359
360 a = array.array(self.typecode, self.example)
361 a.insert(1000, self.example[0])
362 self.assertEqual(
363 a,
364 array.array(self.typecode, self.example + self.example[:1])
365 )
366
Walter Dörwald7fd94242003-05-18 00:47:47 +0000367 def test_tofromfile(self):
368 a = array.array(self.typecode, 2*self.example)
369 self.assertRaises(TypeError, a.tofile)
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000370 support.unlink(support.TESTFN)
371 f = open(support.TESTFN, 'wb')
Walter Dörwald7fd94242003-05-18 00:47:47 +0000372 try:
373 a.tofile(f)
374 f.close()
375 b = array.array(self.typecode)
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000376 f = open(support.TESTFN, 'rb')
Walter Dörwald7fd94242003-05-18 00:47:47 +0000377 self.assertRaises(TypeError, b.fromfile)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000378 b.fromfile(f, len(self.example))
379 self.assertEqual(b, array.array(self.typecode, self.example))
380 self.assertNotEqual(a, b)
Hirokazu Yamamoto54d0df62009-03-06 03:04:07 +0000381 self.assertRaises(EOFError, b.fromfile, f, len(self.example)+1)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000382 self.assertEqual(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000383 f.close()
384 finally:
385 if not f.closed:
386 f.close()
Benjamin Petersonee8712c2008-05-20 21:35:26 +0000387 support.unlink(support.TESTFN)
Roger E. Masse8db1b071996-12-09 20:09:16 +0000388
Antoine Pitrou8cb6dbf2010-07-21 16:41:31 +0000389 def test_fromfile_ioerror(self):
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200390 # Issue #5395: Check if fromfile raises a proper OSError
Antoine Pitrou8cb6dbf2010-07-21 16:41:31 +0000391 # instead of EOFError.
392 a = array.array(self.typecode)
393 f = open(support.TESTFN, 'wb')
394 try:
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200395 self.assertRaises(OSError, a.fromfile, f, len(self.example))
Antoine Pitrou8cb6dbf2010-07-21 16:41:31 +0000396 finally:
397 f.close()
398 support.unlink(support.TESTFN)
399
Frank Wierzbicki17683432009-08-16 20:30:12 +0000400 def test_filewrite(self):
401 a = array.array(self.typecode, 2*self.example)
402 f = open(support.TESTFN, 'wb')
403 try:
404 f.write(a)
405 f.close()
406 b = array.array(self.typecode)
407 f = open(support.TESTFN, 'rb')
408 b.fromfile(f, len(self.example))
409 self.assertEqual(b, array.array(self.typecode, self.example))
410 self.assertNotEqual(a, b)
411 b.fromfile(f, len(self.example))
412 self.assertEqual(a, b)
413 f.close()
414 finally:
415 if not f.closed:
416 f.close()
417 support.unlink(support.TESTFN)
418
Walter Dörwald7fd94242003-05-18 00:47:47 +0000419 def test_tofromlist(self):
420 a = array.array(self.typecode, 2*self.example)
421 b = array.array(self.typecode)
422 self.assertRaises(TypeError, a.tolist, 42)
423 self.assertRaises(TypeError, b.fromlist)
424 self.assertRaises(TypeError, b.fromlist, 42)
425 self.assertRaises(TypeError, b.fromlist, [None])
426 b.fromlist(a.tolist())
427 self.assertEqual(a, b)
Fred Drake78334472000-06-28 17:50:51 +0000428
Walter Dörwald7fd94242003-05-18 00:47:47 +0000429 def test_tofromstring(self):
Brett Cannon1eb32c22014-10-10 16:26:45 -0400430 # Warnings not raised when arguments are incorrect as Argument Clinic
431 # handles that before the warning can be raised.
432 nb_warnings = 2
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +0000433 with warnings.catch_warnings(record=True) as r:
434 warnings.filterwarnings("always",
435 message=r"(to|from)string\(\) is deprecated",
436 category=DeprecationWarning)
437 a = array.array(self.typecode, 2*self.example)
438 b = array.array(self.typecode)
439 self.assertRaises(TypeError, a.tostring, 42)
440 self.assertRaises(TypeError, b.fromstring)
441 self.assertRaises(TypeError, b.fromstring, 42)
442 b.fromstring(a.tostring())
443 self.assertEqual(a, b)
444 if a.itemsize>1:
445 self.assertRaises(ValueError, b.fromstring, "x")
446 nb_warnings += 1
447 self.assertEqual(len(r), nb_warnings)
448
449 def test_tofrombytes(self):
Walter Dörwald7fd94242003-05-18 00:47:47 +0000450 a = array.array(self.typecode, 2*self.example)
451 b = array.array(self.typecode)
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +0000452 self.assertRaises(TypeError, a.tobytes, 42)
453 self.assertRaises(TypeError, b.frombytes)
454 self.assertRaises(TypeError, b.frombytes, 42)
455 b.frombytes(a.tobytes())
456 c = array.array(self.typecode, bytearray(a.tobytes()))
Walter Dörwald7fd94242003-05-18 00:47:47 +0000457 self.assertEqual(a, b)
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +0000458 self.assertEqual(a, c)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000459 if a.itemsize>1:
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +0000460 self.assertRaises(ValueError, b.frombytes, b"x")
Fred Drake78334472000-06-28 17:50:51 +0000461
Alexander Belopolskyef4a03f2011-01-11 21:44:00 +0000462 def test_fromarray(self):
463 a = array.array(self.typecode, self.example)
464 b = array.array(self.typecode, a)
465 self.assertEqual(a, b)
466
Walter Dörwald7fd94242003-05-18 00:47:47 +0000467 def test_repr(self):
468 a = array.array(self.typecode, 2*self.example)
469 self.assertEqual(a, eval(repr(a), {"array": array.array}))
Fred Drake78334472000-06-28 17:50:51 +0000470
Walter Dörwald7fd94242003-05-18 00:47:47 +0000471 a = array.array(self.typecode)
472 self.assertEqual(repr(a), "array('%s')" % self.typecode)
Roger E. Masse8db1b071996-12-09 20:09:16 +0000473
Walter Dörwald7fd94242003-05-18 00:47:47 +0000474 def test_str(self):
475 a = array.array(self.typecode, 2*self.example)
476 str(a)
Roger E. Masse8db1b071996-12-09 20:09:16 +0000477
Walter Dörwald7fd94242003-05-18 00:47:47 +0000478 def test_cmp(self):
479 a = array.array(self.typecode, self.example)
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200480 self.assertIs(a == 42, False)
481 self.assertIs(a != 42, True)
Tim Peterscc78e472000-11-14 21:36:07 +0000482
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200483 self.assertIs(a == a, True)
484 self.assertIs(a != a, False)
485 self.assertIs(a < a, False)
486 self.assertIs(a <= a, True)
487 self.assertIs(a > a, False)
488 self.assertIs(a >= a, True)
Tim Peterscc78e472000-11-14 21:36:07 +0000489
Neal Norwitzbd2835c2006-03-17 08:54:15 +0000490 al = array.array(self.typecode, self.smallerexample)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000491 ab = array.array(self.typecode, self.biggerexample)
Guido van Rossum7f1d3aa1998-07-16 15:31:43 +0000492
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200493 self.assertIs(a == 2*a, False)
494 self.assertIs(a != 2*a, True)
495 self.assertIs(a < 2*a, True)
496 self.assertIs(a <= 2*a, True)
497 self.assertIs(a > 2*a, False)
498 self.assertIs(a >= 2*a, False)
Martin v. Löwis99866332002-03-01 10:27:01 +0000499
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200500 self.assertIs(a == al, False)
501 self.assertIs(a != al, True)
502 self.assertIs(a < al, False)
503 self.assertIs(a <= al, False)
504 self.assertIs(a > al, True)
505 self.assertIs(a >= al, True)
Martin v. Löwis99866332002-03-01 10:27:01 +0000506
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200507 self.assertIs(a == ab, False)
508 self.assertIs(a != ab, True)
509 self.assertIs(a < ab, True)
510 self.assertIs(a <= ab, True)
511 self.assertIs(a > ab, False)
512 self.assertIs(a >= ab, False)
Martin v. Löwis99866332002-03-01 10:27:01 +0000513
Walter Dörwald7fd94242003-05-18 00:47:47 +0000514 def test_add(self):
515 a = array.array(self.typecode, self.example) \
516 + array.array(self.typecode, self.example[::-1])
517 self.assertEqual(
518 a,
519 array.array(self.typecode, self.example + self.example[::-1])
520 )
Martin v. Löwis99866332002-03-01 10:27:01 +0000521
Walter Dörwald7fd94242003-05-18 00:47:47 +0000522 b = array.array(self.badtypecode())
523 self.assertRaises(TypeError, a.__add__, b)
524
525 self.assertRaises(TypeError, a.__add__, "bad")
526
527 def test_iadd(self):
528 a = array.array(self.typecode, self.example[::-1])
529 b = a
530 a += array.array(self.typecode, 2*self.example)
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200531 self.assertIs(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000532 self.assertEqual(
533 a,
534 array.array(self.typecode, self.example[::-1]+2*self.example)
535 )
Alexandre Vassalottie503cf92009-07-05 06:25:14 +0000536 a = array.array(self.typecode, self.example)
537 a += a
538 self.assertEqual(
539 a,
540 array.array(self.typecode, self.example + self.example)
541 )
Walter Dörwald7fd94242003-05-18 00:47:47 +0000542
543 b = array.array(self.badtypecode())
544 self.assertRaises(TypeError, a.__add__, b)
545
546 self.assertRaises(TypeError, a.__iadd__, "bad")
547
548 def test_mul(self):
549 a = 5*array.array(self.typecode, self.example)
550 self.assertEqual(
551 a,
552 array.array(self.typecode, 5*self.example)
553 )
554
555 a = array.array(self.typecode, self.example)*5
556 self.assertEqual(
557 a,
558 array.array(self.typecode, self.example*5)
559 )
560
561 a = 0*array.array(self.typecode, self.example)
562 self.assertEqual(
563 a,
564 array.array(self.typecode)
565 )
566
567 a = (-1)*array.array(self.typecode, self.example)
568 self.assertEqual(
569 a,
570 array.array(self.typecode)
571 )
572
Georg Brandlc29cc6a2010-12-04 11:02:04 +0000573 a = 5 * array.array(self.typecode, self.example[:1])
574 self.assertEqual(
575 a,
576 array.array(self.typecode, [a[0]] * 5)
577 )
578
Walter Dörwald7fd94242003-05-18 00:47:47 +0000579 self.assertRaises(TypeError, a.__mul__, "bad")
580
581 def test_imul(self):
582 a = array.array(self.typecode, self.example)
583 b = a
584
585 a *= 5
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200586 self.assertIs(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000587 self.assertEqual(
588 a,
589 array.array(self.typecode, 5*self.example)
590 )
591
592 a *= 0
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200593 self.assertIs(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000594 self.assertEqual(a, array.array(self.typecode))
595
596 a *= 1000
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200597 self.assertIs(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000598 self.assertEqual(a, array.array(self.typecode))
599
600 a *= -1
Serhiy Storchaka91b3e772013-11-17 00:45:17 +0200601 self.assertIs(a, b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000602 self.assertEqual(a, array.array(self.typecode))
603
604 a = array.array(self.typecode, self.example)
605 a *= -1
606 self.assertEqual(a, array.array(self.typecode))
607
608 self.assertRaises(TypeError, a.__imul__, "bad")
609
610 def test_getitem(self):
611 a = array.array(self.typecode, self.example)
612 self.assertEntryEqual(a[0], self.example[0])
Guido van Rossume2a383d2007-01-15 16:59:06 +0000613 self.assertEntryEqual(a[0], self.example[0])
Walter Dörwald7fd94242003-05-18 00:47:47 +0000614 self.assertEntryEqual(a[-1], self.example[-1])
Guido van Rossume2a383d2007-01-15 16:59:06 +0000615 self.assertEntryEqual(a[-1], self.example[-1])
Walter Dörwald7fd94242003-05-18 00:47:47 +0000616 self.assertEntryEqual(a[len(self.example)-1], self.example[-1])
617 self.assertEntryEqual(a[-len(self.example)], self.example[0])
618 self.assertRaises(TypeError, a.__getitem__)
619 self.assertRaises(IndexError, a.__getitem__, len(self.example))
620 self.assertRaises(IndexError, a.__getitem__, -len(self.example)-1)
621
622 def test_setitem(self):
623 a = array.array(self.typecode, self.example)
624 a[0] = a[-1]
625 self.assertEntryEqual(a[0], a[-1])
626
627 a = array.array(self.typecode, self.example)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000628 a[0] = a[-1]
Walter Dörwald7fd94242003-05-18 00:47:47 +0000629 self.assertEntryEqual(a[0], a[-1])
630
631 a = array.array(self.typecode, self.example)
632 a[-1] = a[0]
633 self.assertEntryEqual(a[0], a[-1])
634
635 a = array.array(self.typecode, self.example)
Guido van Rossume2a383d2007-01-15 16:59:06 +0000636 a[-1] = a[0]
Walter Dörwald7fd94242003-05-18 00:47:47 +0000637 self.assertEntryEqual(a[0], a[-1])
638
639 a = array.array(self.typecode, self.example)
640 a[len(self.example)-1] = a[0]
641 self.assertEntryEqual(a[0], a[-1])
642
643 a = array.array(self.typecode, self.example)
644 a[-len(self.example)] = a[-1]
645 self.assertEntryEqual(a[0], a[-1])
646
647 self.assertRaises(TypeError, a.__setitem__)
648 self.assertRaises(TypeError, a.__setitem__, None)
649 self.assertRaises(TypeError, a.__setitem__, 0, None)
650 self.assertRaises(
651 IndexError,
652 a.__setitem__,
653 len(self.example), self.example[0]
654 )
655 self.assertRaises(
656 IndexError,
657 a.__setitem__,
658 -len(self.example)-1, self.example[0]
659 )
660
661 def test_delitem(self):
662 a = array.array(self.typecode, self.example)
663 del a[0]
664 self.assertEqual(
665 a,
666 array.array(self.typecode, self.example[1:])
667 )
668
669 a = array.array(self.typecode, self.example)
670 del a[-1]
671 self.assertEqual(
672 a,
673 array.array(self.typecode, self.example[:-1])
674 )
675
676 a = array.array(self.typecode, self.example)
677 del a[len(self.example)-1]
678 self.assertEqual(
679 a,
680 array.array(self.typecode, self.example[:-1])
681 )
682
683 a = array.array(self.typecode, self.example)
684 del a[-len(self.example)]
685 self.assertEqual(
686 a,
687 array.array(self.typecode, self.example[1:])
688 )
689
690 self.assertRaises(TypeError, a.__delitem__)
691 self.assertRaises(TypeError, a.__delitem__, None)
692 self.assertRaises(IndexError, a.__delitem__, len(self.example))
693 self.assertRaises(IndexError, a.__delitem__, -len(self.example)-1)
694
695 def test_getslice(self):
696 a = array.array(self.typecode, self.example)
697 self.assertEqual(a[:], a)
698
699 self.assertEqual(
700 a[1:],
701 array.array(self.typecode, self.example[1:])
702 )
703
704 self.assertEqual(
705 a[:1],
706 array.array(self.typecode, self.example[:1])
707 )
708
709 self.assertEqual(
710 a[:-1],
711 array.array(self.typecode, self.example[:-1])
712 )
713
714 self.assertEqual(
715 a[-1:],
716 array.array(self.typecode, self.example[-1:])
717 )
718
719 self.assertEqual(
720 a[-1:-1],
721 array.array(self.typecode)
722 )
723
724 self.assertEqual(
Walter Dörwald1083c242005-01-21 21:16:51 +0000725 a[2:1],
726 array.array(self.typecode)
727 )
728
729 self.assertEqual(
Walter Dörwald7fd94242003-05-18 00:47:47 +0000730 a[1000:],
731 array.array(self.typecode)
732 )
733 self.assertEqual(a[-1000:], a)
734 self.assertEqual(a[:1000], a)
735 self.assertEqual(
736 a[:-1000],
737 array.array(self.typecode)
738 )
739 self.assertEqual(a[-1000:1000], a)
740 self.assertEqual(
741 a[2000:1000],
742 array.array(self.typecode)
743 )
744
Thomas Woutersed03b412007-08-28 21:37:11 +0000745 def test_extended_getslice(self):
746 # Test extended slicing by comparing with list slicing
747 # (Assumes list conversion works correctly, too)
748 a = array.array(self.typecode, self.example)
749 indices = (0, None, 1, 3, 19, 100, -1, -2, -31, -100)
750 for start in indices:
751 for stop in indices:
752 # Everything except the initial 0 (invalid step)
753 for step in indices[1:]:
754 self.assertEqual(list(a[start:stop:step]),
755 list(a)[start:stop:step])
756
Walter Dörwald7fd94242003-05-18 00:47:47 +0000757 def test_setslice(self):
758 a = array.array(self.typecode, self.example)
759 a[:1] = a
760 self.assertEqual(
761 a,
762 array.array(self.typecode, self.example + self.example[1:])
763 )
764
765 a = array.array(self.typecode, self.example)
Fred Drake004d5e62000-10-23 17:22:08 +0000766 a[:-1] = a
Walter Dörwald7fd94242003-05-18 00:47:47 +0000767 self.assertEqual(
768 a,
769 array.array(self.typecode, self.example + self.example[-1:])
770 )
771
772 a = array.array(self.typecode, self.example)
773 a[-1:] = a
774 self.assertEqual(
775 a,
776 array.array(self.typecode, self.example[:-1] + self.example)
777 )
778
779 a = array.array(self.typecode, self.example)
Fred Drake004d5e62000-10-23 17:22:08 +0000780 a[1:] = a
Walter Dörwald7fd94242003-05-18 00:47:47 +0000781 self.assertEqual(
782 a,
783 array.array(self.typecode, self.example[:1] + self.example)
784 )
785
786 a = array.array(self.typecode, self.example)
Fred Drake004d5e62000-10-23 17:22:08 +0000787 a[1:-1] = a
Walter Dörwald7fd94242003-05-18 00:47:47 +0000788 self.assertEqual(
789 a,
790 array.array(
791 self.typecode,
792 self.example[:1] + self.example + self.example[-1:]
793 )
794 )
795
796 a = array.array(self.typecode, self.example)
797 a[1000:] = a
798 self.assertEqual(
799 a,
800 array.array(self.typecode, 2*self.example)
801 )
802
803 a = array.array(self.typecode, self.example)
804 a[-1000:] = a
805 self.assertEqual(
806 a,
807 array.array(self.typecode, self.example)
808 )
809
810 a = array.array(self.typecode, self.example)
811 a[:1000] = a
812 self.assertEqual(
813 a,
814 array.array(self.typecode, self.example)
815 )
816
817 a = array.array(self.typecode, self.example)
818 a[:-1000] = a
819 self.assertEqual(
820 a,
821 array.array(self.typecode, 2*self.example)
822 )
823
824 a = array.array(self.typecode, self.example)
825 a[1:0] = a
826 self.assertEqual(
827 a,
828 array.array(self.typecode, self.example[:1] + self.example + self.example[1:])
829 )
830
831 a = array.array(self.typecode, self.example)
832 a[2000:1000] = a
833 self.assertEqual(
834 a,
835 array.array(self.typecode, 2*self.example)
836 )
837
838 a = array.array(self.typecode, self.example)
Thomas Woutersed03b412007-08-28 21:37:11 +0000839 self.assertRaises(TypeError, a.__setitem__, slice(0, 0), None)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000840 self.assertRaises(TypeError, a.__setitem__, slice(0, 1), None)
841
842 b = array.array(self.badtypecode())
Thomas Woutersed03b412007-08-28 21:37:11 +0000843 self.assertRaises(TypeError, a.__setitem__, slice(0, 0), b)
Walter Dörwald7fd94242003-05-18 00:47:47 +0000844 self.assertRaises(TypeError, a.__setitem__, slice(0, 1), b)
845
Thomas Woutersed03b412007-08-28 21:37:11 +0000846 def test_extended_set_del_slice(self):
847 indices = (0, None, 1, 3, 19, 100, -1, -2, -31, -100)
848 for start in indices:
849 for stop in indices:
850 # Everything except the initial 0 (invalid step)
851 for step in indices[1:]:
852 a = array.array(self.typecode, self.example)
853 L = list(a)
854 # Make sure we have a slice of exactly the right length,
855 # but with (hopefully) different data.
856 data = L[start:stop:step]
857 data.reverse()
858 L[start:stop:step] = data
859 a[start:stop:step] = array.array(self.typecode, data)
Ezio Melottib3aedd42010-11-20 19:04:17 +0000860 self.assertEqual(a, array.array(self.typecode, L))
Thomas Woutersed03b412007-08-28 21:37:11 +0000861
862 del L[start:stop:step]
863 del a[start:stop:step]
Ezio Melottib3aedd42010-11-20 19:04:17 +0000864 self.assertEqual(a, array.array(self.typecode, L))
Thomas Woutersed03b412007-08-28 21:37:11 +0000865
Walter Dörwald7fd94242003-05-18 00:47:47 +0000866 def test_index(self):
867 example = 2*self.example
868 a = array.array(self.typecode, example)
869 self.assertRaises(TypeError, a.index)
870 for x in example:
871 self.assertEqual(a.index(x), example.index(x))
872 self.assertRaises(ValueError, a.index, None)
873 self.assertRaises(ValueError, a.index, self.outside)
874
875 def test_count(self):
876 example = 2*self.example
877 a = array.array(self.typecode, example)
878 self.assertRaises(TypeError, a.count)
879 for x in example:
880 self.assertEqual(a.count(x), example.count(x))
881 self.assertEqual(a.count(self.outside), 0)
882 self.assertEqual(a.count(None), 0)
883
884 def test_remove(self):
885 for x in self.example:
886 example = 2*self.example
887 a = array.array(self.typecode, example)
888 pos = example.index(x)
889 example2 = example[:pos] + example[pos+1:]
890 a.remove(x)
891 self.assertEqual(a, array.array(self.typecode, example2))
892
893 a = array.array(self.typecode, self.example)
894 self.assertRaises(ValueError, a.remove, self.outside)
895
896 self.assertRaises(ValueError, a.remove, None)
897
898 def test_pop(self):
899 a = array.array(self.typecode)
900 self.assertRaises(IndexError, a.pop)
901
902 a = array.array(self.typecode, 2*self.example)
903 self.assertRaises(TypeError, a.pop, 42, 42)
904 self.assertRaises(TypeError, a.pop, None)
905 self.assertRaises(IndexError, a.pop, len(a))
906 self.assertRaises(IndexError, a.pop, -len(a)-1)
907
908 self.assertEntryEqual(a.pop(0), self.example[0])
909 self.assertEqual(
910 a,
911 array.array(self.typecode, self.example[1:]+self.example)
912 )
913 self.assertEntryEqual(a.pop(1), self.example[2])
914 self.assertEqual(
915 a,
916 array.array(self.typecode, self.example[1:2]+self.example[3:]+self.example)
917 )
918 self.assertEntryEqual(a.pop(0), self.example[1])
919 self.assertEntryEqual(a.pop(), self.example[-1])
920 self.assertEqual(
921 a,
922 array.array(self.typecode, self.example[3:]+self.example[:-1])
923 )
924
925 def test_reverse(self):
926 a = array.array(self.typecode, self.example)
927 self.assertRaises(TypeError, a.reverse, 42)
Fred Drake004d5e62000-10-23 17:22:08 +0000928 a.reverse()
Walter Dörwald7fd94242003-05-18 00:47:47 +0000929 self.assertEqual(
930 a,
931 array.array(self.typecode, self.example[::-1])
932 )
933
934 def test_extend(self):
935 a = array.array(self.typecode, self.example)
936 self.assertRaises(TypeError, a.extend)
937 a.extend(array.array(self.typecode, self.example[::-1]))
938 self.assertEqual(
939 a,
940 array.array(self.typecode, self.example+self.example[::-1])
941 )
942
Alexandre Vassalottie503cf92009-07-05 06:25:14 +0000943 a = array.array(self.typecode, self.example)
944 a.extend(a)
945 self.assertEqual(
946 a,
947 array.array(self.typecode, self.example+self.example)
948 )
949
Walter Dörwald7fd94242003-05-18 00:47:47 +0000950 b = array.array(self.badtypecode())
951 self.assertRaises(TypeError, a.extend, b)
952
Raymond Hettinger49f9bd12004-03-14 05:43:59 +0000953 a = array.array(self.typecode, self.example)
954 a.extend(self.example[::-1])
955 self.assertEqual(
956 a,
957 array.array(self.typecode, self.example+self.example[::-1])
958 )
959
Raymond Hettinger6ab78cd2004-08-29 07:50:43 +0000960 def test_constructor_with_iterable_argument(self):
961 a = array.array(self.typecode, iter(self.example))
962 b = array.array(self.typecode, self.example)
963 self.assertEqual(a, b)
964
965 # non-iterable argument
966 self.assertRaises(TypeError, array.array, self.typecode, 10)
967
968 # pass through errors raised in __iter__
969 class A:
970 def __iter__(self):
971 raise UnicodeError
972 self.assertRaises(UnicodeError, array.array, self.typecode, A())
973
974 # pass through errors raised in next()
975 def B():
976 raise UnicodeError
977 yield None
978 self.assertRaises(UnicodeError, array.array, self.typecode, B())
979
Walter Dörwald7fd94242003-05-18 00:47:47 +0000980 def test_coveritertraverse(self):
981 try:
982 import gc
983 except ImportError:
Zachary Ware9fe6d862013-12-08 00:20:35 -0600984 self.skipTest('gc module not available')
Walter Dörwald7fd94242003-05-18 00:47:47 +0000985 a = array.array(self.typecode)
986 l = [iter(a)]
987 l.append(l)
988 gc.collect()
989
990 def test_buffer(self):
991 a = array.array(self.typecode, self.example)
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +0000992 m = memoryview(a)
Alexandre Vassalotti47137252009-07-05 19:57:00 +0000993 expected = m.tobytes()
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +0000994 self.assertEqual(a.tobytes(), expected)
995 self.assertEqual(a.tobytes()[0], expected[0])
Alexandre Vassalotti47137252009-07-05 19:57:00 +0000996 # Resizing is forbidden when there are buffer exports.
997 # For issue 4509, we also check after each error that
998 # the array was not modified.
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +0000999 self.assertRaises(BufferError, a.append, a[0])
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001000 self.assertEqual(m.tobytes(), expected)
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +00001001 self.assertRaises(BufferError, a.extend, a[0:1])
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001002 self.assertEqual(m.tobytes(), expected)
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +00001003 self.assertRaises(BufferError, a.remove, a[0])
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001004 self.assertEqual(m.tobytes(), expected)
1005 self.assertRaises(BufferError, a.pop, 0)
1006 self.assertEqual(m.tobytes(), expected)
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +00001007 self.assertRaises(BufferError, a.fromlist, a.tolist())
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001008 self.assertEqual(m.tobytes(), expected)
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +00001009 self.assertRaises(BufferError, a.frombytes, a.tobytes())
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001010 self.assertEqual(m.tobytes(), expected)
Antoine Pitrou3ad3a0d2008-12-18 17:08:32 +00001011 if self.typecode == 'u':
1012 self.assertRaises(BufferError, a.fromunicode, a.tounicode())
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001013 self.assertEqual(m.tobytes(), expected)
Raymond Hettinger3471b1c2009-01-27 11:06:40 +00001014 self.assertRaises(BufferError, operator.imul, a, 2)
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001015 self.assertEqual(m.tobytes(), expected)
Raymond Hettinger3471b1c2009-01-27 11:06:40 +00001016 self.assertRaises(BufferError, operator.imul, a, 0)
Alexandre Vassalotti47137252009-07-05 19:57:00 +00001017 self.assertEqual(m.tobytes(), expected)
1018 self.assertRaises(BufferError, operator.setitem, a, slice(0, 0), a)
1019 self.assertEqual(m.tobytes(), expected)
1020 self.assertRaises(BufferError, operator.delitem, a, 0)
1021 self.assertEqual(m.tobytes(), expected)
1022 self.assertRaises(BufferError, operator.delitem, a, slice(0, 1))
1023 self.assertEqual(m.tobytes(), expected)
Walter Dörwald7fd94242003-05-18 00:47:47 +00001024
Raymond Hettingercb87bc82004-05-31 00:35:52 +00001025 def test_weakref(self):
1026 s = array.array(self.typecode, self.example)
Alexandre Vassalottiad077152009-07-15 17:49:23 +00001027 p = weakref.proxy(s)
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +00001028 self.assertEqual(p.tobytes(), s.tobytes())
Raymond Hettingercb87bc82004-05-31 00:35:52 +00001029 s = None
1030 self.assertRaises(ReferenceError, len, p)
1031
Serhiy Storchaka43767632013-11-03 21:31:38 +02001032 @unittest.skipUnless(hasattr(sys, 'getrefcount'),
1033 'test needs sys.getrefcount()')
Skip Montanarod5cf0b82003-08-03 23:02:10 +00001034 def test_bug_782369(self):
Serhiy Storchaka43767632013-11-03 21:31:38 +02001035 for i in range(10):
1036 b = array.array('B', range(64))
1037 rc = sys.getrefcount(10)
1038 for i in range(10):
1039 b = array.array('B', range(64))
1040 self.assertEqual(rc, sys.getrefcount(10))
Skip Montanarod5cf0b82003-08-03 23:02:10 +00001041
Thomas Woutersb2137042007-02-01 18:02:27 +00001042 def test_subclass_with_kwargs(self):
1043 # SF bug #1486663 -- this used to erroneously raise a TypeError
1044 ArraySubclassWithKwargs('b', newarg=1)
Raymond Hettingercb87bc82004-05-31 00:35:52 +00001045
Guido van Rossum6b826ab2007-07-03 16:22:09 +00001046 def test_create_from_bytes(self):
Alexandre Vassalotti7e4f3212009-07-05 05:38:18 +00001047 # XXX This test probably needs to be moved in a subclass or
1048 # generalized to use self.typecode.
Guido van Rossum6b826ab2007-07-03 16:22:09 +00001049 a = array.array('H', b"1234")
1050 self.assertEqual(len(a) * a.itemsize, 4)
1051
Meador Inge03b4d502012-08-10 22:35:45 -05001052 @support.cpython_only
1053 def test_sizeof_with_buffer(self):
1054 a = array.array(self.typecode, self.example)
Meador Inge80dd1af2012-08-10 23:21:39 -05001055 basesize = support.calcvobjsize('Pn2Pi')
Meador Inge03b4d502012-08-10 22:35:45 -05001056 buffer_size = a.buffer_info()[1] * a.itemsize
1057 support.check_sizeof(self, a, basesize + buffer_size)
1058
1059 @support.cpython_only
1060 def test_sizeof_without_buffer(self):
1061 a = array.array(self.typecode)
Meador Inge80dd1af2012-08-10 23:21:39 -05001062 basesize = support.calcvobjsize('Pn2Pi')
Meador Inge03b4d502012-08-10 22:35:45 -05001063 support.check_sizeof(self, a, basesize)
1064
Alexandre Vassalotti9730e332013-11-29 20:47:15 -08001065 def test_initialize_with_unicode(self):
1066 if self.typecode != 'u':
1067 with self.assertRaises(TypeError) as cm:
1068 a = array.array(self.typecode, 'foo')
1069 self.assertIn("cannot use a str", str(cm.exception))
1070 with self.assertRaises(TypeError) as cm:
1071 a = array.array(self.typecode, array.array('u', 'foo'))
1072 self.assertIn("cannot use a unicode array", str(cm.exception))
1073 else:
1074 a = array.array(self.typecode, "foo")
1075 a = array.array(self.typecode, array.array('u', 'foo'))
1076
Stefan Krah650c1e82015-02-03 21:43:23 +01001077 @support.cpython_only
1078 def test_obsolete_write_lock(self):
1079 from _testcapi import getbuffer_with_null_view
1080 a = array.array('B', b"")
1081 self.assertRaises(BufferError, getbuffer_with_null_view, a)
Raymond Hettingercb87bc82004-05-31 00:35:52 +00001082
Walter Dörwald7fd94242003-05-18 00:47:47 +00001083class StringTest(BaseTest):
1084
1085 def test_setitem(self):
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001086 super().test_setitem()
Walter Dörwald7fd94242003-05-18 00:47:47 +00001087 a = array.array(self.typecode, self.example)
1088 self.assertRaises(TypeError, a.__setitem__, 0, self.example[:2])
1089
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001090class UnicodeTest(StringTest, unittest.TestCase):
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001091 typecode = 'u'
1092 example = '\x01\u263a\x00\ufeff'
1093 smallerexample = '\x01\u263a\x00\ufefe'
1094 biggerexample = '\x01\u263a\x01\ufeff'
1095 outside = str('\x33')
Victor Stinner8d4734f2012-08-08 20:09:21 +02001096 minitemsize = 2
Walter Dörwald7fd94242003-05-18 00:47:47 +00001097
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001098 def test_unicode(self):
1099 self.assertRaises(TypeError, array.array, 'b', 'foo')
Walter Dörwald7fd94242003-05-18 00:47:47 +00001100
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001101 a = array.array('u', '\xa0\xc2\u1234')
1102 a.fromunicode(' ')
1103 a.fromunicode('')
1104 a.fromunicode('')
1105 a.fromunicode('\x11abc\xff\u1234')
1106 s = a.tounicode()
1107 self.assertEqual(s, '\xa0\xc2\u1234 \x11abc\xff\u1234')
Victor Stinner9d512ab2012-08-09 00:43:56 +02001108 self.assertEqual(a.itemsize, sizeof_wchar)
Walter Dörwald7fd94242003-05-18 00:47:47 +00001109
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001110 s = '\x00="\'a\\b\x80\xff\u0000\u0001\u1234'
1111 a = array.array('u', s)
1112 self.assertEqual(
1113 repr(a),
Georg Brandl559e5d72008-06-11 18:37:52 +00001114 "array('u', '\\x00=\"\\'a\\\\b\\x80\xff\\x00\\x01\u1234')")
Walter Dörwald7fd94242003-05-18 00:47:47 +00001115
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001116 self.assertRaises(TypeError, a.fromunicode)
Walter Dörwald7fd94242003-05-18 00:47:47 +00001117
Victor Stinner29ec5952013-02-26 00:27:38 +01001118 def test_issue17223(self):
1119 # this used to crash
Victor Stinnerc472c5d2013-02-26 22:52:11 +01001120 if sizeof_wchar == 4:
1121 # U+FFFFFFFF is an invalid code point in Unicode 6.0
1122 invalid_str = b'\xff\xff\xff\xff'
1123 else:
Victor Stinner29c00342013-03-08 02:33:06 +01001124 # PyUnicode_FromUnicode() cannot fail with 16-bit wchar_t
1125 self.skipTest("specific to 32-bit wchar_t")
Victor Stinnerc472c5d2013-02-26 22:52:11 +01001126 a = array.array('u', invalid_str)
Victor Stinner29ec5952013-02-26 00:27:38 +01001127 self.assertRaises(ValueError, a.tounicode)
1128 self.assertRaises(ValueError, str, a)
1129
Walter Dörwald7fd94242003-05-18 00:47:47 +00001130class NumberTest(BaseTest):
1131
1132 def test_extslice(self):
1133 a = array.array(self.typecode, range(5))
1134 self.assertEqual(a[::], a)
1135 self.assertEqual(a[::2], array.array(self.typecode, [0,2,4]))
1136 self.assertEqual(a[1::2], array.array(self.typecode, [1,3]))
1137 self.assertEqual(a[::-1], array.array(self.typecode, [4,3,2,1,0]))
1138 self.assertEqual(a[::-2], array.array(self.typecode, [4,2,0]))
1139 self.assertEqual(a[3::-2], array.array(self.typecode, [3,1]))
1140 self.assertEqual(a[-100:100:], a)
1141 self.assertEqual(a[100:-100:-1], a[::-1])
Guido van Rossume2a383d2007-01-15 16:59:06 +00001142 self.assertEqual(a[-100:100:2], array.array(self.typecode, [0,2,4]))
Walter Dörwald7fd94242003-05-18 00:47:47 +00001143 self.assertEqual(a[1000:2000:2], array.array(self.typecode, []))
1144 self.assertEqual(a[-1000:-2000:-2], array.array(self.typecode, []))
1145
1146 def test_delslice(self):
1147 a = array.array(self.typecode, range(5))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001148 del a[::2]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001149 self.assertEqual(a, array.array(self.typecode, [1,3]))
1150 a = array.array(self.typecode, range(5))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001151 del a[1::2]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001152 self.assertEqual(a, array.array(self.typecode, [0,2,4]))
1153 a = array.array(self.typecode, range(5))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001154 del a[1::-2]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001155 self.assertEqual(a, array.array(self.typecode, [0,2,3,4]))
1156 a = array.array(self.typecode, range(10))
Michael W. Hudson56796f62002-07-29 14:35:04 +00001157 del a[::1000]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001158 self.assertEqual(a, array.array(self.typecode, [1,2,3,4,5,6,7,8,9]))
Mark Dickinsonbc099642010-01-29 17:27:24 +00001159 # test issue7788
1160 a = array.array(self.typecode, range(10))
1161 del a[9::1<<333]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001162
1163 def test_assignment(self):
1164 a = array.array(self.typecode, range(10))
1165 a[::2] = array.array(self.typecode, [42]*5)
1166 self.assertEqual(a, array.array(self.typecode, [42, 1, 42, 3, 42, 5, 42, 7, 42, 9]))
1167 a = array.array(self.typecode, range(10))
1168 a[::-4] = array.array(self.typecode, [10]*3)
1169 self.assertEqual(a, array.array(self.typecode, [0, 10, 2, 3, 4, 10, 6, 7, 8 ,10]))
1170 a = array.array(self.typecode, range(4))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001171 a[::-1] = a
Walter Dörwald7fd94242003-05-18 00:47:47 +00001172 self.assertEqual(a, array.array(self.typecode, [3, 2, 1, 0]))
1173 a = array.array(self.typecode, range(10))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001174 b = a[:]
1175 c = a[:]
Walter Dörwald7fd94242003-05-18 00:47:47 +00001176 ins = array.array(self.typecode, range(2))
Michael W. Hudson9c14bad2002-06-19 15:44:15 +00001177 a[2:3] = ins
1178 b[slice(2,3)] = ins
1179 c[2:3:] = ins
Fred Drake004d5e62000-10-23 17:22:08 +00001180
Walter Dörwald7fd94242003-05-18 00:47:47 +00001181 def test_iterationcontains(self):
1182 a = array.array(self.typecode, range(10))
Guido van Rossum805365e2007-05-07 22:24:25 +00001183 self.assertEqual(list(a), list(range(10)))
Walter Dörwald7fd94242003-05-18 00:47:47 +00001184 b = array.array(self.typecode, [20])
1185 self.assertEqual(a[-1] in a, True)
1186 self.assertEqual(b[0] not in a, True)
1187
1188 def check_overflow(self, lower, upper):
1189 # method to be used by subclasses
1190
1191 # should not overflow assigning lower limit
1192 a = array.array(self.typecode, [lower])
1193 a[0] = lower
1194 # should overflow assigning less than lower limit
1195 self.assertRaises(OverflowError, array.array, self.typecode, [lower-1])
1196 self.assertRaises(OverflowError, a.__setitem__, 0, lower-1)
1197 # should not overflow assigning upper limit
1198 a = array.array(self.typecode, [upper])
1199 a[0] = upper
1200 # should overflow assigning more than upper limit
1201 self.assertRaises(OverflowError, array.array, self.typecode, [upper+1])
1202 self.assertRaises(OverflowError, a.__setitem__, 0, upper+1)
1203
1204 def test_subclassing(self):
1205 typecode = self.typecode
1206 class ExaggeratingArray(array.array):
1207 __slots__ = ['offset']
1208
1209 def __new__(cls, typecode, data, offset):
1210 return array.array.__new__(cls, typecode, data)
1211
1212 def __init__(self, typecode, data, offset):
1213 self.offset = offset
1214
1215 def __getitem__(self, i):
1216 return array.array.__getitem__(self, i) + self.offset
1217
1218 a = ExaggeratingArray(self.typecode, [3, 6, 7, 11], 4)
1219 self.assertEntryEqual(a[0], 7)
1220
1221 self.assertRaises(AttributeError, setattr, a, "color", "blue")
1222
Alexander Belopolskyef4a03f2011-01-11 21:44:00 +00001223 def test_frombytearray(self):
1224 a = array.array('b', range(10))
1225 b = array.array(self.typecode, a)
1226 self.assertEqual(a, b)
1227
Walter Dörwald7fd94242003-05-18 00:47:47 +00001228class SignedNumberTest(NumberTest):
1229 example = [-1, 0, 1, 42, 0x7f]
1230 smallerexample = [-1, 0, 1, 42, 0x7e]
1231 biggerexample = [-1, 0, 1, 43, 0x7f]
1232 outside = 23
1233
1234 def test_overflow(self):
1235 a = array.array(self.typecode)
Guido van Rossume2a383d2007-01-15 16:59:06 +00001236 lower = -1 * int(pow(2, a.itemsize * 8 - 1))
1237 upper = int(pow(2, a.itemsize * 8 - 1)) - 1
Walter Dörwald7fd94242003-05-18 00:47:47 +00001238 self.check_overflow(lower, upper)
1239
1240class UnsignedNumberTest(NumberTest):
1241 example = [0, 1, 17, 23, 42, 0xff]
1242 smallerexample = [0, 1, 17, 23, 42, 0xfe]
1243 biggerexample = [0, 1, 17, 23, 43, 0xff]
1244 outside = 0xaa
1245
1246 def test_overflow(self):
1247 a = array.array(self.typecode)
1248 lower = 0
Guido van Rossume2a383d2007-01-15 16:59:06 +00001249 upper = int(pow(2, a.itemsize * 8)) - 1
Walter Dörwald7fd94242003-05-18 00:47:47 +00001250 self.check_overflow(lower, upper)
Fred Drake004d5e62000-10-23 17:22:08 +00001251
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +00001252 def test_bytes_extend(self):
1253 s = bytes(self.example)
1254
1255 a = array.array(self.typecode, self.example)
1256 a.extend(s)
1257 self.assertEqual(
1258 a,
1259 array.array(self.typecode, self.example+self.example)
1260 )
1261
1262 a = array.array(self.typecode, self.example)
1263 a.extend(bytearray(reversed(s)))
1264 self.assertEqual(
1265 a,
1266 array.array(self.typecode, self.example+self.example[::-1])
1267 )
1268
Fred Drake004d5e62000-10-23 17:22:08 +00001269
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001270class ByteTest(SignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001271 typecode = 'b'
1272 minitemsize = 1
Fred Drake004d5e62000-10-23 17:22:08 +00001273
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001274class UnsignedByteTest(UnsignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001275 typecode = 'B'
1276 minitemsize = 1
Walter Dörwald7fd94242003-05-18 00:47:47 +00001277
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001278class ShortTest(SignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001279 typecode = 'h'
1280 minitemsize = 2
Walter Dörwald7fd94242003-05-18 00:47:47 +00001281
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001282class UnsignedShortTest(UnsignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001283 typecode = 'H'
1284 minitemsize = 2
Walter Dörwald7fd94242003-05-18 00:47:47 +00001285
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001286class IntTest(SignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001287 typecode = 'i'
1288 minitemsize = 2
Walter Dörwald7fd94242003-05-18 00:47:47 +00001289
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001290class UnsignedIntTest(UnsignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001291 typecode = 'I'
1292 minitemsize = 2
Walter Dörwald7fd94242003-05-18 00:47:47 +00001293
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001294class LongTest(SignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001295 typecode = 'l'
1296 minitemsize = 4
Walter Dörwald7fd94242003-05-18 00:47:47 +00001297
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001298class UnsignedLongTest(UnsignedNumberTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001299 typecode = 'L'
1300 minitemsize = 4
Walter Dörwald7fd94242003-05-18 00:47:47 +00001301
Meador Inge1c9f0c92011-09-20 19:55:51 -05001302@unittest.skipIf(not have_long_long, 'need long long support')
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001303class LongLongTest(SignedNumberTest, unittest.TestCase):
Meador Inge1c9f0c92011-09-20 19:55:51 -05001304 typecode = 'q'
1305 minitemsize = 8
Meador Inge1c9f0c92011-09-20 19:55:51 -05001306
1307@unittest.skipIf(not have_long_long, 'need long long support')
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001308class UnsignedLongLongTest(UnsignedNumberTest, unittest.TestCase):
Meador Inge1c9f0c92011-09-20 19:55:51 -05001309 typecode = 'Q'
1310 minitemsize = 8
Meador Inge1c9f0c92011-09-20 19:55:51 -05001311
Walter Dörwald7fd94242003-05-18 00:47:47 +00001312class FPTest(NumberTest):
1313 example = [-42.0, 0, 42, 1e5, -1e10]
1314 smallerexample = [-42.0, 0, 42, 1e5, -2e10]
1315 biggerexample = [-42.0, 0, 42, 1e5, 1e10]
1316 outside = 23
1317
1318 def assertEntryEqual(self, entry1, entry2):
1319 self.assertAlmostEqual(entry1, entry2)
1320
Walter Dörwaldcf99b0a2003-05-22 13:15:31 +00001321 def test_byteswap(self):
1322 a = array.array(self.typecode, self.example)
1323 self.assertRaises(TypeError, a.byteswap, 42)
1324 if a.itemsize in (1, 2, 4, 8):
1325 b = array.array(self.typecode, self.example)
1326 b.byteswap()
1327 if a.itemsize==1:
1328 self.assertEqual(a, b)
1329 else:
1330 # On alphas treating the byte swapped bit patters as
1331 # floats/doubles results in floating point exceptions
1332 # => compare the 8bit string values instead
Antoine Pitrou1ce3eb52010-09-01 20:29:34 +00001333 self.assertNotEqual(a.tobytes(), b.tobytes())
Walter Dörwaldcf99b0a2003-05-22 13:15:31 +00001334 b.byteswap()
1335 self.assertEqual(a, b)
1336
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001337class FloatTest(FPTest, unittest.TestCase):
Neal Norwitz35c6cd02003-05-22 13:29:15 +00001338 typecode = 'f'
1339 minitemsize = 4
Walter Dörwald7fd94242003-05-18 00:47:47 +00001340
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001341class DoubleTest(FPTest, unittest.TestCase):
Walter Dörwald7fd94242003-05-18 00:47:47 +00001342 typecode = 'd'
1343 minitemsize = 8
Amaury Forgeot d'Arc9c74b142008-06-18 00:47:36 +00001344
1345 def test_alloc_overflow(self):
Benjamin Petersonbcd8ac32008-10-10 22:20:52 +00001346 from sys import maxsize
Amaury Forgeot d'Arc9c74b142008-06-18 00:47:36 +00001347 a = array.array('d', [-1]*65536)
1348 try:
Benjamin Petersonbcd8ac32008-10-10 22:20:52 +00001349 a *= maxsize//65536 + 1
Amaury Forgeot d'Arc9c74b142008-06-18 00:47:36 +00001350 except MemoryError:
1351 pass
1352 else:
Benjamin Petersonbcd8ac32008-10-10 22:20:52 +00001353 self.fail("Array of size > maxsize created - MemoryError expected")
Amaury Forgeot d'Arc9c74b142008-06-18 00:47:36 +00001354 b = array.array('d', [ 2.71828183, 3.14159265, -1])
1355 try:
Benjamin Petersonbcd8ac32008-10-10 22:20:52 +00001356 b * (maxsize//3 + 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
Raymond Hettinger6ab78cd2004-08-29 07:50:43 +00001362
1363if __name__ == "__main__":
Ezio Melotti1d3e96d2013-01-10 06:04:50 +02001364 unittest.main()