| @@ -49,15 +49,79 @@ class TestSmartList(unittest.TestCase): | |||
| self.assertEquals([2, 3, 4], child) | |||
| self.assertEquals([0, 1, 2, 3, 4], parent) | |||
| def test_parent_magics(self): | |||
| """make sure magically implemented SmartList features work""" | |||
| # __getitem__ | |||
| # __setitem__ | |||
| # __delitem__ | |||
| # if not py3k: | |||
| # __getslice__ | |||
| # __setslice__ | |||
| # __delslice__ | |||
| def test_parent_get_set_del(self): | |||
| """make sure SmartList's getitem/setitem/delitem work""" | |||
| def assign(L, s1, s2, s3, val): | |||
| L[s1:s2:s3] = val | |||
| def delete(L, s1): | |||
| del L[s1] | |||
| list1 = SmartList([0, 1, 2, 3, "one", "two"]) | |||
| list2 = SmartList(list(range(10))) | |||
| self.assertEquals(1, list1[1]) | |||
| self.assertEquals("one", list1[-2]) | |||
| self.assertEquals([2, 3], list1[2:4]) | |||
| self.assertRaises(IndexError, lambda: list1[6]) | |||
| self.assertRaises(IndexError, lambda: list1[-7]) | |||
| self.assertEquals([0, 1, 2], list1[:3]) | |||
| self.assertEquals([0, 1, 2, 3, "one", "two"], list1[:]) | |||
| self.assertEquals([3, "one", "two"], list1[3:]) | |||
| self.assertEquals(["one", "two"], list1[-2:]) | |||
| self.assertEquals([0, 1], list1[:-4]) | |||
| self.assertEquals([], list1[6:]) | |||
| self.assertEquals([], list1[4:2]) | |||
| self.assertEquals([0, 2, "one"], list1[0:5:2]) | |||
| self.assertEquals([0, 2], list1[0:-3:2]) | |||
| self.assertEquals([0, 1, 2, 3, "one", "two"], list1[::]) | |||
| self.assertEquals([2, 3, "one", "two"], list1[2::]) | |||
| self.assertEquals([0, 1, 2, 3], list1[:4:]) | |||
| self.assertEquals([2, 3], list1[2:4:]) | |||
| self.assertEquals([0, 2, 4, 6, 8], list2[::2]) | |||
| self.assertEquals([2, 5, 8], list2[2::3]) | |||
| self.assertEquals([0, 3], list2[:6:3]) | |||
| self.assertEquals([2, 5, 8], list2[-8:9:3]) | |||
| self.assertEquals([], list2[100000:1000:-100]) | |||
| list1[3] = 100 | |||
| self.assertEquals(100, list1[3]) | |||
| list1[5:] = [6, 7, 8] | |||
| self.assertEquals([6, 7, 8], list1[5:]) | |||
| self.assertEquals([0, 1, 2, 100, "one", 6, 7, 8], list1) | |||
| list1[2:4] = [-1, -2, -3, -4, -5] | |||
| self.assertEquals([0, 1, -1, -2, -3, -4, -5, "one", 6, 7, 8], list1) | |||
| list1[0:-3] = [99] | |||
| self.assertEquals([99, 6, 7, 8], list1) | |||
| list2[0:6:2] = [100, 102, 104] | |||
| self.assertEquals([100, 1, 102, 3, 104, 5, 6, 7, 8, 9], list2) | |||
| list2[::3] = [200, 203, 206, 209] | |||
| self.assertEquals([200, 1, 102, 203, 104, 5, 206, 7, 8, 209], list2) | |||
| list2[::] = range(7) | |||
| self.assertEquals([0, 1, 2, 3, 4, 5, 6], list2) | |||
| self.assertRaises(ValueError, | |||
| lambda: assign(list2, 0, 5, 2, [100, 102, 104, 106])) | |||
| del list2[2] | |||
| self.assertEquals([0, 1, 3, 4, 5, 6], list2) | |||
| del list2[-3] | |||
| self.assertEquals([0, 1, 3, 5, 6], list2) | |||
| self.assertRaises(IndexError, lambda: delete(list2, 100)) | |||
| self.assertRaises(IndexError, lambda: delete(list2, -6)) | |||
| list2[:] = range(10) | |||
| del list2[3:6] | |||
| self.assertEquals([0, 1, 2, 6, 7, 8, 9], list2) | |||
| del list2[-2:] | |||
| self.assertEquals([0, 1, 2, 6, 7], list2) | |||
| del list2[:2] | |||
| self.assertEquals([2, 6, 7], list2) | |||
| list2[:] = range(10) | |||
| del list2[2:8:2] | |||
| self.assertEquals([0, 1, 3, 5, 7, 8, 9], list2) | |||
| def test_parent_add(self): | |||
| """make sure SmartList's add/radd/iadd work""" | |||
| # __add__ | |||
| # __radd__ | |||
| # __iadd__ | |||
| @@ -150,6 +214,7 @@ class TestSmartList(unittest.TestCase): | |||
| self.assertEquals([0, 1, 2, 0, 1, 2], list4) | |||
| def test_parent_methods(self): | |||
| pass | |||
| # append | |||
| # count | |||
| # extend | |||
| @@ -161,6 +226,7 @@ class TestSmartList(unittest.TestCase): | |||
| # sort | |||
| def test_child_magics(self): | |||
| pass | |||
| # if py3k: | |||
| # __str__ | |||
| # __bytes__ | |||
| @@ -197,6 +263,7 @@ class TestSmartList(unittest.TestCase): | |||
| # __imul__ | |||
| def test_child_methods(self): | |||
| pass | |||
| # append | |||
| # count | |||
| # extend | |||
| @@ -209,6 +276,8 @@ class TestSmartList(unittest.TestCase): | |||
| def test_influence(self): | |||
| pass | |||
| # test whether changes are propogated correctly | |||
| # also test whether children that exit scope are removed from parent's map | |||
| if __name__ == "__main__": | |||
| unittest.main(verbosity=2) | |||