@@ -0,0 +1,70 @@
1+{-# LANGUAGE NoImplicitPrelude #-}
2+{-# LANGUAGE OverloadedStrings #-}
3+
4+module Main (
5+ main,
6+ input17,
7+ input32,
8+ input64,
9+ input128,
10+ input256,
11+ input2048,
12+ input4096,
13+ input8192,
14+ input16384,
15+ ) where
16+
17+import Criterion.Main
18+import Prelude.Compat
19+import Data.Int (Int64)
20+
21+import qualified Data.Aeson as A
22+import qualified Data.ByteString.Lazy as LBS
23+import qualified Data.ByteString.Lazy.Char8 as LBS8
24+
25+decodeInt :: LBS.ByteString -> Maybe Int
26+decodeInt = A.decode
27+
28+generate :: Int64 -> LBS.ByteString
29+generate n = LBS8.replicate n '1'
30+
31+input17 :: LBS.ByteString
32+input17 = generate 17
33+
34+input32 :: LBS.ByteString
35+input32 = generate 32
36+
37+input64 :: LBS.ByteString
38+input64 = generate 64
39+
40+input128 :: LBS.ByteString
41+input128 = generate 128
42+
43+input256 :: LBS.ByteString
44+input256 = generate 256
45+
46+input2048 :: LBS.ByteString
47+input2048 = generate 2048
48+
49+input4096 :: LBS.ByteString
50+input4096 = generate 4096
51+
52+input8192 :: LBS.ByteString
53+input8192 = generate 8192
54+
55+input16384 :: LBS.ByteString
56+input16384 = generate 16384
57+
58+main :: IO ()
59+main = defaultMain
60+ -- works on 64bit
61+ [ bench "17" $ whnf decodeInt input17
62+ -- , bench "32" $ whnf decodeInt input32
63+ -- , bench "64" $ whnf decodeInt input64
64+ -- , bench "128" $ whnf decodeInt input128
65+ -- , bench "256" $ whnf decodeInt input256
66+ , bench "2048" $ whnf decodeInt input2048
67+ , bench "4096" $ whnf decodeInt input4096
68+ , bench "8192" $ whnf decodeInt input8192
69+ , bench "16384" $ whnf decodeInt input16384
70+ ]