dhodovsk / source-git / ghc-aeson

Forked from source-git/ghc-aeson 4 years ago
Clone

Blame benchmarks/Dates.hs

Packit 9a2dfb
{-# OPTIONS_GHC -fsimpl-tick-factor=0 #-}
Packit 9a2dfb
module Main (main) where
Packit 9a2dfb
Packit 9a2dfb
import Prelude ()
Packit 9a2dfb
import Prelude.Compat
Packit 9a2dfb
Packit 9a2dfb
import Criterion.Main
Packit 9a2dfb
import Data.Aeson (decode, encode)
Packit 9a2dfb
import Data.Time.Clock (UTCTime)
Packit 9a2dfb
import Data.Time.LocalTime (ZonedTime)
Packit 9a2dfb
import qualified Data.ByteString.Lazy as BL
Packit 9a2dfb
Packit 9a2dfb
utcTime :: BL.ByteString -> Maybe [UTCTime]
Packit 9a2dfb
utcTime = decode
Packit 9a2dfb
Packit 9a2dfb
zTime :: BL.ByteString -> Maybe [ZonedTime]
Packit 9a2dfb
zTime = decode
Packit 9a2dfb
Packit 9a2dfb
main :: IO ()
Packit 9a2dfb
main = do
Packit 9a2dfb
  let file1 = BL.readFile "json-data/dates.json"
Packit 9a2dfb
  let file2 = BL.readFile "json-data/dates-fract.json"
Packit 9a2dfb
  defaultMain [
Packit 9a2dfb
      bgroup "decode" [
Packit 9a2dfb
        bgroup "UTCTime" [
Packit 9a2dfb
          env file1 $ \bs -> bench "whole" $ nf utcTime bs
Packit 9a2dfb
        , env file2 $ \bs -> bench "fractional" $ nf utcTime bs
Packit 9a2dfb
        ]
Packit 9a2dfb
      , bgroup "ZonedTime" [
Packit 9a2dfb
          env file1 $ \bs -> bench "whole" $ nf zTime bs
Packit 9a2dfb
        , env file2 $ \bs -> bench "fractional" $ nf zTime bs
Packit 9a2dfb
        ]
Packit 9a2dfb
      ]
Packit 9a2dfb
    , bgroup "encode" [
Packit 9a2dfb
        bgroup "UTCTime" [
Packit 9a2dfb
          env (utcTime <$> file1) $ \ts -> bench "whole" $ nf encode ts
Packit 9a2dfb
        , env (utcTime <$> file2) $ \ts -> bench "fractional" $ nf encode ts
Packit 9a2dfb
        ]
Packit 9a2dfb
      , bgroup "ZonedTime" [
Packit 9a2dfb
          env (zTime <$> file1) $ \ts -> bench "whole" $ nf encode ts
Packit 9a2dfb
        , env (zTime <$> file2) $ \ts -> bench "fractional" $ nf encode ts
Packit 9a2dfb
        ]
Packit 9a2dfb
      ]
Packit 9a2dfb
    ]