diff --git a/src/CurryCheck.curry b/src/CurryCheck.curry index 13d099dae8a9fd919ae856eb5c4cdd7c4da8ebeb..ddf041725b3e1283c23cd5e7fdf2913fdaa1a0d8 100644 --- a/src/CurryCheck.curry +++ b/src/CurryCheck.curry @@ -39,24 +39,25 @@ import FlatCurry.Files import qualified FlatCurry.Goodies as FCG import Text.Pretty ( pPrint ) -import CC.AnalysisHelpers ( getTerminationInfos, getProductivityInfos - , getUnsafeModuleInfos, dropPublicSuffix ) -import CC.Config ( packagePath, packageVersion ) +import CC.AnalysisHelpers ( getTerminationInfos, getProductivityInfos + , getUnsafeModuleInfos, dropPublicSuffix ) +import CC.Config ( packagePath, packageVersion ) import CC.Options -import CheckDetUsage ( checkDetUse, containsDetOperations) +import CheckDetUsage ( checkDetUse, containsDetOperations) import ContractUsage -import DefaultRuleUsage ( checkDefaultRules, containsDefaultRules ) +import DefaultRuleUsage ( checkDefaultRules, containsDefaultRules ) import PropertyUsage -import SimplifyPostConds ( simplifyPostConditionsWithTheorems ) -import TheoremUsage -import UsageCheck ( checkBlacklistUse, checkSetUse ) +import SimplifyPostConds ( simplifyPostConditionsWithTheorems ) +import TheoremUsage ( determinismTheoremFor, existsProofFor + , getModuleProofFiles, getTheoremFunctions ) +import UsageCheck ( checkBlacklistUse, checkSetUse ) -- Banner of this tool: ccBanner :: String ccBanner = unlines [bannerLine,bannerText,bannerLine] where bannerText = "CurryCheck: a tool for testing Curry programs (Version " ++ - packageVersion ++ " of 30/10/2018)" + packageVersion ++ " of 31/10/2018)" bannerLine = take (length bannerText) (repeat '-') -- Help text @@ -870,7 +871,9 @@ analyseCurryProg opts modname orgprog = do maybe (error $ "Source file of module '"++modname++"' not found!") id let srcdir = takeDirectory srcfilename putStrLnIfDebug opts $ "Source file: " ++ srcfilename - prooffiles <- if optProof opts then getProofFiles srcdir else return [] + prooffiles <- if optProof opts + then getModuleProofFiles srcdir modname + else return [] unless (null prooffiles) $ putStrIfDetails opts $ unlines ("Proof files found:" : map ("- " ++) prooffiles) progtxt <- readFile srcfilename diff --git a/src/TheoremUsage.curry b/src/TheoremUsage.curry index ca36f1e5a8664a92ac54f05ddcbefcecb5799480..7b5d6a5f6ef1d6f74d9910a5248695ad3e48a5fc 100644 --- a/src/TheoremUsage.curry +++ b/src/TheoremUsage.curry @@ -26,7 +26,7 @@ module TheoremUsage ( determinismTheoremFor - , getProofFiles, existsProofFor, isProofFileName, isProofFileNameFor + , getModuleProofFiles, existsProofFor, isProofFileNameFor , getTheoremFunctions ) where @@ -50,11 +50,11 @@ determinismTheoremFor funcname = funcname ++ "isdeterministic" -- Operations for proof files: --- Get the names of all files in the directory (first argument) containing ---- proofs of theorems. -getProofFiles :: String -> IO [String] -getProofFiles dir = do +--- proofs of theorems of the module (second argument). +getModuleProofFiles :: String -> String -> IO [String] +getModuleProofFiles dir mod = do files <- getDirectoryContents dir - return (filter isProofFileName files) + return (filter (isModuleProofFileName mod) files) --- Does the list of file names (second argument) contain a proof of the --- qualified theorem name given as the first argument? @@ -62,9 +62,12 @@ existsProofFor :: QName -> [String] -> Bool existsProofFor qpropname filenames = any (isProofFileNameFor qpropname) filenames ---- Is this a file name with a proof, i.e., start it with `proof`? -isProofFileName :: String -> Bool -isProofFileName fn = "proof" `isPrefixOf` (map toLower fn) +--- Is the second argument a file name with a proof of some theorem of a module +--- (first argument), i.e., start it with `proof` and the module name? +isModuleProofFileName :: String -> String -> Bool +isModuleProofFileName mn fn = + deleteNonAlphanNum ("proof" ++ map toLower mn) + `isPrefixOf` deleteNonAlphanNum (map toLower fn) --- Is this the file name of a proof of property `prop`? isProofFileNameFor :: QName -> String -> Bool @@ -84,9 +87,9 @@ deleteNonAlphanNum = filter isAlphaNum --- A theorem is a property for which a proof file exists in the --- directory provided as first argument. getTheoremFunctions :: String -> CurryProg -> IO [CFuncDecl] -getTheoremFunctions proofdir (CurryProg _ _ _ _ _ _ functions _) = do +getTheoremFunctions proofdir (CurryProg mn _ _ _ _ _ functions _) = do let propfuncs = filter isProperty functions -- all properties - prooffiles <- getProofFiles proofdir + prooffiles <- getModuleProofFiles proofdir mn return $ filter (\fd -> existsProofFor (funcName fd) prooffiles) propfuncs