Created a new module for tests in the common directory (named CommonTest) and moved testIsSafeConversion across
This commit is contained in:
parent
dbdef53e31
commit
000270f4a8
|
@ -18,6 +18,8 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
||||
-- | 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
|
||||
|
|
91
common/CommonTest.hs
Normal file
91
common/CommonTest.hs
Normal file
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
-}
|
||||
|
||||
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
|
||||
]
|
|
@ -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
|
||||
]
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user