haskell-turtle-library/bench/Main.hs
2015-05-12 23:46:02 +03:00

40 lines
1.3 KiB
Haskell

{-# LANGUAGE OverloadedStrings #-}
module Main where
import qualified Data.Text as Text
import Criterion.Main
import Turtle
boundedNaive :: Int -> Int -> Pattern a -> Pattern [a]
boundedNaive m n p = do
x <- choice (map pure [m..n])
count x p
main :: IO ()
main = defaultMain
[ bgroup "Pattern"
[ let cats = Text.replicate 1000 "cat"
furniture = Text.replicate 5 " "
in bgroup "Cat Lady's House"
[ bench "Basic"
$ nf (match (many "cat")) cats
, bench "Letters"
$ nf (match (many (mconcat ["c", "a", "t"]))) cats
, bench "Spaces"
$ nf (match (many "cat" <* spaces)) (cats <> furniture)
, bench "Prefix"
$ nf (match (prefix (many "cat"))) (cats <> furniture)
]
, let hearts n = Text.replicate n "heart"
in bgroup "Love Knows No Bounds"
[ bench "500-700:650 Naive"
$ nf (match (boundedNaive 500 700 "heart")) (hearts 650)
, bench "500-700:650"
$ nf (match (bounded 500 700 "heart")) (hearts 650)
, bench "5000-7000:6500 Naive"
$ nf (match (boundedNaive 5000 7000 "heart")) (hearts 6500)
, bench "5000-7000:6500"
$ nf (match (bounded 5000 7000 "heart")) (hearts 6500)
]
]
]