packages feed

language-sygus-0.1.1.2: tests/Test.hs

{-# 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)")