"github.com/stretchr/testify/require"
)
-func TestViewMergesInTheOrderOfTaelinsPush(t *testing.T) {
+func TestViewMergesInTheOrderOfTheRollbackPush(t *testing.T) {
tree := builtTree{}
view := newView(0, 0)
var states *pushEntry
starts := states.starts()
view.high = len(starts)
view.low = len(starts)
- view.Append(tree)
+ _, err := view.Append(tree)
+ require.NoError(t, err)
lines := make([]int, len(view.lines))
for n, line := range view.lines {
view := newView(10, 5)
sizes := make([]int, 0, 20)
for range 20 {
- view.Append(tree)
- sizes = append(sizes, view.Size(tree))
+ _, err := view.Append(tree)
+ require.NoError(t, err)
+ sizes = append(sizes, view.Size())
}
require.Equal(t, []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 6, 7, 8, 9, 10, 5, 6, 7, 8}, sizes)
view := newView(3, 2)
for range 4 {
- view.Append(tree)
+ _, err := view.Append(tree)
+ require.NoError(t, err)
}
require.Equal(t, []nodeKey{{0, 0}, {0, 1}, {0, 2}, {0, 3}}, view.lines)
require.True(t, view.merging)
tree.sizes[nodeKey{1, 0}] = 1
- view.Append(tree)
+ _, err := view.Append(tree)
+ require.NoError(t, err)
require.Equal(t, []nodeKey{{1, 0}, {0, 2}, {0, 3}, {0, 4}}, view.lines)
require.True(t, view.merging)
tree.sizes[nodeKey{1, 1}] = 1
tree.sizes[nodeKey{1, 2}] = 1
tree.sizes[nodeKey{2, 0}] = 1
- view.Append(tree)
+ _, err = view.Append(tree)
+ require.NoError(t, err)
require.Equal(t, []nodeKey{{2, 0}, {1, 2}}, view.lines)
require.False(t, view.merging)
}
Lines: [][2]int{{1, 0}, {0, 2}},
}, chatHigh, chatLow, tree)
require.NoError(t, err)
- require.Equal(t, "<chat>\n0+2|aaa aaa\n2+1|"+pending+"\n</chat>", view.Render(tree))
- require.Equal(t, 7+len(pending), view.Size(tree))
+ require.Equal(t, "<chat>\n0+2|aaa aaa\n2+1|"+pending+"\n</chat>", view.Render())
+ require.Equal(t, 7+len(pending), view.Size())
}
func TestViewCoarsenTakesTheCoarserLines(t *testing.T) {
}, 100, 100, builtTree{})
require.NoError(t, err)
- view.Coarsen(other, builtTree{})
+ require.NoError(t, view.Coarsen(other, builtTree{}))
require.Equal(t, []nodeKey{{1, 0}, {1, 1}, {0, 4}, {0, 5}}, view.lines)
view.low = 2
- view.Coarsen(other, builtTree{})
+ require.NoError(t, view.Coarsen(other, builtTree{}))
require.Equal(t, []nodeKey{{2, 0}, {1, 2}}, view.lines)
require.False(t, view.merging)
}
Lines: [][2]int{{1, 0}, {0, 2}, {0, 3}},
}, 100, 100, tree)
require.NoError(t, err)
- require.Equal(t, "<chat>\n</chat>", view.Context(tree, 0))
- require.Equal(t, "<chat>\n0+2|a\n</chat>", view.Context(tree, 2))
- require.Equal(t, "<chat>\n0+2|a\n</chat>", view.Context(tree, 3))
+ require.Equal(t, "<chat>\n</chat>", view.Context(0))
+ require.Equal(t, "<chat>\n0+2|a\n</chat>", view.Context(2))
+ require.Equal(t, "<chat>\n0+2|a\n</chat>", view.Context(3))
}
func TestRestoreViewRejectsAGap(t *testing.T) {
require.ErrorContains(t, err, "does not start at message 1")
}
-// pushEntry is one entry of Taelin's rollback state list, newest first. Under
-// push alone, life stays 0, so the entry leaves it out.
+// pushEntry is one entry of the rollback state list of the reference design,
+// newest first. Under push alone, life stays 0, so the entry leaves it out.
type pushEntry struct {
keep bool
state int
// builtTree is a tree with each node built, with 1 byte of text.
type builtTree struct{}
-func (builtTree) Node(level, index int) (Node, bool) {
- return testNode(level, index, "a"), true
+func (builtTree) Built(level, index int) (bool, error) {
+ return true, nil
+}
+
+func (builtTree) Node(level, index int) (Node, bool, error) {
+ return testNode(level, index, "a"), true, nil
}
// partTree is a tree with the built nodes of its sizes.
sizes map[nodeKey]int
}
-func (p partTree) Node(level, index int) (Node, bool) {
+func (p partTree) Built(level, index int) (bool, error) {
+ _, built := p.sizes[nodeKey{level, index}]
+ return built, nil
+}
+
+func (p partTree) Node(level, index int) (Node, bool, error) {
size, built := p.sizes[nodeKey{level, index}]
if !built {
- return Node{}, false
+ return Node{}, false, nil
}
text := strings.Repeat("a", size)
text = "aaa\naaa"
}
- return testNode(level, index, text), true
+ return testNode(level, index, text), true, nil
}