Added labels to all the QuickCheck tests to make it easier to see which one has failed

This commit is contained in:
Neil Brown 2008-02-05 22:15:17 +00:00
parent fa1e9a6a08
commit 416e385017
4 changed files with 18 additions and 13 deletions

View File

@ -83,7 +83,7 @@ main = do (opts, nonOpts, errs) <- getArgs >>* getOpt RequireOrder options
else runTestTT
case qcLevel of
-- Monadic mess!
Just level -> join $ liftM sequence_ $ (liftM $ applyAll level) qcTests
Just level -> mapM_ (runQCTest level) =<< qcTests
Nothing -> return ()
where
err msg = ioError (userError (msg ++ usageInfo header options))
@ -111,9 +111,12 @@ main = do (opts, nonOpts, errs) <- getArgs >>* getOpt RequireOrder options
"extensive" -> Right $ Just QC_Extensive
unknown -> Left unknown
runQCTest :: QuickCheckLevel -> LabelledQuickCheckTest -> IO ()
runQCTest level (label, test) = putStr (label ++ ": ") >> test level
hunitTests :: IO Test
hunitTests = sequence tests >>* (TestList . fst . unzip)
qcTests :: IO [QuickCheckTest]
qcTests :: IO [LabelledQuickCheckTest]
qcTests = concatMapM (liftM snd) tests
tests = [
@ -129,6 +132,6 @@ main = do (opts, nonOpts, errs) <- getArgs >>* getOpt RequireOrder options
,noqc RainUsageCheckTest.tests
]
noqc :: Test -> IO (Test, [QuickCheckTest])
noqc :: Test -> IO (Test, [LabelledQuickCheckTest])
noqc t = return (t,[])

View File

@ -728,8 +728,8 @@ generateProblem = choose (1,10) >>= (\n -> replicateM n $ choose (-20,20)) >>=
instance Arbitrary OmegaTestInput where
arbitrary = generateProblem >>* OMI
qcOmegaEquality :: [QuickCheckTest]
qcOmegaEquality = [scaleQC (40,200,2000,10000) prop]
qcOmegaEquality :: [LabelledQuickCheckTest]
qcOmegaEquality = [("Omega Test Equality Solving", scaleQC (40,200,2000,10000) prop)]
where
prop (OMI (ans,(eq,ineq))) = omegaCheck actAnswer
where
@ -812,8 +812,8 @@ newtype OmegaPruneInput = OPI MutatedProblem deriving (Show)
instance Arbitrary OmegaPruneInput where
arbitrary = ((generateProblem >>* snd) >>= (return . snd) >>= mutateEquations) >>* OPI
qcOmegaPrune :: [QuickCheckTest]
qcOmegaPrune = [scaleQC (100,1000,10000,50000) prop]
qcOmegaPrune :: [LabelledQuickCheckTest]
qcOmegaPrune = [("Omega Test Pruning", scaleQC (100,1000,10000,50000) prop)]
where
--We perform the map assocs because we can't compare arrays using *==*
-- (toConstr fails in the pretty-printing!).
@ -831,7 +831,7 @@ qcOmegaPrune = [scaleQC (100,1000,10000,50000) prop]
result = undefined -- TODO replace solveAndPrune: solveProblem [] inp
-}
ioqcTests :: IO (Test, [QuickCheckTest])
ioqcTests :: IO (Test, [LabelledQuickCheckTest])
ioqcTests
= seqPair
(liftM (TestLabel "ArrayUsageCheckTest" . TestList) $ sequence

View File

@ -680,12 +680,12 @@ deepCheck test level = (flip check) test $ configForSize $
QC_High -> 5000
QC_Extensive -> 10000
testModify :: [QuickCheckTest]
testModify :: [LabelledQuickCheckTest]
testModify =
[
deepCheck prop_Id
,deepCheck prop_Rep
,deepCheck prop_gennums
("Control-Flow Graph Identity Transformations", deepCheck prop_Id)
,("Control-Flow Graph Replacement Transformations", deepCheck prop_Rep)
,("Random List Generation", deepCheck prop_gennums)
]
where
-- | Checks that applying any set (from the powerset of identity functions) of identity functions
@ -726,7 +726,7 @@ testModify =
collectAll' r0 r1 | ok r0 == Just False = r0
| otherwise = r1
-- | Returns the list of tests:
qcTests :: (Test, [QuickCheckTest])
qcTests :: (Test, [LabelledQuickCheckTest])
qcTests = (TestLabel "FlowGraphTest" $ TestList
[
testCase

View File

@ -61,6 +61,8 @@ data QuickCheckLevel = QC_Low | QC_Medium | QC_High | QC_Extensive deriving (Sho
type QuickCheckTest = QuickCheckLevel -> IO ()
type LabelledQuickCheckTest = (String, QuickCheckTest)
scaleQC :: Testable a => (Int,Int,Int,Int) -> a -> QuickCheckTest
scaleQC (low,med,high,ext) test level
= case level of