diff --git a/TestMain.hs b/TestMain.hs
index 460f95d..b2d7f9a 100644
--- a/TestMain.hs
+++ b/TestMain.hs
@@ -18,6 +18,8 @@ with this program. If not, see .
-- | A module containing the 'main' function for the Tock test suite. It currently runs tests from the following modules:
--
+-- * "CommonTest"
+--
-- * "PassTest"
--
-- * "RainParseTest"
@@ -31,12 +33,14 @@ import qualified ParseRainTest (tests)
import qualified RainPassesTest (tests)
import qualified UsageCheckTest (tests)
import qualified PassTest (tests)
+import qualified CommonTest (tests)
import Test.HUnit
main :: IO ()
main = do runTestTT $ TestList
[
PassTest.tests
+ ,CommonTest.tests
,ParseRainTest.tests
,RainPassesTest.tests
,UsageCheckTest.tests
diff --git a/common/CommonTest.hs b/common/CommonTest.hs
new file mode 100644
index 0000000..2483b66
--- /dev/null
+++ b/common/CommonTest.hs
@@ -0,0 +1,91 @@
+{-
+Tock: a compiler for parallel languages
+Copyright (C) 2007 University of Kent
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation, either version 2 of the License, or (at your
+option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program. If not, see .
+-}
+
+module CommonTest (tests) where
+
+import Test.HUnit hiding (State)
+import qualified AST as A
+import Types
+
+-- | Tests the isSafeConversion function:
+testIsSafeConversion :: Test
+testIsSafeConversion = TestList $ map runTestRow resultsWithIndexes
+ where
+ resultsWithIndexes :: [(Int,[(Int,Bool)])]
+ resultsWithIndexes = zip [0..] $ map (zip [0..]) results
+
+ runTestRow :: (Int,[(Int,Bool)]) -> Test
+ runTestRow (a,b) = TestList $ map (runTest a) b
+ where
+ runTest :: Int -> (Int,Bool) -> Test
+ runTest destIndex (srcIndex,result) = TestCase $ assertEqual
+ ("Testing from type: " ++ (show $ index srcIndex) ++ " to: " ++ (show $ index destIndex))
+ result $ isSafeConversion (index srcIndex) (index destIndex)
+
+--Integer types are:
+--A.Bool
+--A.Byte
+--A.UInt16
+--A.UInt32
+--A.UInt64
+--A.Int8
+--A.Int
+--A.Int16
+--A.Int32
+--A.Int64
+
+--We will assume (like the rest of Tock) that Int is 32-bits for testing. We can actually perform an exhaustive test without too much trouble:
+ index :: Int -> A.Type
+ index 0 = A.Bool
+ index 1 = A.Byte
+ index 2 = A.UInt16
+ index 3 = A.UInt32
+ index 4 = A.UInt64
+ index 5 = A.Int8
+ index 6 = A.Int16
+ index 7 = A.Int
+ index 8 = A.Int32
+ index 9 = A.Int64
+
+ t = True
+ f = False
+
+ results :: [[Bool]]
+ --Each row is a conversion to that type. For example, the first row is conversions *to* Bool:
+ results =
+ [ [t, f,f,f,f, f,f,f,f,f] --to Bool
+
+ ,[t, t,f,f,f, f,f,f,f,f] --to Byte
+ ,[t, t,t,f,f, f,f,f,f,f] --to UInt16
+ ,[t, t,t,t,f, f,f,f,f,f] --to UInt32
+ ,[t, t,t,t,t, f,f,f,f,f] --to UInt64
+
+ ,[t, f,f,f,f, t,f,f,f,f] --to Int8
+ ,[t, t,f,f,f, t,t,f,f,f] --to Int16
+ ,[t, t,t,f,f, t,t,t,t,f] --to Int
+ ,[t, t,t,f,f, t,t,t,t,f] --to Int32
+ ,[t, t,t,t,f, t,t,t,t,t] --to Int64
+ ]
+
+
+--Returns the list of tests:
+tests :: Test
+tests = TestList
+ [
+ testIsSafeConversion
+ ]
diff --git a/transformations/PassTest.hs b/transformations/PassTest.hs
index 64e2aad..76de0ff 100644
--- a/transformations/PassTest.hs
+++ b/transformations/PassTest.hs
@@ -140,66 +140,6 @@ testFunctionsToProcs2 = testPassWithItemsStateCheck "testFunctionsToProcs2 A" ex
assertEqual "testFunctionsToProcs2 F" (Just [A.Int]) (Map.lookup "foo" (csFunctionReturns state))
assertEqual "testFunctionsToProcs2 G" (Just [A.Int]) (Map.lookup "fooOuter" (csFunctionReturns state))
---Not strictly a pass test but it can live here for now:
-testIsSafeConversion :: Test
-testIsSafeConversion = TestList $ map runTestRow resultsWithIndexes
- where
- resultsWithIndexes :: [(Int,[(Int,Bool)])]
- resultsWithIndexes = zip [0..] $ map (zip [0..]) results
-
- runTestRow :: (Int,[(Int,Bool)]) -> Test
- runTestRow (a,b) = TestList $ map (runTest a) b
- where
- runTest :: Int -> (Int,Bool) -> Test
- runTest destIndex (srcIndex,result) = TestCase $ assertEqual
- ("Testing from type: " ++ (show $ index srcIndex) ++ " to: " ++ (show $ index destIndex))
- result $ isSafeConversion (index srcIndex) (index destIndex)
-
---Integer types are:
---A.Bool
---A.Byte
---A.UInt16
---A.UInt32
---A.UInt64
---A.Int8
---A.Int
---A.Int16
---A.Int32
---A.Int64
-
---We will assume (like the rest of Tock) that Int is 32-bits for testing. We can actually perform an exhaustive test without too much trouble:
- index :: Int -> A.Type
- index 0 = A.Bool
- index 1 = A.Byte
- index 2 = A.UInt16
- index 3 = A.UInt32
- index 4 = A.UInt64
- index 5 = A.Int8
- index 6 = A.Int16
- index 7 = A.Int
- index 8 = A.Int32
- index 9 = A.Int64
-
- t = True
- f = False
-
- results :: [[Bool]]
- --Each row is a conversion to that type. For example, the first row is conversions *to* Bool:
- results =
- [ [t, f,f,f,f, f,f,f,f,f] --to Bool
-
- ,[t, t,f,f,f, f,f,f,f,f] --to Byte
- ,[t, t,t,f,f, f,f,f,f,f] --to UInt16
- ,[t, t,t,t,f, f,f,f,f,f] --to UInt32
- ,[t, t,t,t,t, f,f,f,f,f] --to UInt64
-
- ,[t, f,f,f,f, t,f,f,f,f] --to Int8
- ,[t, t,f,f,f, t,t,f,f,f] --to Int16
- ,[t, t,t,f,f, t,t,t,t,f] --to Int
- ,[t, t,t,f,f, t,t,t,t,f] --to Int32
- ,[t, t,t,t,f, t,t,t,t,t] --to Int64
- ]
-
skipP :: A.Structured
skipP = A.OnlyP m (A.Skip m)
@@ -230,7 +170,6 @@ tests = TestList
testFunctionsToProcs0
,testFunctionsToProcs1
,testFunctionsToProcs2
- ,testIsSafeConversion
,testTransformConstr0
]