module Main where
import Text.ANTLR.Allstar.ATN
import Text.ANTLR.Allstar.Example.ATN
import Text.ANTLR.Set (fromList, (\\))

import System.IO.Unsafe (unsafePerformIO)           
import Data.Monoid                                  
import Test.Framework                               
import Test.Framework.Providers.HUnit               
import Test.Framework.Providers.QuickCheck2         
import Test.HUnit                                   
import Test.QuickCheck (Property, quickCheck, (==>))
import qualified Test.QuickCheck.Monadic as TQM     

-- ATNs should be same:
test_paperATNGrammar =
  atnOf paperATNGrammar
  @?=
  exp_paperATN

-- Set difference to make debugging easier:
test_paperATNGrammar2 =
  ((_Δ . atnOf) paperATNGrammar \\ _Δ exp_paperATN)
  @?=
  fromList []

test_addPredicates =
  atnOf addPredicates
  @?=
  exp_addPredicates

test_addPredicates2 =
  ((_Δ . atnOf) addPredicates \\ _Δ exp_addPredicates)
  @?=
  fromList []

test_addMutators =
  atnOf addMutators
  @?=
  exp_addMutators

main :: IO ()
main = defaultMainWithOpts
  [ testCase "paper_ATN_Grammar"  test_paperATNGrammar
  , testCase "paper_ATN_Grammar2" test_paperATNGrammar2
  , testCase "paper_ATN_Predicates2" test_addPredicates2
  , testCase "paper_ATN_Predicates" test_addPredicates
  , testCase "paper_ATN_Mutators" test_addMutators
  ] mempty