on master help sign in
Expanded AesonCompareAutoInstances benchmark

Added benchmarks for BigRecords, BigProducts and BigSums

commit3c28560070dde850ca2adb0767d008b709a2f158 authorBas van Dijk <v.dijk.bas@gmail.com> dateMon 31 Oct 2011, 00:25 (15 years ago) parent5996455
1 file changed+135−24
benchmarks/AesonCompareAutoInstances.hs+135−24
benchmarks/AesonCompareAutoInstances.hs+135−24
@@ -14,7 +14,7 @@ import GHC.Generics (Generic)
1414
1515import Data.Aeson.Types
1616import Data.Aeson.TH (mkToJSON, mkParseJSON)
17−import qualified Data.Aeson.Generic as G (fromJSON, toJSON)
17+import qualified Data.Aeson.Generic as G (fromJSON, toJSON)
1818
1919--------------------------------------------------------------------------------
2020
@@ -33,53 +33,164 @@ instance NFData a => NFData (D a) where
3333 rnf (Product s c x) = s `deepseq` c `deepseq` rnf x
3434 rnf (Record d b y) = d `deepseq` b `deepseq` rnf y
3535
36−--------------------------------------------------------------------------------
37−
3836type T = D (D (D ()))
3937
4038d :: T
41−d = Record
39+d = Record
4240 { testOne = 1234.56789
4341 , testTwo = True
4442 , testThree = Product "Hello World!" 'a' $
45− Record
43+ Record
4644 { testOne = 9876.54321
4745 , testTwo = False
4846 , testThree = Product "Yeehaa!!!" '\n' Nullary
4947 }
5048 }
5149
52−--------------------------------------------------------------------------------
53−
5450instance ToJSON a => ToJSON (D a)
5551instance FromJSON a => FromJSON (D a)
5652
53+thDToJSON :: ToJSON a => D a -> Value
54+thDToJSON = $(mkToJSON id ''D)
55+
56+thDParseJSON :: FromJSON a => Value -> Parser (D a)
57+thDParseJSON = $(mkParseJSON id ''D)
58+
59+thDFromJSON :: FromJSON a => Value -> Result (D a)
60+thDFromJSON = parse thDParseJSON
61+
5762--------------------------------------------------------------------------------
5863
59−thToJSON :: ToJSON a => D a -> Value
60−thToJSON = $(mkToJSON id ''D)
64+data BigRecord = BigRecord
65+ { field01 :: !(), field02 :: !(), field03 :: !(), field04 :: !(), field05 :: !()
66+ , field06 :: !(), field07 :: !(), field08 :: !(), field09 :: !(), field10 :: !()
67+ , field11 :: !(), field12 :: !(), field13 :: !(), field14 :: !(), field15 :: !()
68+ , field16 :: !(), field17 :: !(), field18 :: !(), field19 :: !(), field20 :: !()
69+ , field21 :: !(), field22 :: !(), field23 :: !(), field24 :: !(), field25 :: !()
70+ } deriving (Eq, Generic, Data, Typeable)
71+
72+instance NFData BigRecord
73+
74+bigRecord = BigRecord () () () () ()
75+ () () () () ()
76+ () () () () ()
77+ () () () () ()
78+ () () () () ()
79+
80+instance ToJSON BigRecord
81+instance FromJSON BigRecord
82+
83+thBigRecordToJSON :: BigRecord -> Value
84+thBigRecordToJSON = $(mkToJSON id ''BigRecord)
85+
86+thBigRecordParseJSON :: Value -> Parser BigRecord
87+thBigRecordParseJSON = $(mkParseJSON id ''BigRecord)
88+
89+thBigRecordFromJSON :: Value -> Result BigRecord
90+thBigRecordFromJSON = parse thBigRecordParseJSON
91+
92+--------------------------------------------------------------------------------
93+
94+data BigProduct = BigProduct
95+ !() !() !() !() !()
96+ !() !() !() !() !()
97+ !() !() !() !() !()
98+ !() !() !() !() !()
99+ !() !() !() !() !()
100+ deriving (Eq, Generic, Data, Typeable)
101+
102+instance NFData BigProduct
103+
104+bigProduct = BigProduct () () () () ()
105+ () () () () ()
106+ () () () () ()
107+ () () () () ()
108+ () () () () ()
109+
110+instance ToJSON BigProduct
111+instance FromJSON BigProduct
112+
113+thBigProductToJSON :: BigProduct -> Value
114+thBigProductToJSON = $(mkToJSON id ''BigProduct)
115+
116+thBigProductParseJSON :: Value -> Parser BigProduct
117+thBigProductParseJSON = $(mkParseJSON id ''BigProduct)
118+
119+thBigProductFromJSON :: Value -> Result BigProduct
120+thBigProductFromJSON = parse thBigProductParseJSON
121+
122+--------------------------------------------------------------------------------
123+
124+data BigSum = F01 | F02 | F03 | F04 | F05
125+ | F06 | F07 | F08 | F09 | F10
126+ | F11 | F12 | F13 | F14 | F15
127+ | F16 | F17 | F18 | F19 | F20
128+ | F21 | F22 | F23 | F24 | F25
129+ deriving (Eq, Generic, Data, Typeable)
130+
131+instance NFData BigSum
132+
133+bigSum = F12
134+
135+instance ToJSON BigSum
136+instance FromJSON BigSum
137+
138+thBigSumToJSON :: BigSum -> Value
139+thBigSumToJSON = $(mkToJSON id ''BigSum)
61140
62−thParseJSON :: FromJSON a => Value -> Parser (D a)
63−thParseJSON = $(mkParseJSON id ''D)
141+thBigSumParseJSON :: Value -> Parser BigSum
142+thBigSumParseJSON = $(mkParseJSON id ''BigSum)
64143
65−thFromJSON :: FromJSON a => Value -> Result (D a)
66−thFromJSON = parse thParseJSON
144+thBigSumFromJSON :: Value -> Result BigSum
145+thBigSumFromJSON = parse thBigSumParseJSON
67146
68147--------------------------------------------------------------------------------
69148
70−type FJ = Value -> Result T
149+type FJ a = Value -> Result a
71150
72151main :: IO ()
73−main =
74− let v = thToJSON d
75− in d `deepseq` v `deepseq` defaultMain
76− [ group "toJSON" (nf thToJSON d)
77− (nf G.toJSON d)
78− (nf toJSON d)
79− , group "fromJSON" (nf (thFromJSON :: FJ) v)
80− (nf (G.fromJSON :: FJ) v)
81− (nf (fromJSON :: FJ) v)
82− ]
152+main = defaultMain
153+ [ let v = thDToJSON d
154+ in d `deepseq` v `deepseq`
155+ bgroup "D"
156+ [ group "toJSON" (nf thDToJSON d)
157+ (nf G.toJSON d)
158+ (nf toJSON d)
159+ , group "fromJSON" (nf (thDFromJSON :: FJ T) v)
160+ (nf (G.fromJSON :: FJ T) v)
161+ (nf (fromJSON :: FJ T) v)
162+ ]
163+ , let v = thBigRecordToJSON bigRecord
164+ in bigRecord `deepseq` v `deepseq`
165+ bgroup "BigRecord"
166+ [ group "toJSON" (nf thBigRecordToJSON bigRecord)
167+ (nf G.toJSON bigRecord)
168+ (nf toJSON bigRecord)
169+ , group "fromJSON" (nf (thBigRecordFromJSON :: FJ BigRecord) v)
170+ (nf (G.fromJSON :: FJ BigRecord) v)
171+ (nf (fromJSON :: FJ BigRecord) v)
172+ ]
173+ , let v = thBigProductToJSON bigProduct
174+ in bigProduct `deepseq` v `deepseq`
175+ bgroup "BigProduct"
176+ [ group "toJSON" (nf thBigProductToJSON bigProduct)
177+ (nf G.toJSON bigProduct)
178+ (nf toJSON bigProduct)
179+ , group "fromJSON" (nf (thBigProductFromJSON :: FJ BigProduct) v)
180+ (nf (G.fromJSON :: FJ BigProduct) v)
181+ (nf (fromJSON :: FJ BigProduct) v)
182+ ]
183+ , let v = thBigSumToJSON bigSum
184+ in bigSum `deepseq` v `deepseq`
185+ bgroup "BigSum"
186+ [ group "toJSON" (nf thBigSumToJSON bigSum)
187+ (nf G.toJSON bigSum)
188+ (nf toJSON bigSum)
189+ , group "fromJSON" (nf (thBigSumFromJSON :: FJ BigSum) v)
190+ (nf (G.fromJSON :: FJ BigSum) v)
191+ (nf (fromJSON :: FJ BigSum) v)
192+ ]
193+ ]
83194
84195group n th syb gen = bgroup n [ bench "th" th
85196 , bench "syb" syb