{-# LANGUAGE StandaloneDeriving, DeriveDataTypeable #-} module MuCheck.Run.QuickCheck where import qualified Test.QuickCheck.Test as Qc import MuCheck.Run.Common import MuCheck.Utils.Print (showA, showAS) import Data.Typeable import Data.List((\\)) import Data.Either (partitionEithers) deriving instance Typeable Qc.Result instance Summarizable Qc.Result where testSummary mutantFiles results = TSum { tsum_numMutants = r, tsum_loadError = e, tsum_notKilled = s, tsum_killed = f, tsum_others = g, tsum_log = logMsg} where (errorCases, executedCases) = partitionEithers results [successCases, failureCases, gaveUpCases] = map (\c -> filter (c . snd) executedCases) [isSuccess, isFailure, isGaveUp] r = length results e = length errorCases [s,f,g] = map length [successCases, failureCases, gaveUpCases] errorFiles = mutantFiles \\ map fst executedCases logMsg = showAS ["Details:", "Loading error files:", showA errorFiles, "Loading error messages:", showA errorCases, "Successes:", showA successCases, "Failure:", showA failureCases, "Gaveups:", showA gaveUpCases] isFailure :: Qc.Result -> Bool isFailure Qc.Failure{} = True isFailure _ = False isGaveUp :: Qc.Result -> Bool isGaveUp Qc.GaveUp{} = True isGaveUp _ = False isSuccess = Qc.isSuccess