]> git.giacomolli.uk - onechat/blobdiff - replay_test.go
Start the builds in the order of the messages
[onechat] / replay_test.go
index 4151d7ee2337e568bce30aa7b88b7ddf41c5be35..f01cd639e5650dc01b5ebcc86b780d23814fdd5a 100644 (file)
@@ -96,19 +96,20 @@ func syntheticText(id, size int) string {
        return head + strings.Repeat(words, max(1, (size-len(head))/len(words)))
 }
 
-// requireViews checks the views after a new message, while no build changes the
-// tree. Each view is at most its high limit, and a batch merges the chat view
-// to its low limit. It returns the size of the chat view and if a batch merged
-// it, from the number of lines before the message.
+// requireViews checks the views after a new message. Each view is at most its
+// high limit, and a batch merges the chat view to its low limit. The leaf of
+// the new message can be built after the append, so the sizes count it as the
+// pending mark, as the append did. It returns the size of the chat view and if
+// a batch merged it, from the number of lines before the message.
 func requireViews(t *testing.T, memory *Memory, lines int) (int, bool) {
        t.Helper()
 
        memory.mutex.Lock()
        defer memory.mutex.Unlock()
 
-       size := memory.chat.Size(memory.tree)
+       size := appendSize(memory.chat, memory.tree)
        require.LessOrEqual(t, size, chatHigh)
-       require.LessOrEqual(t, memory.cview.Size(memory.tree), compactionHigh)
+       require.LessOrEqual(t, appendSize(memory.cview, memory.tree), compactionHigh)
 
        merged := len(memory.chat.lines) < lines
        if merged {
@@ -150,6 +151,12 @@ func requireOnlySummaries(t *testing.T, memory *Memory) {
        }
 }
 
+// appendSize returns the size of view with its last line as the pending mark.
+func appendSize(view *View, tree nodeReader) int {
+       last := view.lines[len(view.lines)-1]
+       return view.Size(tree) - lineSize(tree, last) + len(pending)
+}
+
 // viewLines returns the number of lines in the chat view of memory.
 func viewLines(memory *Memory) int {
        memory.mutex.Lock()