copilot-core-3.10: tests/Test/Copilot/Core/External.hs
-- The following warning is enabled in this module so that the import of
-- Copilot.Core.External does not give rise to a warning.
{-# OPTIONS_GHC -fno-warn-deprecations #-}
-- | Test copilot-core:Copilot.Core.External.
module Test.Copilot.Core.External where
-- External imports
import Data.List (sort)
import Test.Framework (Test, testGroup)
import Test.Framework.Providers.HUnit (testCase)
import Test.HUnit (assertBool)
-- Internal imports: library modules being tested
import Copilot.Core.Expr (Expr (ExternVar, Op1))
import Copilot.Core.External (externVarName, externVars)
import Copilot.Core.Operators (Op1 (Abs, Sign))
import Copilot.Core.Spec (Spec (..), Stream (..))
import Copilot.Core.Type (Type (Int64))
-- | All unit tests for copilot-core:Copilot.Core.External.
tests :: Test.Framework.Test
tests =
testGroup "Copilot.Core.External"
[ testCase "externVars" testExternVarsFind
]
-- * Individual tests
-- | Test that 'externVars' will find an extern in a spec.
testExternVarsFind :: IO ()
testExternVarsFind = do
-- A simple stream and a nested stream
let s1 = Stream 1 [] (ExternVar Int64 "z" Nothing) Int64
s2 = Stream 2 [] s2Expr Int64
s2Expr = Op1 (Abs Int64)
$ Op1 (Sign Int64)
$ ExternVar Int64 "y" Nothing
-- Calculate the expected external vars in a spec
let res = sort $ map externVarName $ externVars $ Spec [s1, s2] [] [] []
-- Compare result with the expectation
let success = [ "y", "z" ] == res
assertBool
"The function externVars could not find the expected externs"
success