]> git.giacomolli.uk - onechat/blobdiff - memory_test.go
Require field names in struct literals
[onechat] / memory_test.go
index e8682205933daa7feefea465948b999f3f6862f4..8c34149cb07b18997df2d1a950e93e6c41f0fb34 100644 (file)
@@ -11,6 +11,7 @@ import (
        "strings"
        "sync"
        "testing"
+       "time"
        "unicode/utf8"
 
        "github.com/stretchr/testify/require"
@@ -105,13 +106,17 @@ func TestMemoryRunsAtMostEightBuilds(t *testing.T) {
        })
        require.Equal(t, []nodeKey{{0, 0}, {0, 1}, {0, 2}, {0, 3}, {0, 4}, {0, 5}, {0, 6}, {0, 7}}, running)
 
+       require.Eventually(t, func() bool {
+               return summarizer.Active() == maxBuilds
+       }, 10*time.Second, time.Millisecond)
+
        close(summarizer.gate)
        require.NoError(t, memory.Wait(t.Context()))
        require.Equal(t, maxBuilds, summarizer.peak)
 
        for level, count := range []int{12, 6, 3, 1} {
                for index := range count {
-                       require.True(t, memory.tree.Built(level, index), "node (%d, %d)", level, index)
+                       require.True(t, isBuilt(t, memory.tree, level, index), "node (%d, %d)", level, index)
                }
        }
 }
@@ -136,14 +141,14 @@ func TestMemoryStartsALeafAfterFewerThanEightUnbuilt(t *testing.T) {
                require.Less(t, task.Index, 8)
        }
 
-       require.False(t, memory.tree.Built(0, 8))
+       require.False(t, isBuilt(t, memory.tree, 0, 8))
        summarizer.SetFailing(false)
 
        _, err = memory.Append("user", "retry")
        require.NoError(t, err)
        require.NoError(t, memory.Wait(t.Context()))
-       require.True(t, memory.tree.Built(0, 8))
-       require.True(t, memory.tree.Built(3, 0))
+       require.True(t, isBuilt(t, memory.tree, 0, 8))
+       require.True(t, isBuilt(t, memory.tree, 3, 0))
 }
 
 func TestMemoryMergesAfterBothHalves(t *testing.T) {
@@ -164,12 +169,12 @@ func TestMemoryMergesAfterBothHalves(t *testing.T) {
        require.NoError(t, memory.Wait(t.Context()))
        require.Len(t, summarizer.Tasks(), 3)
 
-       left, _ := memory.tree.Node(0, 0)
-       right, _ := memory.tree.Node(0, 1)
+       left := readNode(t, memory.tree, 0, 0)
+       right := readNode(t, memory.tree, 0, 1)
        merge := summarizer.Tasks()[2]
        require.Equal(t, []string{left.Text, right.Text}, merge.Input)
        require.Equal(t, "<chat>\n0+1|"+left.Text+"\n1+1|"+right.Text+"\n</chat>", merge.Context)
-       require.True(t, memory.tree.Built(1, 0))
+       require.True(t, isBuilt(t, memory.tree, 1, 0))
 }
 
 func TestMemoryRestartRestoresTheQueue(t *testing.T) {
@@ -196,7 +201,7 @@ func TestMemoryRestartRestoresTheQueue(t *testing.T) {
        }()
 
        require.NoError(t, memory.Wait(t.Context()))
-       require.True(t, memory.tree.Built(2, 0))
+       require.True(t, isBuilt(t, memory.tree, 2, 0))
 }
 
 func TestMemoryBuildsFreeParents(t *testing.T) {
@@ -212,8 +217,7 @@ func TestMemoryBuildsFreeParents(t *testing.T) {
                require.NoError(t, err)
        }
 
-       node, built := memory.tree.Node(2, 0)
-       require.True(t, built)
+       node := readNode(t, memory.tree, 2, 0)
        require.Equal(t, "user: a\nuser: b\nuser: c\nuser: d", node.Text)
 }
 
@@ -237,7 +241,10 @@ func TestMemoryKeepsALongMessageOutOfTheView(t *testing.T) {
        _, err = memory.Append("user", "again")
        require.NoError(t, err)
        require.NoError(t, memory.Wait(t.Context()))
-       require.Equal(t, "<chat>\n0+1|"+fakeLine(memory.task(nodeKey{0, 0}))+"\n1+1|user: again\n</chat>", memory.View())
+
+       task, err := memory.task(nodeKey{0, 0})
+       require.NoError(t, err)
+       require.Equal(t, "<chat>\n0+1|"+fakeLine(task)+"\n1+1|user: again\n</chat>", memory.View())
 }
 
 func TestMemoryCoversMessagesAfterTheSavedView(t *testing.T) {
@@ -350,6 +357,14 @@ func (f *fakeSummarizer) SetFailing(failing bool) {
        f.failing = failing
 }
 
+// Active returns the number of tasks that run now.
+func (f *fakeSummarizer) Active() int {
+       f.mutex.Lock()
+       defer f.mutex.Unlock()
+
+       return f.active
+}
+
 // Tasks returns the tasks so far.
 func (f *fakeSummarizer) Tasks() []Task {
        f.mutex.Lock()