{-# LANGUAGE PackageImports #-} module Typed.Generic (benchmarks, decodeBenchmarks) where import Prelude () import Prelude.Compat import "aeson" Data.Aeson hiding (Result) import Criterion import Data.ByteString.Lazy as L import Twitter.Generic import Typed.Common import qualified "aeson-benchmarks" Data.Aeson as B encodeDirectA :: Result -> L.ByteString encodeDirectA = encode encodeViaValueA :: Result -> L.ByteString encodeViaValueA = encode . toJSON encodeDirectB :: Result -> L.ByteString encodeDirectB = B.encode encodeViaValueB :: Result -> L.ByteString encodeViaValueB = B.encode . B.toJSON benchmarks :: Benchmark benchmarks = env ((,) <$> load "json-data/twitter100.json" <*> load "json-data/jp100.json") $ \ ~(twitter100, jp100) -> bgroup "encodeGeneric" [ bgroup "direct" [ bench "twitter100" $ nf encodeDirectB twitter100 , bench "jp100" $ nf encodeDirectB jp100 , bench "twitter100 baseline" $ nf encodeDirectA twitter100 , bench "jp100 baseline" $ nf encodeDirectA jp100 ] , bgroup "viaValue" [ bench "twitter100" $ nf encodeViaValueB twitter100 , bench "jp100" $ nf encodeViaValueB jp100 , bench "twitter100 baseline" $ nf encodeViaValueA twitter100 , bench "jp100 baseline" $ nf encodeViaValueA jp100 ] ] decodeDirectA :: L.ByteString -> Maybe Result decodeDirectA = decode decodeDirectB :: L.ByteString -> Maybe Result decodeDirectB = B.decode decodeBenchmarks :: Benchmark decodeBenchmarks = env ((,) <$> L.readFile "json-data/twitter100.json" <*> L.readFile "json-data/jp100.json") $ \ ~(twitter100, jp100) -> bgroup "decodeGeneric" [ bgroup "direct" [ bench "twitter100" $ nf decodeDirectB twitter100 , bench "jp100" $ nf decodeDirectB jp100 , bench "twitter100 baseline" $ nf decodeDirectA twitter100 , bench "jp100 baseline" $ nf decodeDirectA jp100 ] ]