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