packages feed

edit-distance-linear-0.2.0.1: bench/Bench.hs

{-# 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 ]