{-# LANGUAGE BangPatterns #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} import Gauge.Main (defaultMain,bgroup,bench,whnf) import Twitter100 (encodedTwitter100,byteStringTwitter100) import qualified Data.Bytes as Bytes import qualified Data.Bytes.Builder as BLDR import qualified Data.Bytes.Chunks as Chunks import qualified Data.ByteString.Lazy as LBS import qualified Json as J import qualified Data.Aeson as Aeson main :: IO () main = do valueTwitter100 <- case J.decode (Bytes.fromByteArray encodedTwitter100) of Left _ -> fail "json-syntax failed to decode twitter-100" Right v -> pure v aesonValueTwitter100 <- case Aeson.decodeStrict' byteStringTwitter100 of Nothing -> fail "aeson failed to decode twitter-100" Just (v :: Aeson.Value) -> pure v defaultMain [ bgroup "json" [ bgroup "twitter" [ bgroup "100" [ bench "decode" $ whnf (\b -> J.decode (Bytes.fromByteArray b)) encodedTwitter100 , bench "encode" $ whnf (\v -> Chunks.length (BLDR.run 128 (J.encode v))) valueTwitter100 ] ] ] , bgroup "aeson" [ bgroup "twitter" [ bgroup "100" [ bench "decode" (whnf (Aeson.decodeStrict' @Aeson.Value) byteStringTwitter100) , bench "encode" $ whnf (\v -> LBS.length (Aeson.encode v)) aesonValueTwitter100 ] ] ] ]