]> git.giacomolli.uk - onechat/blobdiff - memory_test.go
Add the compaction view
[onechat] / memory_test.go
index b5bddb04ebfb78d255133c4b712b7698e2fce8ec..426654a63667c27508eabc2b7f3ad3c31fb4da78 100644 (file)
@@ -17,12 +17,15 @@ func TestMemoryRestartLoadsTheSameView(t *testing.T) {
 
        memory.chat.high = 200
        memory.chat.low = 100
 
        memory.chat.high = 200
        memory.chat.low = 100
+       memory.cview.high = 80
+       memory.cview.low = 40
        for n := range 100 {
                _, err = memory.Append("user", fmt.Sprint(n))
                require.NoError(t, err)
        }
 
        view := memory.View()
        for n := range 100 {
                _, err = memory.Append("user", fmt.Sprint(n))
                require.NoError(t, err)
        }
 
        view := memory.View()
+       context := memory.Context(0, 100)
        saved, err := os.ReadFile(filepath.Join(root, "view.json"))
        require.NoError(t, err)
        require.Less(t, len(memory.chat.lines), 100)
        saved, err := os.ReadFile(filepath.Join(root, "view.json"))
        require.NoError(t, err)
        require.Less(t, len(memory.chat.lines), 100)
@@ -36,12 +39,42 @@ func TestMemoryRestartLoadsTheSameView(t *testing.T) {
        }()
 
        require.Equal(t, view, memory.View())
        }()
 
        require.Equal(t, view, memory.View())
+       require.Equal(t, context, memory.Context(0, 100))
 
        loaded, err := os.ReadFile(filepath.Join(root, "view.json"))
        require.NoError(t, err)
        require.Equal(t, saved, loaded)
 }
 
 
        loaded, err := os.ReadFile(filepath.Join(root, "view.json"))
        require.NoError(t, err)
        require.Equal(t, saved, loaded)
 }
 
+func TestMemoryKeepsTheCompactionViewCoarser(t *testing.T) {
+       memory, err := openMemory(t.Context(), t.TempDir(), newTestClock().Now)
+       require.NoError(t, err)
+
+       defer func() {
+               require.NoError(t, memory.Close())
+       }()
+
+       memory.chat.high = 200
+       memory.chat.low = 100
+       memory.cview.high = 80
+       memory.cview.low = 40
+       for n := range 64 {
+               _, err = memory.Append("user", fmt.Sprint(n%10))
+               require.NoError(t, err)
+
+               coarse := 0
+               for _, line := range memory.chat.lines {
+                       outer := memory.cview.lines[coarse]
+                       for nodeEnd(outer.level, outer.index) <= line.index<<line.level {
+                               coarse++
+                               outer = memory.cview.lines[coarse]
+                       }
+
+                       require.GreaterOrEqual(t, outer.level, line.level, "message %d", n)
+               }
+       }
+}
+
 func TestMemoryBuildsFreeParents(t *testing.T) {
        memory, err := openMemory(t.Context(), t.TempDir(), newTestClock().Now)
        require.NoError(t, err)
 func TestMemoryBuildsFreeParents(t *testing.T) {
        memory, err := openMemory(t.Context(), t.TempDir(), newTestClock().Now)
        require.NoError(t, err)