1037
1037
cached_nodes=[0])
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],
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)
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))
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])
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])
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])