예제 #1
0
    def test_persistent(self):
        #load with numbers
        numbers = [x for x in range(1, 1000)]
        random.shuffle(numbers)

        for number in numbers:
            self.btree.insert(IntClass(number), IntClass(100 + number))

        #serialize and deserialize again
        treejson = self.btree.to_JSON()
        self.leaffactory = BTreeFileLeafFactory(
            os.path.join(self.tempdir, "page"), ".index")
        self.btree = BTree.from_JSON(treejson, IntClass, IntClass,
                                     self.leaffactory)

        #check for numbers
        for number in numbers:
            leaf = self.btree.root.search(IntClass(number))
            leaf.ensure_load()
            self.assertIn(number, [key.integer for key in leaf.keys])

        self.assertGreater(len(self.leaffactory.allocated_leaves), 2)

        #test delete to check if parent correctly set on all nodes and tree works
        random.shuffle(numbers)
        for number in numbers:
            leaf = self.btree.root.search(IntClass(number))
            leaf.ensure_load()
            self.assertIn(number, [
                key.integer
                for key in self.btree.root.search(IntClass(number)).keys
            ])
            self.assertIn(100 + number, [
                value.integer
                for value in self.btree.root.search(IntClass(number)).values
            ])

            self.btree.remove(IntClass(number))

            leaf = self.btree.root.search(IntClass(number))
            leaf.ensure_load()
            self.assertNotIn(number, [
                key.integer
                for key in self.btree.root.search(IntClass(number)).keys
            ])
            self.assertNotIn(100 + number, [
                value.integer
                for value in self.btree.root.search(IntClass(number)).values
            ])
            self.leaffactory.cleanup()

        self.assertEqual(0, len(self.btree.root))
        self.assertEqual([], self.btree.root.childs[0].keys)
        self.assertEqual([], self.btree.root.childs[0].values)
        self.assertEqual(1, len(self.leaffactory.allocated_leaves))
예제 #2
0
    def test_persistent(self):
        # load with numbers
        numbers = [x for x in range(1, 1000)]
        random.shuffle(numbers)

        for number in numbers:
            self.btree.insert(IntClass(number), IntClass(100 + number))

            # serialize and deserialize again
        treejson = self.btree.to_JSON()
        self.leaffactory = BTreeFileLeafFactory(os.path.join(self.tempdir, "page"), ".index")
        self.btree = BTree.from_JSON(treejson, IntClass, IntClass, self.leaffactory)

        # check for numbers
        for number in numbers:
            leaf = self.btree.root.search(IntClass(number))
            leaf.ensure_load()
            self.assertIn(number, [key.integer for key in leaf.keys])

        self.assertGreater(len(self.leaffactory.allocated_leaves), 2)

        # test delete to check if parent correctly set on all nodes and tree works
        random.shuffle(numbers)
        for number in numbers:
            leaf = self.btree.root.search(IntClass(number))
            leaf.ensure_load()
            self.assertIn(number, [key.integer for key in self.btree.root.search(IntClass(number)).keys])
            self.assertIn(100 + number, [value.integer for value in self.btree.root.search(IntClass(number)).values])

            self.btree.remove(IntClass(number))

            leaf = self.btree.root.search(IntClass(number))
            leaf.ensure_load()
            self.assertNotIn(number, [key.integer for key in self.btree.root.search(IntClass(number)).keys])
            self.assertNotIn(100 + number, [value.integer for value in self.btree.root.search(IntClass(number)).values])
            self.leaffactory.cleanup()

        self.assertEqual(0, len(self.btree.root))
        self.assertEqual([], self.btree.root.childs[0].keys)
        self.assertEqual([], self.btree.root.childs[0].values)
        self.assertEqual(1, len(self.leaffactory.allocated_leaves))
예제 #3
0
 def setUp(self):
     self.tempdir = tempfile.mkdtemp()
     self.leaffactory = BTreeFileLeafFactory(os.path.join(self.tempdir, "page"), ".index")
     self.btree = BTree(50, IntClass, IntClass, self.leaffactory)
예제 #4
0
 def setUp(self):
     self.tempdir = tempfile.mkdtemp()
     self.leaffactory = BTreeFileLeafFactory(
         os.path.join(self.tempdir, "page"), ".index")
     self.btree = BTree(50, IntClass, IntClass, self.leaffactory)