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 }