def test_concat(self): a_ref = range(0, 1024, 4) a = dllist(a_ref) b_ref = range(8092, 8092 + 1024, 4) b = dllist(b_ref) ab_ref = dllist(a_ref + b_ref) c = a + b self.assertEqual(c, ab_ref) self.assertEqual(len(c), len(ab_ref)) c = a + b_ref self.assertEqual(c, ab_ref) self.assertEqual(len(c), len(ab_ref))
def test_concat_inplace(self): a_ref = range(0, 1024, 4) b_ref = range(8092, 8092 + 1024, 4) b = dllist(b_ref) ab_ref = dllist(a_ref + b_ref) a = dllist(a_ref) a += b self.assertEqual(a, ab_ref) self.assertEqual(len(a), len(ab_ref)) a = dllist(a_ref) a += b_ref self.assertEqual(a, ab_ref) self.assertEqual(len(a), len(ab_ref)) a = dllist(a_ref) a += a self.assertEqual(a, dllist(a_ref + a_ref)) self.assertEqual(len(a), len(ab_ref))
def test_iter(self): ref = range(0, 1024, 4) ll = sllist(ref) idx = 0 for val in ll: self.assertFalse(isinstance(val, sllistnode)) self.assertEqual(val, ref[idx]) idx += 1 self.assertEqual(idx, len(ref))
def test_iternodes(self): ref = range(0, 1024, 4) ll = sllist(ref) idx = 0 for node in ll.iternodes(): self.assertTrue(isinstance(node, sllistnode)) self.assertEqual(node.value, ref[idx]) idx += 1 self.assertEqual(idx, len(ref))
def test_reversed(self): ref = range(0, 1024, 4) ll = sllist(ref) idx = len(ref) - 1 for val in reversed(ll): self.assertFalse(isinstance(val, sllistnode)) self.assertEqual(val, ref[idx]) idx -= 1 self.assertEqual(idx, -1)
def test_popleft(self): ref = range(0, 1024, 4) ll = dllist(ref) result = ll.popleft() self.assertEqual(result, ref[0]) self.assertEqual(len(ll), len(ref) - 1) self.assertEqual(ll.size, len(ref) - 1) self.assertEqual(ll.first.value, ref[1]) self.assertEqual(list(ll), ref[1:])
def test_popright(self): ref = range(0, 1024, 4) ll = dllist(ref) result = ll.popright() self.assertEqual(result, ref[-1]) self.assertEqual(len(ll), len(ref) - 1) self.assertEqual(ll.size, len(ref) - 1) self.assertEqual(ll.last.value, ref[-2]) self.assertEqual(list(ll), ref[:-1])
def test_init_with_sequence(self): ref = range(0, 1024, 4) ll = sllist(ref) self.assertEqual(len(ll), len(ref)) self.assertEqual(ll.size, len(ref)) self.assertEqual(list(ll), ref) self.assertIsNot(ll.first, None) self.assertEqual(ll.first.value, 0) self.assertIsNot(ll.last, None) self.assertEqual(ll.last.value, 1020)
def test_iternodes_to(self): ref = range(0, 1024, 4) ll = dllist(ref) terminator_index = 200 terminator = ll.nodeat(terminator_index) idx = 0 for node in ll.iternodes(to=terminator): self.assertTrue(isinstance(node, dllistnode)) self.assertEqual(node.value, ref[idx]) idx += 1 self.assertEqual(node.value, (terminator_index-1)*4) self.assertEqual(idx, terminator_index)
def test_cmp(self): a = sllist(xrange(0, 1100)) b = sllist(xrange(0, 1101)) c = range(0, 1100) self.assertEqual(cmp(a, a), 0) self.assertEqual(cmp(a, b), -1) self.assertEqual(cmp(b, a), 1) self.assertEqual(cmp(a, c), 0) self.assertEqual(cmp(c, a), 0) self.assertEqual(cmp([], []), 0) self.assertEqual(cmp([], a), -1) self.assertEqual(cmp(a, []), 1)
def test_concat_empty(self): empty = dllist() filled_ref = range(0, 1024, 4) filled = dllist(filled_ref) res = empty + empty self.assertEqual(res, dllist([] + [])) self.assertEqual(len(res), 0) res = empty + filled self.assertEqual(res, dllist([] + filled_ref)) self.assertEqual(len(res), len(filled_ref)) res = filled + empty self.assertEqual(res, dllist(filled_ref + [])) self.assertEqual(len(res), len(filled_ref))
def test_getitem(self): ref = range(0, 1024, 4) ll = dllist(ref) for idx in xrange(len(ll)): self.assertFalse(isinstance(ll[idx], dllistnode)) self.assertEqual(ll[idx], ref[idx]) for idx in xrange(len(ll)): self.assertFalse(isinstance(ll[idx], dllistnode)) self.assertEqual(ll[-idx - 1], ref[-idx - 1]) self.assertRaises(TypeError, ll.__getitem__, None) self.assertRaises(TypeError, ll.__getitem__, 'abc') self.assertRaises(IndexError, ll.__getitem__, len(ref)) self.assertRaises(IndexError, ll.__getitem__, -len(ref) - 1)
def test_nodeat(self): ref = range(0, 1024, 4) ll = dllist(ref) for idx in xrange(len(ll)): self.assertTrue(isinstance(ll.nodeat(idx), dllistnode)) self.assertEqual(ll.nodeat(idx).value, ref[idx]) for idx in xrange(len(ll)): self.assertTrue(isinstance(ll.nodeat(idx), dllistnode)) self.assertEqual(ll.nodeat(-idx - 1).value, ref[-idx - 1]) self.assertRaises(TypeError, ll.nodeat, None) self.assertRaises(TypeError, ll.nodeat, 'abc') self.assertRaises(IndexError, ll.nodeat, len(ref)) self.assertRaises(IndexError, ll.nodeat, -len(ref) - 1)
def test_concat_inplace_empty(self): filled_ref = range(0, 1024, 4) filled = dllist(filled_ref) empty = dllist() empty += empty self.assertEqual(empty, dllist([] + [])) self.assertEqual(len(empty), 0) empty = dllist() empty += filled self.assertEqual(empty, dllist([] + filled_ref)) self.assertEqual(len(empty), len(filled_ref)) empty = dllist() filled += empty self.assertEqual(filled, dllist(filled_ref + [])) self.assertEqual(len(filled), len(filled_ref))
def test_del(self): ref = range(0, 1024, 4) ll = dllist(ref) del ll[0] del ref[0] self.assertEqual(list(ll), ref) del ll[len(ll) - 1] del ref[len(ref) - 1] self.assertEqual(list(ll), ref) del ll[(len(ll) - 1) // 2] del ref[(len(ref) - 1) // 2] self.assertEqual(list(ll), ref) def del_item(idx): del ll[idx] self.assertRaises(IndexError, del_item, len(ll)) for i in xrange(len(ll)): del ll[0] self.assertEqual(len(ll), 0)
def test_list_hash(self): self.assertEqual(hash(dllist()), hash(dllist())) self.assertEqual(hash(dllist(range(0, 1024, 4))), hash(dllist(range(0, 1024, 4)))) self.assertEqual(hash(dllist([0, 2])), hash(dllist([0.0, 2.0])))
def test_list_readonly_attributes(self): ll = dllist(range(4)) self.assertRaises(AttributeError, setattr, ll, 'first', None) self.assertRaises(AttributeError, setattr, ll, 'last', None) self.assertRaises(AttributeError, setattr, ll, 'size', None)
def test_iterprev_to_equal_idx(self): ref = range(0, 1024, 4) self._test_iterprev(ref, 100, 100, None)
def test_iternext_to_None(self): ref = range(0, 1024, 4) self._test_iternext(ref, 100, None, ref[-1])
def test_iternext_to_preceding_idx(self): ref = range(0, 1024, 4) self._test_iternext(ref, 100, 50, ref[-1])
def test_iternext_to_following_idx(self): ref = range(0, 1024, 4) self._test_iternext(ref, 100, 200, ref[199])
def test_repeat(self): ref = range(0, 1024, 4) ll = dllist(ref) self.assertEqual(ll * 4, dllist(ref * 4))
def test_iterprev_to_preceding_idx(self): ref = range(0, 1024, 4) self._test_iterprev(ref, 100, 50, ref[51])
def test_iterprev_to_None(self): ref = range(0, 1024, 4) self._test_iterprev(ref, 100, None, ref[0])
def test_iternext_to_equal_idx(self): ref = range(0, 1024, 4) self._test_iternext(ref, 100, 100, None)
def test_repeat_inplace(self): ref = range(0, 1024, 4) ll = dllist(ref) ll *= 4 self.assertEqual(ll, dllist(ref * 4))
def test_iterprev_to_following_idx(self): ref = range(0, 1024, 4) self._test_iterprev(ref, 100, 200, ref[0])