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))
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)
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))
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")
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)
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]))
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")
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)
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)
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)
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)
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)
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)
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)
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, []))
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]))
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")
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)
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)
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")
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
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)
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")
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))
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)
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()
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)
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])
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))
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]