+package main
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+)
+
+func TestQueueStartsInMessageOrder(t *testing.T) {
+ queue := newQueue()
+ queue.AddLeaf(4)
+ queue.AddLeaf(5)
+ queue.AddMerge(nodeKey{1, 2})
+ queue.AddMerge(nodeKey{1, 1})
+
+ var order []nodeKey
+ for {
+ key, ready := queue.Next()
+ if !ready {
+ break
+ }
+
+ order = append(order, key)
+ }
+
+ require.Equal(t, []nodeKey{{1, 1}, {0, 4}, {0, 5}, {1, 2}}, order)
+}
+
+func TestQueueRetriesAFailedMergeAtTheNextMessage(t *testing.T) {
+ queue := newQueue()
+ queue.AddMerge(nodeKey{1, 0})
+
+ key, ready := queue.Next()
+ require.True(t, ready)
+
+ queue.Fail(key)
+ _, ready = queue.Next()
+ require.False(t, ready)
+
+ queue.Retry()
+ key, ready = queue.Next()
+ require.True(t, ready)
+ require.Equal(t, nodeKey{1, 0}, key)
+
+ queue.Done(key)
+ queue.AddMerge(nodeKey{1, 0})
+ _, ready = queue.Next()
+ require.True(t, ready)
+}