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