github.com/davinci-std/kanvas@v0.11.1/topsort_test.go (about)

     1  package kanvas
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  )
     8  
     9  func TestTopsort(t *testing.T) {
    10  	t.Run("simple", func(t *testing.T) {
    11  		got, err := topologicalSort(map[string][]string{
    12  			"1": {"2", "3"},
    13  			"2": {"3"},
    14  			"3": {},
    15  		})
    16  
    17  		require.NoError(t, err)
    18  		require.Equal(t, [][]string{{"3"}, {"2"}, {"1"}}, got)
    19  	})
    20  
    21  	t.Run("cycle", func(t *testing.T) {
    22  		_, err := topologicalSort(map[string][]string{
    23  			"1": {"2", "3"},
    24  			"2": {"3"},
    25  			"3": {"1"},
    26  		})
    27  
    28  		require.Error(t, err)
    29  	})
    30  
    31  	t.Run("multi", func(t *testing.T) {
    32  		deps, err := topologicalSort(map[string][]string{
    33  			"1": {"2", "3"},
    34  			"2": {"4"},
    35  			"3": {"5"},
    36  			"4": {},
    37  			"5": {},
    38  		})
    39  
    40  		require.NoError(t, err)
    41  		require.Equal(t, [][]string{{"4", "5"}, {"2", "3"}, {"1"}}, deps)
    42  	})
    43  
    44  	t.Run("most dependeded and zero depended jobs form level 0", func(t *testing.T) {
    45  		deps, err := topologicalSort(map[string][]string{
    46  			"1": {"2", "3"},
    47  			"2": {"4"},
    48  			"3": {"5"},
    49  			"4": {},
    50  			"5": {},
    51  			"6": {},
    52  		})
    53  
    54  		require.NoError(t, err)
    55  		require.Equal(t, [][]string{{"4", "5", "6"}, {"2", "3"}, {"1"}}, deps)
    56  	})
    57  }