Unique-0.4.7.5: bench/Main.hs
{-# LANGUAGE RankNTypes #-}
import Criterion.Main
import Test.QuickCheck
import Test.QuickCheck.Instances()
import Data.ByteString.Lazy (ByteString)
import Data.Hashable
import qualified Data.List.Unique as U
import qualified Data.List.UniqueStrict as US
import qualified Data.List.UniqueUnsorted as UU
setupEnv :: IO (Int, String, ByteString, [Int], [String], [ByteString])
setupEnv = do
int <- generate (arbitrary :: Gen Int )
string <- generate (arbitrary :: Gen String )
bytestring <- generate (arbitrary :: Gen ByteString )
ints <- generate (arbitrary :: Gen [Int] )
strings <- generate (arbitrary :: Gen [String] )
bytestrings <- generate (arbitrary :: Gen [ByteString] )
return (int, string, bytestring, ints, strings, bytestrings )
benchGroups :: (Hashable a, Ord a) => a -> [a] -> [Benchmark]
benchGroups x xs =
[
bgroup "isUnique" [ bench "Unique" $ whnf (U.isUnique x) xs
, bench "UniqueStrict" $ whnf (US.isUnique x) xs
, bench "UniqueUnsorted" $ whnf (UU.isUnique x) xs
]
, bgroup "sortUniq" [ bench "Unique" $ whnf U.sortUniq xs
, bench "UniqueStrict" $ whnf US.sortUniq xs
, bench "UniqueUnsorted" $ whnf UU.removeDuplicates xs
]
, bgroup "allUnique" [ bench "Unique" $ whnf U.allUnique xs
, bench "UniqueStrict" $ whnf US.allUnique xs
, bench "UniqueUnsorted" $ whnf UU.allUnique xs
]
, bgroup "repeated" [ bench "Unique" $ whnf U.repeated xs
, bench "UniqueStrict" $ whnf US.repeated xs
, bench "UniqueUnsorted" $ whnf UU.repeated xs
]
, bgroup "count" [ bench "Unique" $ whnf U.count xs
, bench "UniqueStrict" $ whnf US.count xs
, bench "UniqueUnsorted" $ whnf UU.count xs
]
, bgroup "count_" [ bench "Unique" $ whnf U.count_ xs
, bench "UniqueStrict" $ whnf US.count_ xs
, bench "UniqueUnsorted" $ whnf UU.count_ xs
]
, bgroup "occurrences" [ bench "Unique" $ whnf U.occurrences xs
, bench "UniqueStrict" $ whnf US.occurrences xs
, bench "UniqueUnsorted" $ whnf UU.occurrences xs
]
]
main :: IO ()
main = defaultMain [
env setupEnv $ \ ~(int,st,byst,ints,sts,bysts) ->
bgroup "Main" $
[ bgroup "Int" $ benchGroups int ints
, bgroup "String" $ benchGroups st sts
, bgroup "ByteString" $ benchGroups byst bysts
]
]