Added more tests to the GenerateCTest module (stop, and array-related tests)

This commit is contained in:
Neil Brown 2007-10-03 14:08:09 +00:00
parent 96ee8ae9bd
commit d985043d62

View File

@ -33,10 +33,20 @@ import CompState
import Errors import Errors
import GenerateC import GenerateC
import GenerateCPPCSP import GenerateCPPCSP
import Metadata
import Pattern import Pattern
import TestUtil import TestUtil
import TreeUtil import TreeUtil
at :: CGen ()
at = tell ["@"]
dollar :: CGen ()
dollar = tell ["$"]
foo :: A.Name
foo = simpleName "foo"
-- | Asserts that the given output of a CGen pass matches the expected value. -- | Asserts that the given output of a CGen pass matches the expected value.
assertGen :: String -> String -> IO (Either Errors.ErrorReport [String]) -> Assertion assertGen :: String -> String -> IO (Either Errors.ErrorReport [String]) -> Assertion
assertGen n exp act assertGen n exp act
@ -71,6 +81,13 @@ testBothS testName expC expCPP act startState = TestCase $
where where
state = execState startState emptyState state = execState startState emptyState
testBothFailS :: String -> (GenOps -> CGen ()) -> (State CompState ()) -> Test
testBothFailS testName act startState = TestCase $
do assertGenFail (testName ++ "/C") (evalStateT (runErrorT (execWriterT $ act cgenOps)) state)
assertGenFail (testName ++ "/C++") (evalStateT (runErrorT (execWriterT $ act cppgenOps)) state)
where
state = execState startState emptyState
-- Tests C output, expects C++ to fail -- Tests C output, expects C++ to fail
testCFS :: String -> String -> (GenOps -> CGen ()) -> (State CompState ()) -> Test testCFS :: String -> String -> (GenOps -> CGen ()) -> (State CompState ()) -> Test
testCFS testName expC act startState = TestCase $ testCFS testName expC act startState = TestCase $
@ -95,6 +112,9 @@ testBothSameS ::
-> Test -> Test
testBothSameS n e a s = testBothS n e e a s testBothSameS n e a s = testBothS n e e a s
testBothFail :: String -> (GenOps -> CGen ()) -> Test
testBothFail a b = testBothFailS a b (return ())
testBoth :: String -> String -> String -> (GenOps -> CGen ()) -> Test testBoth :: String -> String -> String -> (GenOps -> CGen ()) -> Test
testBoth a b c d = testBothS a b c d (return ()) testBoth a b c d = testBothS a b c d (return ())
@ -110,6 +130,18 @@ testCPPF a b c = testCPPFS a b c (return ())
tcall :: (GenOps -> GenOps -> a -> b) -> a -> (GenOps -> b) tcall :: (GenOps -> GenOps -> a -> b) -> a -> (GenOps -> b)
tcall f x = (\o -> f o o x) tcall f x = (\o -> f o o x)
tcall2 :: (GenOps -> GenOps -> a0 -> a1 -> b) -> a0 -> a1 -> (GenOps -> b)
tcall2 f x y = (\o -> f o o x y)
tcall3 :: (GenOps -> GenOps -> a0 -> a1 -> a2 -> b) -> a0 -> a1 -> a2 -> (GenOps -> b)
tcall3 f x y z = (\o -> f o o x y z)
-- | Overrides a specified function in GenOps to return the given value
override1 ::
b -- ^ The value to return for the overridden function
-> (GenOps -> a -> b) -- ^ The resulting overriden function
override1 val = (\_ _ -> val)
testGenType :: Test testGenType :: Test
testGenType = TestList testGenType = TestList
[ [
@ -148,11 +180,28 @@ testGenType = TestList
,testCPPF "GenType 600" "protocol_foo" (tcall genType $ A.UserProtocol (simpleName "foo")) ,testCPPF "GenType 600" "protocol_foo" (tcall genType $ A.UserProtocol (simpleName "foo"))
] ]
testStop :: Test
testStop =
testBoth "Stop" "occam_stop(\"foo:4:9\",\"bar\");" "throw StopException(\"foo:4:9\" \"bar\");" (tcall2 genStop (Meta (Just "foo") 4 9) "bar")
testArraySizes :: Test
testArraySizes = TestList
[
testBothSame "genArraySizesLiteral 0" "3" (tcall genArraySizesLiteral [A.Dimension 3])
,testBothSame "genArraySizesLiteral 1" "3,6,8" (tcall genArraySizesLiteral [A.Dimension 3, A.Dimension 6, A.Dimension 8])
,testBothFail "genArraySizesLiteral 2" (tcall genArraySizesLiteral [A.Dimension 6, A.UnknownDimension])
,testBothSame "genArraySizesSize 0" "[1]" (tcall genArraySizesSize [A.Dimension 7])
,testBothSame "genArraySize 0" "const int*foo_sizes=@;" (tcall3 genArraySize True at foo)
,testBothSame "genArraySize 1" "const int foo_sizes[]={@};" (tcall3 genArraySize False at foo)
]
---Returns the list of tests: ---Returns the list of tests:
tests :: Test tests :: Test
tests = TestList tests = TestList
[ [
testGenType testGenType
,testStop
,testArraySizes
] ]