packages feed

bytes-metrics-0.1.0.0: bench/Main.hs

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")