]> git.giacomolli.uk - onechat/blobdiff - tree_test.go
Rewrite the README as a user guide
[onechat] / tree_test.go
index ece7c6fbc17e7a4d7e18aa0e320cd705484155c1..d927a9eda6bbafec3fe257504af28cecfe1aafd2 100644 (file)
@@ -31,14 +31,14 @@ func TestFreeLeafHoldsAShortMessageWordForWord(t *testing.T) {
 }
 
 func TestFreeMergeJoinsShortSiblings(t *testing.T) {
 }
 
 func TestFreeMergeJoinsShortSiblings(t *testing.T) {
-       left := testNode(1, 2, "left")
-       right := testNode(1, 3, "right")
+       left := treeTestNode(1, 2, "left")
+       right := treeTestNode(1, 3, "right")
 
        node, free := freeMerge(left, right)
        require.True(t, free)
 
        node, free := freeMerge(left, right)
        require.True(t, free)
-       require.Equal(t, testNode(2, 1, "left\nright"), node)
+       require.Equal(t, treeTestNode(2, 1, "left\nright"), node)
 
 
-       right = testNode(1, 3, strings.Repeat("r", nodeBytes-len("left")))
+       right = treeTestNode(1, 3, strings.Repeat("r", nodeBytes-len("left")))
        _, free = freeMerge(left, right)
        require.False(t, free)
 }
        _, free = freeMerge(left, right)
        require.False(t, free)
 }
@@ -51,14 +51,14 @@ func TestTreeBuildsEachNodeOnce(t *testing.T) {
                require.NoError(t, tree.Close())
        }()
 
                require.NoError(t, tree.Close())
        }()
 
-       require.NoError(t, tree.Add(testNode(0, 0, "user: a")))
-       require.ErrorContains(t, tree.Add(testNode(0, 0, "user: b")), "already built")
-       require.ErrorContains(t, tree.Add(testNode(1, 0, "a b")), "child that is not built")
+       require.NoError(t, tree.Add(treeTestNode(0, 0, "user: a")))
+       require.ErrorContains(t, tree.Add(treeTestNode(0, 0, "user: b")), "already built")
+       require.ErrorContains(t, tree.Add(treeTestNode(1, 0, "a b")), "child that is not built")
 
 
-       require.NoError(t, tree.Add(testNode(0, 1, "reply: b")))
-       require.NoError(t, tree.Add(testNode(1, 0, "a b")))
+       require.NoError(t, tree.Add(treeTestNode(0, 1, "reply: b")))
+       require.NoError(t, tree.Add(treeTestNode(1, 0, "a b")))
 
 
-       require.Equal(t, "user: a", readNode(t, tree, 0, 0).Text)
+       require.Equal(t, "user: a", treeReadNode(t, tree, 0, 0).Text)
 }
 
 func TestTreeReopenLoadsTheSameNodes(t *testing.T) {
 }
 
 func TestTreeReopenLoadsTheSameNodes(t *testing.T) {
@@ -68,9 +68,9 @@ func TestTreeReopenLoadsTheSameNodes(t *testing.T) {
        require.NoError(t, err)
 
        nodes := []Node{
        require.NoError(t, err)
 
        nodes := []Node{
-               testNode(0, 1, "reply: b"),
-               testNode(0, 0, "user: a"),
-               testNode(1, 0, "user: a\nreply: b"),
+               treeTestNode(0, 1, "reply: b"),
+               treeTestNode(0, 0, "user: a"),
+               treeTestNode(1, 0, "user: a\nreply: b"),
        }
        for _, node := range nodes {
                require.NoError(t, tree.Add(node))
        }
        for _, node := range nodes {
                require.NoError(t, tree.Add(node))
@@ -80,7 +80,7 @@ func TestTreeReopenLoadsTheSameNodes(t *testing.T) {
 
        data, err := os.ReadFile(filepath.Join(root, "tree", "2026-01-01.jsonl"))
        require.NoError(t, err)
 
        data, err := os.ReadFile(filepath.Join(root, "tree", "2026-01-01.jsonl"))
        require.NoError(t, err)
-       require.Equal(t, `{"l":0,"i":1,"text":"reply: b","size":8}`+"\n", strings.SplitAfter(string(data), "\n")[0])
+       require.JSONEq(t, `{"l":0,"i":1,"text":"reply: b","size":8}`+"\n", strings.SplitAfter(string(data), "\n")[0])
 
        tree, err = openTree(t.Context(), root, 2, clock.Now)
        require.NoError(t, err)
 
        tree, err = openTree(t.Context(), root, 2, clock.Now)
        require.NoError(t, err)
@@ -90,8 +90,9 @@ func TestTreeReopenLoadsTheSameNodes(t *testing.T) {
        }()
 
        require.Equal(t, len(nodes), tree.Count())
        }()
 
        require.Equal(t, len(nodes), tree.Count())
+
        for _, node := range nodes {
        for _, node := range nodes {
-               require.Equal(t, node, readNode(t, tree, node.Level, node.Index))
+               require.Equal(t, node, treeReadNode(t, tree, node.Level, node.Index))
        }
 }
 
        }
 }
 
@@ -102,9 +103,9 @@ func TestTreeBuildsAMissingIndexAgain(t *testing.T) {
        require.NoError(t, err)
 
        nodes := []Node{
        require.NoError(t, err)
 
        nodes := []Node{
-               testNode(0, 1, "reply: b"),
-               testNode(0, 0, "user: a"),
-               testNode(1, 0, "user: a\nreply: b"),
+               treeTestNode(0, 1, "reply: b"),
+               treeTestNode(0, 0, "user: a"),
+               treeTestNode(1, 0, "user: a\nreply: b"),
        }
        for _, node := range nodes {
                require.NoError(t, tree.Add(node))
        }
        for _, node := range nodes {
                require.NoError(t, tree.Add(node))
@@ -125,8 +126,9 @@ func TestTreeBuildsAMissingIndexAgain(t *testing.T) {
        }()
 
        require.Equal(t, len(nodes), tree.Count())
        }()
 
        require.Equal(t, len(nodes), tree.Count())
+
        for _, node := range nodes {
        for _, node := range nodes {
-               require.Equal(t, node, readNode(t, tree, node.Level, node.Index))
+               require.Equal(t, node, treeReadNode(t, tree, node.Level, node.Index))
        }
 }
 
        }
 }
 
@@ -136,8 +138,8 @@ func TestTreeIndexesTheNodesAfterACrash(t *testing.T) {
        tree, err := openTree(t.Context(), root, 2, clock.Now)
        require.NoError(t, err)
 
        tree, err := openTree(t.Context(), root, 2, clock.Now)
        require.NoError(t, err)
 
-       require.NoError(t, tree.Add(testNode(0, 0, "user: a")))
-       require.NoError(t, tree.Add(testNode(0, 1, "reply: b")))
+       require.NoError(t, tree.Add(treeTestNode(0, 0, "user: a")))
+       require.NoError(t, tree.Add(treeTestNode(0, 1, "reply: b")))
        require.NoError(t, tree.Close())
 
        // A crash after the line write and in the middle of the index writes.
        require.NoError(t, tree.Close())
 
        // A crash after the line write and in the middle of the index writes.
@@ -153,36 +155,6 @@ func TestTreeIndexesTheNodesAfterACrash(t *testing.T) {
        }()
 
        require.Equal(t, 2, tree.Count())
        }()
 
        require.Equal(t, 2, tree.Count())
-       require.Equal(t, "reply: b", readNode(t, tree, 0, 1).Text)
-       require.NoError(t, tree.Add(testNode(1, 0, "user: a\nreply: b")))
-}
-
-// isBuilt tells if the node (l, i) of tree is built.
-func isBuilt(t *testing.T, tree *Tree, level, index int) bool {
-       t.Helper()
-
-       built, err := tree.Built(level, index)
-       require.NoError(t, err)
-
-       return built
-}
-
-// readNode reads the node (l, i) of tree, which must be built.
-func readNode(t *testing.T, tree *Tree, level, index int) Node {
-       t.Helper()
-
-       node, built, err := tree.Node(level, index)
-       require.NoError(t, err)
-       require.True(t, built, "node (%d, %d)", level, index)
-
-       return node
-}
-
-func testNode(level, index int, text string) Node {
-       return Node{
-               Level: level,
-               Index: index,
-               Text:  text,
-               Size:  len(text),
-       }
+       require.Equal(t, "reply: b", treeReadNode(t, tree, 0, 1).Text)
+       require.NoError(t, tree.Add(treeTestNode(1, 0, "user: a\nreply: b")))
 }
 }