10c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi#! /usr/bin/env python 20c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi"""Test the arraymodule. 30c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi Roger E. Masse 40c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi""" 50c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 60c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport unittest 70c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport warnings 80c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yifrom test import test_support 90c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yifrom weakref import proxy 100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiimport array, cStringIO 110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yifrom cPickle import loads, dumps, HIGHEST_PROTOCOL 120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass ArraySubclass(array.array): 140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass ArraySubclassWithKwargs(array.array): 170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, typecode, newarg=None): 180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array.__init__(self, typecode) 190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitests = [] # list to accumulate all tests 210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitypecodes = "cubBhHiIlLfd" 220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass BadConstructorTest(unittest.TestCase): 240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_constructor(self): 260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, array.array) 270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, array.array, spam=42) 280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, array.array, 'xx') 290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, array.array, 'x') 300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitests.append(BadConstructorTest) 320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass BaseTest(unittest.TestCase): 340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Required class attributes (provided by subclasses 350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # typecode: the typecode to test 360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # example: an initializer usable in the constructor for this type 370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # smallerexample: the same length as example, but smaller 380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # biggerexample: the same length as example, but bigger 390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # outside: An entry that is not in example 400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # minitemsize: the minimum guaranteed itemsize 410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def assertEntryEqual(self, entry1, entry2): 430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(entry1, entry2) 440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def badtypecode(self): 460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Return a typecode that is different from our own 470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return typecodes[(typecodes.index(self.typecode)+1) % len(typecodes)] 480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_constructor(self): 500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode) 510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.typecode, self.typecode) 520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue(a.itemsize>=self.minitemsize) 530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, array.array, self.typecode, None) 540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_len(self): 560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode) 570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.append(self.example[0]) 580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(len(a), 1) 590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(len(a), len(self.example)) 620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_buffer_info(self): 640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.buffer_info, 42) 660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi bi = a.buffer_info() 670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertIsInstance(bi, tuple) 680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(len(bi), 2) 690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertIsInstance(bi[0], (int, long)) 700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertIsInstance(bi[1], int) 710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(bi[1], len(a)) 720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_byteswap(self): 740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.byteswap, 42) 760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if a.itemsize in (1, 2, 4, 8): 770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = array.array(self.typecode, self.example) 780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b.byteswap() 790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if a.itemsize==1: 800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else: 820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertNotEqual(a, b) 830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b.byteswap() 840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_copy(self): 870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi import copy 880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = copy.copy(a) 900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertNotEqual(id(a), id(b)) 910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_deepcopy(self): 940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi import copy 950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = copy.deepcopy(a) 970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertNotEqual(id(a), id(b)) 980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_pickle(self): 1010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for protocol in range(HIGHEST_PROTOCOL + 1): 1020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 1030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = loads(dumps(a, protocol)) 1040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertNotEqual(id(a), id(b)) 1050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 1060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = ArraySubclass(self.typecode, self.example) 1080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.x = 10 1090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = loads(dumps(a, protocol)) 1100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertNotEqual(id(a), id(b)) 1110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 1120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.x, b.x) 1130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(type(a), type(b)) 1140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_pickle_for_empty_array(self): 1160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for protocol in range(HIGHEST_PROTOCOL + 1): 1170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode) 1180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = loads(dumps(a, protocol)) 1190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertNotEqual(id(a), id(b)) 1200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 1210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = ArraySubclass(self.typecode) 1230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.x = 10 1240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = loads(dumps(a, protocol)) 1250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertNotEqual(id(a), id(b)) 1260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 1270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.x, b.x) 1280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(type(a), type(b)) 1290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_insert(self): 1310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 1320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.insert(0, self.example[0]) 1330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(len(a), 1+len(self.example)) 1340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[0], a[1]) 1350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.insert) 1360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.insert, None) 1370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.insert, 0, None) 1380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 1400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.insert(-1, self.example[0]) 1410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 1420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 1430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array( 1440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.typecode, 1450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.example[:-1] + self.example[:1] + self.example[-1:] 1460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 1470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 1480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 1500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.insert(-1000, self.example[0]) 1510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 1520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 1530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[:1] + self.example) 1540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 1550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 1570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.insert(1000, self.example[0]) 1580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 1590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 1600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example + self.example[:1]) 1610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 1620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_tofromfile(self): 1640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, 2*self.example) 1650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.tofile) 1660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.tofile, cStringIO.StringIO()) 1670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_support.unlink(test_support.TESTFN) 1680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi f = open(test_support.TESTFN, 'wb') 1690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 1700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.tofile(f) 1710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi f.close() 1720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = array.array(self.typecode) 1730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi f = open(test_support.TESTFN, 'rb') 1740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, b.fromfile) 1750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises( 1760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi TypeError, 1770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b.fromfile, 1780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi cStringIO.StringIO(), len(self.example) 1790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 1800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b.fromfile(f, len(self.example)) 1810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(b, array.array(self.typecode, self.example)) 1820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertNotEqual(a, b) 1830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b.fromfile(f, len(self.example)) 1840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 1850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(EOFError, b.fromfile, f, 1) 1860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi f.close() 1870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi finally: 1880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if not f.closed: 1890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi f.close() 1900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_support.unlink(test_support.TESTFN) 1910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 1920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_fromfile_ioerror(self): 1930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Issue #5395: Check if fromfile raises a proper IOError 1940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # instead of EOFError. 1950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode) 1960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi f = open(test_support.TESTFN, 'wb') 1970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 1980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IOError, a.fromfile, f, len(self.example)) 1990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi finally: 2000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi f.close() 2010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_support.unlink(test_support.TESTFN) 2020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_filewrite(self): 2040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, 2*self.example) 2050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi f = open(test_support.TESTFN, 'wb') 2060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 2070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi f.write(a) 2080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi f.close() 2090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = array.array(self.typecode) 2100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi f = open(test_support.TESTFN, 'rb') 2110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b.fromfile(f, len(self.example)) 2120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(b, array.array(self.typecode, self.example)) 2130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertNotEqual(a, b) 2140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b.fromfile(f, len(self.example)) 2150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 2160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi f.close() 2170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi finally: 2180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if not f.closed: 2190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi f.close() 2200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_support.unlink(test_support.TESTFN) 2210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_tofromlist(self): 2230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, 2*self.example) 2240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = array.array(self.typecode) 2250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.tolist, 42) 2260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, b.fromlist) 2270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, b.fromlist, 42) 2280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, b.fromlist, [None]) 2290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b.fromlist(a.tolist()) 2300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 2310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_tofromstring(self): 2330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, 2*self.example) 2340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = array.array(self.typecode) 2350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.tostring, 42) 2360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, b.fromstring) 2370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, b.fromstring, 42) 2380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b.fromstring(a.tostring()) 2390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 2400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if a.itemsize>1: 2410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, b.fromstring, "x") 2420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_repr(self): 2440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, 2*self.example) 2450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, eval(repr(a), {"array": array.array})) 2460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode) 2480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(repr(a), "array('%s')" % self.typecode) 2490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_str(self): 2510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, 2*self.example) 2520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi str(a) 2530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_cmp(self): 2550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 2560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a == 42) is False) 2570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a != 42) is True) 2580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a == a) is True) 2600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a != a) is False) 2610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a < a) is False) 2620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a <= a) is True) 2630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a > a) is False) 2640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a >= a) is True) 2650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi al = array.array(self.typecode, self.smallerexample) 2670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ab = array.array(self.typecode, self.biggerexample) 2680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a == 2*a) is False) 2700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a != 2*a) is True) 2710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a < 2*a) is True) 2720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a <= 2*a) is True) 2730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a > 2*a) is False) 2740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a >= 2*a) is False) 2750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a == al) is False) 2770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a != al) is True) 2780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a < al) is False) 2790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a <= al) is False) 2800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a > al) is True) 2810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a >= al) is True) 2820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a == ab) is False) 2840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a != ab) is True) 2850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a < ab) is True) 2860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a <= ab) is True) 2870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a > ab) is False) 2880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue((a >= ab) is False) 2890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_add(self): 2910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) \ 2920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi + array.array(self.typecode, self.example[::-1]) 2930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 2940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 2950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example + self.example[::-1]) 2960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 2970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 2980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = array.array(self.badtypecode()) 2990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__add__, b) 3000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__add__, "bad") 3020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_iadd(self): 3040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example[::-1]) 3050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = a 3060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a += array.array(self.typecode, 2*self.example) 3070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue(a is b) 3080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 3090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 3100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[::-1]+2*self.example) 3110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 3120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 3130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a += a 3140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 3150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 3160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example + self.example) 3170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 3180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = array.array(self.badtypecode()) 3200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__add__, b) 3210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__iadd__, "bad") 3230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_mul(self): 3250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = 5*array.array(self.typecode, self.example) 3260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 3270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 3280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, 5*self.example) 3290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 3300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example)*5 3320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 3330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 3340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example*5) 3350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 3360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = 0*array.array(self.typecode, self.example) 3380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 3390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 3400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode) 3410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 3420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = (-1)*array.array(self.typecode, self.example) 3440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 3450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 3460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode) 3470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 3480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__mul__, "bad") 3500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_imul(self): 3520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 3530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = a 3540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a *= 5 3560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue(a is b) 3570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 3580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 3590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, 5*self.example) 3600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 3610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a *= 0 3630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue(a is b) 3640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, array.array(self.typecode)) 3650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a *= 1000 3670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue(a is b) 3680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, array.array(self.typecode)) 3690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a *= -1 3710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertTrue(a is b) 3720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, array.array(self.typecode)) 3730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 3750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a *= -1 3760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, array.array(self.typecode)) 3770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__imul__, "bad") 3790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_getitem(self): 3810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 3820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a[0], self.example[0]) 3830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a[0L], self.example[0]) 3840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a[-1], self.example[-1]) 3850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a[-1L], self.example[-1]) 3860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a[len(self.example)-1], self.example[-1]) 3870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a[-len(self.example)], self.example[0]) 3880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__getitem__) 3890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IndexError, a.__getitem__, len(self.example)) 3900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IndexError, a.__getitem__, -len(self.example)-1) 3910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_setitem(self): 3930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 3940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[0] = a[-1] 3950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a[0], a[-1]) 3960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 3970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 3980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[0L] = a[-1] 3990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a[0], a[-1]) 4000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 4020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[-1] = a[0] 4030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a[0], a[-1]) 4040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 4060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[-1L] = a[0] 4070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a[0], a[-1]) 4080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 4100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[len(self.example)-1] = a[0] 4110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a[0], a[-1]) 4120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 4140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[-len(self.example)] = a[-1] 4150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a[0], a[-1]) 4160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__setitem__) 4180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__setitem__, None) 4190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__setitem__, 0, None) 4200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises( 4210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi IndexError, 4220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.__setitem__, 4230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi len(self.example), self.example[0] 4240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 4250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises( 4260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi IndexError, 4270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.__setitem__, 4280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi -len(self.example)-1, self.example[0] 4290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 4300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_delitem(self): 4320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 4330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[0] 4340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 4350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 4360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[1:]) 4370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 4380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 4400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[-1] 4410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 4420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 4430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[:-1]) 4440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 4450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 4470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[len(self.example)-1] 4480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 4490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 4500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[:-1]) 4510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 4520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 4540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[-len(self.example)] 4550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 4560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 4570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[1:]) 4580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 4590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__delitem__) 4610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__delitem__, None) 4620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IndexError, a.__delitem__, len(self.example)) 4630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IndexError, a.__delitem__, -len(self.example)-1) 4640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_getslice(self): 4660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 4670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[:], a) 4680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 4700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[1:], 4710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[1:]) 4720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 4730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 4750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[:1], 4760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[:1]) 4770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 4780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 4800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[:-1], 4810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[:-1]) 4820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 4830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 4850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[-1:], 4860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[-1:]) 4870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 4880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 4900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[-1:-1], 4910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode) 4920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 4930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 4950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[2:1], 4960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode) 4970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 4980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 4990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 5000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[1000:], 5010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode) 5020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 5030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[-1000:], a) 5040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[:1000], a) 5050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 5060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[:-1000], 5070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode) 5080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 5090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[-1000:1000], a) 5100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 5110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[2000:1000], 5120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode) 5130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 5140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_extended_getslice(self): 5160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Test extended slicing by comparing with list slicing 5170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # (Assumes list conversion works correctly, too) 5180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 5190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi indices = (0, None, 1, 3, 19, 100, -1, -2, -31, -100) 5200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for start in indices: 5210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for stop in indices: 5220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Everything except the initial 0 (invalid step) 5230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for step in indices[1:]: 5240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(list(a[start:stop:step]), 5250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi list(a)[start:stop:step]) 5260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_setslice(self): 5280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 5290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[:1] = a 5300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 5310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 5320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example + self.example[1:]) 5330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 5340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 5360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[:-1] = a 5370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 5380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 5390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example + self.example[-1:]) 5400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 5410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 5430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[-1:] = a 5440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 5450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 5460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[:-1] + self.example) 5470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 5480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 5500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[1:] = a 5510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 5520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 5530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[:1] + self.example) 5540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 5550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 5570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[1:-1] = a 5580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 5590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 5600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array( 5610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.typecode, 5620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.example[:1] + self.example + self.example[-1:] 5630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 5640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 5650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 5670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[1000:] = a 5680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 5690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 5700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, 2*self.example) 5710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 5720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 5740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[-1000:] = a 5750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 5760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 5770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example) 5780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 5790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 5810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[:1000] = a 5820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 5830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 5840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example) 5850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 5860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 5880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[:-1000] = a 5890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 5900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 5910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, 2*self.example) 5920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 5930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 5940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 5950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[1:0] = a 5960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 5970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 5980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[:1] + self.example + self.example[1:]) 5990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 6000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 6020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[2000:1000] = a 6030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 6040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 6050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, 2*self.example) 6060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 6070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 6090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__setslice__, 0, 0, None) 6100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__setitem__, slice(0, 0), None) 6110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__setitem__, slice(0, 1), None) 6120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = array.array(self.badtypecode()) 6140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__setslice__, 0, 0, b) 6150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__setitem__, slice(0, 0), b) 6160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__setitem__, slice(0, 1), b) 6170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_extended_set_del_slice(self): 6190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi indices = (0, None, 1, 3, 19, 100, -1, -2, -31, -100) 6200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for start in indices: 6210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for stop in indices: 6220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Everything except the initial 0 (invalid step) 6230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for step in indices[1:]: 6240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 6250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi L = list(a) 6260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # Make sure we have a slice of exactly the right length, 6270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # but with (hopefully) different data. 6280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi data = L[start:stop:step] 6290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi data.reverse() 6300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi L[start:stop:step] = data 6310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[start:stop:step] = array.array(self.typecode, data) 6320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, array.array(self.typecode, L)) 6330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del L[start:stop:step] 6350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[start:stop:step] 6360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, array.array(self.typecode, L)) 6370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_index(self): 6390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi example = 2*self.example 6400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, example) 6410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.index) 6420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for x in example: 6430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.index(x), example.index(x)) 6440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, a.index, None) 6450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, a.index, self.outside) 6460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_count(self): 6480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi example = 2*self.example 6490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, example) 6500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.count) 6510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for x in example: 6520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.count(x), example.count(x)) 6530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.count(self.outside), 0) 6540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a.count(None), 0) 6550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_remove(self): 6570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for x in self.example: 6580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi example = 2*self.example 6590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, example) 6600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pos = example.index(x) 6610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi example2 = example[:pos] + example[pos+1:] 6620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.remove(x) 6630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, array.array(self.typecode, example2)) 6640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 6660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, a.remove, self.outside) 6670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, a.remove, None) 6690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_pop(self): 6710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode) 6720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IndexError, a.pop) 6730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, 2*self.example) 6750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.pop, 42, 42) 6760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.pop, None) 6770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IndexError, a.pop, len(a)) 6780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(IndexError, a.pop, -len(a)-1) 6790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a.pop(0), self.example[0]) 6810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 6820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 6830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[1:]+self.example) 6840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 6850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a.pop(1), self.example[2]) 6860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 6870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 6880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[1:2]+self.example[3:]+self.example) 6890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 6900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a.pop(0), self.example[1]) 6910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a.pop(), self.example[-1]) 6920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 6930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 6940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[3:]+self.example[:-1]) 6950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 6960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 6970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_reverse(self): 6980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 6990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.reverse, 42) 7000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.reverse() 7010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 7020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 7030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example[::-1]) 7040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 7050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_extend(self): 7070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 7080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.extend) 7090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.extend(array.array(self.typecode, self.example[::-1])) 7100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 7110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 7120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example+self.example[::-1]) 7130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 7140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 7160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.extend(a) 7170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 7180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 7190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example+self.example) 7200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 7210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = array.array(self.badtypecode()) 7230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.extend, b) 7240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 7260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.extend(self.example[::-1]) 7270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 7280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a, 7290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi array.array(self.typecode, self.example+self.example[::-1]) 7300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 7310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_constructor_with_iterable_argument(self): 7330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, iter(self.example)) 7340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = array.array(self.typecode, self.example) 7350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 7360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # non-iterable argument 7380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, array.array, self.typecode, 10) 7390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # pass through errors raised in __iter__ 7410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class A: 7420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __iter__(self): 7430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raise UnicodeError 7440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(UnicodeError, array.array, self.typecode, A()) 7450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # pass through errors raised in next() 7470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def B(): 7480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi raise UnicodeError 7490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi yield None 7500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(UnicodeError, array.array, self.typecode, B()) 7510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_coveritertraverse(self): 7530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 7540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi import gc 7550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi except ImportError: 7560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return 7570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode) 7580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi l = [iter(a)] 7590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi l.append(l) 7600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi gc.collect() 7610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_buffer(self): 7630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 7640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi with test_support.check_py3k_warnings(): 7650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = buffer(a) 7660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(b[0], a.tostring()[0]) 7670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_weakref(self): 7690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi s = array.array(self.typecode, self.example) 7700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi p = proxy(s) 7710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(p.tostring(), s.tostring()) 7720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi s = None 7730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ReferenceError, len, p) 7740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_bug_782369(self): 7760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi import sys 7770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if hasattr(sys, "getrefcount"): 7780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for i in range(10): 7790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = array.array('B', range(64)) 7800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi rc = sys.getrefcount(10) 7810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for i in range(10): 7820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = array.array('B', range(64)) 7830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(rc, sys.getrefcount(10)) 7840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_subclass_with_kwargs(self): 7860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # SF bug #1486663 -- this used to erroneously raise a TypeError 7870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi with warnings.catch_warnings(): 7880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi warnings.filterwarnings("ignore", '', DeprecationWarning) 7890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ArraySubclassWithKwargs('b', newarg=1) 7900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass StringTest(BaseTest): 7930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_setitem(self): 7950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi super(StringTest, self).test_setitem() 7960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 7970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.__setitem__, 0, self.example[:2]) 7980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 7990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass CharacterTest(StringTest): 8000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi typecode = 'c' 8010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi example = '\x01azAZ\x00\xfe' 8020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi smallerexample = '\x01azAY\x00\xfe' 8030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi biggerexample = '\x01azAZ\x00\xff' 8040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi outside = '\x33' 8050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi minitemsize = 1 8060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_subbclassing(self): 8080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class EditableString(array.array): 8090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __new__(cls, s, *args, **kwargs): 8100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return array.array.__new__(cls, 'c', s) 8110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, s, color='blue'): 8130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.color = color 8140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def strip(self): 8160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self[:] = array.array('c', self.tostring().strip()) 8170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __repr__(self): 8190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return 'EditableString(%r)' % self.tostring() 8200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi s = EditableString("\ttest\r\n") 8220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi s.strip() 8230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(s.tostring(), "test") 8240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(s.color, "blue") 8260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi s.color = "red" 8270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(s.color, "red") 8280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(s.__dict__.keys(), ["color"]) 8290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_nounicode(self): 8310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 8320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, a.fromunicode, unicode('')) 8330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(ValueError, a.tounicode) 8340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitests.append(CharacterTest) 8360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiif test_support.have_unicode: 8380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class UnicodeTest(StringTest): 8390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi typecode = 'u' 8400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi example = unicode(r'\x01\u263a\x00\ufeff', 'unicode-escape') 8410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi smallerexample = unicode(r'\x01\u263a\x00\ufefe', 'unicode-escape') 8420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi biggerexample = unicode(r'\x01\u263a\x01\ufeff', 'unicode-escape') 8430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi outside = unicode('\x33') 8440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi minitemsize = 2 8450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_unicode(self): 8470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, array.array, 'b', unicode('foo', 'ascii')) 8480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array('u', unicode(r'\xa0\xc2\u1234', 'unicode-escape')) 8500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.fromunicode(unicode(' ', 'ascii')) 8510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.fromunicode(unicode('', 'ascii')) 8520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.fromunicode(unicode('', 'ascii')) 8530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a.fromunicode(unicode(r'\x11abc\xff\u1234', 'unicode-escape')) 8540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi s = a.tounicode() 8550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 8560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi s, 8570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi unicode(r'\xa0\xc2\u1234 \x11abc\xff\u1234', 'unicode-escape') 8580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 8590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi s = unicode(r'\x00="\'a\\b\x80\xff\u0000\u0001\u1234', 'unicode-escape') 8610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array('u', s) 8620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual( 8630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi repr(a), 8640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi r"""array('u', u'\x00="\'a\\b\x80\xff\x00\x01\u1234')""" 8650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ) 8660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.fromunicode) 8680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi tests.append(UnicodeTest) 8700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass NumberTest(BaseTest): 8720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_extslice(self): 8740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, range(5)) 8750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[::], a) 8760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[::2], array.array(self.typecode, [0,2,4])) 8770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[1::2], array.array(self.typecode, [1,3])) 8780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[::-1], array.array(self.typecode, [4,3,2,1,0])) 8790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[::-2], array.array(self.typecode, [4,2,0])) 8800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[3::-2], array.array(self.typecode, [3,1])) 8810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[-100:100:], a) 8820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[100:-100:-1], a[::-1]) 8830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[-100L:100L:2L], array.array(self.typecode, [0,2,4])) 8840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[1000:2000:2], array.array(self.typecode, [])) 8850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[-1000:-2000:-2], array.array(self.typecode, [])) 8860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 8870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_delslice(self): 8880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, range(5)) 8890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[::2] 8900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, array.array(self.typecode, [1,3])) 8910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, range(5)) 8920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[1::2] 8930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, array.array(self.typecode, [0,2,4])) 8940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, range(5)) 8950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[1::-2] 8960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, array.array(self.typecode, [0,2,3,4])) 8970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, range(10)) 8980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[::1000] 8990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, array.array(self.typecode, [1,2,3,4,5,6,7,8,9])) 9000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # test issue7788 9010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, range(10)) 9020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi del a[9::1<<333] 9030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_assignment(self): 9050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, range(10)) 9060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[::2] = array.array(self.typecode, [42]*5) 9070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, array.array(self.typecode, [42, 1, 42, 3, 42, 5, 42, 7, 42, 9])) 9080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, range(10)) 9090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[::-4] = array.array(self.typecode, [10]*3) 9100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, array.array(self.typecode, [0, 10, 2, 3, 4, 10, 6, 7, 8 ,10])) 9110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, range(4)) 9120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[::-1] = a 9130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, array.array(self.typecode, [3, 2, 1, 0])) 9140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, range(10)) 9150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = a[:] 9160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi c = a[:] 9170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi ins = array.array(self.typecode, range(2)) 9180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[2:3] = ins 9190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b[slice(2,3)] = ins 9200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi c[2:3:] = ins 9210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_iterationcontains(self): 9230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, range(10)) 9240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(list(a), range(10)) 9250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = array.array(self.typecode, [20]) 9260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a[-1] in a, True) 9270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(b[0] not in a, True) 9280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def check_overflow(self, lower, upper): 9300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # method to be used by subclasses 9310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # should not overflow assigning lower limit 9330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, [lower]) 9340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[0] = lower 9350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # should overflow assigning less than lower limit 9360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(OverflowError, array.array, self.typecode, [lower-1]) 9370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(OverflowError, a.__setitem__, 0, lower-1) 9380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # should not overflow assigning upper limit 9390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, [upper]) 9400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a[0] = upper 9410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # should overflow assigning more than upper limit 9420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(OverflowError, array.array, self.typecode, [upper+1]) 9430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(OverflowError, a.__setitem__, 0, upper+1) 9440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_subclassing(self): 9460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi typecode = self.typecode 9470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi class ExaggeratingArray(array.array): 9480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi __slots__ = ['offset'] 9490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __new__(cls, typecode, data, offset): 9510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return array.array.__new__(cls, typecode, data) 9520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __init__(self, typecode, data, offset): 9540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.offset = offset 9550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def __getitem__(self, i): 9570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return array.array.__getitem__(self, i) + self.offset 9580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = ExaggeratingArray(self.typecode, [3, 6, 7, 11], 4) 9600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEntryEqual(a[0], 7) 9610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(AttributeError, setattr, a, "color", "blue") 9630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass SignedNumberTest(NumberTest): 9650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi example = [-1, 0, 1, 42, 0x7f] 9660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi smallerexample = [-1, 0, 1, 42, 0x7e] 9670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi biggerexample = [-1, 0, 1, 43, 0x7f] 9680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi outside = 23 9690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_overflow(self): 9710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode) 9720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi lower = -1 * long(pow(2, a.itemsize * 8 - 1)) 9730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi upper = long(pow(2, a.itemsize * 8 - 1)) - 1L 9740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.check_overflow(lower, upper) 9750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass UnsignedNumberTest(NumberTest): 9770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi example = [0, 1, 17, 23, 42, 0xff] 9780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi smallerexample = [0, 1, 17, 23, 42, 0xfe] 9790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi biggerexample = [0, 1, 17, 23, 43, 0xff] 9800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi outside = 0xaa 9810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_overflow(self): 9830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode) 9840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi lower = 0 9850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi upper = long(pow(2, a.itemsize * 8)) - 1L 9860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.check_overflow(lower, upper) 9870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi @test_support.cpython_only 9890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_sizeof_with_buffer(self): 9900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 9910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi basesize = test_support.calcvobjsize('4P') 9920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi buffer_size = a.buffer_info()[1] * a.itemsize 9930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_support.check_sizeof(self, a, basesize + buffer_size) 9940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 9950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi @test_support.cpython_only 9960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_sizeof_without_buffer(self): 9970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode) 9980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi basesize = test_support.calcvobjsize('4P') 9990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_support.check_sizeof(self, a, basesize) 10000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass ByteTest(SignedNumberTest): 10030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi typecode = 'b' 10040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi minitemsize = 1 10050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitests.append(ByteTest) 10060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass UnsignedByteTest(UnsignedNumberTest): 10080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi typecode = 'B' 10090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi minitemsize = 1 10100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitests.append(UnsignedByteTest) 10110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass ShortTest(SignedNumberTest): 10130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi typecode = 'h' 10140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi minitemsize = 2 10150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitests.append(ShortTest) 10160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass UnsignedShortTest(UnsignedNumberTest): 10180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi typecode = 'H' 10190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi minitemsize = 2 10200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitests.append(UnsignedShortTest) 10210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass IntTest(SignedNumberTest): 10230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi typecode = 'i' 10240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi minitemsize = 2 10250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitests.append(IntTest) 10260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass UnsignedIntTest(UnsignedNumberTest): 10280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi typecode = 'I' 10290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi minitemsize = 2 10300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitests.append(UnsignedIntTest) 10310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass LongTest(SignedNumberTest): 10330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi typecode = 'l' 10340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi minitemsize = 4 10350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitests.append(LongTest) 10360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass UnsignedLongTest(UnsignedNumberTest): 10380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi typecode = 'L' 10390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi minitemsize = 4 10400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitests.append(UnsignedLongTest) 10410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass FPTest(NumberTest): 10430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi example = [-42.0, 0, 42, 1e5, -1e10] 10440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi smallerexample = [-42.0, 0, 42, 1e5, -2e10] 10450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi biggerexample = [-42.0, 0, 42, 1e5, 1e10] 10460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi outside = 23 10470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def assertEntryEqual(self, entry1, entry2): 10490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertAlmostEqual(entry1, entry2) 10500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_byteswap(self): 10520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array(self.typecode, self.example) 10530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertRaises(TypeError, a.byteswap, 42) 10540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if a.itemsize in (1, 2, 4, 8): 10550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = array.array(self.typecode, self.example) 10560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b.byteswap() 10570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if a.itemsize==1: 10580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 10590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else: 10600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # On alphas treating the byte swapped bit patters as 10610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # floats/doubles results in floating point exceptions 10620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # => compare the 8bit string values instead 10630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertNotEqual(a.tostring(), b.tostring()) 10640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b.byteswap() 10650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.assertEqual(a, b) 10660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass FloatTest(FPTest): 10680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi typecode = 'f' 10690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi minitemsize = 4 10700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitests.append(FloatTest) 10710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass DoubleTest(FPTest): 10730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi typecode = 'd' 10740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi minitemsize = 8 10750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def test_alloc_overflow(self): 10770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi from sys import maxsize 10780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a = array.array('d', [-1]*65536) 10790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 10800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi a *= maxsize//65536 + 1 10810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi except MemoryError: 10820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 10830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else: 10840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.fail("Array of size > maxsize created - MemoryError expected") 10850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b = array.array('d', [ 2.71828183, 3.14159265, -1]) 10860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi try: 10870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi b * (maxsize//3 + 1) 10880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi except MemoryError: 10890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi pass 10900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else: 10910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi self.fail("Array of size > maxsize created - MemoryError expected") 10920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yitests.append(DoubleTest) 10940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef test_main(verbose=None): 10960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi import sys 10970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 10980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_support.run_unittest(*tests) 10990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi # verify reference counting 11010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if verbose and hasattr(sys, "gettotalrefcount"): 11020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi import gc 11030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi counts = [None] * 5 11040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for i in xrange(len(counts)): 11050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_support.run_unittest(*tests) 11060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi gc.collect() 11070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi counts[i] = sys.gettotalrefcount() 11080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi print counts 11090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 11100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiif __name__ == "__main__": 11110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi test_main(verbose=True) 1112