{-# LANGUAGE TupleSections #-} module Main (main) where import Criterion.Main import qualified Data.Map.Strict as M import ADEL mapUpTo :: Int -> M.Map Int () mapUpTo x = M.fromList $ map (,()) [0 .. x] findNofM :: Int -> Int -> Benchmark findNofM numToFind totalNum = if numToFind > totalNum then bench "numToFind > totalNum" $ nfIO (return ()) --error "findNofM numToFind > totalNum" else env (return (mapUpTo numToFind, mapUpTo totalNum)) (\ ~(find, whole) -> bench ("find " ++ show numToFind ++ " of " ++ show totalNum) (nfIO $ minimalSubmapSatisfying whole (return . M.isSubmapOf find))) findHalf :: Int -> Benchmark findHalf n = findNofM (n `div` 2) n findNone :: Int -> Benchmark findNone = findNofM 0 findAll :: Int -> Benchmark findAll n = findNofM n n range = [0, 2500..100000] main = defaultMain $ concat [map findHalf [0,2500..20000], map findAll range, map findNone range, map (findNofM 20) range, map (findNofM 50) range]