X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/feda522eba3e2a27c91741c77d0d01f1840c0004..87c59e9c7d6743cdd04c0d5e89d3baca173aad42:/tree_test.go diff --git a/tree_test.go b/tree_test.go index ece7c6f..d927a9e 100644 --- a/tree_test.go +++ b/tree_test.go @@ -31,14 +31,14 @@ func TestFreeLeafHoldsAShortMessageWordForWord(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) - 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) } @@ -51,14 +51,14 @@ func TestTreeBuildsEachNodeOnce(t *testing.T) { 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) { @@ -68,9 +68,9 @@ func TestTreeReopenLoadsTheSameNodes(t *testing.T) { 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)) @@ -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) - 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) @@ -90,8 +90,9 @@ func TestTreeReopenLoadsTheSameNodes(t *testing.T) { }() require.Equal(t, len(nodes), tree.Count()) + 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{ - 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)) @@ -125,8 +126,9 @@ func TestTreeBuildsAMissingIndexAgain(t *testing.T) { }() require.Equal(t, len(nodes), tree.Count()) + 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) - 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. @@ -153,36 +155,6 @@ func TestTreeIndexesTheNodesAfterACrash(t *testing.T) { }() 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"))) }