func TestViewMergesInTheOrderOfTheRollbackPush(t *testing.T) {
tree := ViewBuiltTree{}
+
view := newView(0, 0)
+
var states *ViewPushEntry
+
for tick := range 20001 {
states = viewPush(tick, states)
starts := states.starts()
func TestViewMergesInOneBatchFromHighToLow(t *testing.T) {
tree := ViewBuiltTree{}
+
view := newView(10, 5)
sizes := make([]int, 0, 20)
for range 20 {
_, err := view.Append(tree)
require.NoError(t, err)
+
sizes = append(sizes, view.Size())
}
// ViewBuiltTree is a tree with each node built, with 1 byte of text.
type ViewBuiltTree struct{}
-func (v ViewBuiltTree) Built(_, _ int) (bool, error) {
- return true, nil
-}
-
-func (ViewBuiltTree) Node(level, index int) (Node, bool, error) {
- return treeTestNode(level, index, "a"), true, nil
-}
-
// ViewPushEntry 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.
older *ViewPushEntry
}
+// ViewPartTree is a tree with the built nodes of its sizes.
+type ViewPartTree struct {
+ sizes map[NodeKey]int
+}
+
+func (v ViewBuiltTree) Built(_, _ int) (bool, error) {
+ return true, nil
+}
+
+func (ViewBuiltTree) Node(level, index int) (Node, bool, error) {
+ return treeTestNode(level, index, "a"), true, nil
+}
+
// starts returns the states of the list, oldest first.
func (e *ViewPushEntry) starts() []int {
var starts []int
+
for entry := e; entry != nil; entry = entry.older {
starts = append(starts, entry.state)
}
return starts
}
-// ViewPartTree is a tree with the built nodes of its sizes.
-type ViewPartTree struct {
- sizes map[NodeKey]int
-}
-
func (p ViewPartTree) Built(level, index int) (bool, error) {
_, built := p.sizes[NodeKey{level, index}]
return built, nil