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          ]