module Main (main) where

import           Criterion.Main
import           Data.Word       (Word64)
#ifdef FOREIGN_PHASH
import           ForeignHash     (foreignFileHash)
#endif
import           PerceptualHash  (fileHash)
import           System.FilePath (takeFileName)

mkBGroup :: String -> (FilePath -> IO Word64) -> 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
                ]