tasty-sugar-1.3.0.0: test/TestGCD.hs
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE ScopedTypeVariables #-}
module TestGCD ( gcdSampleTests ) where
import qualified Data.Text as T
import System.FilePath ( (</>) )
import qualified Test.Tasty as TT
import Test.Tasty.HUnit
import Test.Tasty.Sugar
import TestUtils
import Text.RawString.QQ
testInpPath = "test-data/samples"
testParams = [ ("solver", Just ["z3", "yices", "boolector", "cvc4"])
, ("loop-merging", Just ["loopmerge", "loop"])
]
sugarCube = mkCUBE
{ rootName = "*.c"
, expectedSuffix = "good"
, inputDirs = [ testInpPath ]
, associatedNames = [ ("config", "config")
, ("stdio", "print")
, ("haskell", "hs")
]
, validParams = testParams
}
gcdSampleTests :: [TT.TestTree]
gcdSampleTests =
let (sugar,sdesc) = findSugarIn sugarCube gcdSamples
in [ testCase "valid sample" $ 19 @=? length gcdSamples
, sugarTestEq "correct found count" sugarCube gcdSamples 1 length
, testCase "sweets rendering" $
let actual = sweetsTextTable [sugarCube] sugar
in do putStrLn "Table" -- try to start table on its own line
putStrLn $ T.unpack actual
T.length actual > 0 @? "change this to see the table"
, testCaseSteps "sweets info" $ \step -> do
step "rootMatchName"
(rootMatchName <$> sugar) @?= ["gcd-test.c"]
step "rootBaseName"
(rootBaseName <$> sugar) @?= ["gcd-test"]
step "rootFile"
(rootFile <$> sugar) @?= [ testInpPath </> "gcd-test.c" ]
step "cubeParams"
(cubeParams <$> sugar) @?= [ validParams sugarCube ]
, testCase "Expectations" $ compareBags "expected" (expected $ head sugar) $
let p = (testInpPath </>) in
[
Expectation
{ expectedFile = p "gcd-test.boolector.good"
, expParamsMatch = [ ("solver", Explicit "boolector")
, ("loop-merging", Assumed "loopmerge")
]
, associated = [ ("config", p "gcd-test.loopmerge.config")
, ("stdio", p "gcd-test.boolector.print")
]
}
, Expectation
{ expectedFile = p "gcd-test.boolector.good"
, expParamsMatch = [ ("solver", Explicit "boolector")
, ("loop-merging", Assumed "loop")
]
, associated = [ ("config", p "gcd-test.config")
, ("stdio", p "gcd-test.boolector.print")
]
}
, Expectation
{ expectedFile = p "gcd-test.good"
, expParamsMatch = [ ("solver", Assumed "cvc4")
, ("loop-merging", Assumed "loopmerge")
]
, associated = [ ("config", p "gcd-test.loopmerge.config")
, ("stdio", p "gcd-test.print")
]
}
, Expectation
{ expectedFile = p "gcd-test.good"
, expParamsMatch = [ ("solver", Assumed "cvc4")
, ("loop-merging", Assumed "loop")
]
, associated = [ ("config", p "gcd-test.config")
, ("stdio", p "gcd-test.print")
]
}
, Expectation
{ expectedFile = p "gcd-test.good"
, expParamsMatch = [ ("solver", Assumed "yices")
, ("loop-merging", Assumed "loopmerge")
]
, associated = [ ("config", p "gcd-test.loopmerge.config")
, ("stdio", p "gcd-test.print")
]
}
, Expectation
{ expectedFile = p "gcd-test.good"
, expParamsMatch = [ ("solver", Assumed "yices")
, ("loop-merging", Assumed "loop")
]
, associated = [ ("config", p "gcd-test.config")
, ("stdio", p "gcd-test.print")
]
}
, Expectation
{ expectedFile = p "gcd-test.good"
, expParamsMatch = [ ("solver", Assumed "z3")
, ("loop-merging", Assumed "loopmerge")
]
, associated = [ ("config", p "gcd-test.loopmerge.config")
, ("stdio", p "gcd-test.print")
]
}
, Expectation
{ expectedFile = p "gcd-test.good"
, expParamsMatch = [ ("solver", Assumed "z3")
, ("loop-merging", Assumed "loop")
]
, associated = [ ("config", p "gcd-test.config")
, ("stdio", p "gcd-test.print")
]
}
]
]
gcdSamples = fmap (\f -> CandidateFile { candidateDir = testInpPath
, candidateSubdirs = []
, candidateFile = f })
$ filter (not . null)
$ lines [r|
gcd-test.boolector.boolector.out
gcd-test.boolector.boolector.print.out
gcd-test.boolector.good
gcd-test.boolector.print
gcd-test.c
gcd-test.config
gcd-test.cvc4.out
gcd-test.cvc4.print.out
gcd-test.good
gcd-test.loopmerge.config
gcd-test.print
gcd-test.stp.good
gcd-test.stp.print
gcd-test.stp.stp.out
gcd-test.stp.stp.print.out
gcd-test.yices.out
gcd-test.yices.print.out
gcd-test.z3.out
gcd-test.z3.print.out
|]