Example #1
0
    def test_mixed_insert_delete(self):
        # This is list of the numbers 0-255 randomized but in a reproducible
        # fashion.
        numbers = range(256)
        numbers.sort(key=lambda x: (
            str(pi ** x).replace(".", "")[x % 5:x % 5 + 4]))
        x = RedBlackTree()
        for i in numbers:
            x[i] = i

        for i in xrange(256):
            self.assertEqual(x[i], i)

        # Make sure we get proper sublists.
        self.assertEquals(x.keys(start=250), [250, 251, 252, 253, 254, 255])
        self.assertEquals(x.keys(start=3, reverse=True), [3, 2, 1, 0])

        # Delete in a different random order
        numbers.sort(key=lambda x: (
            str(e ** x).replace(".", "")[x % 5:x % 5 + 4]))
        for i in numbers:
            self.assertTrue(i in x)
            del x[i]
            self.assertFalse(i in x)

        return
Example #2
0
    def test_even_insert(self):
        x = RedBlackTree()
        keys = [0]
        values = [0]
        items = [(0, 0)]

        x[0] = 0
        for key in xrange(1, 200):
            x[key] = key
            x[-key] = -key
            
            keys = [-key] + keys + [key]
            values = [-key] + values + [key]
            items = [(-key, -key)] + items + [(key, key)]

            self.assertEqual(x.keys(), keys)
            self.assertEqual(x.values(), values)
            self.assertEqual(x.items(), items)
            self.assertEqual(x.root.key, 0)
            
        # Replace some of the keys.
        for key in xrange(1, 200):
            x[key] = key + 1
            self.assertEqual(x[key], key + 1)

            self.assertTrue(key in x)
            self.assertFalse(key + 1000 in x)
Example #3
0
    def test_update_items(self):
        class Dictish(object):
            def items(self):
                for x in ((0, 0), (1, 1), (2, 2)):
                    yield x
        
        d = Dictish()
        x = RedBlackTree()
        x.update(d)
        self.assertTrue(0 in x)
        self.assertEqual(x[0], 0)
        self.assertTrue(1 in x)
        self.assertEqual(x[1], 1)
        self.assertTrue(2 in x)
        self.assertEqual(x[2], 2)

        self.assertEqual(repr(x), "{0: 0, 1: 1, 2: 2}")
Example #4
0
    def test_descending_insert(self):
        x = RedBlackTree()
        keys = []
        values = []
        items = []
        
        root_keys = ([317] * 2 + [316] * 5 + [314] * 10 + [310] * 20 +
                     [302] * 40 + [286] * 80 + [254] * 160)

        for key, root_key in zip(xrange(317, 0, -1), root_keys):
            value = -key
            x[key] = value
            keys = [key] + keys
            values = [value] + values
            items = [(key, value)] + items

            self.assertEqual(x.keys(), keys)
            self.assertEqual(x.values(), values)
            self.assertEqual(x.items(), items)
            self.assertEqual(x.root.key, root_key)
Example #5
0
    def test_ascending_insert(self):
        x = RedBlackTree()
        keys = []
        values = []
        items = []
        
        root_keys = ([1] * 2 + [2] * 5 + [4] * 10 + [8] * 20 + [16] * 40 +
                     [32] * 80 + [64] * 160)

        for key, root_key in zip(xrange(1, 318), root_keys):
            value = -key
            x[key] = value
            keys.append(key)
            values.append(value)
            items.append((key, value))

            self.assertEqual(x.keys(), keys)
            self.assertEqual(x.values(), values)
            self.assertEqual(x.items(), items)
            self.assertEqual(x.root.key, root_key)
Example #6
0
    def test_min_max_del(self):
        x = RedBlackTree()

        self.assertIsNone(x.min())
        self.assertIsNone(x.max())

        for value in xrange(0, 32, 2):
            x[value] = value

        try:
            ignored = x[1]
            self.fail("Expected KeyError")
        except KeyError:
            pass

        self.assertEqual(x.min(), (0, 0))
        self.assertEqual(x.max(), (30, 30))
        self.assertEqual(x.min(15), (14, 14))
        self.assertEqual(x.max(15), (16, 16))
        self.assertEqual(x.min(16), (16, 16))
        self.assertEqual(x.max(16), (16, 16))
        self.assertIsNone(x.min(-20))
        self.assertIsNone(x.max(40))

        del x[18]
        self.assertEqual(x.min(17), (16, 16))
        self.assertEqual(x.max(17), (20, 20))

        self.assertEqual(x.root.key, 6)
        del x[6]
        self.assertEqual(x.min(6), (4, 4))
        self.assertEqual(x.max(6), (8, 8))
        return