diff --git a/backends/GenerateCTest.hs b/backends/GenerateCTest.hs
index d43a0cb..b5a83cd 100644
--- a/backends/GenerateCTest.hs
+++ b/backends/GenerateCTest.hs
@@ -19,7 +19,7 @@ with this program. If not, see .
-- #ignore-exports
-- | Tests for the C and C++ backends
-module GenerateCTest where
+module GenerateCTest (tests) where
import Control.Monad.Error
import Control.Monad.State
@@ -57,7 +57,7 @@ assertGenFail n act
else assertFailure $ n ++ " pass succeeded when expected to fail, output: " ++ (subRegex (mkRegex "/\\*\\*/") (concat ss) "")
-testBoth ::
+testBothS ::
String -- ^ Test Name
-> String -- ^ C expected
-> String -- ^ C++ expected
@@ -65,35 +65,47 @@ testBoth ::
-> (State CompState ()) -- ^ State transformation
-> Test
-testBoth testName expC expCPP act startState = TestCase $
+testBothS testName expC expCPP act startState = TestCase $
do assertGen (testName ++ "/C") expC $ (evalStateT (runErrorT (execWriterT $ act cgenOps)) state)
assertGen (testName ++ "/C++") expCPP $ (evalStateT (runErrorT (execWriterT $ act cppgenOps)) state)
where
state = execState startState emptyState
-- Tests C output, expects C++ to fail
-testCF :: String -> String -> (GenOps -> CGen ()) -> (State CompState ()) -> Test
-testCF testName expC act startState = TestCase $
+testCFS :: String -> String -> (GenOps -> CGen ()) -> (State CompState ()) -> Test
+testCFS testName expC act startState = TestCase $
do assertGen (testName ++ "/C") expC $ (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
-testCPPF :: String -> String -> (GenOps -> CGen ()) -> (State CompState ()) -> Test
-testCPPF testName expCPP act startState = TestCase $
+testCPPFS :: String -> String -> (GenOps -> CGen ()) -> (State CompState ()) -> Test
+testCPPFS testName expCPP act startState = TestCase $
do assertGenFail (testName ++ "/C") (evalStateT (runErrorT (execWriterT $ act cgenOps)) state)
assertGen (testName ++ "/C++") expCPP $ (evalStateT (runErrorT (execWriterT $ act cppgenOps)) state)
where
state = execState startState emptyState
-testBothSame ::
+testBothSameS ::
String -- ^ Test Name
-> String -- ^ C and C++ expected
-> (GenOps -> CGen ()) -- ^ Actual
-> (State CompState ()) -- ^ State transformation
-> Test
-testBothSame n e a s = testBoth n e e a s
+testBothSameS n e a s = testBothS n e e a s
+
+testBoth :: String -> String -> String -> (GenOps -> CGen ()) -> Test
+testBoth a b c d = testBothS a b c d (return ())
+
+testBothSame :: String -> String -> (GenOps -> CGen ()) -> Test
+testBothSame a b c = testBothSameS a b c (return ())
+
+testCF :: String -> String -> (GenOps -> CGen ()) -> Test
+testCF a b c = testCFS a b c (return ())
+
+testCPPF :: String -> String -> (GenOps -> CGen ()) -> Test
+testCPPF a b c = testCPPFS a b c (return ())
tcall :: (GenOps -> GenOps -> a -> b) -> a -> (GenOps -> b)
tcall f x = (\o -> f o o x)
@@ -101,39 +113,39 @@ tcall f x = (\o -> f o o x)
testGenType :: Test
testGenType = TestList
[
- testBothSame "GenType 0" "uint8_t" (tcall genType A.Byte) (return ())
- ,testBothSame "GenType 1" "uint16_t" (tcall genType A.UInt16) (return ())
- ,testBothSame "GenType 2" "uint32_t" (tcall genType A.UInt32) (return ())
- ,testBothSame "GenType 3" "uint64_t" (tcall genType A.UInt64) (return ())
- ,testBothSame "GenType 4" "int8_t" (tcall genType A.Int8) (return ())
- ,testBothSame "GenType 5" "int16_t" (tcall genType A.Int16) (return ())
- ,testBothSame "GenType 6" "int32_t" (tcall genType A.Int32) (return ())
- ,testBothSame "GenType 7" "int64_t" (tcall genType A.Int64) (return ())
- ,testBothSame "GenType 8" "int" (tcall genType A.Int) (return ())
- ,testBoth "GenType 9" "bool" "tockBool" (tcall genType A.Bool) (return ())
- ,testBothSame "GenType 10" "float" (tcall genType A.Real32) (return ())
- ,testBothSame "GenType 11" "double" (tcall genType A.Real64) (return ())
- ,testBoth "GenType 100" "int*" "tockArrayView" (tcall genType $ A.Array [A.Dimension 5] A.Int) (return ())
- ,testBoth "GenType 101" "int*" "tockArrayView" (tcall genType $ A.Array [A.Dimension 5, A.Dimension 2, A.Dimension 9] A.Int) (return ())
- ,testBoth "GenType 102" "int*" "tockArrayView" (tcall genType $ A.Array [A.Dimension 5, A.UnknownDimension] A.Int) (return ())
- ,testBothSame "GenType 103" "foo" (tcall genType $ A.Record (simpleName "foo")) (return ())
- ,testBoth "GenType 200" "Time" "csp::Time" (tcall genType A.Time) (return ())
- ,testBoth "GenType 201" "Time" "csp::Time" (tcall genType A.Timer) (return ())
+ testBothSame "GenType 0" "uint8_t" (tcall genType A.Byte)
+ ,testBothSame "GenType 1" "uint16_t" (tcall genType A.UInt16)
+ ,testBothSame "GenType 2" "uint32_t" (tcall genType A.UInt32)
+ ,testBothSame "GenType 3" "uint64_t" (tcall genType A.UInt64)
+ ,testBothSame "GenType 4" "int8_t" (tcall genType A.Int8)
+ ,testBothSame "GenType 5" "int16_t" (tcall genType A.Int16)
+ ,testBothSame "GenType 6" "int32_t" (tcall genType A.Int32)
+ ,testBothSame "GenType 7" "int64_t" (tcall genType A.Int64)
+ ,testBothSame "GenType 8" "int" (tcall genType A.Int)
+ ,testBoth "GenType 9" "bool" "tockBool" (tcall genType A.Bool)
+ ,testBothSame "GenType 10" "float" (tcall genType A.Real32)
+ ,testBothSame "GenType 11" "double" (tcall genType A.Real64)
+ ,testBoth "GenType 100" "int*" "tockArrayView" (tcall genType $ A.Array [A.Dimension 5] A.Int)
+ ,testBoth "GenType 101" "int*" "tockArrayView" (tcall genType $ A.Array [A.Dimension 5, A.Dimension 2, A.Dimension 9] A.Int)
+ ,testBoth "GenType 102" "int*" "tockArrayView" (tcall genType $ A.Array [A.Dimension 5, A.UnknownDimension] A.Int)
+ ,testBothSame "GenType 103" "foo" (tcall genType $ A.Record (simpleName "foo"))
+ ,testBoth "GenType 200" "Time" "csp::Time" (tcall genType A.Time)
+ ,testBoth "GenType 201" "Time" "csp::Time" (tcall genType A.Timer)
- ,testBoth "GenType 300" "Channel*" "csp::One2OneChannel*" (tcall genType $ A.Chan A.DirUnknown (A.ChanAttributes False False) A.Int) (return ())
- ,testBoth "GenType 301" "Channel*" "csp::One2AnyChannel*" (tcall genType $ A.Chan A.DirUnknown (A.ChanAttributes False True) A.Int) (return ())
- ,testBoth "GenType 302" "Channel*" "csp::Any2OneChannel*" (tcall genType $ A.Chan A.DirUnknown (A.ChanAttributes True False) A.Int) (return ())
- ,testBoth "GenType 303" "Channel*" "csp::Any2AnyChannel*" (tcall genType $ A.Chan A.DirUnknown (A.ChanAttributes True True) A.Int) (return ())
+ ,testBoth "GenType 300" "Channel*" "csp::One2OneChannel*" (tcall genType $ A.Chan A.DirUnknown (A.ChanAttributes False False) A.Int)
+ ,testBoth "GenType 301" "Channel*" "csp::One2AnyChannel*" (tcall genType $ A.Chan A.DirUnknown (A.ChanAttributes False True) A.Int)
+ ,testBoth "GenType 302" "Channel*" "csp::Any2OneChannel*" (tcall genType $ A.Chan A.DirUnknown (A.ChanAttributes True False) A.Int)
+ ,testBoth "GenType 303" "Channel*" "csp::Any2AnyChannel*" (tcall genType $ A.Chan A.DirUnknown (A.ChanAttributes True True) A.Int)
- ,testBoth "GenType 400" "Channel*" "csp::Chanin" (tcall genType $ A.Chan A.DirInput (A.ChanAttributes False False) A.Int) (return ())
- ,testBoth "GenType 401" "Channel*" "csp::Chanin" (tcall genType $ A.Chan A.DirInput (A.ChanAttributes False True) A.Int) (return ())
+ ,testBoth "GenType 400" "Channel*" "csp::Chanin" (tcall genType $ A.Chan A.DirInput (A.ChanAttributes False False) A.Int)
+ ,testBoth "GenType 401" "Channel*" "csp::Chanin" (tcall genType $ A.Chan A.DirInput (A.ChanAttributes False True) A.Int)
- ,testBoth "GenType 402" "Channel*" "csp::Chanout" (tcall genType $ A.Chan A.DirOutput (A.ChanAttributes False False) A.Int) (return ())
- ,testBoth "GenType 403" "Channel*" "csp::Chanout" (tcall genType $ A.Chan A.DirOutput (A.ChanAttributes True False) A.Int) (return ())
+ ,testBoth "GenType 402" "Channel*" "csp::Chanout" (tcall genType $ A.Chan A.DirOutput (A.ChanAttributes False False) A.Int)
+ ,testBoth "GenType 403" "Channel*" "csp::Chanout" (tcall genType $ A.Chan A.DirOutput (A.ChanAttributes True False) A.Int)
--ANY and protocols can occur outside channels in C++ (e.g. temporaries for reading from channels), so they are tested here:
- ,testCPPF "GenType 500" "tockAny" (tcall genType $ A.Any) (return ())
- ,testCPPF "GenType 600" "protocol_foo" (tcall genType $ A.UserProtocol (simpleName "foo")) (return ())
+ ,testCPPF "GenType 500" "tockAny" (tcall genType $ A.Any)
+ ,testCPPF "GenType 600" "protocol_foo" (tcall genType $ A.UserProtocol (simpleName "foo"))
]
---Returns the list of tests: