module Main (main) where
import Control.DeepSeq (NFData)
import Criterion.Main
#ifdef FOREIGN_PHASH
import ForeignHash (foreignFileHash)
#endif
import PerceptualHash (fileHash)
import System.FilePath (takeFileName)
mkBGroup :: NFData a => String -> (FilePath -> IO a) -> Benchmark
mkBGroup str f = bgroup str (toBench <$> [catPath, frogJpeg, frogPng])
where toBench fp = bench (takeFileName fp) $ nfIO (f fp)
catPath = "demo-data/cat.png"
frogJpeg = "demo-data/frog.jpeg"
frogPng = "demo-data/frog.png"
main :: IO ()
main =
defaultMain [ mkBGroup "fileHash" fileHash
#ifdef FOREIGN_PHASH
, mkBGroup "foreignHash" foreignFileHash
#endif
]