Rev 5: Basic multi level writer tests. in http://people.ubuntu.com/~robertc/baz2.0/plugins/index2/trunk

Robert Collins robertc at robertcollins.net
Tue Jul 1 03:33:05 BST 2008


At http://people.ubuntu.com/~robertc/baz2.0/plugins/index2/trunk

------------------------------------------------------------
revno: 5
revision-id: robertc at robertcollins.net-20080701023304-a01ibps9ycjkhzqj
parent: robertc at robertcollins.net-20080630234537-5o71tqw764pyu2pc
committer: Robert Collins <robertc at robertcollins.net>
branch nick: trunk
timestamp: Tue 2008-07-01 12:33:04 +1000
message:
  Basic multi level writer tests.
modified:
  btree_index.py                 index.py-20080624222253-p0x5f92uyh5hw734-7
  tests/test_btree_index.py      test_index.py-20080624222253-p0x5f92uyh5hw734-13
=== modified file 'btree_index.py'
--- a/btree_index.py	2008-06-30 23:45:37 +0000
+++ b/btree_index.py	2008-07-01 02:33:04 +0000
@@ -20,7 +20,7 @@
 import tempfile
 import zlib
 
-from bzrlib import index
+from bzrlib import index, osutils
 from bzrlib.index import _OPTION_NODE_REFS, _OPTION_KEY_ELEMENTS, _OPTION_LEN
 from bzrlib.plugins.index2 import errors, chunk_writer
 
@@ -28,7 +28,23 @@
 _BTSIGNATURE = "B+Tree Graph Index 1\n"
 _OPTION_ROW_LENGTHS = "row_lengths="
 _LEAF_FLAG = "type=leaf\n"
-
+_INTERNAL_FLAG = "type=internal\n"
+_INTERNAL_OFFSET = "offset="
+
+
+class _BuilderRow(object):
+    """The stored state accumulated while writing out a row in the index.
+    
+    :ivar spool: A temporary file used to accumulate nodes for this row
+        in the tree.
+    :ivar nodes: The count of nodes emitted so far.
+    """
+
+    def __init__(self):
+        """Create a _BuilderRow."""
+        self.nodes = 0
+        self.spool = tempfile.TemporaryFile()
+        self.writer = None
 
 
 class BTreeBuilder(index.GraphIndexBuilder):
@@ -60,7 +76,9 @@
     """
 
     def finish(self):
-        working = tempfile.TemporaryFile()
+        # The index rows - rows[0] is the root, rows[1] is the layer under it
+        # etc.
+        self.rows = []
         # forward sorted by key. In future we may consider topological sorting,
         # at the cost of table scans for direct lookup, or a second index for
         # direct lookup
@@ -72,38 +90,79 @@
         # A stack with the current open node for each row length
         self.row_nodes = []
         if len(nodes):
-            self.rows = 1
-            # write a leaf node, padded to 4096 (4K) bytes
-            self.page_count = 0
-            def finish_node():
-                byte_lines, next_node_line = writer.finish()
-                if self.row_lengths[-1] == 0:
+            # Loop over all nodes adding them to the bottom row
+            # (self.rows[-1]). When we finish a chunk in a row,
+            # propogate the key that didn't fit (comes after the chunk) to the
+            # row above, transitively.
+            self.rows.append(_BuilderRow())
+            def finish_node(row):
+                byte_lines, next_node_line = row.writer.finish()
+                if row.nodes == 0:
                     # padded note:
-                    working.write("\x00" * 100)
-                working.writelines(byte_lines)
-                self.page_count += 1
-                self.row_lengths[-1] += 1
+                    row.spool.write("\x00" * 100)
+                row.spool.writelines(byte_lines)
+                if row.spool.tell() % 4096 != 0:
+                    raise AssertionError("incorrect node length")
+                row.nodes += 1
+                row.writer = None
+
+            def add_key(string_key, key_line):
+                """Add a key to the current chunk.
+                
+                :param string_key: The key to add.
+                :param key_line: The fully serialised key and value.
+                """
+                if self.rows[-1].writer is None:
+                    # opening a new leaf chunk;
+                    for pos, internal_row in enumerate(self.rows[:-1]):
+                        # flesh out any internal nodes that are needed to
+                        # preserve the high of the tree
+                        if internal_row.writer is None:
+                            length = 4096
+                            if internal_row.nodes == 0:
+                                length -= 100 # padded
+                            internal_row.writer = chunk_writer.ChunkWriter(
+                                length)
+                            internal_row.writer.write(_INTERNAL_FLAG)
+                            internal_row.writer.write(_INTERNAL_OFFSET +
+                                str(self.rows[pos + 1].nodes - 1) + "\n")
+                    # add a new leaf
+                    length = 4096
+                    if self.rows[-1].nodes == 0:
+                        length -= 100 # padded
+                    self.rows[-1].writer = chunk_writer.ChunkWriter(length)
+                    self.rows[-1].writer.write(_LEAF_FLAG)
+                if self.rows[-1].writer.write(line):
+                    # this key did not fit in the node:
+                    finish_node(self.rows[-1])
+                    key_line = string_key + "\n"
+                    new_row = True
+                    for row in reversed(self.rows[:-1]):
+                        # Mark the end of this node in the node above. If it
+                        # doesn't fit then flush the node out and mark the end
+                        # point of that internal node in the node above.
+                        if row.writer.write(key_line):
+                            finish_node(row)
+                        else:
+                            # We've found a node that can handle the pointer.
+                            new_row = False
+                            break
+                    # If we reached the current root without being able to mark the
+                    # division point, then we need a new root:
+                    if new_row:
+                        # We need a new row
+                        new_row = _BuilderRow()
+                        self.rows.insert(0, new_row)
+                        new_row.writer = chunk_writer.ChunkWriter(3996)
+                        new_row.writer.write(_INTERNAL_FLAG)
+                        new_row.writer.write(_INTERNAL_OFFSET +
+                            str(self.rows[1].nodes - 1) + "\n")
+                        new_row.writer.write(key_line)
+                    add_key(string_key, key_line)
 
             for key, (absent, references, value) in nodes:
                 if absent:
                     continue
-                if len(self.row_nodes) != self.rows:
-                    # seed some nodes
-                    for depth in range(self.rows - len(self.row_nodes) - 1):
-                        # add internal node
-                        assert False
-                    if len(self.row_lengths) != self.rows:
-                        # we have bumped up a row
-                        self.row_lengths.insert(0, 0)
-                    # Time for a new node
-                    if self.row_lengths[0] == 0:
-                        # Pad the node, it might end up being the root
-                        writer = chunk_writer.ChunkWriter(3996)
-                    else:
-                        writer = chunk_writer.ChunkWriter(4096)
-                    self.row_nodes.append(writer)
-                    writer.write(_LEAF_FLAG)
-
                 key_count += 1
                 flattened_references = []
                 for ref_list in references:
@@ -114,31 +173,33 @@
                 string_key = '\x00'.join(key)
                 line = ("%s\x00%s\x00%s\n" % (string_key,
                     '\t'.join(flattened_references), value))
-                if writer.write(line):
-                    # new node time
-                    assert False
-            finish_node()
-        working.flush()
+                add_key(string_key, line)
+            for row in reversed(self.rows):
+                finish_node(row)
         result = tempfile.TemporaryFile()
         lines = [_BTSIGNATURE]
         lines.append(_OPTION_NODE_REFS + str(self.reference_lists) + '\n')
         lines.append(_OPTION_KEY_ELEMENTS + str(self._key_length) + '\n')
         lines.append(_OPTION_LEN + str(key_count) + '\n')
-        lines.append(_OPTION_ROW_LENGTHS + ','.join(map(str, self.row_lengths)) + '\n')
-        # write the rows out:
+        row_lengths = [row.nodes for row in self.rows]
+        lines.append(_OPTION_ROW_LENGTHS + ','.join(map(str, row_lengths)) + '\n')
         result.writelines(lines)
-        reserved = 100 # reserved space
         position = sum(map(len, lines))
-        working.seek(0)
-        # copy nodes to the finalised file.
-        node = working.read(4096)
-        while node:
-            node = node[reserved:]
-            result.write(node)
+        # write the rows out:
+        for row in self.rows:
+            reserved = 100 # reserved space for first node
+            row.spool.flush()
+            row.spool.seek(0)
+            # copy nodes to the finalised file.
+            # Special case the first node as it may be prefixed
+            node = row.spool.read(4096)
+            result.write(node[reserved:])
             result.write("\x00" * (reserved - position))
-            node = working.read(4096)
-            position = 0
-            reserved = 0
+            position = 0 # Only the root row actually has an offset
+            copied_len = osutils.pumpfile(row.spool, result)
+            if copied_len != (row.nodes - 1) * 4096:
+                import pdb;pdb.set_trace()
+                raise AssertionError("Not enough data copied")
         result.flush()
         result.seek(0)
         return result

=== modified file 'tests/test_btree_index.py'
--- a/tests/test_btree_index.py	2008-06-30 22:10:08 +0000
+++ b/tests/test_btree_index.py	2008-07-01 02:33:04 +0000
@@ -126,52 +126,557 @@
             )
         self.assertEqual(expected_node, node_bytes)
 
-    def _test_2_leaves_1_0(self):
+    def test_2_leaves_1_0(self):
         builder = btree_index.BTreeBuilder(key_elements=1, reference_lists=0)
-        nodes = self.make_nodes(700, 1, 0)
+        nodes = self.make_nodes(500, 1, 0)
         for node in nodes:
             builder.add_node(*node)
         content = builder.finish().read()
-        self.assertEqual(4096, len(content))
+        self.assertEqual(4096*3, len(content))
         self.assertEqual(
-            "B+Tree Graph Index 1\nnode_ref_lists=0\nkey_elements=1\nlen=700\n"
+            "B+Tree Graph Index 1\nnode_ref_lists=0\nkey_elements=1\nlen=500\n"
             "row_lengths=1,2\n",
-            content[:61])
-        node_content = content[61:]
-        node_bytes = zlib.decompress(node_content)
-        expected_node = ("type=leaf\n"
+            content[:77])
+        root = content[77:4096]
+        leaf1 = content[4096:8192]
+        leaf2 = content[8192:]
+        root_bytes = zlib.decompress(root)
+        expected_root = (
+            "type=internal\n"
+            "offset=0\n"
+            "348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348\n"
+            )
+        self.assertEqual(expected_root, root_bytes)
+        leaf1_bytes = zlib.decompress(leaf1)
+        expected_leaf1 = (
+            "type=leaf\n"
             "0000000000000000000000000000000000000000\x00\x00value:0\n"
+            "100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100100\x00\x00value:100\n"
+            "10101010101010101010101010101010101010101010101010101010101010101010101010101010\x00\x00value:10\n"
+            "101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101101\x00\x00value:101\n"
+            "102102102102102102102102102102102102102102102102102102102102102102102102102102102102102102102102102102102102102102102102\x00\x00value:102\n"
+            "103103103103103103103103103103103103103103103103103103103103103103103103103103103103103103103103103103103103103103103103\x00\x00value:103\n"
+            "104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104104\x00\x00value:104\n"
+            "105105105105105105105105105105105105105105105105105105105105105105105105105105105105105105105105105105105105105105105105\x00\x00value:105\n"
+            "106106106106106106106106106106106106106106106106106106106106106106106106106106106106106106106106106106106106106106106106\x00\x00value:106\n"
+            "107107107107107107107107107107107107107107107107107107107107107107107107107107107107107107107107107107107107107107107107\x00\x00value:107\n"
+            "108108108108108108108108108108108108108108108108108108108108108108108108108108108108108108108108108108108108108108108108\x00\x00value:108\n"
+            "109109109109109109109109109109109109109109109109109109109109109109109109109109109109109109109109109109109109109109109109\x00\x00value:109\n"
+            "110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110110\x00\x00value:110\n"
             "1111111111111111111111111111111111111111\x00\x00value:1\n"
+            "11111111111111111111111111111111111111111111111111111111111111111111111111111111\x00\x00value:11\n"
+            "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\x00\x00value:111\n"
+            "112112112112112112112112112112112112112112112112112112112112112112112112112112112112112112112112112112112112112112112112\x00\x00value:112\n"
+            "113113113113113113113113113113113113113113113113113113113113113113113113113113113113113113113113113113113113113113113113\x00\x00value:113\n"
+            "114114114114114114114114114114114114114114114114114114114114114114114114114114114114114114114114114114114114114114114114\x00\x00value:114\n"
+            "115115115115115115115115115115115115115115115115115115115115115115115115115115115115115115115115115115115115115115115115\x00\x00value:115\n"
+            "116116116116116116116116116116116116116116116116116116116116116116116116116116116116116116116116116116116116116116116116\x00\x00value:116\n"
+            "117117117117117117117117117117117117117117117117117117117117117117117117117117117117117117117117117117117117117117117117\x00\x00value:117\n"
+            "118118118118118118118118118118118118118118118118118118118118118118118118118118118118118118118118118118118118118118118118\x00\x00value:118\n"
+            "119119119119119119119119119119119119119119119119119119119119119119119119119119119119119119119119119119119119119119119119\x00\x00value:119\n"
+            "120120120120120120120120120120120120120120120120120120120120120120120120120120120120120120120120120120120120120120120120\x00\x00value:120\n"
+            "121121121121121121121121121121121121121121121121121121121121121121121121121121121121121121121121121121121121121121121121\x00\x00value:121\n"
+            "12121212121212121212121212121212121212121212121212121212121212121212121212121212\x00\x00value:12\n"
+            "122122122122122122122122122122122122122122122122122122122122122122122122122122122122122122122122122122122122122122122122\x00\x00value:122\n"
+            "123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123123\x00\x00value:123\n"
+            "124124124124124124124124124124124124124124124124124124124124124124124124124124124124124124124124124124124124124124124124\x00\x00value:124\n"
+            "125125125125125125125125125125125125125125125125125125125125125125125125125125125125125125125125125125125125125125125125\x00\x00value:125\n"
+            "126126126126126126126126126126126126126126126126126126126126126126126126126126126126126126126126126126126126126126126126\x00\x00value:126\n"
+            "127127127127127127127127127127127127127127127127127127127127127127127127127127127127127127127127127127127127127127127127\x00\x00value:127\n"
+            "128128128128128128128128128128128128128128128128128128128128128128128128128128128128128128128128128128128128128128128128\x00\x00value:128\n"
+            "129129129129129129129129129129129129129129129129129129129129129129129129129129129129129129129129129129129129129129129129\x00\x00value:129\n"
+            "130130130130130130130130130130130130130130130130130130130130130130130130130130130130130130130130130130130130130130130130\x00\x00value:130\n"
+            "131131131131131131131131131131131131131131131131131131131131131131131131131131131131131131131131131131131131131131131131\x00\x00value:131\n"
+            "13131313131313131313131313131313131313131313131313131313131313131313131313131313\x00\x00value:13\n"
+            "132132132132132132132132132132132132132132132132132132132132132132132132132132132132132132132132132132132132132132132132\x00\x00value:132\n"
+            "133133133133133133133133133133133133133133133133133133133133133133133133133133133133133133133133133133133133133133133133\x00\x00value:133\n"
+            "134134134134134134134134134134134134134134134134134134134134134134134134134134134134134134134134134134134134134134134134\x00\x00value:134\n"
+            "135135135135135135135135135135135135135135135135135135135135135135135135135135135135135135135135135135135135135135135135\x00\x00value:135\n"
+            "136136136136136136136136136136136136136136136136136136136136136136136136136136136136136136136136136136136136136136136136\x00\x00value:136\n"
+            "137137137137137137137137137137137137137137137137137137137137137137137137137137137137137137137137137137137137137137137137\x00\x00value:137\n"
+            "138138138138138138138138138138138138138138138138138138138138138138138138138138138138138138138138138138138138138138138138\x00\x00value:138\n"
+            "139139139139139139139139139139139139139139139139139139139139139139139139139139139139139139139139139139139139139139139139\x00\x00value:139\n"
+            "140140140140140140140140140140140140140140140140140140140140140140140140140140140140140140140140140140140140140140140140\x00\x00value:140\n"
+            "141141141141141141141141141141141141141141141141141141141141141141141141141141141141141141141141141141141141141141141141\x00\x00value:141\n"
+            "14141414141414141414141414141414141414141414141414141414141414141414141414141414\x00\x00value:14\n"
+            "142142142142142142142142142142142142142142142142142142142142142142142142142142142142142142142142142142142142142142142142\x00\x00value:142\n"
+            "143143143143143143143143143143143143143143143143143143143143143143143143143143143143143143143143143143143143143143143143\x00\x00value:143\n"
+            "144144144144144144144144144144144144144144144144144144144144144144144144144144144144144144144144144144144144144144144144\x00\x00value:144\n"
+            "145145145145145145145145145145145145145145145145145145145145145145145145145145145145145145145145145145145145145145145145\x00\x00value:145\n"
+            "146146146146146146146146146146146146146146146146146146146146146146146146146146146146146146146146146146146146146146146146\x00\x00value:146\n"
+            "147147147147147147147147147147147147147147147147147147147147147147147147147147147147147147147147147147147147147147147147\x00\x00value:147\n"
+            "148148148148148148148148148148148148148148148148148148148148148148148148148148148148148148148148148148148148148148148148\x00\x00value:148\n"
+            "149149149149149149149149149149149149149149149149149149149149149149149149149149149149149149149149149149149149149149149149\x00\x00value:149\n"
+            "150150150150150150150150150150150150150150150150150150150150150150150150150150150150150150150150150150150150150150150150\x00\x00value:150\n"
+            "151151151151151151151151151151151151151151151151151151151151151151151151151151151151151151151151151151151151151151151151\x00\x00value:151\n"
+            "15151515151515151515151515151515151515151515151515151515151515151515151515151515\x00\x00value:15\n"
+            "152152152152152152152152152152152152152152152152152152152152152152152152152152152152152152152152152152152152152152152152\x00\x00value:152\n"
+            "153153153153153153153153153153153153153153153153153153153153153153153153153153153153153153153153153153153153153153153153\x00\x00value:153\n"
+            "154154154154154154154154154154154154154154154154154154154154154154154154154154154154154154154154154154154154154154154154\x00\x00value:154\n"
+            "155155155155155155155155155155155155155155155155155155155155155155155155155155155155155155155155155155155155155155155155\x00\x00value:155\n"
+            "156156156156156156156156156156156156156156156156156156156156156156156156156156156156156156156156156156156156156156156156\x00\x00value:156\n"
+            "157157157157157157157157157157157157157157157157157157157157157157157157157157157157157157157157157157157157157157157157\x00\x00value:157\n"
+            "158158158158158158158158158158158158158158158158158158158158158158158158158158158158158158158158158158158158158158158158\x00\x00value:158\n"
+            "159159159159159159159159159159159159159159159159159159159159159159159159159159159159159159159159159159159159159159159159\x00\x00value:159\n"
+            "160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160160\x00\x00value:160\n"
+            "161161161161161161161161161161161161161161161161161161161161161161161161161161161161161161161161161161161161161161161161\x00\x00value:161\n"
+            "16161616161616161616161616161616161616161616161616161616161616161616161616161616\x00\x00value:16\n"
+            "162162162162162162162162162162162162162162162162162162162162162162162162162162162162162162162162162162162162162162162162\x00\x00value:162\n"
+            "163163163163163163163163163163163163163163163163163163163163163163163163163163163163163163163163163163163163163163163163\x00\x00value:163\n"
+            "164164164164164164164164164164164164164164164164164164164164164164164164164164164164164164164164164164164164164164164164\x00\x00value:164\n"
+            "165165165165165165165165165165165165165165165165165165165165165165165165165165165165165165165165165165165165165165165165\x00\x00value:165\n"
+            "166166166166166166166166166166166166166166166166166166166166166166166166166166166166166166166166166166166166166166166166\x00\x00value:166\n"
+            "167167167167167167167167167167167167167167167167167167167167167167167167167167167167167167167167167167167167167167167167\x00\x00value:167\n"
+            "168168168168168168168168168168168168168168168168168168168168168168168168168168168168168168168168168168168168168168168168\x00\x00value:168\n"
+            "169169169169169169169169169169169169169169169169169169169169169169169169169169169169169169169169169169169169169169169169\x00\x00value:169\n"
+            "170170170170170170170170170170170170170170170170170170170170170170170170170170170170170170170170170170170170170170170170\x00\x00value:170\n"
+            "171171171171171171171171171171171171171171171171171171171171171171171171171171171171171171171171171171171171171171171171\x00\x00value:171\n"
+            "17171717171717171717171717171717171717171717171717171717171717171717171717171717\x00\x00value:17\n"
+            "172172172172172172172172172172172172172172172172172172172172172172172172172172172172172172172172172172172172172172172172\x00\x00value:172\n"
+            "173173173173173173173173173173173173173173173173173173173173173173173173173173173173173173173173173173173173173173173173\x00\x00value:173\n"
+            "174174174174174174174174174174174174174174174174174174174174174174174174174174174174174174174174174174174174174174174174\x00\x00value:174\n"
+            "175175175175175175175175175175175175175175175175175175175175175175175175175175175175175175175175175175175175175175175175\x00\x00value:175\n"
+            "176176176176176176176176176176176176176176176176176176176176176176176176176176176176176176176176176176176176176176176176\x00\x00value:176\n"
+            "177177177177177177177177177177177177177177177177177177177177177177177177177177177177177177177177177177177177177177177177\x00\x00value:177\n"
+            "178178178178178178178178178178178178178178178178178178178178178178178178178178178178178178178178178178178178178178178178\x00\x00value:178\n"
+            "179179179179179179179179179179179179179179179179179179179179179179179179179179179179179179179179179179179179179179179179\x00\x00value:179\n"
+            "180180180180180180180180180180180180180180180180180180180180180180180180180180180180180180180180180180180180180180180180\x00\x00value:180\n"
+            "181181181181181181181181181181181181181181181181181181181181181181181181181181181181181181181181181181181181181181181181\x00\x00value:181\n"
+            "18181818181818181818181818181818181818181818181818181818181818181818181818181818\x00\x00value:18\n"
+            "182182182182182182182182182182182182182182182182182182182182182182182182182182182182182182182182182182182182182182182182\x00\x00value:182\n"
+            "183183183183183183183183183183183183183183183183183183183183183183183183183183183183183183183183183183183183183183183183\x00\x00value:183\n"
+            "184184184184184184184184184184184184184184184184184184184184184184184184184184184184184184184184184184184184184184184184\x00\x00value:184\n"
+            "185185185185185185185185185185185185185185185185185185185185185185185185185185185185185185185185185185185185185185185185\x00\x00value:185\n"
+            "186186186186186186186186186186186186186186186186186186186186186186186186186186186186186186186186186186186186186186186186\x00\x00value:186\n"
+            "187187187187187187187187187187187187187187187187187187187187187187187187187187187187187187187187187187187187187187187187\x00\x00value:187\n"
+            "188188188188188188188188188188188188188188188188188188188188188188188188188188188188188188188188188188188188188188188188\x00\x00value:188\n"
+            "189189189189189189189189189189189189189189189189189189189189189189189189189189189189189189189189189189189189189189189189\x00\x00value:189\n"
+            "190190190190190190190190190190190190190190190190190190190190190190190190190190190190190190190190190190190190190190190190\x00\x00value:190\n"
+            "191191191191191191191191191191191191191191191191191191191191191191191191191191191191191191191191191191191191191191191191\x00\x00value:191\n"
+            "19191919191919191919191919191919191919191919191919191919191919191919191919191919\x00\x00value:19\n"
+            "192192192192192192192192192192192192192192192192192192192192192192192192192192192192192192192192192192192192192192192192\x00\x00value:192\n"
+            "193193193193193193193193193193193193193193193193193193193193193193193193193193193193193193193193193193193193193193193193\x00\x00value:193\n"
+            "194194194194194194194194194194194194194194194194194194194194194194194194194194194194194194194194194194194194194194194194\x00\x00value:194\n"
+            "195195195195195195195195195195195195195195195195195195195195195195195195195195195195195195195195195195195195195195195195\x00\x00value:195\n"
+            "196196196196196196196196196196196196196196196196196196196196196196196196196196196196196196196196196196196196196196196196\x00\x00value:196\n"
+            "197197197197197197197197197197197197197197197197197197197197197197197197197197197197197197197197197197197197197197197197\x00\x00value:197\n"
+            "198198198198198198198198198198198198198198198198198198198198198198198198198198198198198198198198198198198198198198198198\x00\x00value:198\n"
+            "199199199199199199199199199199199199199199199199199199199199199199199199199199199199199199199199199199199199199199199199\x00\x00value:199\n"
+            "200200200200200200200200200200200200200200200200200200200200200200200200200200200200200200200200200200200200200200200200\x00\x00value:200\n"
+            "201201201201201201201201201201201201201201201201201201201201201201201201201201201201201201201201201201201201201201201201\x00\x00value:201\n"
+            "20202020202020202020202020202020202020202020202020202020202020202020202020202020\x00\x00value:20\n"
+            "202202202202202202202202202202202202202202202202202202202202202202202202202202202202202202202202202202202202202202202202\x00\x00value:202\n"
+            "203203203203203203203203203203203203203203203203203203203203203203203203203203203203203203203203203203203203203203203203\x00\x00value:203\n"
+            "204204204204204204204204204204204204204204204204204204204204204204204204204204204204204204204204204204204204204204204204\x00\x00value:204\n"
+            "205205205205205205205205205205205205205205205205205205205205205205205205205205205205205205205205205205205205205205205205\x00\x00value:205\n"
+            "206206206206206206206206206206206206206206206206206206206206206206206206206206206206206206206206206206206206206206206206\x00\x00value:206\n"
+            "207207207207207207207207207207207207207207207207207207207207207207207207207207207207207207207207207207207207207207207207\x00\x00value:207\n"
+            "208208208208208208208208208208208208208208208208208208208208208208208208208208208208208208208208208208208208208208208208\x00\x00value:208\n"
+            "209209209209209209209209209209209209209209209209209209209209209209209209209209209209209209209209209209209209209209209209\x00\x00value:209\n"
+            "210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210210\x00\x00value:210\n"
+            "211211211211211211211211211211211211211211211211211211211211211211211211211211211211211211211211211211211211211211211211\x00\x00value:211\n"
+            "21212121212121212121212121212121212121212121212121212121212121212121212121212121\x00\x00value:21\n"
+            "212212212212212212212212212212212212212212212212212212212212212212212212212212212212212212212212212212212212212212212212\x00\x00value:212\n"
+            "213213213213213213213213213213213213213213213213213213213213213213213213213213213213213213213213213213213213213213213213\x00\x00value:213\n"
+            "214214214214214214214214214214214214214214214214214214214214214214214214214214214214214214214214214214214214214214214214\x00\x00value:214\n"
+            "215215215215215215215215215215215215215215215215215215215215215215215215215215215215215215215215215215215215215215215215\x00\x00value:215\n"
+            "216216216216216216216216216216216216216216216216216216216216216216216216216216216216216216216216216216216216216216216216\x00\x00value:216\n"
+            "217217217217217217217217217217217217217217217217217217217217217217217217217217217217217217217217217217217217217217217217\x00\x00value:217\n"
+            "218218218218218218218218218218218218218218218218218218218218218218218218218218218218218218218218218218218218218218218218\x00\x00value:218\n"
+            "219219219219219219219219219219219219219219219219219219219219219219219219219219219219219219219219219219219219219219219219\x00\x00value:219\n"
+            "220220220220220220220220220220220220220220220220220220220220220220220220220220220220220220220220220220220220220220220220\x00\x00value:220\n"
+            "221221221221221221221221221221221221221221221221221221221221221221221221221221221221221221221221221221221221221221221221\x00\x00value:221\n"
             "2222222222222222222222222222222222222222\x00\x00value:2\n"
+            "22222222222222222222222222222222222222222222222222222222222222222222222222222222\x00\x00value:22\n"
+            "222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222\x00\x00value:222\n"
+            "223223223223223223223223223223223223223223223223223223223223223223223223223223223223223223223223223223223223223223223223\x00\x00value:223\n"
+            "224224224224224224224224224224224224224224224224224224224224224224224224224224224224224224224224224224224224224224224224\x00\x00value:224\n"
+            "225225225225225225225225225225225225225225225225225225225225225225225225225225225225225225225225225225225225225225225225\x00\x00value:225\n"
+            "226226226226226226226226226226226226226226226226226226226226226226226226226226226226226226226226226226226226226226226226\x00\x00value:226\n"
+            "227227227227227227227227227227227227227227227227227227227227227227227227227227227227227227227227227227227227227227227227\x00\x00value:227\n"
+            "228228228228228228228228228228228228228228228228228228228228228228228228228228228228228228228228228228228228228228228228\x00\x00value:228\n"
+            "229229229229229229229229229229229229229229229229229229229229229229229229229229229229229229229229229229229229229229229229\x00\x00value:229\n"
+            "230230230230230230230230230230230230230230230230230230230230230230230230230230230230230230230230230230230230230230230230\x00\x00value:230\n"
+            "231231231231231231231231231231231231231231231231231231231231231231231231231231231231231231231231231231231231231231231231\x00\x00value:231\n"
+            "232232232232232232232232232232232232232232232232232232232232232232232232232232232232232232232232232232232232232232232232\x00\x00value:232\n"
+            "23232323232323232323232323232323232323232323232323232323232323232323232323232323\x00\x00value:23\n"
+            "233233233233233233233233233233233233233233233233233233233233233233233233233233233233233233233233233233233233233233233233\x00\x00value:233\n"
+            "234234234234234234234234234234234234234234234234234234234234234234234234234234234234234234234234234234234234234234234234\x00\x00value:234\n"
+            "235235235235235235235235235235235235235235235235235235235235235235235235235235235235235235235235235235235235235235235235\x00\x00value:235\n"
+            "236236236236236236236236236236236236236236236236236236236236236236236236236236236236236236236236236236236236236236236236\x00\x00value:236\n"
+            "237237237237237237237237237237237237237237237237237237237237237237237237237237237237237237237237237237237237237237237237\x00\x00value:237\n"
+            "238238238238238238238238238238238238238238238238238238238238238238238238238238238238238238238238238238238238238238238238\x00\x00value:238\n"
+            "239239239239239239239239239239239239239239239239239239239239239239239239239239239239239239239239239239239239239239239239\x00\x00value:239\n"
+            "240240240240240240240240240240240240240240240240240240240240240240240240240240240240240240240240240240240240240240240240\x00\x00value:240\n"
+            "241241241241241241241241241241241241241241241241241241241241241241241241241241241241241241241241241241241241241241241241\x00\x00value:241\n"
+            "242242242242242242242242242242242242242242242242242242242242242242242242242242242242242242242242242242242242242242242242\x00\x00value:242\n"
+            "24242424242424242424242424242424242424242424242424242424242424242424242424242424\x00\x00value:24\n"
+            "243243243243243243243243243243243243243243243243243243243243243243243243243243243243243243243243243243243243243243243243\x00\x00value:243\n"
+            "244244244244244244244244244244244244244244244244244244244244244244244244244244244244244244244244244244244244244244244244\x00\x00value:244\n"
+            "245245245245245245245245245245245245245245245245245245245245245245245245245245245245245245245245245245245245245245245245\x00\x00value:245\n"
+            "246246246246246246246246246246246246246246246246246246246246246246246246246246246246246246246246246246246246246246246246\x00\x00value:246\n"
+            "247247247247247247247247247247247247247247247247247247247247247247247247247247247247247247247247247247247247247247247247\x00\x00value:247\n"
+            "248248248248248248248248248248248248248248248248248248248248248248248248248248248248248248248248248248248248248248248248\x00\x00value:248\n"
+            "249249249249249249249249249249249249249249249249249249249249249249249249249249249249249249249249249249249249249249249249\x00\x00value:249\n"
+            "250250250250250250250250250250250250250250250250250250250250250250250250250250250250250250250250250250250250250250250250\x00\x00value:250\n"
+            "251251251251251251251251251251251251251251251251251251251251251251251251251251251251251251251251251251251251251251251251\x00\x00value:251\n"
+            "252252252252252252252252252252252252252252252252252252252252252252252252252252252252252252252252252252252252252252252252\x00\x00value:252\n"
+            "25252525252525252525252525252525252525252525252525252525252525252525252525252525\x00\x00value:25\n"
+            "253253253253253253253253253253253253253253253253253253253253253253253253253253253253253253253253253253253253253253253253\x00\x00value:253\n"
+            "254254254254254254254254254254254254254254254254254254254254254254254254254254254254254254254254254254254254254254254254\x00\x00value:254\n"
+            "255255255255255255255255255255255255255255255255255255255255255255255255255255255255255255255255255255255255255255255255\x00\x00value:255\n"
+            "256256256256256256256256256256256256256256256256256256256256256256256256256256256256256256256256256256256256256256256256\x00\x00value:256\n"
+            "257257257257257257257257257257257257257257257257257257257257257257257257257257257257257257257257257257257257257257257257\x00\x00value:257\n"
+            "258258258258258258258258258258258258258258258258258258258258258258258258258258258258258258258258258258258258258258258258\x00\x00value:258\n"
+            "259259259259259259259259259259259259259259259259259259259259259259259259259259259259259259259259259259259259259259259259\x00\x00value:259\n"
+            "260260260260260260260260260260260260260260260260260260260260260260260260260260260260260260260260260260260260260260260260\x00\x00value:260\n"
+            "261261261261261261261261261261261261261261261261261261261261261261261261261261261261261261261261261261261261261261261261\x00\x00value:261\n"
+            "262262262262262262262262262262262262262262262262262262262262262262262262262262262262262262262262262262262262262262262262\x00\x00value:262\n"
+            "26262626262626262626262626262626262626262626262626262626262626262626262626262626\x00\x00value:26\n"
+            "263263263263263263263263263263263263263263263263263263263263263263263263263263263263263263263263263263263263263263263263\x00\x00value:263\n"
+            "264264264264264264264264264264264264264264264264264264264264264264264264264264264264264264264264264264264264264264264264\x00\x00value:264\n"
+            "265265265265265265265265265265265265265265265265265265265265265265265265265265265265265265265265265265265265265265265265\x00\x00value:265\n"
+            "266266266266266266266266266266266266266266266266266266266266266266266266266266266266266266266266266266266266266266266266\x00\x00value:266\n"
+            "267267267267267267267267267267267267267267267267267267267267267267267267267267267267267267267267267267267267267267267267\x00\x00value:267\n"
+            "268268268268268268268268268268268268268268268268268268268268268268268268268268268268268268268268268268268268268268268268\x00\x00value:268\n"
+            "269269269269269269269269269269269269269269269269269269269269269269269269269269269269269269269269269269269269269269269269\x00\x00value:269\n"
+            "270270270270270270270270270270270270270270270270270270270270270270270270270270270270270270270270270270270270270270270270\x00\x00value:270\n"
+            "271271271271271271271271271271271271271271271271271271271271271271271271271271271271271271271271271271271271271271271271\x00\x00value:271\n"
+            "272272272272272272272272272272272272272272272272272272272272272272272272272272272272272272272272272272272272272272272272\x00\x00value:272\n"
+            "27272727272727272727272727272727272727272727272727272727272727272727272727272727\x00\x00value:27\n"
+            "273273273273273273273273273273273273273273273273273273273273273273273273273273273273273273273273273273273273273273273273\x00\x00value:273\n"
+            "274274274274274274274274274274274274274274274274274274274274274274274274274274274274274274274274274274274274274274274274\x00\x00value:274\n"
+            "275275275275275275275275275275275275275275275275275275275275275275275275275275275275275275275275275275275275275275275275\x00\x00value:275\n"
+            "276276276276276276276276276276276276276276276276276276276276276276276276276276276276276276276276276276276276276276276276\x00\x00value:276\n"
+            "277277277277277277277277277277277277277277277277277277277277277277277277277277277277277277277277277277277277277277277277\x00\x00value:277\n"
+            "278278278278278278278278278278278278278278278278278278278278278278278278278278278278278278278278278278278278278278278278\x00\x00value:278\n"
+            "279279279279279279279279279279279279279279279279279279279279279279279279279279279279279279279279279279279279279279279279\x00\x00value:279\n"
+            "280280280280280280280280280280280280280280280280280280280280280280280280280280280280280280280280280280280280280280280280\x00\x00value:280\n"
+            "281281281281281281281281281281281281281281281281281281281281281281281281281281281281281281281281281281281281281281281281\x00\x00value:281\n"
+            "282282282282282282282282282282282282282282282282282282282282282282282282282282282282282282282282282282282282282282282282\x00\x00value:282\n"
+            "28282828282828282828282828282828282828282828282828282828282828282828282828282828\x00\x00value:28\n"
+            "283283283283283283283283283283283283283283283283283283283283283283283283283283283283283283283283283283283283283283283283\x00\x00value:283\n"
+            "284284284284284284284284284284284284284284284284284284284284284284284284284284284284284284284284284284284284284284284284\x00\x00value:284\n"
+            "285285285285285285285285285285285285285285285285285285285285285285285285285285285285285285285285285285285285285285285285\x00\x00value:285\n"
+            "286286286286286286286286286286286286286286286286286286286286286286286286286286286286286286286286286286286286286286286286\x00\x00value:286\n"
+            "287287287287287287287287287287287287287287287287287287287287287287287287287287287287287287287287287287287287287287287287\x00\x00value:287\n"
+            "288288288288288288288288288288288288288288288288288288288288288288288288288288288288288288288288288288288288288288288288\x00\x00value:288\n"
+            "289289289289289289289289289289289289289289289289289289289289289289289289289289289289289289289289289289289289289289289289\x00\x00value:289\n"
+            "290290290290290290290290290290290290290290290290290290290290290290290290290290290290290290290290290290290290290290290290\x00\x00value:290\n"
+            "291291291291291291291291291291291291291291291291291291291291291291291291291291291291291291291291291291291291291291291291\x00\x00value:291\n"
+            "292292292292292292292292292292292292292292292292292292292292292292292292292292292292292292292292292292292292292292292292\x00\x00value:292\n"
+            "29292929292929292929292929292929292929292929292929292929292929292929292929292929\x00\x00value:29\n"
+            "293293293293293293293293293293293293293293293293293293293293293293293293293293293293293293293293293293293293293293293293\x00\x00value:293\n"
+            "294294294294294294294294294294294294294294294294294294294294294294294294294294294294294294294294294294294294294294294294\x00\x00value:294\n"
+            "295295295295295295295295295295295295295295295295295295295295295295295295295295295295295295295295295295295295295295295295\x00\x00value:295\n"
+            "296296296296296296296296296296296296296296296296296296296296296296296296296296296296296296296296296296296296296296296296\x00\x00value:296\n"
+            "297297297297297297297297297297297297297297297297297297297297297297297297297297297297297297297297297297297297297297297297\x00\x00value:297\n"
+            "298298298298298298298298298298298298298298298298298298298298298298298298298298298298298298298298298298298298298298298298\x00\x00value:298\n"
+            "299299299299299299299299299299299299299299299299299299299299299299299299299299299299299299299299299299299299299299299299\x00\x00value:299\n"
+            "300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300300\x00\x00value:300\n"
+            "301301301301301301301301301301301301301301301301301301301301301301301301301301301301301301301301301301301301301301301301\x00\x00value:301\n"
+            "302302302302302302302302302302302302302302302302302302302302302302302302302302302302302302302302302302302302302302302302\x00\x00value:302\n"
+            "30303030303030303030303030303030303030303030303030303030303030303030303030303030\x00\x00value:30\n"
+            "303303303303303303303303303303303303303303303303303303303303303303303303303303303303303303303303303303303303303303303303\x00\x00value:303\n"
+            "304304304304304304304304304304304304304304304304304304304304304304304304304304304304304304304304304304304304304304304304\x00\x00value:304\n"
+            "305305305305305305305305305305305305305305305305305305305305305305305305305305305305305305305305305305305305305305305305\x00\x00value:305\n"
+            "306306306306306306306306306306306306306306306306306306306306306306306306306306306306306306306306306306306306306306306306\x00\x00value:306\n"
+            "307307307307307307307307307307307307307307307307307307307307307307307307307307307307307307307307307307307307307307307307\x00\x00value:307\n"
+            "308308308308308308308308308308308308308308308308308308308308308308308308308308308308308308308308308308308308308308308308\x00\x00value:308\n"
+            "309309309309309309309309309309309309309309309309309309309309309309309309309309309309309309309309309309309309309309309309\x00\x00value:309\n"
+            "310310310310310310310310310310310310310310310310310310310310310310310310310310310310310310310310310310310310310310310310\x00\x00value:310\n"
+            "311311311311311311311311311311311311311311311311311311311311311311311311311311311311311311311311311311311311311311311311\x00\x00value:311\n"
+            "312312312312312312312312312312312312312312312312312312312312312312312312312312312312312312312312312312312312312312312312\x00\x00value:312\n"
+            "31313131313131313131313131313131313131313131313131313131313131313131313131313131\x00\x00value:31\n"
+            "313313313313313313313313313313313313313313313313313313313313313313313313313313313313313313313313313313313313313313313313\x00\x00value:313\n"
+            "314314314314314314314314314314314314314314314314314314314314314314314314314314314314314314314314314314314314314314314314\x00\x00value:314\n"
+            "315315315315315315315315315315315315315315315315315315315315315315315315315315315315315315315315315315315315315315315315\x00\x00value:315\n"
+            "316316316316316316316316316316316316316316316316316316316316316316316316316316316316316316316316316316316316316316316316\x00\x00value:316\n"
+            "317317317317317317317317317317317317317317317317317317317317317317317317317317317317317317317317317317317317317317317317\x00\x00value:317\n"
+            "318318318318318318318318318318318318318318318318318318318318318318318318318318318318318318318318318318318318318318318318\x00\x00value:318\n"
+            "319319319319319319319319319319319319319319319319319319319319319319319319319319319319319319319319319319319319319319319319\x00\x00value:319\n"
+            "320320320320320320320320320320320320320320320320320320320320320320320320320320320320320320320320320320320320320320320320\x00\x00value:320\n"
+            "321321321321321321321321321321321321321321321321321321321321321321321321321321321321321321321321321321321321321321321321\x00\x00value:321\n"
+            "322322322322322322322322322322322322322322322322322322322322322322322322322322322322322322322322322322322322322322322322\x00\x00value:322\n"
+            "32323232323232323232323232323232323232323232323232323232323232323232323232323232\x00\x00value:32\n"
+            "323323323323323323323323323323323323323323323323323323323323323323323323323323323323323323323323323323323323323323323323\x00\x00value:323\n"
+            "324324324324324324324324324324324324324324324324324324324324324324324324324324324324324324324324324324324324324324324324\x00\x00value:324\n"
+            "325325325325325325325325325325325325325325325325325325325325325325325325325325325325325325325325325325325325325325325325\x00\x00value:325\n"
+            "326326326326326326326326326326326326326326326326326326326326326326326326326326326326326326326326326326326326326326326326\x00\x00value:326\n"
+            "327327327327327327327327327327327327327327327327327327327327327327327327327327327327327327327327327327327327327327327327\x00\x00value:327\n"
+            "328328328328328328328328328328328328328328328328328328328328328328328328328328328328328328328328328328328328328328328328\x00\x00value:328\n"
+            "329329329329329329329329329329329329329329329329329329329329329329329329329329329329329329329329329329329329329329329329\x00\x00value:329\n"
+            "330330330330330330330330330330330330330330330330330330330330330330330330330330330330330330330330330330330330330330330330\x00\x00value:330\n"
+            "331331331331331331331331331331331331331331331331331331331331331331331331331331331331331331331331331331331331331331331331\x00\x00value:331\n"
+            "332332332332332332332332332332332332332332332332332332332332332332332332332332332332332332332332332332332332332332332332\x00\x00value:332\n"
             "3333333333333333333333333333333333333333\x00\x00value:3\n"
-            "4444444444444444444444444444444444444444\x00\x00value:4\n")
-        self.assertEqual(expected_node, node_bytes)
+            "33333333333333333333333333333333333333333333333333333333333333333333333333333333\x00\x00value:33\n"
+            "333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333\x00\x00value:333\n"
+            "334334334334334334334334334334334334334334334334334334334334334334334334334334334334334334334334334334334334334334334334\x00\x00value:334\n"
+            "335335335335335335335335335335335335335335335335335335335335335335335335335335335335335335335335335335335335335335335335\x00\x00value:335\n"
+            "336336336336336336336336336336336336336336336336336336336336336336336336336336336336336336336336336336336336336336336336\x00\x00value:336\n"
+            "337337337337337337337337337337337337337337337337337337337337337337337337337337337337337337337337337337337337337337337337\x00\x00value:337\n"
+            "338338338338338338338338338338338338338338338338338338338338338338338338338338338338338338338338338338338338338338338338\x00\x00value:338\n"
+            "339339339339339339339339339339339339339339339339339339339339339339339339339339339339339339339339339339339339339339339339\x00\x00value:339\n"
+            "340340340340340340340340340340340340340340340340340340340340340340340340340340340340340340340340340340340340340340340340\x00\x00value:340\n"
+            "341341341341341341341341341341341341341341341341341341341341341341341341341341341341341341341341341341341341341341341341\x00\x00value:341\n"
+            "342342342342342342342342342342342342342342342342342342342342342342342342342342342342342342342342342342342342342342342342\x00\x00value:342\n"
+            "343343343343343343343343343343343343343343343343343343343343343343343343343343343343343343343343343343343343343343343343\x00\x00value:343\n"
+            "34343434343434343434343434343434343434343434343434343434343434343434343434343434\x00\x00value:34\n"
+            "344344344344344344344344344344344344344344344344344344344344344344344344344344344344344344344344344344344344344344344344\x00\x00value:344\n"
+            "345345345345345345345345345345345345345345345345345345345345345345345345345345345345345345345345345345345345345345345345\x00\x00value:345\n"
+            "346346346346346346346346346346346346346346346346346346346346346346346346346346346346346346346346346346346346346346346346\x00\x00value:346\n"
+            "347347347347347347347347347347347347347347347347347347347347347347347347347347347347347347347347347347347347347347347347\x00\x00value:347\n"
+            )
+        self.assertEqual(expected_leaf1, leaf1_bytes)
+        leaf2_bytes = zlib.decompress(leaf2)
+        expected_leaf2 = (
+            "type=leaf\n"
+            "348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348348\x00\x00value:348\n"
+            "349349349349349349349349349349349349349349349349349349349349349349349349349349349349349349349349349349349349349349349349\x00\x00value:349\n"
+            "350350350350350350350350350350350350350350350350350350350350350350350350350350350350350350350350350350350350350350350350\x00\x00value:350\n"
+            "351351351351351351351351351351351351351351351351351351351351351351351351351351351351351351351351351351351351351351351351\x00\x00value:351\n"
+            "352352352352352352352352352352352352352352352352352352352352352352352352352352352352352352352352352352352352352352352352\x00\x00value:352\n"
+            "353353353353353353353353353353353353353353353353353353353353353353353353353353353353353353353353353353353353353353353353\x00\x00value:353\n"
+            "35353535353535353535353535353535353535353535353535353535353535353535353535353535\x00\x00value:35\n"
+            "354354354354354354354354354354354354354354354354354354354354354354354354354354354354354354354354354354354354354354354354\x00\x00value:354\n"
+            "355355355355355355355355355355355355355355355355355355355355355355355355355355355355355355355355355355355355355355355355\x00\x00value:355\n"
+            "356356356356356356356356356356356356356356356356356356356356356356356356356356356356356356356356356356356356356356356356\x00\x00value:356\n"
+            "357357357357357357357357357357357357357357357357357357357357357357357357357357357357357357357357357357357357357357357357\x00\x00value:357\n"
+            "358358358358358358358358358358358358358358358358358358358358358358358358358358358358358358358358358358358358358358358358\x00\x00value:358\n"
+            "359359359359359359359359359359359359359359359359359359359359359359359359359359359359359359359359359359359359359359359359\x00\x00value:359\n"
+            "360360360360360360360360360360360360360360360360360360360360360360360360360360360360360360360360360360360360360360360360\x00\x00value:360\n"
+            "361361361361361361361361361361361361361361361361361361361361361361361361361361361361361361361361361361361361361361361361\x00\x00value:361\n"
+            "362362362362362362362362362362362362362362362362362362362362362362362362362362362362362362362362362362362362362362362362\x00\x00value:362\n"
+            "363363363363363363363363363363363363363363363363363363363363363363363363363363363363363363363363363363363363363363363363\x00\x00value:363\n"
+            "36363636363636363636363636363636363636363636363636363636363636363636363636363636\x00\x00value:36\n"
+            "364364364364364364364364364364364364364364364364364364364364364364364364364364364364364364364364364364364364364364364364\x00\x00value:364\n"
+            "365365365365365365365365365365365365365365365365365365365365365365365365365365365365365365365365365365365365365365365365\x00\x00value:365\n"
+            "366366366366366366366366366366366366366366366366366366366366366366366366366366366366366366366366366366366366366366366366\x00\x00value:366\n"
+            "367367367367367367367367367367367367367367367367367367367367367367367367367367367367367367367367367367367367367367367367\x00\x00value:367\n"
+            "368368368368368368368368368368368368368368368368368368368368368368368368368368368368368368368368368368368368368368368368\x00\x00value:368\n"
+            "369369369369369369369369369369369369369369369369369369369369369369369369369369369369369369369369369369369369369369369369\x00\x00value:369\n"
+            "370370370370370370370370370370370370370370370370370370370370370370370370370370370370370370370370370370370370370370370370\x00\x00value:370\n"
+            "371371371371371371371371371371371371371371371371371371371371371371371371371371371371371371371371371371371371371371371371\x00\x00value:371\n"
+            "372372372372372372372372372372372372372372372372372372372372372372372372372372372372372372372372372372372372372372372372\x00\x00value:372\n"
+            "373373373373373373373373373373373373373373373373373373373373373373373373373373373373373373373373373373373373373373373373\x00\x00value:373\n"
+            "37373737373737373737373737373737373737373737373737373737373737373737373737373737\x00\x00value:37\n"
+            "374374374374374374374374374374374374374374374374374374374374374374374374374374374374374374374374374374374374374374374374\x00\x00value:374\n"
+            "375375375375375375375375375375375375375375375375375375375375375375375375375375375375375375375375375375375375375375375375\x00\x00value:375\n"
+            "376376376376376376376376376376376376376376376376376376376376376376376376376376376376376376376376376376376376376376376376\x00\x00value:376\n"
+            "377377377377377377377377377377377377377377377377377377377377377377377377377377377377377377377377377377377377377377377377\x00\x00value:377\n"
+            "378378378378378378378378378378378378378378378378378378378378378378378378378378378378378378378378378378378378378378378378\x00\x00value:378\n"
+            "379379379379379379379379379379379379379379379379379379379379379379379379379379379379379379379379379379379379379379379379\x00\x00value:379\n"
+            "380380380380380380380380380380380380380380380380380380380380380380380380380380380380380380380380380380380380380380380380\x00\x00value:380\n"
+            "381381381381381381381381381381381381381381381381381381381381381381381381381381381381381381381381381381381381381381381381\x00\x00value:381\n"
+            "382382382382382382382382382382382382382382382382382382382382382382382382382382382382382382382382382382382382382382382382\x00\x00value:382\n"
+            "383383383383383383383383383383383383383383383383383383383383383383383383383383383383383383383383383383383383383383383383\x00\x00value:383\n"
+            "38383838383838383838383838383838383838383838383838383838383838383838383838383838\x00\x00value:38\n"
+            "384384384384384384384384384384384384384384384384384384384384384384384384384384384384384384384384384384384384384384384384\x00\x00value:384\n"
+            "385385385385385385385385385385385385385385385385385385385385385385385385385385385385385385385385385385385385385385385385\x00\x00value:385\n"
+            "386386386386386386386386386386386386386386386386386386386386386386386386386386386386386386386386386386386386386386386386\x00\x00value:386\n"
+            "387387387387387387387387387387387387387387387387387387387387387387387387387387387387387387387387387387387387387387387387\x00\x00value:387\n"
+            "388388388388388388388388388388388388388388388388388388388388388388388388388388388388388388388388388388388388388388388388\x00\x00value:388\n"
+            "389389389389389389389389389389389389389389389389389389389389389389389389389389389389389389389389389389389389389389389389\x00\x00value:389\n"
+            "390390390390390390390390390390390390390390390390390390390390390390390390390390390390390390390390390390390390390390390390\x00\x00value:390\n"
+            "391391391391391391391391391391391391391391391391391391391391391391391391391391391391391391391391391391391391391391391391\x00\x00value:391\n"
+            "392392392392392392392392392392392392392392392392392392392392392392392392392392392392392392392392392392392392392392392392\x00\x00value:392\n"
+            "393393393393393393393393393393393393393393393393393393393393393393393393393393393393393393393393393393393393393393393393\x00\x00value:393\n"
+            "39393939393939393939393939393939393939393939393939393939393939393939393939393939\x00\x00value:39\n"
+            "394394394394394394394394394394394394394394394394394394394394394394394394394394394394394394394394394394394394394394394394\x00\x00value:394\n"
+            "395395395395395395395395395395395395395395395395395395395395395395395395395395395395395395395395395395395395395395395395\x00\x00value:395\n"
+            "396396396396396396396396396396396396396396396396396396396396396396396396396396396396396396396396396396396396396396396396\x00\x00value:396\n"
+            "397397397397397397397397397397397397397397397397397397397397397397397397397397397397397397397397397397397397397397397397\x00\x00value:397\n"
+            "398398398398398398398398398398398398398398398398398398398398398398398398398398398398398398398398398398398398398398398398\x00\x00value:398\n"
+            "399399399399399399399399399399399399399399399399399399399399399399399399399399399399399399399399399399399399399399399399\x00\x00value:399\n"
+            "400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400400\x00\x00value:400\n"
+            "401401401401401401401401401401401401401401401401401401401401401401401401401401401401401401401401401401401401401401401401\x00\x00value:401\n"
+            "402402402402402402402402402402402402402402402402402402402402402402402402402402402402402402402402402402402402402402402402\x00\x00value:402\n"
+            "403403403403403403403403403403403403403403403403403403403403403403403403403403403403403403403403403403403403403403403403\x00\x00value:403\n"
+            "40404040404040404040404040404040404040404040404040404040404040404040404040404040\x00\x00value:40\n"
+            "404404404404404404404404404404404404404404404404404404404404404404404404404404404404404404404404404404404404404404404404\x00\x00value:404\n"
+            "405405405405405405405405405405405405405405405405405405405405405405405405405405405405405405405405405405405405405405405405\x00\x00value:405\n"
+            "406406406406406406406406406406406406406406406406406406406406406406406406406406406406406406406406406406406406406406406406\x00\x00value:406\n"
+            "407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407\x00\x00value:407\n"
+            "408408408408408408408408408408408408408408408408408408408408408408408408408408408408408408408408408408408408408408408408\x00\x00value:408\n"
+            "409409409409409409409409409409409409409409409409409409409409409409409409409409409409409409409409409409409409409409409409\x00\x00value:409\n"
+            "410410410410410410410410410410410410410410410410410410410410410410410410410410410410410410410410410410410410410410410410\x00\x00value:410\n"
+            "411411411411411411411411411411411411411411411411411411411411411411411411411411411411411411411411411411411411411411411411\x00\x00value:411\n"
+            "412412412412412412412412412412412412412412412412412412412412412412412412412412412412412412412412412412412412412412412412\x00\x00value:412\n"
+            "413413413413413413413413413413413413413413413413413413413413413413413413413413413413413413413413413413413413413413413413\x00\x00value:413\n"
+            "41414141414141414141414141414141414141414141414141414141414141414141414141414141\x00\x00value:41\n"
+            "414414414414414414414414414414414414414414414414414414414414414414414414414414414414414414414414414414414414414414414414\x00\x00value:414\n"
+            "415415415415415415415415415415415415415415415415415415415415415415415415415415415415415415415415415415415415415415415415\x00\x00value:415\n"
+            "416416416416416416416416416416416416416416416416416416416416416416416416416416416416416416416416416416416416416416416416\x00\x00value:416\n"
+            "417417417417417417417417417417417417417417417417417417417417417417417417417417417417417417417417417417417417417417417417\x00\x00value:417\n"
+            "418418418418418418418418418418418418418418418418418418418418418418418418418418418418418418418418418418418418418418418418\x00\x00value:418\n"
+            "419419419419419419419419419419419419419419419419419419419419419419419419419419419419419419419419419419419419419419419419\x00\x00value:419\n"
+            "420420420420420420420420420420420420420420420420420420420420420420420420420420420420420420420420420420420420420420420420\x00\x00value:420\n"
+            "421421421421421421421421421421421421421421421421421421421421421421421421421421421421421421421421421421421421421421421421\x00\x00value:421\n"
+            "422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422422\x00\x00value:422\n"
+            "423423423423423423423423423423423423423423423423423423423423423423423423423423423423423423423423423423423423423423423423\x00\x00value:423\n"
+            "42424242424242424242424242424242424242424242424242424242424242424242424242424242\x00\x00value:42\n"
+            "424424424424424424424424424424424424424424424424424424424424424424424424424424424424424424424424424424424424424424424424\x00\x00value:424\n"
+            "425425425425425425425425425425425425425425425425425425425425425425425425425425425425425425425425425425425425425425425425\x00\x00value:425\n"
+            "426426426426426426426426426426426426426426426426426426426426426426426426426426426426426426426426426426426426426426426426\x00\x00value:426\n"
+            "427427427427427427427427427427427427427427427427427427427427427427427427427427427427427427427427427427427427427427427427\x00\x00value:427\n"
+            "428428428428428428428428428428428428428428428428428428428428428428428428428428428428428428428428428428428428428428428428\x00\x00value:428\n"
+            "429429429429429429429429429429429429429429429429429429429429429429429429429429429429429429429429429429429429429429429429\x00\x00value:429\n"
+            "430430430430430430430430430430430430430430430430430430430430430430430430430430430430430430430430430430430430430430430430\x00\x00value:430\n"
+            "431431431431431431431431431431431431431431431431431431431431431431431431431431431431431431431431431431431431431431431431\x00\x00value:431\n"
+            "432432432432432432432432432432432432432432432432432432432432432432432432432432432432432432432432432432432432432432432432\x00\x00value:432\n"
+            "433433433433433433433433433433433433433433433433433433433433433433433433433433433433433433433433433433433433433433433433\x00\x00value:433\n"
+            "43434343434343434343434343434343434343434343434343434343434343434343434343434343\x00\x00value:43\n"
+            "434434434434434434434434434434434434434434434434434434434434434434434434434434434434434434434434434434434434434434434434\x00\x00value:434\n"
+            "435435435435435435435435435435435435435435435435435435435435435435435435435435435435435435435435435435435435435435435435\x00\x00value:435\n"
+            "436436436436436436436436436436436436436436436436436436436436436436436436436436436436436436436436436436436436436436436436\x00\x00value:436\n"
+            "437437437437437437437437437437437437437437437437437437437437437437437437437437437437437437437437437437437437437437437437\x00\x00value:437\n"
+            "438438438438438438438438438438438438438438438438438438438438438438438438438438438438438438438438438438438438438438438438\x00\x00value:438\n"
+            "439439439439439439439439439439439439439439439439439439439439439439439439439439439439439439439439439439439439439439439439\x00\x00value:439\n"
+            "440440440440440440440440440440440440440440440440440440440440440440440440440440440440440440440440440440440440440440440440\x00\x00value:440\n"
+            "441441441441441441441441441441441441441441441441441441441441441441441441441441441441441441441441441441441441441441441441\x00\x00value:441\n"
+            "442442442442442442442442442442442442442442442442442442442442442442442442442442442442442442442442442442442442442442442442\x00\x00value:442\n"
+            "443443443443443443443443443443443443443443443443443443443443443443443443443443443443443443443443443443443443443443443443\x00\x00value:443\n"
+            "4444444444444444444444444444444444444444\x00\x00value:4\n"
+            "44444444444444444444444444444444444444444444444444444444444444444444444444444444\x00\x00value:44\n"
+            "444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444\x00\x00value:444\n"
+            "445445445445445445445445445445445445445445445445445445445445445445445445445445445445445445445445445445445445445445445445\x00\x00value:445\n"
+            "446446446446446446446446446446446446446446446446446446446446446446446446446446446446446446446446446446446446446446446446\x00\x00value:446\n"
+            "447447447447447447447447447447447447447447447447447447447447447447447447447447447447447447447447447447447447447447447447\x00\x00value:447\n"
+            "448448448448448448448448448448448448448448448448448448448448448448448448448448448448448448448448448448448448448448448448\x00\x00value:448\n"
+            "449449449449449449449449449449449449449449449449449449449449449449449449449449449449449449449449449449449449449449449449\x00\x00value:449\n"
+            "450450450450450450450450450450450450450450450450450450450450450450450450450450450450450450450450450450450450450450450450\x00\x00value:450\n"
+            "451451451451451451451451451451451451451451451451451451451451451451451451451451451451451451451451451451451451451451451451\x00\x00value:451\n"
+            "452452452452452452452452452452452452452452452452452452452452452452452452452452452452452452452452452452452452452452452452\x00\x00value:452\n"
+            "453453453453453453453453453453453453453453453453453453453453453453453453453453453453453453453453453453453453453453453453\x00\x00value:453\n"
+            "454454454454454454454454454454454454454454454454454454454454454454454454454454454454454454454454454454454454454454454454\x00\x00value:454\n"
+            "45454545454545454545454545454545454545454545454545454545454545454545454545454545\x00\x00value:45\n"
+            "455455455455455455455455455455455455455455455455455455455455455455455455455455455455455455455455455455455455455455455455\x00\x00value:455\n"
+            "456456456456456456456456456456456456456456456456456456456456456456456456456456456456456456456456456456456456456456456456\x00\x00value:456\n"
+            "457457457457457457457457457457457457457457457457457457457457457457457457457457457457457457457457457457457457457457457457\x00\x00value:457\n"
+            "458458458458458458458458458458458458458458458458458458458458458458458458458458458458458458458458458458458458458458458458\x00\x00value:458\n"
+            "459459459459459459459459459459459459459459459459459459459459459459459459459459459459459459459459459459459459459459459459\x00\x00value:459\n"
+            "460460460460460460460460460460460460460460460460460460460460460460460460460460460460460460460460460460460460460460460460\x00\x00value:460\n"
+            "461461461461461461461461461461461461461461461461461461461461461461461461461461461461461461461461461461461461461461461461\x00\x00value:461\n"
+            "462462462462462462462462462462462462462462462462462462462462462462462462462462462462462462462462462462462462462462462462\x00\x00value:462\n"
+            "463463463463463463463463463463463463463463463463463463463463463463463463463463463463463463463463463463463463463463463463\x00\x00value:463\n"
+            "464464464464464464464464464464464464464464464464464464464464464464464464464464464464464464464464464464464464464464464464\x00\x00value:464\n"
+            "46464646464646464646464646464646464646464646464646464646464646464646464646464646\x00\x00value:46\n"
+            "465465465465465465465465465465465465465465465465465465465465465465465465465465465465465465465465465465465465465465465465\x00\x00value:465\n"
+            "466466466466466466466466466466466466466466466466466466466466466466466466466466466466466466466466466466466466466466466466\x00\x00value:466\n"
+            "467467467467467467467467467467467467467467467467467467467467467467467467467467467467467467467467467467467467467467467467\x00\x00value:467\n"
+            "468468468468468468468468468468468468468468468468468468468468468468468468468468468468468468468468468468468468468468468468\x00\x00value:468\n"
+            "469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469469\x00\x00value:469\n"
+            "470470470470470470470470470470470470470470470470470470470470470470470470470470470470470470470470470470470470470470470470\x00\x00value:470\n"
+            "471471471471471471471471471471471471471471471471471471471471471471471471471471471471471471471471471471471471471471471471\x00\x00value:471\n"
+            "472472472472472472472472472472472472472472472472472472472472472472472472472472472472472472472472472472472472472472472472\x00\x00value:472\n"
+            "473473473473473473473473473473473473473473473473473473473473473473473473473473473473473473473473473473473473473473473473\x00\x00value:473\n"
+            "474474474474474474474474474474474474474474474474474474474474474474474474474474474474474474474474474474474474474474474474\x00\x00value:474\n"
+            "47474747474747474747474747474747474747474747474747474747474747474747474747474747\x00\x00value:47\n"
+            "475475475475475475475475475475475475475475475475475475475475475475475475475475475475475475475475475475475475475475475475\x00\x00value:475\n"
+            "476476476476476476476476476476476476476476476476476476476476476476476476476476476476476476476476476476476476476476476476\x00\x00value:476\n"
+            "477477477477477477477477477477477477477477477477477477477477477477477477477477477477477477477477477477477477477477477477\x00\x00value:477\n"
+            "478478478478478478478478478478478478478478478478478478478478478478478478478478478478478478478478478478478478478478478478\x00\x00value:478\n"
+            "479479479479479479479479479479479479479479479479479479479479479479479479479479479479479479479479479479479479479479479479\x00\x00value:479\n"
+            "480480480480480480480480480480480480480480480480480480480480480480480480480480480480480480480480480480480480480480480480\x00\x00value:480\n"
+            "481481481481481481481481481481481481481481481481481481481481481481481481481481481481481481481481481481481481481481481481\x00\x00value:481\n"
+            "482482482482482482482482482482482482482482482482482482482482482482482482482482482482482482482482482482482482482482482482\x00\x00value:482\n"
+            "483483483483483483483483483483483483483483483483483483483483483483483483483483483483483483483483483483483483483483483483\x00\x00value:483\n"
+            "484484484484484484484484484484484484484484484484484484484484484484484484484484484484484484484484484484484484484484484484\x00\x00value:484\n"
+            "48484848484848484848484848484848484848484848484848484848484848484848484848484848\x00\x00value:48\n"
+            "485485485485485485485485485485485485485485485485485485485485485485485485485485485485485485485485485485485485485485485485\x00\x00value:485\n"
+            "486486486486486486486486486486486486486486486486486486486486486486486486486486486486486486486486486486486486486486486486\x00\x00value:486\n"
+            "487487487487487487487487487487487487487487487487487487487487487487487487487487487487487487487487487487487487487487487487\x00\x00value:487\n"
+            "488488488488488488488488488488488488488488488488488488488488488488488488488488488488488488488488488488488488488488488488\x00\x00value:488\n"
+            "489489489489489489489489489489489489489489489489489489489489489489489489489489489489489489489489489489489489489489489489\x00\x00value:489\n"
+            "490490490490490490490490490490490490490490490490490490490490490490490490490490490490490490490490490490490490490490490490\x00\x00value:490\n"
+            "491491491491491491491491491491491491491491491491491491491491491491491491491491491491491491491491491491491491491491491491\x00\x00value:491\n"
+            "492492492492492492492492492492492492492492492492492492492492492492492492492492492492492492492492492492492492492492492492\x00\x00value:492\n"
+            "493493493493493493493493493493493493493493493493493493493493493493493493493493493493493493493493493493493493493493493493\x00\x00value:493\n"
+            "494494494494494494494494494494494494494494494494494494494494494494494494494494494494494494494494494494494494494494494494\x00\x00value:494\n"
+            "49494949494949494949494949494949494949494949494949494949494949494949494949494949\x00\x00value:49\n"
+            "495495495495495495495495495495495495495495495495495495495495495495495495495495495495495495495495495495495495495495495495\x00\x00value:495\n"
+            "496496496496496496496496496496496496496496496496496496496496496496496496496496496496496496496496496496496496496496496496\x00\x00value:496\n"
+            "497497497497497497497497497497497497497497497497497497497497497497497497497497497497497497497497497497497497497497497497\x00\x00value:497\n"
+            "498498498498498498498498498498498498498498498498498498498498498498498498498498498498498498498498498498498498498498498498\x00\x00value:498\n"
+            "499499499499499499499499499499499499499499499499499499499499499499499499499499499499499499499499499499499499499499499499\x00\x00value:499\n"
+            "50505050505050505050505050505050505050505050505050505050505050505050505050505050\x00\x00value:50\n"
+            "51515151515151515151515151515151515151515151515151515151515151515151515151515151\x00\x00value:51\n"
+            "52525252525252525252525252525252525252525252525252525252525252525252525252525252\x00\x00value:52\n"
+            "53535353535353535353535353535353535353535353535353535353535353535353535353535353\x00\x00value:53\n"
+            "54545454545454545454545454545454545454545454545454545454545454545454545454545454\x00\x00value:54\n"
+            "5555555555555555555555555555555555555555\x00\x00value:5\n"
+            "55555555555555555555555555555555555555555555555555555555555555555555555555555555\x00\x00value:55\n"
+            "56565656565656565656565656565656565656565656565656565656565656565656565656565656\x00\x00value:56\n"
+            "57575757575757575757575757575757575757575757575757575757575757575757575757575757\x00\x00value:57\n"
+            "58585858585858585858585858585858585858585858585858585858585858585858585858585858\x00\x00value:58\n"
+            "59595959595959595959595959595959595959595959595959595959595959595959595959595959\x00\x00value:59\n"
+            "60606060606060606060606060606060606060606060606060606060606060606060606060606060\x00\x00value:60\n"
+            "61616161616161616161616161616161616161616161616161616161616161616161616161616161\x00\x00value:61\n"
+            "62626262626262626262626262626262626262626262626262626262626262626262626262626262\x00\x00value:62\n"
+            "63636363636363636363636363636363636363636363636363636363636363636363636363636363\x00\x00value:63\n"
+            "64646464646464646464646464646464646464646464646464646464646464646464646464646464\x00\x00value:64\n"
+            "65656565656565656565656565656565656565656565656565656565656565656565656565656565\x00\x00value:65\n"
+            "6666666666666666666666666666666666666666\x00\x00value:6\n"
+            "66666666666666666666666666666666666666666666666666666666666666666666666666666666\x00\x00value:66\n"
+            "67676767676767676767676767676767676767676767676767676767676767676767676767676767\x00\x00value:67\n"
+            "68686868686868686868686868686868686868686868686868686868686868686868686868686868\x00\x00value:68\n"
+            "69696969696969696969696969696969696969696969696969696969696969696969696969696969\x00\x00value:69\n"
+            "70707070707070707070707070707070707070707070707070707070707070707070707070707070\x00\x00value:70\n"
+            "71717171717171717171717171717171717171717171717171717171717171717171717171717171\x00\x00value:71\n"
+            "72727272727272727272727272727272727272727272727272727272727272727272727272727272\x00\x00value:72\n"
+            "73737373737373737373737373737373737373737373737373737373737373737373737373737373\x00\x00value:73\n"
+            "74747474747474747474747474747474747474747474747474747474747474747474747474747474\x00\x00value:74\n"
+            "75757575757575757575757575757575757575757575757575757575757575757575757575757575\x00\x00value:75\n"
+            "76767676767676767676767676767676767676767676767676767676767676767676767676767676\x00\x00value:76\n"
+            "7777777777777777777777777777777777777777\x00\x00value:7\n"
+            "77777777777777777777777777777777777777777777777777777777777777777777777777777777\x00\x00value:77\n"
+            "78787878787878787878787878787878787878787878787878787878787878787878787878787878\x00\x00value:78\n"
+            "79797979797979797979797979797979797979797979797979797979797979797979797979797979\x00\x00value:79\n"
+            "80808080808080808080808080808080808080808080808080808080808080808080808080808080\x00\x00value:80\n"
+            "81818181818181818181818181818181818181818181818181818181818181818181818181818181\x00\x00value:81\n"
+            "82828282828282828282828282828282828282828282828282828282828282828282828282828282\x00\x00value:82\n"
+            "83838383838383838383838383838383838383838383838383838383838383838383838383838383\x00\x00value:83\n"
+            "84848484848484848484848484848484848484848484848484848484848484848484848484848484\x00\x00value:84\n"
+            "85858585858585858585858585858585858585858585858585858585858585858585858585858585\x00\x00value:85\n"
+            "86868686868686868686868686868686868686868686868686868686868686868686868686868686\x00\x00value:86\n"
+            "87878787878787878787878787878787878787878787878787878787878787878787878787878787\x00\x00value:87\n"
+            "8888888888888888888888888888888888888888\x00\x00value:8\n"
+            "88888888888888888888888888888888888888888888888888888888888888888888888888888888\x00\x00value:88\n"
+            "89898989898989898989898989898989898989898989898989898989898989898989898989898989\x00\x00value:89\n"
+            "90909090909090909090909090909090909090909090909090909090909090909090909090909090\x00\x00value:90\n"
+            "91919191919191919191919191919191919191919191919191919191919191919191919191919191\x00\x00value:91\n"
+            "92929292929292929292929292929292929292929292929292929292929292929292929292929292\x00\x00value:92\n"
+            "93939393939393939393939393939393939393939393939393939393939393939393939393939393\x00\x00value:93\n"
+            "94949494949494949494949494949494949494949494949494949494949494949494949494949494\x00\x00value:94\n"
+            "95959595959595959595959595959595959595959595959595959595959595959595959595959595\x00\x00value:95\n"
+            "96969696969696969696969696969696969696969696969696969696969696969696969696969696\x00\x00value:96\n"
+            "97979797979797979797979797979797979797979797979797979797979797979797979797979797\x00\x00value:97\n"
+            "98989898989898989898989898989898989898989898989898989898989898989898989898989898\x00\x00value:98\n"
+            "9999999999999999999999999999999999999999\x00\x00value:9\n"
+            "99999999999999999999999999999999999999999999999999999999999999999999999999999999\x00\x00value:99\n"
+            )
+        self.assertEqual(expected_leaf2, leaf2_bytes)
 
-    def _test_2_leaves_2_2(self):
+    def test_2_leaves_2_2(self):
         builder = btree_index.BTreeBuilder(key_elements=2, reference_lists=2)
-        nodes = self.make_nodes(5, 2, 2)
+        nodes = self.make_nodes(100, 2, 2)
         for node in nodes:
             builder.add_node(*node)
         content = builder.finish().read()
-        self.assertEqual(4096, len(content))
+        self.assertEqual(4096*3, len(content))
         self.assertEqual(
-            "B+Tree Graph Index 1\nnode_ref_lists=2\nkey_elements=2\nlen=10\n"
+            "B+Tree Graph Index 1\nnode_ref_lists=2\nkey_elements=2\nlen=200\n"
             "row_lengths=1,2\n",
-            content[:60])
-        node_content = content[60:]
-        node_bytes = zlib.decompress(node_content)
-        expected_node = (
-            "type=leaf\n"
-            "0000000000000000000000000000000000000000\x000000000000000000000000000000000000000000\x00\t0000000000000000000000000000000000000000\x00ref0000000000000000000000000000000000000000\x00value:0\n"
-            "0000000000000000000000000000000000000000\x001111111111111111111111111111111111111111\x000000000000000000000000000000000000000000\x00ref0000000000000000000000000000000000000000\t0000000000000000000000000000000000000000\x00ref0000000000000000000000000000000000000000\r0000000000000000000000000000000000000000\x00ref0000000000000000000000000000000000000000\x00value:1\n"
-            "0000000000000000000000000000000000000000\x002222222222222222222222222222222222222222\x00\t0000000000000000000000000000000000000000\x00ref0000000000000000000000000000000000000000\x00value:2\n"
-            "0000000000000000000000000000000000000000\x003333333333333333333333333333333333333333\x000000000000000000000000000000000000000000\x00ref2222222222222222222222222222222222222222\t0000000000000000000000000000000000000000\x00ref2222222222222222222222222222222222222222\r0000000000000000000000000000000000000000\x00ref2222222222222222222222222222222222222222\x00value:3\n"
-            "0000000000000000000000000000000000000000\x004444444444444444444444444444444444444444\x00\t0000000000000000000000000000000000000000\x00ref0000000000000000000000000000000000000000\x00value:4\n"
-            "1111111111111111111111111111111111111111\x000000000000000000000000000000000000000000\x00\t1111111111111111111111111111111111111111\x00ref0000000000000000000000000000000000000000\x00value:0\n"
-            "1111111111111111111111111111111111111111\x001111111111111111111111111111111111111111\x001111111111111111111111111111111111111111\x00ref0000000000000000000000000000000000000000\t1111111111111111111111111111111111111111\x00ref0000000000000000000000000000000000000000\r1111111111111111111111111111111111111111\x00ref0000000000000000000000000000000000000000\x00value:1\n"
-            "1111111111111111111111111111111111111111\x002222222222222222222222222222222222222222\x00\t1111111111111111111111111111111111111111\x00ref0000000000000000000000000000000000000000\x00value:2\n"
-            "1111111111111111111111111111111111111111\x003333333333333333333333333333333333333333\x001111111111111111111111111111111111111111\x00ref2222222222222222222222222222222222222222\t1111111111111111111111111111111111111111\x00ref2222222222222222222222222222222222222222\r1111111111111111111111111111111111111111\x00ref2222222222222222222222222222222222222222\x00value:3\n"
-            "1111111111111111111111111111111111111111\x004444444444444444444444444444444444444444\x00\t1111111111111111111111111111111111111111\x00ref0000000000000000000000000000000000000000\x00value:4\n"
-            ""
+            content[:77])
+        root = content[77:4096]
+        leaf1 = content[4096:8192]
+        leaf2 = content[8192:]
+        root_bytes = zlib.decompress(root)
+        expected_root = (
+            "type=internal\n"
+            "offset=0\n"
+            "1111111111111111111111111111111111111111\x0049494949494949494949494949494949494949494949494949494949494949494949494949494949\n"
             )
-        self.assertEqual(expected_node, node_bytes)
+        self.assertEqual(expected_root, root_bytes)
+        # We assume the other leaf nodes have been written correctly - layering FTW.




More information about the bazaar-commits mailing list