packages feed

unix-recursive-0.1.0.0: bench/Bench.hs

{-# 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 ".")
                ]
            ]
        ]