예제 #1
0
    def test_len(self):
        a = array.array(self.typecode)
        a.append(self.example[0])
        self.assertEqual(len(a), 1)

        a = array.array(self.typecode, self.example)
        self.assertEqual(len(a), len(self.example))
예제 #2
0
    def test_cmp(self):
        a = array.array(self.typecode, self.example)
        self.assertIs(a == 42, False)
        self.assertIs(a != 42, True)

        self.assertIs(a == a, True)
        self.assertIs(a != a, False)
        self.assertIs(a < a, False)
        self.assertIs(a <= a, True)
        self.assertIs(a > a, False)
        self.assertIs(a >= a, True)

        al = array.array(self.typecode, self.smallerexample)
        ab = array.array(self.typecode, self.biggerexample)

        self.assertIs(a == 2 * a, False)
        self.assertIs(a != 2 * a, True)
        self.assertIs(a < 2 * a, True)
        self.assertIs(a <= 2 * a, True)
        self.assertIs(a > 2 * a, False)
        self.assertIs(a >= 2 * a, False)

        self.assertIs(a == al, False)
        self.assertIs(a != al, True)
        self.assertIs(a < al, False)
        self.assertIs(a <= al, False)
        self.assertIs(a > al, True)
        self.assertIs(a >= al, True)

        self.assertIs(a == ab, False)
        self.assertIs(a != ab, True)
        self.assertIs(a < ab, True)
        self.assertIs(a <= ab, True)
        self.assertIs(a > ab, False)
        self.assertIs(a >= ab, False)
예제 #3
0
 def test_bug_782369(self):
     for i in range(10):
         b = array.array("B", range(64))
     rc = sys.getrefcount(10)
     for i in range(10):
         b = array.array("B", range(64))
     self.assertEqual(rc, sys.getrefcount(10))
예제 #4
0
    def test_add(self):
        a = array.array(self.typecode, self.example) + array.array(self.typecode, self.example[::-1])
        self.assertEqual(a, array.array(self.typecode, self.example + self.example[::-1]))

        b = array.array(self.badtypecode())
        self.assertRaises(TypeError, a.__add__, b)

        self.assertRaises(TypeError, a.__add__, "bad")
예제 #5
0
 def test_tofromlist(self):
     a = array.array(self.typecode, 2 * self.example)
     b = array.array(self.typecode)
     self.assertRaises(TypeError, a.tolist, 42)
     self.assertRaises(TypeError, b.fromlist)
     self.assertRaises(TypeError, b.fromlist, 42)
     self.assertRaises(TypeError, b.fromlist, [None])
     b.fromlist(a.tolist())
     self.assertEqual(a, b)
예제 #6
0
    def test_bytes_extend(self):
        s = bytes(self.example)

        a = array.array(self.typecode, self.example)
        a.extend(s)
        self.assertEqual(a, array.array(self.typecode, self.example + self.example))

        a = array.array(self.typecode, self.example)
        a.extend(bytearray(reversed(s)))
        self.assertEqual(a, array.array(self.typecode, self.example + self.example[::-1]))
예제 #7
0
 def test_tofrombytes(self):
     a = array.array(self.typecode, 2 * self.example)
     b = array.array(self.typecode)
     self.assertRaises(TypeError, a.tobytes, 42)
     self.assertRaises(TypeError, b.frombytes)
     self.assertRaises(TypeError, b.frombytes, 42)
     b.frombytes(a.tobytes())
     c = array.array(self.typecode, bytearray(a.tobytes()))
     self.assertEqual(a, b)
     self.assertEqual(a, c)
     if a.itemsize > 1:
         self.assertRaises(ValueError, b.frombytes, b"x")
예제 #8
0
    def test_remove(self):
        for x in self.example:
            example = 2 * self.example
            a = array.array(self.typecode, example)
            pos = example.index(x)
            example2 = example[:pos] + example[pos + 1 :]
            a.remove(x)
            self.assertEqual(a, array.array(self.typecode, example2))

        a = array.array(self.typecode, self.example)
        self.assertRaises(ValueError, a.remove, self.outside)

        self.assertRaises(ValueError, a.remove, None)
예제 #9
0
    def check_overflow(self, lower, upper):
        # method to be used by subclasses

        # should not overflow assigning lower limit
        a = array.array(self.typecode, [lower])
        a[0] = lower
        # should overflow assigning less than lower limit
        self.assertRaises(OverflowError, array.array, self.typecode, [lower - 1])
        self.assertRaises(OverflowError, a.__setitem__, 0, lower - 1)
        # should not overflow assigning upper limit
        a = array.array(self.typecode, [upper])
        a[0] = upper
        # should overflow assigning more than upper limit
        self.assertRaises(OverflowError, array.array, self.typecode, [upper + 1])
        self.assertRaises(OverflowError, a.__setitem__, 0, upper + 1)
예제 #10
0
 def test_byteswap(self):
     a = array.array(self.typecode, self.example)
     self.assertRaises(TypeError, a.byteswap, 42)
     if a.itemsize in (1, 2, 4, 8):
         b = array.array(self.typecode, self.example)
         b.byteswap()
         if a.itemsize == 1:
             self.assertEqual(a, b)
         else:
             # On alphas treating the byte swapped bit patters as
             # floats/doubles results in floating point exceptions
             # => compare the 8bit string values instead
             self.assertNotEqual(a.tobytes(), b.tobytes())
         b.byteswap()
         self.assertEqual(a, b)
예제 #11
0
 def test_tofromstring(self):
     nb_warnings = 4
     with warnings.catch_warnings(record=True) as r:
         warnings.filterwarnings("always", message=r"(to|from)string\(\) is deprecated", category=DeprecationWarning)
         a = array.array(self.typecode, 2 * self.example)
         b = array.array(self.typecode)
         self.assertRaises(TypeError, a.tostring, 42)
         self.assertRaises(TypeError, b.fromstring)
         self.assertRaises(TypeError, b.fromstring, 42)
         b.fromstring(a.tostring())
         self.assertEqual(a, b)
         if a.itemsize > 1:
             self.assertRaises(ValueError, b.fromstring, "x")
             nb_warnings += 1
     self.assertEqual(len(r), nb_warnings)
예제 #12
0
 def test_byteswap(self):
     if self.typecode == "u":
         example = "\U00100100"
     else:
         example = self.example
     a = array.array(self.typecode, example)
     self.assertRaises(TypeError, a.byteswap, 42)
     if a.itemsize in (1, 2, 4, 8):
         b = array.array(self.typecode, example)
         b.byteswap()
         if a.itemsize == 1:
             self.assertEqual(a, b)
         else:
             self.assertNotEqual(a, b)
         b.byteswap()
         self.assertEqual(a, b)
예제 #13
0
    def test_deepcopy(self):
        import copy

        a = array.array(self.typecode, self.example)
        b = copy.deepcopy(a)
        self.assertNotEqual(id(a), id(b))
        self.assertEqual(a, b)
예제 #14
0
 def test_buffer(self):
     a = array.array(self.typecode, self.example)
     m = memoryview(a)
     expected = m.tobytes()
     self.assertEqual(a.tobytes(), expected)
     self.assertEqual(a.tobytes()[0], expected[0])
     # Resizing is forbidden when there are buffer exports.
     # For issue 4509, we also check after each error that
     # the array was not modified.
     self.assertRaises(BufferError, a.append, a[0])
     self.assertEqual(m.tobytes(), expected)
     self.assertRaises(BufferError, a.extend, a[0:1])
     self.assertEqual(m.tobytes(), expected)
     self.assertRaises(BufferError, a.remove, a[0])
     self.assertEqual(m.tobytes(), expected)
     self.assertRaises(BufferError, a.pop, 0)
     self.assertEqual(m.tobytes(), expected)
     self.assertRaises(BufferError, a.fromlist, a.tolist())
     self.assertEqual(m.tobytes(), expected)
     self.assertRaises(BufferError, a.frombytes, a.tobytes())
     self.assertEqual(m.tobytes(), expected)
     if self.typecode == "u":
         self.assertRaises(BufferError, a.fromunicode, a.tounicode())
         self.assertEqual(m.tobytes(), expected)
     self.assertRaises(BufferError, operator.imul, a, 2)
     self.assertEqual(m.tobytes(), expected)
     self.assertRaises(BufferError, operator.imul, a, 0)
     self.assertEqual(m.tobytes(), expected)
     self.assertRaises(BufferError, operator.setitem, a, slice(0, 0), a)
     self.assertEqual(m.tobytes(), expected)
     self.assertRaises(BufferError, operator.delitem, a, 0)
     self.assertEqual(m.tobytes(), expected)
     self.assertRaises(BufferError, operator.delitem, a, slice(0, 1))
     self.assertEqual(m.tobytes(), expected)
예제 #15
0
 def test_extslice(self):
     a = array.array(self.typecode, range(5))
     self.assertEqual(a[::], a)
     self.assertEqual(a[::2], array.array(self.typecode, [0, 2, 4]))
     self.assertEqual(a[1::2], array.array(self.typecode, [1, 3]))
     self.assertEqual(a[::-1], array.array(self.typecode, [4, 3, 2, 1, 0]))
     self.assertEqual(a[::-2], array.array(self.typecode, [4, 2, 0]))
     self.assertEqual(a[3::-2], array.array(self.typecode, [3, 1]))
     self.assertEqual(a[-100:100:], a)
     self.assertEqual(a[100:-100:-1], a[::-1])
     self.assertEqual(a[-100:100:2], array.array(self.typecode, [0, 2, 4]))
     self.assertEqual(a[1000:2000:2], array.array(self.typecode, []))
     self.assertEqual(a[-1000:-2000:-2], array.array(self.typecode, []))
예제 #16
0
    def test_pop(self):
        a = array.array(self.typecode)
        self.assertRaises(IndexError, a.pop)

        a = array.array(self.typecode, 2 * self.example)
        self.assertRaises(TypeError, a.pop, 42, 42)
        self.assertRaises(TypeError, a.pop, None)
        self.assertRaises(IndexError, a.pop, len(a))
        self.assertRaises(IndexError, a.pop, -len(a) - 1)

        self.assertEntryEqual(a.pop(0), self.example[0])
        self.assertEqual(a, array.array(self.typecode, self.example[1:] + self.example))
        self.assertEntryEqual(a.pop(1), self.example[2])
        self.assertEqual(a, array.array(self.typecode, self.example[1:2] + self.example[3:] + self.example))
        self.assertEntryEqual(a.pop(0), self.example[1])
        self.assertEntryEqual(a.pop(), self.example[-1])
        self.assertEqual(a, array.array(self.typecode, self.example[3:] + self.example[:-1]))
예제 #17
0
    def test_alloc_overflow(self):
        from sys import maxsize

        a = array.array("d", [-1] * 65536)
        try:
            a *= maxsize // 65536 + 1
        except MemoryError:
            pass
        else:
            self.fail("Array of size > maxsize created - MemoryError expected")
        b = array.array("d", [2.71828183, 3.14159265, -1])
        try:
            b * (maxsize // 3 + 1)
        except MemoryError:
            pass
        else:
            self.fail("Array of size > maxsize created - MemoryError expected")
예제 #18
0
 def test_index(self):
     example = 2 * self.example
     a = array.array(self.typecode, example)
     self.assertRaises(TypeError, a.index)
     for x in example:
         self.assertEqual(a.index(x), example.index(x))
     self.assertRaises(ValueError, a.index, None)
     self.assertRaises(ValueError, a.index, self.outside)
예제 #19
0
    def test_unicode(self):
        self.assertRaises(TypeError, array.array, "b", "foo")

        a = array.array("u", "\xa0\xc2\u1234")
        a.fromunicode(" ")
        a.fromunicode("")
        a.fromunicode("")
        a.fromunicode("\x11abc\xff\u1234")
        s = a.tounicode()
        self.assertEqual(s, "\xa0\xc2\u1234 \x11abc\xff\u1234")
        self.assertEqual(a.itemsize, sizeof_wchar)

        s = "\x00=\"'a\\b\x80\xff\u0000\u0001\u1234"
        a = array.array("u", s)
        self.assertEqual(repr(a), "array('u', '\\x00=\"\\'a\\\\b\\x80\xff\\x00\\x01\u1234')")

        self.assertRaises(TypeError, a.fromunicode)
예제 #20
0
    def test_mul(self):
        a = 5 * array.array(self.typecode, self.example)
        self.assertEqual(a, array.array(self.typecode, 5 * self.example))

        a = array.array(self.typecode, self.example) * 5
        self.assertEqual(a, array.array(self.typecode, self.example * 5))

        a = 0 * array.array(self.typecode, self.example)
        self.assertEqual(a, array.array(self.typecode))

        a = (-1) * array.array(self.typecode, self.example)
        self.assertEqual(a, array.array(self.typecode))

        a = 5 * array.array(self.typecode, self.example[:1])
        self.assertEqual(a, array.array(self.typecode, [a[0]] * 5))

        self.assertRaises(TypeError, a.__mul__, "bad")
예제 #21
0
 def test_assignment(self):
     a = array.array(self.typecode, range(10))
     a[::2] = array.array(self.typecode, [42] * 5)
     self.assertEqual(a, array.array(self.typecode, [42, 1, 42, 3, 42, 5, 42, 7, 42, 9]))
     a = array.array(self.typecode, range(10))
     a[::-4] = array.array(self.typecode, [10] * 3)
     self.assertEqual(a, array.array(self.typecode, [0, 10, 2, 3, 4, 10, 6, 7, 8, 10]))
     a = array.array(self.typecode, range(4))
     a[::-1] = a
     self.assertEqual(a, array.array(self.typecode, [3, 2, 1, 0]))
     a = array.array(self.typecode, range(10))
     b = a[:]
     c = a[:]
     ins = array.array(self.typecode, range(2))
     a[2:3] = ins
     b[slice(2, 3)] = ins
     c[2:3:] = ins
예제 #22
0
 def test_count(self):
     example = 2 * self.example
     a = array.array(self.typecode, example)
     self.assertRaises(TypeError, a.count)
     for x in example:
         self.assertEqual(a.count(x), example.count(x))
     self.assertEqual(a.count(self.outside), 0)
     self.assertEqual(a.count(None), 0)
예제 #23
0
    def test_imul(self):
        a = array.array(self.typecode, self.example)
        b = a

        a *= 5
        self.assertIs(a, b)
        self.assertEqual(a, array.array(self.typecode, 5 * self.example))

        a *= 0
        self.assertIs(a, b)
        self.assertEqual(a, array.array(self.typecode))

        a *= 1000
        self.assertIs(a, b)
        self.assertEqual(a, array.array(self.typecode))

        a *= -1
        self.assertIs(a, b)
        self.assertEqual(a, array.array(self.typecode))

        a = array.array(self.typecode, self.example)
        a *= -1
        self.assertEqual(a, array.array(self.typecode))

        self.assertRaises(TypeError, a.__imul__, "bad")
예제 #24
0
 def test_buffer_info(self):
     a = array.array(self.typecode, self.example)
     self.assertRaises(TypeError, a.buffer_info, 42)
     bi = a.buffer_info()
     self.assertIsInstance(bi, tuple)
     self.assertEqual(len(bi), 2)
     self.assertIsInstance(bi[0], int)
     self.assertIsInstance(bi[1], int)
     self.assertEqual(bi[1], len(a))
예제 #25
0
 def test_filewrite(self):
     a = array.array(self.typecode, 2 * self.example)
     f = open(support.TESTFN, "wb")
     try:
         f.write(a)
         f.close()
         b = array.array(self.typecode)
         f = open(support.TESTFN, "rb")
         b.fromfile(f, len(self.example))
         self.assertEqual(b, array.array(self.typecode, self.example))
         self.assertNotEqual(a, b)
         b.fromfile(f, len(self.example))
         self.assertEqual(a, b)
         f.close()
     finally:
         if not f.closed:
             f.close()
         support.unlink(support.TESTFN)
예제 #26
0
 def test_coveritertraverse(self):
     try:
         import gc
     except ImportError:
         self.skipTest("gc module not available")
     a = array.array(self.typecode)
     l = [iter(a)]
     l.append(l)
     gc.collect()
예제 #27
0
 def test_fromfile_ioerror(self):
     # Issue #5395: Check if fromfile raises a proper OSError
     # instead of EOFError.
     a = array.array(self.typecode)
     f = open(support.TESTFN, "wb")
     try:
         self.assertRaises(OSError, a.fromfile, f, len(self.example))
     finally:
         f.close()
         support.unlink(support.TESTFN)
예제 #28
0
 def test_extended_getslice(self):
     # Test extended slicing by comparing with list slicing
     # (Assumes list conversion works correctly, too)
     a = array.array(self.typecode, self.example)
     indices = (0, None, 1, 3, 19, 100, -1, -2, -31, -100)
     for start in indices:
         for stop in indices:
             # Everything except the initial 0 (invalid step)
             for step in indices[1:]:
                 self.assertEqual(list(a[start:stop:step]), list(a)[start:stop:step])
예제 #29
0
    def test_extended_set_del_slice(self):
        indices = (0, None, 1, 3, 19, 100, -1, -2, -31, -100)
        for start in indices:
            for stop in indices:
                # Everything except the initial 0 (invalid step)
                for step in indices[1:]:
                    a = array.array(self.typecode, self.example)
                    L = list(a)
                    # Make sure we have a slice of exactly the right length,
                    # but with (hopefully) different data.
                    data = L[start:stop:step]
                    data.reverse()
                    L[start:stop:step] = data
                    a[start:stop:step] = array.array(self.typecode, data)
                    self.assertEqual(a, array.array(self.typecode, L))

                    del L[start:stop:step]
                    del a[start:stop:step]
                    self.assertEqual(a, array.array(self.typecode, L))
예제 #30
0
 def test_delslice(self):
     a = array.array(self.typecode, range(5))
     del a[::2]
     self.assertEqual(a, array.array(self.typecode, [1, 3]))
     a = array.array(self.typecode, range(5))
     del a[1::2]
     self.assertEqual(a, array.array(self.typecode, [0, 2, 4]))
     a = array.array(self.typecode, range(5))
     del a[1::-2]
     self.assertEqual(a, array.array(self.typecode, [0, 2, 3, 4]))
     a = array.array(self.typecode, range(10))
     del a[::1000]
     self.assertEqual(a, array.array(self.typecode, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
     # test issue7788
     a = array.array(self.typecode, range(10))
     del a[9 :: 1 << 333]