1{-# LANGUAGE NoImplicitPrelude #-}
2
3module Main (main) where
4
5import Prelude.Compat
6
7import Criterion.Main
8import Data.Aeson (decode, encode)
9import Data.Time.Clock (UTCTime)
10import Data.Time.LocalTime (ZonedTime)
11import qualified Data.ByteString.Lazy as BL
12
13utcTime :: BL.ByteString -> Maybe [UTCTime]
14utcTime = decode
15
16zTime :: BL.ByteString -> Maybe [ZonedTime]
17zTime = decode
18
19main :: IO ()
20main = do
21  let file1 = BL.readFile "json-data/dates.json"
22  let file2 = BL.readFile "json-data/dates-fract.json"
23  defaultMain [
24      bgroup "decode" [
25        bgroup "UTCTime" [
26          env file1 $ \bs -> bench "whole" $ nf utcTime bs
27        , env file2 $ \bs -> bench "fractional" $ nf utcTime bs
28        ]
29      , bgroup "ZonedTime" [
30          env file1 $ \bs -> bench "whole" $ nf zTime bs
31        , env file2 $ \bs -> bench "fractional" $ nf zTime bs
32        ]
33      ]
34    , bgroup "encode" [
35        bgroup "UTCTime" [
36          env (utcTime <$> file1) $ \ts -> bench "whole" $ nf encode ts
37        , env (utcTime <$> file2) $ \ts -> bench "fractional" $ nf encode ts
38        ]
39      , bgroup "ZonedTime" [
40          env (zTime <$> file1) $ \ts -> bench "whole" $ nf encode ts
41        , env (zTime <$> file2) $ \ts -> bench "fractional" $ nf encode ts
42        ]
43      ]
44    ]
45