{-# LANGUAGE OverloadedStrings #-} module Main (main) where import Criterion.Main import System.Directory.Recursive as DirTraverse import qualified System.Posix.Recursive as String import qualified System.Posix.Recursive.ByteString as ByteString main :: IO () main = defaultMain [ bgroup "compare different api groups" [ bgroup "ByteString" [ bench "filtering base on path" $ nfIO $ ByteString.list "." , bench "filter by path and file status" $ nfIO $ ByteString.listAccessible "." ] , bgroup "String" [ bench "filtering base on path" $ nfIO $ String.list "." , bench "filter by path and file status" $ nfIO $ String.listAccessible "." ] ] , bgroup "compare with dir traverse" [ bgroup "Evaluate whole list" [ bench "unix-recursive String" $ nfIO $ String.followList "." , bench "unix-recursive ByteString" $ nfIO $ ByteString.followList "." , bench "dir-traverse" $ nfIO $ DirTraverse.getDirRecursive "." ] , bgroup "Test laziness" [ bench "unix-recursive String" $ nfIO (head . tail <$> String.followList ".") , bench "unix-recursive ByteString" $ nfIO (head . tail <$> ByteString.followList ".") , bench "dir-traverse" $ nfIO ((head . tail) <$> DirTraverse.getDirRecursive ".") ] ] ]