git.iko.soy/typeable/html-parse
on master help sign in
Add a small microbenchmark
d0fd03bBen Gamari
Microbench.hsnew file+33
@@ -0,0 +1,33 @@
1+{-# LANGUAGE MagicHash #-}
2+{-# LANGUAGE OverloadedStrings #-}
3+
4+import GHC.Exts
5+import Data.Char
6+import qualified Data.Text as T
7+import Data.Attoparsec.Text
8+import Criterion.Main
9+import Prelude hiding (take, takeWhile)
10+
11+isAsciiAlpha1 :: Char -> Bool
12+isAsciiAlpha1 c = isAsciiLower c || isAsciiUpper c
13+
14+isAsciiAlpha2 :: Char -> Bool
15+isAsciiAlpha2 (C# c) =
16+ tagToEnum# ( ((c `geChar#` 'A'#) `andI#` (c `leChar#` 'Z'#))
17+ `orI#` ((c `geChar#` 'a'#) `andI#` (c `leChar#` 'z'#)) )
18+
19+main :: IO ()
20+main = defaultMain
21+ [ bench "Text isAsciiAlpha1"
22+ $ whnf (T.length . T.takeWhile isAsciiAlpha1) testString
23+ , bench "Text isAsciiAlpha2"
24+ $ whnf (T.length . T.takeWhile isAsciiAlpha2) testString
25+
26+ , bench "Attoparsec isAsciiAlpha1"
27+ $ whnf (parseOnly (T.length <$> takeWhile isAsciiAlpha1)) testString
28+ , bench "Attoparsec isAsciiAlpha2"
29+ $ whnf (parseOnly (T.length <$> takeWhile isAsciiAlpha2)) testString
30+ ]
31+
32+testString :: T.Text
33+testString = T.replicate 10 "helloworldthisisarelativelylongstring"