packages feed

microlens-aeson-2.3.0: bench/Bench.hs

{-# LANGUAGE OverloadedStrings #-}

module Main where

import qualified Control.Lens as L
import           Criterion.Main
import qualified Data.Aeson.Lens as AL
import qualified Data.ByteString.Char8 as BS
import qualified Data.ByteString.Lazy.Char8 as BL
import qualified Data.Text as T
import qualified Data.Text.Lazy as TL
import           Lens.Micro
import           Lens.Micro.Aeson

---

main :: IO ()
main = defaultMain
  [ bgroup "First elem in Array"
    [ bench "microlens-aeson (String)"  $ nf (^? nth 0 . _Number) ("[1, \"x\"]" :: String)
    , bench "microlens-aeson (T.Text)"  $ nf (^? nth 0 . _Number) ("[1, \"x\"]" :: T.Text)
    , bench "microlens-aeson (TL.Text)" $ nf (^? nth 0 . _Number) ("[1, \"x\"]" :: TL.Text)
    , bench "microlens-aeson (BS)"      $ nf (^? nth 0 . _Number) ("[1, \"x\"]" :: BS.ByteString)
    , bench "microlens-aeson (BL)"      $ nf (^? nth 0 . _Number) ("[1, \"x\"]" :: BL.ByteString)
    , bench "lens-aeson (String)"  $ nf (L.^? AL.nth 0 . AL._Number) ("[1, \"x\"]" :: String)
    , bench "lens-aeson (T.Text)"  $ nf (L.^? AL.nth 0 . AL._Number) ("[1, \"x\"]" :: T.Text)
    , bench "lens-aeson (TL.Text)" $ nf (L.^? AL.nth 0 . AL._Number) ("[1, \"x\"]" :: TL.Text)
    , bench "lens-aeson (BS)"      $ nf (L.^? AL.nth 0 . AL._Number) ("[1, \"x\"]" :: BS.ByteString)
    , bench "lens-aeson (BL)"      $ nf (L.^? AL.nth 0 . AL._Number) ("[1, \"x\"]" :: BL.ByteString) ]
  , bgroup "Getting via `key`"
    [ bench "microlens-aeson (Text)" $ nf (^? key "a")      ("{\"a\": 100, \"b\": 200}" :: T.Text)
    , bench "lens-aeson (Text)"      $ nf (L.^? AL.key "a") ("{\"a\": 100, \"b\": 200}" :: T.Text) ]
  , bgroup "Setting via `key`"
    [ bench "microlens-aeson (Text)" $ nf (& key "a" . _Number %~ (* 10)) ("{\"a\": 100, \"b\": 200}" :: T.Text)
    , bench "lens-aeson (Text)" $ nf (& AL.key "a" . AL._Number L.%~ (* 10)) ("{\"a\": 100, \"b\": 200}" :: T.Text) ]
  ]