import Data.Bytes (Bytes)
import Data.Bytes.Metrics (levenshteinWithTolerance)
import Data.List (unfoldr)
import Gauge.Main (bench, bgroup, defaultMain, whnf)
import System.Random (mkStdGen, uniformR)
import qualified Data.Bytes.Text.Ascii as Ascii
main :: IO ()
main =
defaultMain
[ bgroup
"80-chars"
[ bench "distance-0" (whnf (uncurry $ levenshteinWithTolerance 0) strings)
, bench "distance-1" (whnf (uncurry $ levenshteinWithTolerance 1) strings)
, bench "distance-2" (whnf (uncurry $ levenshteinWithTolerance 2) strings)
, bench "distance-3" (whnf (uncurry $ levenshteinWithTolerance 3) strings)
, bench "distance-4" (whnf (uncurry $ levenshteinWithTolerance 4) strings)
]
]
prefix :: String
{-# NOINLINE prefix #-}
prefix = take 80 (unfoldr (Just . uniformR (' ', '~')) (mkStdGen 62861853071))
strings :: (Bytes, Bytes)
{-# NOINLINE strings #-}
strings = (Ascii.fromString $ prefix ++ "a", Ascii.fromString $ prefix ++ "b")