github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/web/elm/tests/TopologicalSortTests.elm (about) 1 module TopologicalSortTests exposing (all) 2 3 import Dashboard.DashboardPreview exposing (groupByRank) 4 import Expect 5 import Test exposing (..) 6 7 8 all : Test 9 all = 10 describe "DashboardPreview.groupByRank" 11 [ test "empty case" <| 12 \_ -> 13 [] 14 |> groupByRank 15 |> Expect.equal [] 16 , test "singleton" <| 17 \_ -> 18 [ { name = "a", inputs = [] } ] 19 |> groupByRank 20 |> Expect.equal [ [ { name = "a", inputs = [] } ] ] 21 , test "looping singleton" <| 22 \_ -> 23 [ { name = "a", inputs = [ { passed = [ "a" ] } ] } ] 24 |> groupByRank 25 |> Expect.equal [ [ { name = "a", inputs = [ { passed = [ "a" ] } ] } ] ] 26 , test "very simple DAG" <| 27 \_ -> 28 [ { name = "c", inputs = [ { passed = [ "b" ] } ] } 29 , { name = "b", inputs = [ { passed = [ "a" ] } ] } 30 , { name = "a", inputs = [ { passed = [] } ] } 31 ] 32 |> groupByRank 33 |> Expect.equal 34 [ [ { name = "a", inputs = [ { passed = [] } ] } ] 35 , [ { name = "b", inputs = [ { passed = [ "a" ] } ] } ] 36 , [ { name = "c", inputs = [ { passed = [ "b" ] } ] } ] 37 ] 38 , test "simple DAG" <| 39 \_ -> 40 [ { name = "a", inputs = [ { passed = [ "b", "c" ] } ] } 41 , { name = "b", inputs = [ { passed = [ "c" ] } ] } 42 , { name = "c", inputs = [ { passed = [ "d" ] } ] } 43 , { name = "d", inputs = [ { passed = [ "e", "f" ] } ] } 44 , { name = "e", inputs = [ { passed = [] } ] } 45 , { name = "f", inputs = [ { passed = [] } ] } 46 ] 47 |> groupByRank 48 |> Expect.equal 49 [ [ { name = "e", inputs = [ { passed = [] } ] } 50 , { name = "f", inputs = [ { passed = [] } ] } 51 ] 52 , [ { name = "d", inputs = [ { passed = [ "e", "f" ] } ] } ] 53 , [ { name = "c", inputs = [ { passed = [ "d" ] } ] } ] 54 , [ { name = "b", inputs = [ { passed = [ "c" ] } ] } ] 55 , [ { name = "a", inputs = [ { passed = [ "b", "c" ] } ] } ] 56 ] 57 , test "very flat DAG" <| 58 \_ -> 59 [ { name = "a", inputs = [ { passed = [ "b", "c", "d", "e" ] } ] } 60 , { name = "b", inputs = [ { passed = [ "f" ] } ] } 61 , { name = "c", inputs = [ { passed = [ "f" ] } ] } 62 , { name = "d", inputs = [ { passed = [ "e", "f" ] } ] } 63 , { name = "e", inputs = [ { passed = [] } ] } 64 , { name = "f", inputs = [ { passed = [] } ] } 65 ] 66 |> groupByRank 67 |> Expect.equal 68 [ [ { name = "e", inputs = [ { passed = [] } ] } 69 , { name = "f", inputs = [ { passed = [] } ] } 70 ] 71 , [ { name = "b", inputs = [ { passed = [ "f" ] } ] } 72 , { name = "c", inputs = [ { passed = [ "f" ] } ] } 73 , { name = "d", inputs = [ { passed = [ "e", "f" ] } ] } 74 ] 75 , [ { name = "a", inputs = [ { passed = [ "b", "c", "d", "e" ] } ] } ] 76 ] 77 , test "two cycles and a bridge" <| 78 \_ -> 79 [ { name = "a", inputs = [ { passed = [ "b" ] } ] } 80 , { name = "b", inputs = [ { passed = [ "a" ] } ] } 81 , { name = "c", inputs = [ { passed = [ "b", "d" ] } ] } 82 , { name = "d", inputs = [ { passed = [ "c" ] } ] } 83 ] 84 |> groupByRank 85 |> Expect.equal 86 [ [ { name = "a", inputs = [ { passed = [ "b" ] } ] } ] 87 , [ { name = "b", inputs = [ { passed = [ "a" ] } ] } ] 88 , [ { name = "c", inputs = [ { passed = [ "b", "d" ] } ] } ] 89 , [ { name = "d", inputs = [ { passed = [ "c" ] } ] } ] 90 ] 91 , test "multi-looped cyclic graph" <| 92 \_ -> 93 [ { name = "a", inputs = [ { passed = [ "a", "b" ] } ] } 94 , { name = "b", inputs = [ { passed = [ "a", "c" ] } ] } 95 , { name = "c", inputs = [ { passed = [ "a", "b", "d" ] } ] } 96 , { name = "d", inputs = [ { passed = [] } ] } 97 ] 98 |> groupByRank 99 |> Expect.equal 100 [ [ { name = "a", inputs = [ { passed = [ "a", "b" ] } ] } 101 , { name = "d", inputs = [ { passed = [] } ] } 102 ] 103 , [ { name = "b", inputs = [ { passed = [ "a", "c" ] } ] } ] 104 , [ { name = "c", inputs = [ { passed = [ "a", "b", "d" ] } ] } ] 105 ] 106 , test "large cyclic graph" <| 107 \_ -> 108 [ { name = "a", inputs = [ { passed = [ "b" ] } ] } 109 , { name = "b", inputs = [ { passed = [ "c" ] } ] } 110 , { name = "c", inputs = [ { passed = [ "a" ] } ] } 111 , { name = "d", inputs = [ { passed = [ "b", "c", "e" ] } ] } 112 , { name = "e", inputs = [ { passed = [ "d", "f" ] } ] } 113 , { name = "f", inputs = [ { passed = [ "c", "g" ] } ] } 114 , { name = "g", inputs = [ { passed = [ "f" ] } ] } 115 , { name = "h", inputs = [ { passed = [ "e", "g", "h" ] } ] } 116 ] 117 |> groupByRank 118 |> Expect.equal 119 [ [ { name = "a", inputs = [ { passed = [ "b" ] } ] } ] 120 , [ { name = "c", inputs = [ { passed = [ "a" ] } ] } ] 121 , [ { name = "b", inputs = [ { passed = [ "c" ] } ] } 122 , { name = "f", inputs = [ { passed = [ "c", "g" ] } ] } 123 ] 124 , [ { name = "d", inputs = [ { passed = [ "b", "c", "e" ] } ] } 125 , { name = "g", inputs = [ { passed = [ "f" ] } ] } 126 ] 127 , [ { name = "e", inputs = [ { passed = [ "d", "f" ] } ] } ] 128 , [ { name = "h", inputs = [ { passed = [ "e", "g", "h" ] } ] } ] 129 ] 130 ]