levenshtein-0.2.0.0: bench/levenshtein-bench.hs
{-# OPTIONS -fno-warn-orphans #-}
module Main (main) where
import Control.Exception(evaluate)
import Control.DeepSeq (rnf)
import Criterion.Main(bench, bgroup, defaultMain, nf)
import Data.Foldable.Levenshtein(levenshteinDistance)
smallA :: [Int]
smallB :: [Int]
smallA = [0, 5 .. 100]
smallB = [0, 3 .. 72]
bigA :: [Int]
bigA = [0, 5 .. 10000]
bigB :: [Int]
bigB = [0, 3 .. 7200]
levInt :: ([Int], [Int]) -> Int
levInt = uncurry levenshteinDistance
main :: IO ()
main = do
evaluate (rnf smallA)
evaluate (rnf smallB)
evaluate (rnf bigA)
evaluate (rnf bigB)
defaultMain
[ bgroup "same"
[ bgroup "small"
[ bench "lib" $ (nf levInt) (smallA, smallA)
, bench "lib" $ (nf levInt) (smallB, smallB)
]
, bgroup "big"
[ bench "lib" $ (nf levInt) (bigA, bigA)
, bench "lib" $ (nf levInt) (bigB, bigB)
]
]
, bgroup "different"
[ bgroup "small"
[ bench "lib" $ (nf levInt) (smallA, smallB)
, bench "lib" $ (nf levInt) (smallB, smallA)
]
, bgroup "mixed"
[ bench "lib" $ (nf levInt) (smallA, bigB)
, bench "lib" $ (nf levInt) (bigB, smallA)
, bench "lib" $ (nf levInt) (smallA, bigB)
, bench "lib" $ (nf levInt) (bigB, smallA)
, bench "lib" $ (nf levInt) (smallB, bigB)
, bench "lib" $ (nf levInt) (bigB, smallB)
, bench "lib" $ (nf levInt) (smallB, bigA)
, bench "lib" $ (nf levInt) (bigA, smallB)
]
, bgroup "big"
[ bench "lib" $ (nf levInt) (bigA, bigB)
, bench "lib" $ (nf levInt) (bigB, bigA)
]
]
]