packages feed

turtle-1.2.2: bench/Main.hs

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