~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_btree_index.py

  • Committer: John Arbash Meinel
  • Date: 2008-10-14 19:31:34 UTC
  • mto: This revision was merged to the branch mainline in revision 3805.
  • Revision ID: john@arbash-meinel.com-20081014193134-yi1otoetaq96obxf
Finish up the algorithm to stay within a given layer.

Now when expanding requests, we will only go between layers when we
the whole thing is small enough that we can read everything.
In all other cases, we will only prefetch up until the layer boundary.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1037
1037
                           cached_nodes=[0])
1038
1038
        return index
1039
1039
 
 
1040
    def make_1000_node_index(self):
 
1041
        index = self.make_index(4096*1000, 6)
 
1042
        self.prepare_index(index, node_ref_lists=0, key_length=1,
 
1043
                           key_count=90000, row_lengths=[1, 9, 990],
 
1044
                           cached_nodes=[0])
 
1045
        return index
 
1046
 
1040
1047
    def assertNumPages(self, expected_pages, index, size):
1041
1048
        index._size = size
1042
1049
        self.assertEqual(expected_pages, index._compute_num_pages())
1058
1065
        self.assertNumPages(2, index, 8192)
1059
1066
        self.assertNumPages(76, index, 4096*75 + 10)
1060
1067
 
 
1068
    def test__find_layer_start_and_stop(self):
 
1069
        index = self.make_1000_node_index()
 
1070
        self.assertEqual((0, 1), index._find_layer_first_and_end(0))
 
1071
        self.assertEqual((1, 10), index._find_layer_first_and_end(1))
 
1072
        self.assertEqual((1, 10), index._find_layer_first_and_end(9))
 
1073
        self.assertEqual((10, 1000), index._find_layer_first_and_end(10))
 
1074
        self.assertEqual((10, 1000), index._find_layer_first_and_end(99))
 
1075
        self.assertEqual((10, 1000), index._find_layer_first_and_end(999))
 
1076
 
1061
1077
    def test_unknown_size(self):
1062
1078
        # We should not expand if we don't know the file size
1063
1079
        index = self.make_index(None, 10)
1123
1139
        index = self.make_100_node_index()
1124
1140
        self.assertExpandNodes([10, 11, 12, 13, 14, 15], index, [12, 13])
1125
1141
        self.assertExpandNodes([10, 11, 12, 13, 14, 15], index, [11, 14])
 
1142
 
 
1143
    def test_stay_within_layer(self):
 
1144
        index = self.make_1000_node_index()
 
1145
        # When expanding a request, we won't read nodes from the next layer
 
1146
        self.assertExpandNodes([1, 2, 3, 4, 5, 6], index, [2])
 
1147
        self.assertExpandNodes([3, 4, 5, 6, 7, 8, 9], index, [6])
 
1148
        self.assertExpandNodes([4, 5, 6, 7, 8, 9], index, [9])
 
1149
        self.assertExpandNodes([10, 11, 12, 13, 14, 15], index, [10])
 
1150
        self.assertExpandNodes([10, 11, 12, 13, 14, 15, 16], index, [13])
 
1151
 
 
1152
        self.set_cached_nodes(index, [0, 4, 12])
 
1153
        self.assertExpandNodes([5, 6, 7, 8, 9], index, [7])
 
1154
        self.assertExpandNodes([10, 11], index, [11])