packages feed

tasty-sugar-1.1.0.0: test/TestStrlen2.hs

{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE ScopedTypeVariables #-}

module TestStrlen2 ( strlen2SampleTests ) where

import           Data.List
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"
              , inputDir = testInpPath
              , associatedNames = [ ("config", "config")
                                  , ("stdio", "print")
                                  ]
              , validParams = testParams
              }

strlen2SampleTests :: [TT.TestTree]
strlen2SampleTests =
  let (sugar,sdesc) = findSugarIn sugarCube strlen2Samples
  in [ testCase "valid sample" $ 25 @=? length strlen2Samples
     , sugarTestEq "correct found count" sugarCube strlen2Samples 1 length

     , testCaseSteps "sweets info" $ \step -> do
         step "rootMatchName"
         (rootMatchName <$> sugar) @?= ["strlen_test2.c"]
         step "rootBaseName"
         (rootBaseName <$> sugar) @?= ["strlen_test2"]
         step "rootFile"
         (rootFile <$> sugar) @?= [ testInpPath </> "strlen_test2.c" ]
         step "cubeParams"
         (cubeParams <$> sugar) @?= [ validParams sugarCube ]

     , testCase "Expectations" $ compareBags "expected" (expected $ head sugar) $
       let p = (testInpPath </>) in
         [
           Expectation
           { expectedFile = p "strlen_test2.boolector.loopmerge.good"
           , expParamsMatch = [ ("solver", Explicit "boolector")
                              , ("loop-merging", Explicit "loopmerge")
                              ]
           , associated = [ ("config", p "strlen_test2.loopmerge.config")
                          , ("stdio", p "strlen_test2.print")
                          ]
           }
         , Expectation
           { expectedFile = p "strlen_test2.boolector.good"
           , expParamsMatch = [ ("solver", Explicit "boolector")
                              , ("loop-merging", Assumed "loop")
                              ]
           , associated = [ ("stdio", p "strlen_test2.print")
                          ]
           }

         , Expectation
           { expectedFile = p "strlen_test2.loopmerge.cvc4.good"
           , expParamsMatch = [ ("solver", Explicit "cvc4")
                              , ("loop-merging", Explicit "loopmerge")
                              ]
           , associated = [ ("config", p "strlen_test2.loopmerge.config")
                          , ("stdio", p "strlen_test2.print")
                          ]
           }
         , Expectation
           { expectedFile = p "strlen_test2.cvc4.loop.good"
           , expParamsMatch = [ ("solver", Explicit "cvc4")
                              , ("loop-merging", Explicit "loop")
                              ]
           , associated = [ ("stdio", p "strlen_test2.print")
                          ]
           }

         , Expectation
           { expectedFile = p "strlen_test2.loopmerge.good"
           , expParamsMatch = [ ("loop-merging", Explicit "loopmerge")
                              , ("solver", Assumed "yices")
                              ]
           , associated = [ ("config", p "strlen_test2.loopmerge.config")
                          , ("stdio", p "strlen_test2.print")
                          ]
           }
         , Expectation
           { expectedFile = p "strlen_test2.good"
           , expParamsMatch = [ ("loop-merging", Assumed "loop")
                              , ("solver", Assumed "yices")
                              ]
           , associated = [ ("stdio", p "strlen_test2.print")
                          ]
           }

         , Expectation
           { expectedFile = p "strlen_test2.z3.good"
           , expParamsMatch = [ ("solver", Explicit "z3")
                              , ("loop-merging", Assumed "loopmerge")
                              ]
           , associated = [ ("config", p "strlen_test2.loopmerge.config")
                          , ("stdio", p "strlen_test2.print")
                          ]
           }
         , Expectation
           { expectedFile = p "strlen_test2.z3.good"
           , expParamsMatch = [ ("solver", Explicit "z3")
                              , ("loop-merging", Assumed "loop")
                              ]
           , associated = [ ("stdio", p "strlen_test2.print")
                          ]
           }
         , Expectation
           { expectedFile = p "strlen_test2.loopmerge.good"
           , expParamsMatch = [ ("loop-merging", Explicit "loopmerge")
                              , ("solver", Assumed "z3")
                              ]
           , associated = [ ("config", p "strlen_test2.loopmerge.config")
                          , ("stdio", p "strlen_test2.print")
                          ]
           }
         ]
     ]

-- Note that there exists strlen_test2.z3.good and
-- strlen_test2.loopmerge.good, so this will create Expectations
-- against _each_ file with different sets of Assumed and Explicit
-- parameters.

strlen2Samples = lines [r|
strlen_test2.boolector.boolector.out
strlen_test2.boolector.boolector.print.out
strlen_test2.boolector.good
strlen_test2.boolector.loopmerge.good
strlen_test2.c
strlen_test2.cvc4.cvc4.out
strlen_test2.cvc4.cvc4.print.out
strlen_test2.cvc4.loop.good
strlen_test2.loopmerge.cvc4.good
strlen_test2.good
strlen_test2.loopmerge.config
strlen_test2.loopmerge.good
strlen_test2.loopmerge.stp.out
strlen_test2.loopmerge.stp.print.out
strlen_test2.loopmerge.yices.out
strlen_test2.loopmerge.yices.print.out
strlen_test2.print
strlen_test2.stp.out
strlen_test2.stp.print.out
strlen_test2.yices.out
strlen_test2.yices.print.out
strlen_test2.z3.good
strlen_test2.z3.z3.out
strlen_test2.z3.z3.print.out
|]