X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/e754189bc2aa32ec43a5dc4ee01d7a6c6e4e388c..150e81034dc65943803924ef29962e2481ffe771:/memory_test.go diff --git a/memory_test.go b/memory_test.go index e868220..8c34149 100644 --- a/memory_test.go +++ b/memory_test.go @@ -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, "\n0+1|"+left.Text+"\n1+1|"+right.Text+"\n", 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, "\n0+1|"+fakeLine(memory.task(nodeKey{0, 0}))+"\n1+1|user: again\n", memory.View()) + + task, err := memory.task(nodeKey{0, 0}) + require.NoError(t, err) + require.Equal(t, "\n0+1|"+fakeLine(task)+"\n1+1|user: again\n", 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()