1+ {-# LANGUAGE CPP #-}
12module Macro
23 ( benchmarks -- :: [Benchmark]
34 ) where
@@ -9,40 +10,40 @@ import qualified Data.ByteString as B
910import qualified Data.ByteString.Lazy as BS
1011import qualified Codec.Compression.GZip as GZip
1112
12- import qualified Macro.Types as Types
13- import qualified Macro.MemSize
14- import Macro.DeepSeq ()
13+ import Distribution.PackageDescription (GenericPackageDescription )
1514import qualified Macro.Load as Load
1615
1716import qualified Macro.ReadShow as ReadShow
1817import qualified Macro.PkgBinary as PkgBinary
1918import qualified Macro.PkgCereal as PkgCereal
19+ #if __GLASGOW_HASKELL__ >= 900
20+ -- ghc-8.x runs out of memory compiling this module:
2021import qualified Macro.PkgAesonGeneric as PkgAesonGeneric
22+ #endif
2123import qualified Macro.PkgAesonTH as PkgAesonTH
2224import qualified Macro.PkgStore as PkgStore
2325
2426import qualified Macro.CBOR as CBOR
2527
26- readBigTestData :: IO [Types. GenericPackageDescription ]
27- readBigTestData = do
28- Right pkgs_ <- fmap (Load. readPkgIndex . GZip. decompress)
29- (BS. readFile " bench/data/01-index.tar.gz" )
30- let tstdata = take 100 pkgs_
31- return tstdata
28+ readBigTestData :: IO [GenericPackageDescription ]
29+ readBigTestData =
30+ fmap (take 100000 . Load. readPkgIndex . GZip. decompress)
31+ (BS. readFile " serialise/bench/data/01-index.tar.gz" )
3232
3333benchmarks :: [Benchmark ]
3434benchmarks =
3535 [ env readBigTestData $ \ tstdata ->
3636 bgroup " reference"
3737 [ bench " deepseq" (whnf rnf tstdata)
38- , bench " memSize" (whnf (flip Macro.MemSize. memSize 0 ) tstdata)
3938 ]
4039
4140 , env readBigTestData $ \ tstdata ->
4241 bgroup " encoding"
4342 [ bench " binary" (whnf perfEncodeBinary tstdata)
4443 , bench " cereal" (whnf perfEncodeCereal tstdata)
44+ #if __GLASGOW_HASKELL__ >= 900
4545 , bench " aeson generic" (whnf perfEncodeAesonGeneric tstdata)
46+ #endif
4647 , bench " aeson TH" (whnf perfEncodeAesonTH tstdata)
4748 , bench " read/show" (whnf perfEncodeReadShow tstdata)
4849 , bench " cbor" (whnf perfEncodeCBOR tstdata)
@@ -57,8 +58,10 @@ benchmarks =
5758 $ \ tstdataC -> bench " cereal" (whnf perfDecodeCereal tstdataC)
5859 , env (return $ combineChunks $ PkgAesonTH. serialise tstdata)
5960 $ \ tstdataA -> bgroup " aeson"
60- [ bench " generic" (whnf perfDecodeAesonGeneric tstdataA)
61- , bench " TH" (whnf perfDecodeAesonTH tstdataA)
61+ [ bench " TH" (whnf perfDecodeAesonTH tstdataA)
62+ #if __GLASGOW_HASKELL__ >= 900
63+ , bench " generic" (whnf perfDecodeAesonGeneric tstdataA)
64+ #endif
6265 ]
6366 , env (return $ combineChunks $ ReadShow. serialise tstdata)
6467 $ \ tstdataS -> bench " read/show" (whnf perfDecodeReadShow tstdataS)
@@ -76,8 +79,10 @@ benchmarks =
7679 $ \ tstdataC -> bench " cereal" (nf perfDecodeCereal tstdataC)
7780 , env (return $ combineChunks $ PkgAesonTH. serialise tstdata)
7881 $ \ tstdataA -> bgroup " aeson"
79- [ bench " generic" (nf perfDecodeAesonGeneric tstdataA)
80- , bench " TH" (nf perfDecodeAesonTH tstdataA)
82+ [ bench " TH" (nf perfDecodeAesonTH tstdataA)
83+ #if __GLASGOW_HASKELL__ >= 900
84+ , bench " generic" (nf perfDecodeAesonGeneric tstdataA)
85+ #endif
8186 ]
8287
8388 , env (return $ combineChunks $ ReadShow. serialise tstdata)
@@ -89,34 +94,40 @@ benchmarks =
8994 ]
9095 ]
9196 where
92- perfEncodeBinary, perfEncodeCereal, perfEncodeAesonGeneric,
97+ perfEncodeBinary, perfEncodeCereal,
9398 perfEncodeAesonTH, perfEncodeReadShow,
9499 perfEncodeCBOR
95- :: [Types. GenericPackageDescription ] -> Int64
100+ :: [GenericPackageDescription ] -> Int64
96101
97102
98103 perfEncodeBinary = BS. length . PkgBinary. serialise
99104 perfEncodeCereal = BS. length . PkgCereal. serialise
100- perfEncodeAesonGeneric = BS. length . PkgAesonGeneric. serialise
101105 perfEncodeAesonTH = BS. length . PkgAesonTH. serialise
102106 perfEncodeReadShow = BS. length . ReadShow. serialise
103107 perfEncodeCBOR = BS. length . CBOR. serialise
108+ #if __GLASGOW_HASKELL__ >= 900
109+ perfEncodeAesonGeneric :: [GenericPackageDescription ] -> Int64
110+ perfEncodeAesonGeneric = BS. length . PkgAesonGeneric. serialise
111+ #endif
104112
105- perfDecodeBinary, perfDecodeCereal, perfDecodeAesonGeneric,
113+ perfDecodeBinary, perfDecodeCereal,
106114 perfDecodeAesonTH, perfDecodeReadShow,
107115 perfDecodeCBOR
108- :: BS. ByteString -> [Types. GenericPackageDescription ]
116+ :: BS. ByteString -> [GenericPackageDescription ]
109117
110118 perfDecodeBinary = PkgBinary. deserialise
111119 perfDecodeCereal = PkgCereal. deserialise
112- perfDecodeAesonGeneric = PkgAesonGeneric. deserialise
113120 perfDecodeAesonTH = PkgAesonTH. deserialise
114121 perfDecodeReadShow = ReadShow. deserialise
115122 perfDecodeCBOR = CBOR. deserialise
123+ #if __GLASGOW_HASKELL__ >= 900
124+ perfDecodeAesonGeneric :: BS. ByteString -> [GenericPackageDescription ]
125+ perfDecodeAesonGeneric = PkgAesonGeneric. deserialise
126+ #endif
116127
117- perfDecodeStore :: B. ByteString -> [Types. GenericPackageDescription ]
128+ perfDecodeStore :: B. ByteString -> [GenericPackageDescription ]
118129 perfDecodeStore = PkgStore. deserialise
119- perfEncodeStore :: [Types. GenericPackageDescription ] -> Int
130+ perfEncodeStore :: [GenericPackageDescription ] -> Int
120131 perfEncodeStore = B. length . PkgStore. serialise
121132
122133 -- Convert any lazy ByteString to ByteString lazy bytestring
0 commit comments