{-# LANGUAGE OverloadedStrings #-} 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, printTests ] parseTests :: IO TestTree parseTests = return . testGroup "Parse" =<< mapM checkParses files parseAndPrintsTests :: IO TestTree parseAndPrintsTests = return . testGroup "Parse and print" =<< mapM checkParsesAndPrints files printTests :: TestTree printTests = testGroup "Print" [printTest1] 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" , "tests/sygus/example7.sl" , "tests/sygus/example8.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) printTest1 :: TestTree printTest1 = testCase "Negative Number" $ assertBool "Negative Number" (printSygus (LitNum (-1)) == "(- 1)")