package main import ( "testing" "github.com/stretchr/testify/require" ) func TestQueueStartsInMessageOrder(t *testing.T) { queue := newBuildQueue() 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 := newBuildQueue() 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) }