tock-mirror/RainPassTest.hs

65 lines
2.2 KiB
Haskell

module RainPassTest (tests) where
import Test.HUnit hiding (State)
import Control.Monad.State as CSM
import qualified Data.Map as Map
import qualified AST as A
import TestUtil
import TreeUtil
import RainPasses
import CompState
import Control.Monad.Error (runErrorT)
import Control.Monad.Identity
import Types
testEachPass0 :: Assertion
testEachPass0 = do origResult <- (evalStateT (runErrorT (transformEach orig)) startState)
case origResult of
Left err -> assertFailure ("testEachPass0; pass failed with: " ++ err)
Right origTrans -> assertPatternMatch "testEachPass0" exp origTrans
where
startState :: CompState
startState = execState startState' emptyState
startState' :: State CompState ()
startState' = do defineName (simpleName "c") A.NameDef {A.ndType = A.Declaration m A.Byte}
orig = A.Seq m
(A.Rep m
(A.ForEach m (simpleName "c") (makeLiteralString "1"))
(A.OnlyP m (makeAssign (variable "c") (intLiteral 7)))
)
exp = tag2 A.Seq DontCare
(tag3 A.Spec DontCare
(tag3 A.Specification DontCare listVarName
(tag4 A.IsExpr DontCare A.ValAbbrev (A.Array [A.Dimension 1] A.Byte) (makeLiteralString "1"))
)
(tag3 A.Rep DontCare
(tag4 A.For DontCare indexVar (intLiteral 0) (tag2 A.SizeVariable DontCare listVar))
(tag3 A.Spec DontCare
(tag3 A.Specification DontCare (simpleName "c")
(tag4 A.Is DontCare A.Abbrev A.Byte
(tag3 A.SubscriptedVariable DontCare
(tag2 A.Subscript DontCare (tag2 A.ExprVariable DontCare (tag2 A.Variable DontCare indexVar)))
listVar
)
)
)
(A.OnlyP m (makeAssign (variable "c") (intLiteral 7)))
)
)
)
indexVar = Named "indexVar" DontCare
listVarName = Named "listVarName" DontCare
listVar = tag2 A.Variable DontCare listVarName
--Returns the list of tests:
tests :: Test
tests = TestList
[
TestCase $ testEachPass0
]