inventory-0.1.0.0: test/Spec.hs
import Data.Map.Append.Strict (AppendMap(..))
import qualified Data.Map.Strict as M
import Data.Monoid
import Test.Tasty
import Test.Tasty.HUnit
import DynFlags
import HieBin
import NameCache
import DefCounts.ProcessHie
import GHC.DynFlags
import HieFile hiding (getCounters)
import MatchSigs.ProcessHie
import UseCounts.ProcessHie
getResources :: IO (NameCache, DynFlags)
getResources = (,) <$> mkNameCache <*> baseDynFlags
main :: IO ()
main = defaultMain $
withResource getResources mempty $ \ioResources ->
testGroup "Unit Tests"
[ testCase "Valid Signature Matching" $ do
(nameCache, dynFlags) <- ioResources
sigMatchTest "T1" nameCache dynFlags [2]
sigMatchTest "T2" nameCache dynFlags [2]
sigMatchTest "T3" nameCache dynFlags [2]
sigMatchTest "T4" nameCache dynFlags [2]
sigMatchTest "T5" nameCache dynFlags [2]
sigMatchTest "T6" nameCache dynFlags [3]
sigMatchTest "T7" nameCache dynFlags [2,1]
sigMatchTest "T8" nameCache dynFlags [2,2]
sigMatchTest "T9" nameCache dynFlags [3]
sigMatchTest "T10" nameCache dynFlags [5]
sigMatchTest "T11" nameCache dynFlags [1,1]
sigMatchTest "T12" nameCache dynFlags [1,1]
sigMatchTest "T13" nameCache dynFlags [2]
sigMatchTest "T14" nameCache dynFlags [1,2]
sigMatchTest "T18" nameCache dynFlags [4]
sigMatchTest "T19" nameCache dynFlags [3]
sigMatchTest "T20" nameCache dynFlags [2,1,1]
sigMatchTest "T21" nameCache dynFlags [1,1,1,1]
, testCase "Definition Counting" $ do
(nameCache, dynFlags) <- ioResources
defCountTest "T15" nameCache dynFlags
. AppendMap $ M.fromList [(Class, (2, 1)), (ClassInst, (2, 1))]
defCountTest "T17" nameCache dynFlags
. AppendMap $ M.fromList
[ (Class, (1, 1))
, (Data, (3, 2))
, (Fam, (2, 2))
, (Func, (2, 1))
, (PatSyn, (1, 1))
, (Syn, (1, 1))
, (ClassInst, (2, 2))
, (TyFamInst, (2, 2))
, (ModImport, (1, 1))
, (ExportThing, (5, 5))
]
, testCase "Use Counts" $ do
(nameCache, dynFlags) <- ioResources
useCountTest "T16" nameCache dynFlags [1,1,1,3]
]
sigMatchTest :: String -> NameCache -> DynFlags -> [Int] -> IO ()
sigMatchTest testName nc dynFlags sigGroupSizes = do
(_, _, AppendMap sigMap, _) <- getCounters testName nc dynFlags
assertEqual testName sigGroupSizes
. concatMap (map (\(_, _, names) -> length names) . getMatchedSigs)
$ M.elems sigMap
defCountTest :: FilePath -> NameCache -> DynFlags -> DefCounter -> IO ()
defCountTest testName nc dynFlags expectedDefCount = do
(defCount, _, _, _) <- getCounters testName nc dynFlags
assertEqual testName expectedDefCount defCount
useCountTest :: FilePath -> NameCache -> DynFlags -> [Int] -> IO ()
useCountTest testName nc dynFlags expectedUseCount = do
(_, AppendMap useCount, _, _) <- getCounters testName nc dynFlags
assertEqual testName expectedUseCount
(map usages . M.elems $ M.filter locallyDefined useCount)
getHiePath :: String -> FilePath
getHiePath testName = "test/hie/HieSource/" <> testName <> ".hie"
getCounters :: String -> NameCache -> DynFlags -> IO (DefCounter, UsageCounter, SigMap, Sum Int)
getCounters testName nc dynFlags = do
(hieFile, _) <- readHieFile nc $ getHiePath testName
pure . hieFileToCounters dynFlags $ hie_file_result hieFile