Added a test for declareInit and declareFree, to test the C and C++ backends

This commit is contained in:
Neil Brown 2007-10-04 00:24:32 +00:00
parent 93610a5837
commit 7ef16c3b6c
2 changed files with 41 additions and 3 deletions

View File

@ -1224,10 +1224,10 @@ cgenArraySizesLiteral ops ds
-- | Initialise an item being declared.
cdeclareInit :: GenOps -> Meta -> A.Type -> A.Variable -> Maybe (CGen ())
cdeclareInit ops _ (A.Chan {}) var
= Just $ do tell ["ChanInit ("]
cdeclareInit ops _ (A.Chan A.DirUnknown _ _) var
= Just $ do tell ["ChanInit("]
call genVariable ops var
tell [");\n"]
tell [");"]
cdeclareInit ops m t@(A.Array ds t') var
= Just $ do init <- case t' of
A.Chan {} ->

View File

@ -45,6 +45,9 @@ at = tell ["@"]
dollar :: CGen ()
dollar = tell ["$"]
caret :: CGen ()
caret = tell ["^"]
foo :: A.Name
foo = simpleName "foo"
@ -166,6 +169,12 @@ override1 ::
-> (GenOps -> a -> b) -- ^ The resulting overriden function
override1 val = (\_ _ -> val)
override2 :: b -> (GenOps -> a0 -> a1 -> b)
override2 val = (\_ _ _ -> val)
override3 :: b -> (GenOps -> a0 -> a1 -> a2 -> b)
override3 val = (\_ _ _ _ -> val)
testGenType :: Test
testGenType = TestList
[
@ -346,6 +355,34 @@ testDeclaration = TestList
"csp::Chanout<int> foo_actual[8*9];tockArrayView<csp::Chanout<int>,2> foo(foo_actual,tockDims(8,9));"
(tcall2 genDeclaration (A.Array [A.Dimension 8, A.Dimension 9] $ A.Chan A.DirOutput (A.ChanAttributes False False) A.Int) foo)
]
testDeclareInitFree :: Test
testDeclareInitFree = TestList
[
testAllSame 0 ("","") A.Int
,testAll 1 ("ChanInit((&foo));","") ("","") $ A.Chan A.DirUnknown (A.ChanAttributes False False) A.Int
,testAllSame 2 ("","") $ A.Chan A.DirInput (A.ChanAttributes False False) A.Int
,testAllSame 3 ("","") $ A.Array [A.Dimension 4] A.Int
]
where
testAll :: Int -> (String,String) -> (String,String) -> A.Type -> Test
testAll n (iC,fC) (iCPP,fCPP) t = TestList
[
testBothS ("testDeclareInitFree/a" ++ show n) ("@" ++ iC) ("@" ++ iCPP) ((tcall introduceSpec $ A.Specification emptyMeta foo (A.Declaration emptyMeta t)) . over) state
,testBothS ("testDeclareInitFree/b" ++ show n) iC iCPP ((fromMaybe (return ())) . (tcall3 declareInit emptyMeta t (A.Variable emptyMeta foo)) . over) state
,testBothS ("testDeclareInitFree/c" ++ show n) fC fCPP ((tcall removeSpec $ A.Specification emptyMeta foo (A.Declaration emptyMeta t)) . over) state
,testBothS ("testDeclareInitFree/d" ++ show n) fC fCPP ((fromMaybe (return ())) . (tcall3 declareFree emptyMeta t (A.Variable emptyMeta foo)) . over) state
]
where
overArray _ _ v f = case f (\v -> A.SubscriptedVariable emptyMeta (A.Subscript emptyMeta $ intLiteral 0) v) of
Just p -> caret >> p >> caret
Nothing -> return ()
over ops = ops {genDeclaration = override2 at, genOverArray = overArray}
state = defineName (simpleName "foo") $ simpleDefDecl "foo" t
testAllSame :: Int -> (String,String) -> A.Type -> Test
testAllSame n e t = testAll n e e t
---Returns the list of tests:
tests :: Test
@ -355,6 +392,7 @@ tests = TestList
,testArraySizes
,testArraySubscript
,testDeclaration
,testDeclareInitFree
,testGenType
,testOverArray
,testReplicator