14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao#! /usr/bin/env python 24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao"""Test the arraymodule. 34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Roger E. Masse 44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao""" 54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport unittest 74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport warnings 84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom test import test_support 94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom weakref import proxy 104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport array, cStringIO 114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom cPickle import loads, dumps, HIGHEST_PROTOCOL 124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass ArraySubclass(array.array): 144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass ArraySubclassWithKwargs(array.array): 174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, typecode, newarg=None): 184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array.__init__(self, typecode) 194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotests = [] # list to accumulate all tests 214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotypecodes = "cubBhHiIlLfd" 224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass BadConstructorTest(unittest.TestCase): 244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_constructor(self): 264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, array.array) 274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, array.array, spam=42) 284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, array.array, 'xx') 294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, array.array, 'x') 304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotests.append(BadConstructorTest) 324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass BaseTest(unittest.TestCase): 344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Required class attributes (provided by subclasses 354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # typecode: the typecode to test 364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # example: an initializer usable in the constructor for this type 374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # smallerexample: the same length as example, but smaller 384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # biggerexample: the same length as example, but bigger 394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # outside: An entry that is not in example 404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # minitemsize: the minimum guaranteed itemsize 414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def assertEntryEqual(self, entry1, entry2): 434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(entry1, entry2) 444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def badtypecode(self): 464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Return a typecode that is different from our own 474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return typecodes[(typecodes.index(self.typecode)+1) % len(typecodes)] 484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_constructor(self): 504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode) 514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.typecode, self.typecode) 524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(a.itemsize>=self.minitemsize) 534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, array.array, self.typecode, None) 544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_len(self): 564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode) 574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.append(self.example[0]) 584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(a), 1) 594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(a), len(self.example)) 624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_buffer_info(self): 644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.buffer_info, 42) 664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao bi = a.buffer_info() 674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIsInstance(bi, tuple) 684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(bi), 2) 694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIsInstance(bi[0], (int, long)) 704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertIsInstance(bi[1], int) 714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(bi[1], len(a)) 724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_byteswap(self): 744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.byteswap, 42) 764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if a.itemsize in (1, 2, 4, 8): 774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = array.array(self.typecode, self.example) 784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.byteswap() 794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if a.itemsize==1: 804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(a, b) 834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.byteswap() 844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_copy(self): 874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import copy 884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = copy.copy(a) 904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(id(a), id(b)) 914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_deepcopy(self): 944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import copy 954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = copy.deepcopy(a) 974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(id(a), id(b)) 984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_pickle(self): 1014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for protocol in range(HIGHEST_PROTOCOL + 1): 1024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 1034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = loads(dumps(a, protocol)) 1044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(id(a), id(b)) 1054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 1064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = ArraySubclass(self.typecode, self.example) 1084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.x = 10 1094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = loads(dumps(a, protocol)) 1104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(id(a), id(b)) 1114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 1124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.x, b.x) 1134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(type(a), type(b)) 1144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_pickle_for_empty_array(self): 1164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for protocol in range(HIGHEST_PROTOCOL + 1): 1174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode) 1184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = loads(dumps(a, protocol)) 1194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(id(a), id(b)) 1204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 1214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = ArraySubclass(self.typecode) 1234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.x = 10 1244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = loads(dumps(a, protocol)) 1254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(id(a), id(b)) 1264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 1274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.x, b.x) 1284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(type(a), type(b)) 1294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_insert(self): 1314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 1324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.insert(0, self.example[0]) 1334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(len(a), 1+len(self.example)) 1344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[0], a[1]) 1354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.insert) 1364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.insert, None) 1374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.insert, 0, None) 1384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 1404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.insert(-1, self.example[0]) 1414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 1424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 1434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array( 1444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.typecode, 1454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.example[:-1] + self.example[:1] + self.example[-1:] 1464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 1474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 1484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 1504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.insert(-1000, self.example[0]) 1514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 1524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 1534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[:1] + self.example) 1544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 1554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 1574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.insert(1000, self.example[0]) 1584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 1594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 1604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example + self.example[:1]) 1614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 1624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_tofromfile(self): 1644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, 2*self.example) 1654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.tofile) 1664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.tofile, cStringIO.StringIO()) 1674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_support.unlink(test_support.TESTFN) 1684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f = open(test_support.TESTFN, 'wb') 1694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 1704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.tofile(f) 1714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f.close() 1724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = array.array(self.typecode) 1734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f = open(test_support.TESTFN, 'rb') 1744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, b.fromfile) 1754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises( 1764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao TypeError, 1774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.fromfile, 1784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao cStringIO.StringIO(), len(self.example) 1794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 1804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.fromfile(f, len(self.example)) 1814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, array.array(self.typecode, self.example)) 1824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(a, b) 1834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.fromfile(f, len(self.example)) 1844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 1854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(EOFError, b.fromfile, f, 1) 1864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f.close() 1874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao finally: 1884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if not f.closed: 1894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f.close() 1904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_support.unlink(test_support.TESTFN) 1914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 1924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_fromfile_ioerror(self): 1934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Issue #5395: Check if fromfile raises a proper IOError 1944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # instead of EOFError. 1954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode) 1964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f = open(test_support.TESTFN, 'wb') 1974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 1984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IOError, a.fromfile, f, len(self.example)) 1994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao finally: 2004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f.close() 2014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_support.unlink(test_support.TESTFN) 2024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_filewrite(self): 2044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, 2*self.example) 2054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f = open(test_support.TESTFN, 'wb') 2064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 2074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f.write(a) 2084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f.close() 2094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = array.array(self.typecode) 2104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f = open(test_support.TESTFN, 'rb') 2114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.fromfile(f, len(self.example)) 2124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b, array.array(self.typecode, self.example)) 2134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(a, b) 2144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.fromfile(f, len(self.example)) 2154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 2164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f.close() 2174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao finally: 2184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if not f.closed: 2194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f.close() 2204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_support.unlink(test_support.TESTFN) 2214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_tofromlist(self): 2234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, 2*self.example) 2244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = array.array(self.typecode) 2254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.tolist, 42) 2264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, b.fromlist) 2274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, b.fromlist, 42) 2284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, b.fromlist, [None]) 2294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.fromlist(a.tolist()) 2304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 2314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_tofromstring(self): 2334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, 2*self.example) 2344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = array.array(self.typecode) 2354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.tostring, 42) 2364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, b.fromstring) 2374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, b.fromstring, 42) 2384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.fromstring(a.tostring()) 2394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 2404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if a.itemsize>1: 2414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, b.fromstring, "x") 2424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_repr(self): 2444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, 2*self.example) 2454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, eval(repr(a), {"array": array.array})) 2464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode) 2484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(repr(a), "array('%s')" % self.typecode) 2494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_str(self): 2514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, 2*self.example) 2524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao str(a) 2534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_cmp(self): 2554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 2564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a == 42) is False) 2574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a != 42) is True) 2584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a == a) is True) 2604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a != a) is False) 2614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a < a) is False) 2624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a <= a) is True) 2634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a > a) is False) 2644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a >= a) is True) 2654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao al = array.array(self.typecode, self.smallerexample) 2674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ab = array.array(self.typecode, self.biggerexample) 2684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a == 2*a) is False) 2704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a != 2*a) is True) 2714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a < 2*a) is True) 2724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a <= 2*a) is True) 2734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a > 2*a) is False) 2744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a >= 2*a) is False) 2754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a == al) is False) 2774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a != al) is True) 2784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a < al) is False) 2794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a <= al) is False) 2804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a > al) is True) 2814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a >= al) is True) 2824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a == ab) is False) 2844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a != ab) is True) 2854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a < ab) is True) 2864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a <= ab) is True) 2874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a > ab) is False) 2884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue((a >= ab) is False) 2894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_add(self): 2914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) \ 2924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao + array.array(self.typecode, self.example[::-1]) 2934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 2944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 2954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example + self.example[::-1]) 2964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 2974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 2984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = array.array(self.badtypecode()) 2994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__add__, b) 3004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__add__, "bad") 3024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_iadd(self): 3044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example[::-1]) 3054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = a 3064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a += array.array(self.typecode, 2*self.example) 3074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(a is b) 3084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 3094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 3104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[::-1]+2*self.example) 3114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 3124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 3134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a += a 3144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 3154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 3164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example + self.example) 3174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 3184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = array.array(self.badtypecode()) 3204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__add__, b) 3214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__iadd__, "bad") 3234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_mul(self): 3254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = 5*array.array(self.typecode, self.example) 3264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 3274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 3284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, 5*self.example) 3294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 3304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example)*5 3324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 3334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 3344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example*5) 3354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 3364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = 0*array.array(self.typecode, self.example) 3384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 3394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 3404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode) 3414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 3424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = (-1)*array.array(self.typecode, self.example) 3444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 3454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 3464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode) 3474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 3484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__mul__, "bad") 3504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_imul(self): 3524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 3534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = a 3544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a *= 5 3564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(a is b) 3574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 3584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 3594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, 5*self.example) 3604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 3614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a *= 0 3634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(a is b) 3644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, array.array(self.typecode)) 3654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a *= 1000 3674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(a is b) 3684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, array.array(self.typecode)) 3694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a *= -1 3714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(a is b) 3724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, array.array(self.typecode)) 3734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 3754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a *= -1 3764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, array.array(self.typecode)) 3774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__imul__, "bad") 3794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_getitem(self): 3814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 3824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a[0], self.example[0]) 3834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a[0L], self.example[0]) 3844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a[-1], self.example[-1]) 3854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a[-1L], self.example[-1]) 3864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a[len(self.example)-1], self.example[-1]) 3874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a[-len(self.example)], self.example[0]) 3884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__getitem__) 3894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, a.__getitem__, len(self.example)) 3904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, a.__getitem__, -len(self.example)-1) 3914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_setitem(self): 3934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 3944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[0] = a[-1] 3954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a[0], a[-1]) 3964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 3974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 3984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[0L] = a[-1] 3994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a[0], a[-1]) 4004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 4024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[-1] = a[0] 4034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a[0], a[-1]) 4044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 4064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[-1L] = a[0] 4074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a[0], a[-1]) 4084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 4104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[len(self.example)-1] = a[0] 4114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a[0], a[-1]) 4124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 4144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[-len(self.example)] = a[-1] 4154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a[0], a[-1]) 4164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__setitem__) 4184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__setitem__, None) 4194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__setitem__, 0, None) 4204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises( 4214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao IndexError, 4224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.__setitem__, 4234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao len(self.example), self.example[0] 4244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises( 4264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao IndexError, 4274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.__setitem__, 4284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao -len(self.example)-1, self.example[0] 4294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_delitem(self): 4324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 4334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del a[0] 4344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 4354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 4364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[1:]) 4374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 4404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del a[-1] 4414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 4424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 4434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[:-1]) 4444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 4474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del a[len(self.example)-1] 4484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 4494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 4504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[:-1]) 4514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 4544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del a[-len(self.example)] 4554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 4564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 4574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[1:]) 4584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__delitem__) 4614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__delitem__, None) 4624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, a.__delitem__, len(self.example)) 4634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, a.__delitem__, -len(self.example)-1) 4644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_getslice(self): 4664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 4674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[:], a) 4684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 4704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[1:], 4714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[1:]) 4724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 4754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[:1], 4764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[:1]) 4774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 4804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[:-1], 4814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[:-1]) 4824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 4854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[-1:], 4864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[-1:]) 4874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 4904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[-1:-1], 4914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode) 4924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 4954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[2:1], 4964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode) 4974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 4984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 4994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 5004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[1000:], 5014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode) 5024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 5034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[-1000:], a) 5044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[:1000], a) 5054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 5064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[:-1000], 5074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode) 5084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 5094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[-1000:1000], a) 5104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 5114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[2000:1000], 5124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode) 5134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 5144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_extended_getslice(self): 5164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Test extended slicing by comparing with list slicing 5174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # (Assumes list conversion works correctly, too) 5184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 5194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao indices = (0, None, 1, 3, 19, 100, -1, -2, -31, -100) 5204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for start in indices: 5214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for stop in indices: 5224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Everything except the initial 0 (invalid step) 5234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for step in indices[1:]: 5244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(list(a[start:stop:step]), 5254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao list(a)[start:stop:step]) 5264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_setslice(self): 5284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 5294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[:1] = a 5304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 5314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 5324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example + self.example[1:]) 5334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 5344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 5364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[:-1] = a 5374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 5384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 5394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example + self.example[-1:]) 5404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 5414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 5434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[-1:] = a 5444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 5454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 5464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[:-1] + self.example) 5474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 5484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 5504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[1:] = a 5514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 5524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 5534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[:1] + self.example) 5544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 5554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 5574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[1:-1] = a 5584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 5594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 5604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array( 5614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.typecode, 5624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.example[:1] + self.example + self.example[-1:] 5634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 5644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 5654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 5674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[1000:] = a 5684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 5694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 5704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, 2*self.example) 5714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 5724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 5744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[-1000:] = a 5754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 5764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 5774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example) 5784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 5794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 5814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[:1000] = a 5824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 5834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 5844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example) 5854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 5864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 5884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[:-1000] = a 5894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 5904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 5914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, 2*self.example) 5924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 5934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 5944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 5954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[1:0] = a 5964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 5974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 5984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[:1] + self.example + self.example[1:]) 5994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 6004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 6024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[2000:1000] = a 6034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 6044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 6054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, 2*self.example) 6064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 6074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 6094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__setslice__, 0, 0, None) 6104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__setitem__, slice(0, 0), None) 6114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__setitem__, slice(0, 1), None) 6124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = array.array(self.badtypecode()) 6144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__setslice__, 0, 0, b) 6154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__setitem__, slice(0, 0), b) 6164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__setitem__, slice(0, 1), b) 6174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_extended_set_del_slice(self): 6194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao indices = (0, None, 1, 3, 19, 100, -1, -2, -31, -100) 6204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for start in indices: 6214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for stop in indices: 6224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Everything except the initial 0 (invalid step) 6234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for step in indices[1:]: 6244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 6254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao L = list(a) 6264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Make sure we have a slice of exactly the right length, 6274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # but with (hopefully) different data. 6284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao data = L[start:stop:step] 6294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao data.reverse() 6304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao L[start:stop:step] = data 6314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[start:stop:step] = array.array(self.typecode, data) 6324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, array.array(self.typecode, L)) 6334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del L[start:stop:step] 6354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del a[start:stop:step] 6364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, array.array(self.typecode, L)) 6374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_index(self): 6394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao example = 2*self.example 6404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, example) 6414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.index) 6424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for x in example: 6434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.index(x), example.index(x)) 6444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, a.index, None) 6454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, a.index, self.outside) 6464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_count(self): 6484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao example = 2*self.example 6494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, example) 6504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.count) 6514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for x in example: 6524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.count(x), example.count(x)) 6534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.count(self.outside), 0) 6544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a.count(None), 0) 6554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_remove(self): 6574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for x in self.example: 6584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao example = 2*self.example 6594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, example) 6604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pos = example.index(x) 6614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao example2 = example[:pos] + example[pos+1:] 6624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.remove(x) 6634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, array.array(self.typecode, example2)) 6644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 6664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, a.remove, self.outside) 6674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, a.remove, None) 6694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_pop(self): 6714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode) 6724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, a.pop) 6734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, 2*self.example) 6754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.pop, 42, 42) 6764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.pop, None) 6774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, a.pop, len(a)) 6784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(IndexError, a.pop, -len(a)-1) 6794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a.pop(0), self.example[0]) 6814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 6824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 6834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[1:]+self.example) 6844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 6854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a.pop(1), self.example[2]) 6864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 6874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 6884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[1:2]+self.example[3:]+self.example) 6894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 6904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a.pop(0), self.example[1]) 6914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a.pop(), self.example[-1]) 6924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 6934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 6944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[3:]+self.example[:-1]) 6954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 6964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 6974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_reverse(self): 6984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 6994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.reverse, 42) 7004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.reverse() 7014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 7024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 7034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example[::-1]) 7044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 7054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_extend(self): 7074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 7084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.extend) 7094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.extend(array.array(self.typecode, self.example[::-1])) 7104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 7114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 7124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example+self.example[::-1]) 7134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 7144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 7164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.extend(a) 7174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 7184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 7194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example+self.example) 7204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 7214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = array.array(self.badtypecode()) 7234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.extend, b) 7244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 7264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.extend(self.example[::-1]) 7274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 7284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a, 7294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao array.array(self.typecode, self.example+self.example[::-1]) 7304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 7314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_constructor_with_iterable_argument(self): 7334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, iter(self.example)) 7344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = array.array(self.typecode, self.example) 7354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 7364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # non-iterable argument 7384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, array.array, self.typecode, 10) 7394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # pass through errors raised in __iter__ 7414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class A: 7424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __iter__(self): 7434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise UnicodeError 7444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(UnicodeError, array.array, self.typecode, A()) 7454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # pass through errors raised in next() 7474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def B(): 7484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao raise UnicodeError 7494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao yield None 7504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(UnicodeError, array.array, self.typecode, B()) 7514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_coveritertraverse(self): 7534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 7544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import gc 7554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except ImportError: 7564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 7574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode) 7584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao l = [iter(a)] 7594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao l.append(l) 7604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao gc.collect() 7614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_buffer(self): 7634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 7644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with test_support.check_py3k_warnings(): 7654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = buffer(a) 7664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b[0], a.tostring()[0]) 7674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_weakref(self): 7694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = array.array(self.typecode, self.example) 7704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao p = proxy(s) 7714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(p.tostring(), s.tostring()) 7724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = None 7734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ReferenceError, len, p) 7744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_bug_782369(self): 7764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import sys 7774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if hasattr(sys, "getrefcount"): 7784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i in range(10): 7794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = array.array('B', range(64)) 7804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao rc = sys.getrefcount(10) 7814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i in range(10): 7824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = array.array('B', range(64)) 7834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(rc, sys.getrefcount(10)) 7844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_subclass_with_kwargs(self): 7864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # SF bug #1486663 -- this used to erroneously raise a TypeError 7874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao with warnings.catch_warnings(): 7884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao warnings.filterwarnings("ignore", '', DeprecationWarning) 7894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ArraySubclassWithKwargs('b', newarg=1) 7904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass StringTest(BaseTest): 7934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_setitem(self): 7954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao super(StringTest, self).test_setitem() 7964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 7974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.__setitem__, 0, self.example[:2]) 7984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 7994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass CharacterTest(StringTest): 8004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao typecode = 'c' 8014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao example = '\x01azAZ\x00\xfe' 8024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao smallerexample = '\x01azAY\x00\xfe' 8034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao biggerexample = '\x01azAZ\x00\xff' 8044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao outside = '\x33' 8054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao minitemsize = 1 8064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_subbclassing(self): 8084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class EditableString(array.array): 8094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __new__(cls, s, *args, **kwargs): 8104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return array.array.__new__(cls, 'c', s) 8114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, s, color='blue'): 8134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.color = color 8144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def strip(self): 8164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self[:] = array.array('c', self.tostring().strip()) 8174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __repr__(self): 8194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return 'EditableString(%r)' % self.tostring() 8204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = EditableString("\ttest\r\n") 8224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s.strip() 8234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s.tostring(), "test") 8244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s.color, "blue") 8264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s.color = "red" 8274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s.color, "red") 8284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(s.__dict__.keys(), ["color"]) 8294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_nounicode(self): 8314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 8324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, a.fromunicode, unicode('')) 8334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(ValueError, a.tounicode) 8344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotests.append(CharacterTest) 8364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif test_support.have_unicode: 8384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class UnicodeTest(StringTest): 8394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao typecode = 'u' 8404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao example = unicode(r'\x01\u263a\x00\ufeff', 'unicode-escape') 8414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao smallerexample = unicode(r'\x01\u263a\x00\ufefe', 'unicode-escape') 8424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao biggerexample = unicode(r'\x01\u263a\x01\ufeff', 'unicode-escape') 8434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao outside = unicode('\x33') 8444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao minitemsize = 2 8454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_unicode(self): 8474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, array.array, 'b', unicode('foo', 'ascii')) 8484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array('u', unicode(r'\xa0\xc2\u1234', 'unicode-escape')) 8504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.fromunicode(unicode(' ', 'ascii')) 8514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.fromunicode(unicode('', 'ascii')) 8524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.fromunicode(unicode('', 'ascii')) 8534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a.fromunicode(unicode(r'\x11abc\xff\u1234', 'unicode-escape')) 8544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = a.tounicode() 8554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 8564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s, 8574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao unicode(r'\xa0\xc2\u1234 \x11abc\xff\u1234', 'unicode-escape') 8584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 8594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao s = unicode(r'\x00="\'a\\b\x80\xff\u0000\u0001\u1234', 'unicode-escape') 8614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array('u', s) 8624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual( 8634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao repr(a), 8644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao r"""array('u', u'\x00="\'a\\b\x80\xff\x00\x01\u1234')""" 8654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ) 8664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.fromunicode) 8684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao tests.append(UnicodeTest) 8704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass NumberTest(BaseTest): 8724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_extslice(self): 8744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, range(5)) 8754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[::], a) 8764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[::2], array.array(self.typecode, [0,2,4])) 8774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[1::2], array.array(self.typecode, [1,3])) 8784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[::-1], array.array(self.typecode, [4,3,2,1,0])) 8794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[::-2], array.array(self.typecode, [4,2,0])) 8804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[3::-2], array.array(self.typecode, [3,1])) 8814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[-100:100:], a) 8824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[100:-100:-1], a[::-1]) 8834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[-100L:100L:2L], array.array(self.typecode, [0,2,4])) 8844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[1000:2000:2], array.array(self.typecode, [])) 8854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[-1000:-2000:-2], array.array(self.typecode, [])) 8864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 8874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_delslice(self): 8884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, range(5)) 8894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del a[::2] 8904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, array.array(self.typecode, [1,3])) 8914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, range(5)) 8924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del a[1::2] 8934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, array.array(self.typecode, [0,2,4])) 8944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, range(5)) 8954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del a[1::-2] 8964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, array.array(self.typecode, [0,2,3,4])) 8974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, range(10)) 8984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del a[::1000] 8994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, array.array(self.typecode, [1,2,3,4,5,6,7,8,9])) 9004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # test issue7788 9014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, range(10)) 9024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao del a[9::1<<333] 9034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_assignment(self): 9054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, range(10)) 9064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[::2] = array.array(self.typecode, [42]*5) 9074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, array.array(self.typecode, [42, 1, 42, 3, 42, 5, 42, 7, 42, 9])) 9084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, range(10)) 9094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[::-4] = array.array(self.typecode, [10]*3) 9104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, array.array(self.typecode, [0, 10, 2, 3, 4, 10, 6, 7, 8 ,10])) 9114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, range(4)) 9124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[::-1] = a 9134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, array.array(self.typecode, [3, 2, 1, 0])) 9144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, range(10)) 9154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = a[:] 9164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c = a[:] 9174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ins = array.array(self.typecode, range(2)) 9184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[2:3] = ins 9194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b[slice(2,3)] = ins 9204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao c[2:3:] = ins 9214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_iterationcontains(self): 9234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, range(10)) 9244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(list(a), range(10)) 9254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = array.array(self.typecode, [20]) 9264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a[-1] in a, True) 9274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(b[0] not in a, True) 9284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def check_overflow(self, lower, upper): 9304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # method to be used by subclasses 9314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # should not overflow assigning lower limit 9334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, [lower]) 9344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[0] = lower 9354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # should overflow assigning less than lower limit 9364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(OverflowError, array.array, self.typecode, [lower-1]) 9374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(OverflowError, a.__setitem__, 0, lower-1) 9384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # should not overflow assigning upper limit 9394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, [upper]) 9404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a[0] = upper 9414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # should overflow assigning more than upper limit 9424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(OverflowError, array.array, self.typecode, [upper+1]) 9434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(OverflowError, a.__setitem__, 0, upper+1) 9444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_subclassing(self): 9464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao typecode = self.typecode 9474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao class ExaggeratingArray(array.array): 9484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao __slots__ = ['offset'] 9494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __new__(cls, typecode, data, offset): 9514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return array.array.__new__(cls, typecode, data) 9524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __init__(self, typecode, data, offset): 9544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.offset = offset 9554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def __getitem__(self, i): 9574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao return array.array.__getitem__(self, i) + self.offset 9584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = ExaggeratingArray(self.typecode, [3, 6, 7, 11], 4) 9604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEntryEqual(a[0], 7) 9614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(AttributeError, setattr, a, "color", "blue") 9634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass SignedNumberTest(NumberTest): 9654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao example = [-1, 0, 1, 42, 0x7f] 9664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao smallerexample = [-1, 0, 1, 42, 0x7e] 9674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao biggerexample = [-1, 0, 1, 43, 0x7f] 9684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao outside = 23 9694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_overflow(self): 9714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode) 9724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao lower = -1 * long(pow(2, a.itemsize * 8 - 1)) 9734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao upper = long(pow(2, a.itemsize * 8 - 1)) - 1L 9744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.check_overflow(lower, upper) 9754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass UnsignedNumberTest(NumberTest): 9774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao example = [0, 1, 17, 23, 42, 0xff] 9784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao smallerexample = [0, 1, 17, 23, 42, 0xfe] 9794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao biggerexample = [0, 1, 17, 23, 43, 0xff] 9804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao outside = 0xaa 9814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_overflow(self): 9834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode) 9844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao lower = 0 9854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao upper = long(pow(2, a.itemsize * 8)) - 1L 9864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.check_overflow(lower, upper) 9874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @test_support.cpython_only 9894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_sizeof_with_buffer(self): 9904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 9914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao basesize = test_support.calcvobjsize('4P') 9924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao buffer_size = a.buffer_info()[1] * a.itemsize 9934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_support.check_sizeof(self, a, basesize + buffer_size) 9944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 9954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao @test_support.cpython_only 9964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_sizeof_without_buffer(self): 9974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode) 9984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao basesize = test_support.calcvobjsize('4P') 9994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_support.check_sizeof(self, a, basesize) 10004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass ByteTest(SignedNumberTest): 10034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao typecode = 'b' 10044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao minitemsize = 1 10054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotests.append(ByteTest) 10064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass UnsignedByteTest(UnsignedNumberTest): 10084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao typecode = 'B' 10094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao minitemsize = 1 10104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotests.append(UnsignedByteTest) 10114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass ShortTest(SignedNumberTest): 10134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao typecode = 'h' 10144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao minitemsize = 2 10154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotests.append(ShortTest) 10164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass UnsignedShortTest(UnsignedNumberTest): 10184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao typecode = 'H' 10194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao minitemsize = 2 10204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotests.append(UnsignedShortTest) 10214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass IntTest(SignedNumberTest): 10234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao typecode = 'i' 10244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao minitemsize = 2 10254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotests.append(IntTest) 10264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass UnsignedIntTest(UnsignedNumberTest): 10284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao typecode = 'I' 10294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao minitemsize = 2 10304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotests.append(UnsignedIntTest) 10314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass LongTest(SignedNumberTest): 10334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao typecode = 'l' 10344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao minitemsize = 4 10354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotests.append(LongTest) 10364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass UnsignedLongTest(UnsignedNumberTest): 10384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao typecode = 'L' 10394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao minitemsize = 4 10404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotests.append(UnsignedLongTest) 10414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass FPTest(NumberTest): 10434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao example = [-42.0, 0, 42, 1e5, -1e10] 10444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao smallerexample = [-42.0, 0, 42, 1e5, -2e10] 10454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao biggerexample = [-42.0, 0, 42, 1e5, 1e10] 10464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao outside = 23 10474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def assertEntryEqual(self, entry1, entry2): 10494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertAlmostEqual(entry1, entry2) 10504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_byteswap(self): 10524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array(self.typecode, self.example) 10534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(TypeError, a.byteswap, 42) 10544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if a.itemsize in (1, 2, 4, 8): 10554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = array.array(self.typecode, self.example) 10564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.byteswap() 10574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if a.itemsize==1: 10584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 10594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 10604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # On alphas treating the byte swapped bit patters as 10614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # floats/doubles results in floating point exceptions 10624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # => compare the 8bit string values instead 10634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertNotEqual(a.tostring(), b.tostring()) 10644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b.byteswap() 10654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(a, b) 10664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass FloatTest(FPTest): 10684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao typecode = 'f' 10694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao minitemsize = 4 10704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotests.append(FloatTest) 10714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass DoubleTest(FPTest): 10734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao typecode = 'd' 10744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao minitemsize = 8 10754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_alloc_overflow(self): 10774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao from sys import maxsize 10784adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a = array.array('d', [-1]*65536) 10794adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 10804adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao a *= maxsize//65536 + 1 10814adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except MemoryError: 10824adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 10834adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 10844adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("Array of size > maxsize created - MemoryError expected") 10854adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b = array.array('d', [ 2.71828183, 3.14159265, -1]) 10864adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 10874adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao b * (maxsize//3 + 1) 10884adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao except MemoryError: 10894adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao pass 10904adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 10914adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.fail("Array of size > maxsize created - MemoryError expected") 10924adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10934adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaotests.append(DoubleTest) 10944adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10954adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef test_main(verbose=None): 10964adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import sys 10974adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 10984adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_support.run_unittest(*tests) 10994adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11004adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # verify reference counting 11014adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if verbose and hasattr(sys, "gettotalrefcount"): 11024adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao import gc 11034adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao counts = [None] * 5 11044adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for i in xrange(len(counts)): 11054adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_support.run_unittest(*tests) 11064adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao gc.collect() 11074adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao counts[i] = sys.gettotalrefcount() 11084adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao print counts 11094adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 11104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif __name__ == "__main__": 11114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_main(verbose=True) 1112