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, lizTaylorWebp, lizTaylorPng, fashionPng, fashionAvif]) where toBench fp = bench (takeFileName fp) $ nfIO (f fp) catPath = "demo-data/cat.png" frogJpeg = "demo-data/frog.jpeg" frogPng = "demo-data/frog.png" lizTaylorWebp = "demo-data/liz-taylor.webp" lizTaylorPng = "demo-data/liz-taylor.png" fashionPng = "demo-data/fashion.png" fashionAvif = "demo-data/fashion.avif" main :: IO () main = defaultMain [ mkBGroup "fileHash" fileHash #ifdef FOREIGN_PHASH , mkBGroup "foreignHash" foreignFileHash #endif ]