コード例 #1
0
    def test_add_entry(self):
        leaf = make_leaf_node(d_int, [1], 3)

        leaf.add_entry(mtree.Entry(2))
        self.assertEqual(entries_to_objs(leaf.entries), set([1, 2]))
        leaf.add_entry(mtree.Entry(3))
        self.assertEqual(entries_to_objs(leaf.entries), set([1, 2, 3]))
        self.assertRaises(ValueError, leaf.add_entry, mtree.Entry(4))
コード例 #2
0
 def test_covering_radius_for(self):
     tree = MTree(d_int)
     internal = mtree.InternalNode(tree)
     internal.add_entry(mtree.Entry(1, None, 1))
     internal.add_entry(mtree.Entry(8, None, 2))
     self.assertEqual(internal.covering_radius_for(0), 10)
     self.assertEqual(internal.covering_radius_for(10), 10)
     self.assertEqual(internal.covering_radius_for(1), 9)
     self.assertEqual(internal.covering_radius_for(11), 11)
コード例 #3
0
def make_two_leaves_and_one_internal(d, routing1, leaf_objs1, routing2,
                                     leaf_objs2):
    tree = make_leaf_and_internal_node(d, routing1, leaf_objs1).mtree
    internal = tree.root
    entry2 = mtree.Entry(routing2)
    leaf2 = mtree.LeafNode(tree, internal, entry2)
    leaf2.entries = set(
        map(lambda o: mtree.Entry(o, d(o, routing2)), leaf_objs2))
    entry2.subtree = leaf2
    entry2.radius = leaf2.covering_radius_for(routing2)
    internal.add_entry(entry2)
    return internal
コード例 #4
0
    def test_split(self):
        leaf = make_leaf_node(d_int, [1, 3, 5, 7], 4)
        tree = leaf.mtree

        mtree.split(leaf, mtree.Entry(9), d_int)
        all_objs = [1, 3, 5, 7, 9]

        internal = tree.root
        self.assertTrue(isinstance(internal, mtree.InternalNode))
        self.assertTrue(internal.parent_node is None)
        self.assertTrue(internal.parent_entry is None)
        self.assertEqual(len(internal.entries), 2)
        for e in internal.entries:
            self.assertTrue(e.obj in all_objs)
            self.assertTrue(e.distance_to_parent is None)
            self.assertFalse(e.subtree is None)

        def leafs(entries):
            g = (e for e in entries)
            return (next(g).subtree, next(g).subtree)

        leaf1, leaf2 = leafs(internal.entries)
        self.assertTrue(leaf == leaf1 or leaf == leaf2)
        self.assertTrue(isinstance(leaf1, mtree.LeafNode))
        self.assertTrue(isinstance(leaf2, mtree.LeafNode))
        self.assertEqual(leaf1.parent_node, internal)
        self.assertEqual(leaf1.parent_node, internal)
        self.assertTrue(leaf1.parent_entry in internal.entries)
        self.assertTrue(leaf2.parent_entry in internal.entries)
        self.assertEqual(len(leaf1) + len(leaf2), 5)
        self.assertEqual(sorted(node_objs(leaf1) + node_objs(leaf2)), all_objs)
コード例 #5
0
 def test_init(self):
     tree = MTree(d_int)
     parent_node = mtree.InternalNode(tree)
     parent_entry = mtree.Entry(1)
     leaf = mtree.LeafNode(tree, parent_node, parent_entry, None)
     self.assertEqual(leaf.d, d_int)
     self.assertEqual(leaf.mtree, tree)
     self.assertEqual(leaf.parent_node, parent_node)
     self.assertEqual(leaf.parent_entry, parent_entry)
     self.assertEqual(leaf.entries, set())
コード例 #6
0
def make_leaf_and_internal_node(d, routing_object, leaf_objs=[]):
    """Creates an mtree with one leaf node which has one parent.

    This is not a tree which would happen in reality: there should be at least
    two nodes connected to a parent.
    """
    tree = MTree(d)
    tree.size = len(leaf_objs)
    leaf = tree.root
    internal = mtree.InternalNode(tree)
    tree.root = internal
    leaf.parent_node = internal
    #entry of leaf in the root
    leaf_entry = mtree.Entry(routing_object, None,
                             leaf.covering_radius_for(routing_object), leaf)
    internal.add_entry(leaf_entry)
    leaf.parent_entry = leaf_entry
    leaf.entries = set(
        map(lambda o: mtree.Entry(o, d(o, routing_object)), leaf_objs))
    return leaf
コード例 #7
0
 def test_Entry_creation(self):
     e = mtree.Entry(1, 2, 3, 4)
     self.assertEqual(e.obj, 1)
     self.assertEqual(e.distance_to_parent, 2)
     self.assertEqual(e.radius, 3)
     self.assertEqual(e.subtree, 4)