integer-conversion-0.1: bench/integer-conversion-bench.hs
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Test.Tasty.Bench (Benchmark, bench, bgroup, defaultMain, whnf)
import qualified Data.ByteString as BS
import qualified Data.Text as T
import qualified Alternative
import qualified Naive
import Data.Integer.Conversion
main :: IO ()
main = defaultMain
[ bgroup "text"
[ bgroup "naive" $ seriesT Naive.textToInteger
, bgroup "alt" $ seriesT Alternative.textToInteger
, bgroup "proper" $ seriesT textToInteger
]
, bgroup "bs"
[ bgroup "naive" $ seriesB Naive.byteStringToInteger
, bgroup "alt" $ seriesB Alternative.byteStringToInteger
, bgroup "proper" $ seriesB byteStringToInteger
]
, bgroup "string"
[ bgroup "naive" $ seriesL Naive.stringToInteger
, bgroup "alt" $ seriesL Alternative.stringToInteger
, bgroup "read" $ seriesL read
, bgroup "proper" $ seriesL stringToInteger
]
]
where
seriesT :: (T.Text -> Integer) -> [Benchmark]
seriesT f =
[ bench (show n) $ whnf f t
| e <- [6 .. 18 :: Int]
, let n = 2 ^ e
, let t = T.replicate n "9"
]
seriesB :: (BS.ByteString -> Integer) -> [Benchmark]
seriesB f =
[ bench (show n) $ whnf f t
| e <- [6 .. 18 :: Int]
, let n = 2 ^ e
, let t = BS.replicate n (48 + 9)
]
seriesL :: (String -> Integer) -> [Benchmark]
seriesL f =
[ bench (show n) $ whnf f t
| e <- [6 .. 18 :: Int]
, let n = 2 ^ e
, let t = replicate n '9'
]