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