packages feed

language-sygus-0.1.0.0: tests/Test.hs

module Main where

import Sygus.LexSygus
import Sygus.ParseSygus
import Sygus.Print

import Control.DeepSeq
import Data.Text (unpack)
import Test.Tasty
import Test.Tasty.HUnit

main :: IO ()
main = do
  pt <- parseTests
  pr <- parseAndPrintsTests
  defaultMain $ testGroup "all" [ pt, pr ]

parseTests :: IO TestTree
parseTests = return . testGroup "Tests" =<< mapM checkParses files

parseAndPrintsTests :: IO TestTree
parseAndPrintsTests =
    return . testGroup "Tests" =<< mapM checkParsesAndPrints files

files :: [FilePath]
files =
    [ "tests/sygus/example1.sl"
    , "tests/sygus/example2.sl"
    , "tests/sygus/example3.sl"
    , "tests/sygus/example4.sl"
    , "tests/sygus/example5.sl"
    , "tests/sygus/example6.sl" ]

checkParses :: FilePath -> IO TestTree
checkParses fp = do
    s <- readFile fp
    let p = parse . lexSygus $ s

    return $ testCase fp
              $ assertBool fp
                (show p `deepseq` True)

checkParsesAndPrints :: FilePath -> IO TestTree
checkParsesAndPrints fp = do
    s <- readFile fp
    let p1 = parse . lexSygus $ s
        p2 = parse . lexSygus . unpack . printSygus $ p1

    return $ testCase fp
              $ assertBool fp
                (p1 == p2)