{-# LANGUAGE AllowAmbiguousTypes, ScopedTypeVariables #-} module Test.Utilities ( testFile , measureSumOnFile ) where import System.FilePath (FilePath, ()) import Language.Haskell.Exts (Extension) import Language.Haskell.Homplexity.CodeFragment (occurs) import Language.Haskell.Homplexity.Metric (Metric(..)) import Language.Haskell.Homplexity.Parse (parseSource) -- | Constructs OS-independent path to test file testFile :: FilePath -> FilePath testFile fn = "tests" "test-data" fn measureSumOnFile :: forall m c. (Metric m c, Num m) => [Extension] -> FilePath -> IO m measureSumOnFile exts path = do result <- parseSource exts path p <- case result of Left logs -> error $ show logs Right (prog, _) -> pure prog let codeFrags = occurs p :: [c] pure $ sum $ map measure codeFrags