packages feed

aeson-schemas-1.3.1: bench/Benchmarks/FromJSON.hs

{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}
{-# OPTIONS_GHC -freduction-depth=0 #-}

module Benchmarks.FromJSON where

import Control.DeepSeq (NFData(..))
import Criterion.Main
import qualified Data.Aeson as Aeson

import Data.Aeson.Schema (IsSchema, Object)

import Benchmarks.Data.Objects
import Benchmarks.Data.Schemas

benchmarks :: Benchmark
benchmarks = bgroup "FromJSON instance"
  [ byKeys
  , byNestedKeys
  ]
  where
    byKeys = bgroup "# of keys"
      [ bench "1" $ nf (Aeson.fromJSON @(Object Schema1)) (schemaValue @Schema1)
      , bench "5" $ nf (Aeson.fromJSON @(Object Schema5)) (schemaValue @Schema5)
      , bench "10" $ nf (Aeson.fromJSON @(Object Schema10)) (schemaValue @Schema10)
      , bench "100" $ nf (Aeson.fromJSON @(Object Schema100)) (schemaValue @Schema100)
      ]

    byNestedKeys = bgroup "# of nested keys"
      [ bench "1" $ nf (Aeson.fromJSON @(Object SchemaNest1)) (schemaValue @SchemaNest1)
      , bench "5" $ nf (Aeson.fromJSON @(Object SchemaNest5)) (schemaValue @SchemaNest5)
      , bench "10" $ nf (Aeson.fromJSON @(Object SchemaNest10)) (schemaValue @SchemaNest10)
      , bench "100" $ nf (Aeson.fromJSON @(Object SchemaNest100)) (schemaValue @SchemaNest100)
      ]

{- Orphans -}

instance IsSchema schema => NFData (Object schema) where
  rnf = rnf . show