From 000270f4a8e133b00527c6852c3aa51cf5395ec4 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Tue, 11 Sep 2007 23:34:45 +0000 Subject: [PATCH] Created a new module for tests in the common directory (named CommonTest) and moved testIsSafeConversion across --- TestMain.hs | 4 ++ common/CommonTest.hs | 91 +++++++++++++++++++++++++++++++++++++ transformations/PassTest.hs | 61 ------------------------- 3 files changed, 95 insertions(+), 61 deletions(-) create mode 100644 common/CommonTest.hs 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 ]