module Test.MuCheck.TestAdapter.SmallCheck where
import qualified Test.SmallCheck.Drivers as Sc
import Test.MuCheck.TestAdapter
import Test.MuCheck.Utils.Print (showA, showAS)
import Data.Hash.MD5 (md5s, Str(..))
import Data.Typeable
import Data.List((\\))
import Data.Either (partitionEithers)
type SmallCheckSummary = Maybe Sc.PropertyFailure
deriving instance Typeable Sc.PropertyFailure
instance Summarizable SmallCheckSummary where
testSummary mutantFiles results = Summary logMsg
where (errorCases, executedCases) = partitionEithers results
[successCases, failureCases] = map (\c -> filter (c . snd) executedCases) [isSuccess, isFailure]
errorFiles = map (\l -> ".mutants/" ++ (md5s $ Str l) ++ ".hs") mutantFiles \\ map fst executedCases
logMsg = showAS ["Details:",
"Loading error files:", showA errorFiles,
"Loading error messages:", showA errorCases,
"Successes:", showA successCases,
"Failure:", showA failureCases]
isSuccess Nothing = True
isSuccess _ = False