content: module Main (
      main
   ) where
  
  import Test.Tasty                   ( DependencyType(..), TestTree
                                      , after, defaultMain, testGroup )
  import SingletonsBaseTestSuiteUtils ( compileAndDumpStdTest, compileAndDumpTest
                                      , testCompileAndDumpGroup, ghcOpts )
  
  main :: IO ()
  main = defaultMain tests
  
  tests :: TestTree
  tests =
      testGroup "Testsuite" $ [
      testCompileAndDumpGroup "Singletons"
      [ compileAndDumpStdTest "Nat"
      , compileAndDumpStdTest "Empty"
      , compileAndDumpStdTest "Maybe"
      , compileAndDumpStdTest "BoxUnBox"
      , afterSingletonsNat .
        compileAndDumpStdTest "Operators"
      , afterSingletonsNat .
        compileAndDumpStdTest "HigherOrder"
      , compileAndDumpStdTest "Contains"
      , afterSingletonsNat .
        compileAndDumpStdTest "AsPattern"
      , afterSingletonsNat .
        compileAndDumpStdTest "DataValues"
      , after AllSucceed "$3 == \"Empty\"" .
        after AllSucceed "$3 == \"Operators\"" .
        compileAndDumpStdTest "EqInstances"
      , compileAndDumpStdTest "CaseExpressions"
      , afterSingletonsNat .
        compileAndDumpStdTest "Star"
      , afterSingletonsNat .
        compileAndDumpStdTest "ReturnFunc"
      , compileAndDumpStdTest "Lambdas"
      , afterSingletonsNat .
        compileAndDumpStdTest "LambdasComprehensive"
      , compileAndDumpStdTest "Error"
      , compileAndDumpStdTest "TopLevelPatterns"
      , afterSingletonsNat .
        compileAndDumpStdTest "LetStatements"
      , compileAndDumpStdTest "LambdaCase"
      , afterSingletonsNat .
        compileAndDumpStdTest "Sections"
      , afterSingletonsNat .
        compileAndDumpStdTest "PatternMatching"
      , compileAndDumpStdTest "Records"
      , compileAndDumpStdTest "T29"
      , compileAndDumpStdTest "T33"
      , compileAndDumpStdTest "T54"
      , afterSingletonsNat .
        compileAndDumpStdTest "Classes"
      , afterSingletonsNat .
        after AllSucceed "$3 == \"Classes\"" .
        compileAndDumpStdTest "Classes2"
      , compileAndDumpStdTest "FunDeps"
      , compileAndDumpStdTest "T78"
      , compileAndDumpStdTest "T89"
      , compileAndDumpStdTest "OrdDeriving"
      , compileAndDumpStdTest "BoundedDeriving"
      , compileAndDumpStdTest "BadBoundedDeriving"
      , compileAndDumpStdTest "EnumDeriving"
      , compileAndDumpStdTest "BadEnumDeriving"
      , compileAndDumpStdTest "Fixity"
      , compileAndDumpStdTest "Undef"
      , compileAndDumpStdTest "T124"
      , compileAndDumpStdTest "T136"
      , compileAndDumpStdTest "T136b"
      , compileAndDumpStdTest "T153"
      , compileAndDumpStdTest "T157"
      , compileAndDumpStdTest "T159"
      , compileAndDumpStdTest "T167"
      , compileAndDumpStdTest "T145"
      , compileAndDumpStdTest "PolyKinds"
      , compileAndDumpStdTest "PolyKindsApp"
      , afterSingletonsNat .
        compileAndDumpStdTest "T150"
      , compileAndDumpStdTest "T160"
      , compileAndDumpStdTest "T163"
      , compileAndDumpStdTest "T166"
      , compileAndDumpStdTest "T172"
      , compileAndDumpStdTest "T175"
      , compileAndDumpStdTest "T176"
      , compileAndDumpStdTest "T178"
      , compileAndDumpStdTest "T183"
      , compileAndDumpStdTest "T184"
      , compileAndDumpStdTest "T187"
      , compileAndDumpStdTest "T190"
      , compileAndDumpStdTest "ShowDeriving"
      , compileAndDumpStdTest "EmptyShowDeriving"
      , compileAndDumpStdTest "StandaloneDeriving"
      , compileAndDumpStdTest "T197"
      , compileAndDumpStdTest "T197b"
      , compileAndDumpStdTest "T200"
      , compileAndDumpStdTest "T204"
      , compileAndDumpStdTest "T206"
      , compileAndDumpStdTest "T209"
      , compileAndDumpStdTest "T216"
      , compileAndDumpStdTest "T226"
      , compileAndDumpStdTest "T229"
      , compileAndDumpStdTest "T249"
      , compileAndDumpStdTest "OverloadedStrings"
      , compileAndDumpStdTest "T271"
      , compileAndDumpStdTest "T287"
      , compileAndDumpStdTest "TypeRepTYPE"
      , compileAndDumpStdTest "T296"
      , compileAndDumpStdTest "T297"
      , compileAndDumpStdTest "T312"
      , compileAndDumpStdTest "T313"
      , compileAndDumpStdTest "T316"
      , compileAndDumpStdTest "T322"
      , compileAndDumpStdTest "T326"
      , compileAndDumpStdTest "NatSymbolReflexive"
      , compileAndDumpStdTest "T323"
      , compileAndDumpStdTest "T332"
      , compileAndDumpStdTest "T342"
      , compileAndDumpStdTest "FunctorLikeDeriving"
      , compileAndDumpStdTest "T353"
      , compileAndDumpStdTest "T358"
      , compileAndDumpStdTest "T367"
      , compileAndDumpStdTest "T371"
      , compileAndDumpStdTest "T376"
      , compileAndDumpStdTest "T378a"
      , afterSingletonsNat .
        compileAndDumpStdTest "T378b"
      , compileAndDumpStdTest "T401"
      , compileAndDumpStdTest "T401b"
      , compileAndDumpStdTest "T402"
      , compileAndDumpStdTest "T410"
      , compileAndDumpStdTest "T412"
      , compileAndDumpStdTest "T414"
      , compileAndDumpStdTest "T433"
      , compileAndDumpStdTest "T443"
      , afterSingletonsNat .
        compileAndDumpStdTest "T445"
      , compileAndDumpStdTest "T450"
      , compileAndDumpStdTest "T453"
      , compileAndDumpStdTest "NegativeLiterals"
      , compileAndDumpStdTest "T470"
      , compileAndDumpStdTest "T480"
      , compileAndDumpStdTest "T487"
      , compileAndDumpStdTest "T489"
      , compileAndDumpStdTest "T492"
      , compileAndDumpStdTest "Natural"
      , compileAndDumpStdTest "T511"
      , compileAndDumpStdTest "T536"
      , compileAndDumpStdTest "T555"
      , compileAndDumpStdTest "T559"
      , compileAndDumpStdTest "T563"
      , compileAndDumpStdTest "T565"
      , compileAndDumpStdTest "T567"
      , compileAndDumpStdTest "T571"
      , compileAndDumpStdTest "T581"
      , compileAndDumpStdTest "T582"
      , compileAndDumpStdTest "T585"
      , compileAndDumpStdTest "TypeAbstractions"
      ],
      testCompileAndDumpGroup "Promote"
      [ compileAndDumpStdTest "Constructors"
      , compileAndDumpStdTest "GenDefunSymbols"
      , afterSingletonsNat .
        compileAndDumpStdTest "Newtypes"
      , compileAndDumpStdTest "Pragmas"
      , compileAndDumpStdTest "Prelude"
      , compileAndDumpStdTest "T180"
      , compileAndDumpStdTest "T361"
      , compileAndDumpStdTest "T601a"
      , compileAndDumpStdTest "T605"
      , compileAndDumpStdTest "T613"
      ],
      testGroup "Database client"
      [ compileAndDumpTest "GradingClient/Database" ghcOpts
      , after AllSucceed "$3 == \"Database\"" $
        compileAndDumpTest "GradingClient/Main"     ghcOpts
      ],
      testCompileAndDumpGroup "InsertionSort"
      [ compileAndDumpStdTest "InsertionSortImp"
      ]
    ]
  
  afterSingletonsNat :: TestTree -> TestTree
  afterSingletonsNat = after AllSucceed "$3 == \"Nat\""
  