{-# LANGUAGE BangPatterns, OverloadedStrings #-}
import qualified Data.ByteString.Char8 as BS
import qualified Data.Text as T
import Criterion.Main
import Data.Text.Metrics
import Text.EditDistance.Linear
main :: IO ()
main = defaultMain
[ bgroup "same string/ed-linear" [ bench (show num) $ nf (\s -> levenshteinDistance s s) $ BS.replicate num 'a'
| num <- nums
]
, bgroup "same string/text-metrics" [ bench (show num) $ nf (uncurry levenshtein) (T.replicate num "a", T.replicate num "a")
| num <- nums
]
, bgroup "diff strings/ed-linear" [ bench (show num) $ nf (uncurry levenshteinDistance) (BS.replicate num 'a', BS.replicate num 'b')
| num <- nums
]
, bgroup "diff strings/text-metrics" [ bench (show num) $ nf (uncurry levenshtein) (T.replicate num "a", T.replicate num "b")
| num <- nums
]
]
where
nums = [ 1000, 2000, 5000, 10000, 20000 ]