Blame benchmarks/AesonFoldable.hs

Packit 9a2dfb
{-# LANGUAGE OverloadedStrings #-}
Packit 9a2dfb
{-# LANGUAGE PackageImports #-}
Packit 9a2dfb
Packit 9a2dfb
module Main (main) where
Packit 9a2dfb
Packit 9a2dfb
import Criterion.Main
Packit 9a2dfb
Packit 9a2dfb
import Prelude ()
Packit 9a2dfb
import Prelude.Compat
Packit 9a2dfb
Packit 9a2dfb
import Data.Foldable (toList)
Packit 9a2dfb
import qualified "aeson" Data.Aeson as A
Packit 9a2dfb
import qualified "aeson-benchmarks" Data.Aeson as B
Packit 9a2dfb
import qualified Data.Sequence as S
Packit 9a2dfb
import qualified Data.Vector as V
Packit 9a2dfb
import qualified Data.Vector.Unboxed as U
Packit 9a2dfb
Packit 9a2dfb
-------------------------------------------------------------------------------
Packit 9a2dfb
-- List
Packit 9a2dfb
-------------------------------------------------------------------------------
Packit 9a2dfb
Packit 9a2dfb
newtype L f = L { getL :: f Int }
Packit 9a2dfb
Packit 9a2dfb
instance Foldable f => B.ToJSON (L f) where
Packit 9a2dfb
    toJSON = error "do not use this"
Packit 9a2dfb
    toEncoding = B.toEncoding . toList . getL
Packit 9a2dfb
Packit 9a2dfb
instance Foldable f => A.ToJSON (L f) where
Packit 9a2dfb
    toJSON = error "do not use this"
Packit 9a2dfb
    toEncoding = A.toEncoding . toList . getL
Packit 9a2dfb
Packit 9a2dfb
-------------------------------------------------------------------------------
Packit 9a2dfb
-- Foldable
Packit 9a2dfb
-------------------------------------------------------------------------------
Packit 9a2dfb
Packit 9a2dfb
newtype F f = F { getF :: f Int }
Packit 9a2dfb
Packit 9a2dfb
instance Foldable f => B.ToJSON (F f) where
Packit 9a2dfb
    toJSON = error "do not use this"
Packit 9a2dfb
    toEncoding = B.foldable . getF
Packit 9a2dfb
Packit 9a2dfb
instance Foldable f => A.ToJSON (F f) where
Packit 9a2dfb
    toJSON = error "do not use this"
Packit 9a2dfb
    toEncoding = A.foldable . getF
Packit 9a2dfb
Packit 9a2dfb
-------------------------------------------------------------------------------
Packit 9a2dfb
-- Values
Packit 9a2dfb
-------------------------------------------------------------------------------
Packit 9a2dfb
Packit 9a2dfb
valueList :: [Int]
Packit 9a2dfb
valueList = [1..1000]
Packit 9a2dfb
Packit 9a2dfb
valueSeq :: S.Seq Int
Packit 9a2dfb
valueSeq = S.fromList valueList
Packit 9a2dfb
Packit 9a2dfb
valueVector :: V.Vector Int
Packit 9a2dfb
valueVector = V.fromList valueList
Packit 9a2dfb
Packit 9a2dfb
valueUVector :: U.Vector Int
Packit 9a2dfb
valueUVector = U.fromList valueList
Packit 9a2dfb
Packit 9a2dfb
-------------------------------------------------------------------------------
Packit 9a2dfb
-- Main
Packit 9a2dfb
-------------------------------------------------------------------------------
Packit 9a2dfb
Packit 9a2dfb
benchEncodeA
Packit 9a2dfb
    :: A.ToJSON a
Packit 9a2dfb
    => String
Packit 9a2dfb
    -> a
Packit 9a2dfb
    -> Benchmark
Packit 9a2dfb
benchEncodeA name val
Packit 9a2dfb
    = bench ("A " ++ name) $ nf A.encode val
Packit 9a2dfb
Packit 9a2dfb
benchEncodeB
Packit 9a2dfb
    :: B.ToJSON a
Packit 9a2dfb
    => String
Packit 9a2dfb
    -> a
Packit 9a2dfb
    -> Benchmark
Packit 9a2dfb
benchEncodeB name val
Packit 9a2dfb
    = bench ("B " ++ name) $ nf B.encode val
Packit 9a2dfb
Packit 9a2dfb
main :: IO ()
Packit 9a2dfb
main =  defaultMain
Packit 9a2dfb
    [ bgroup "encode"
Packit 9a2dfb
        [ bgroup "List"
Packit 9a2dfb
            [ benchEncodeB "-"     valueList
Packit 9a2dfb
            , benchEncodeB "L" $ L valueList
Packit 9a2dfb
            , benchEncodeB "F" $ F valueList
Packit 9a2dfb
            , benchEncodeA "-"     valueList
Packit 9a2dfb
            , benchEncodeA "L" $ L valueList
Packit 9a2dfb
            , benchEncodeA "F" $ F valueList
Packit 9a2dfb
            ]
Packit 9a2dfb
        , bgroup "Seq"
Packit 9a2dfb
            [ benchEncodeB "-"     valueSeq
Packit 9a2dfb
            , benchEncodeB "L" $ L valueSeq
Packit 9a2dfb
            , benchEncodeB "F" $ F valueSeq
Packit 9a2dfb
            , benchEncodeA "-"     valueSeq
Packit 9a2dfb
            , benchEncodeA "L" $ L valueSeq
Packit 9a2dfb
            , benchEncodeA "F" $ F valueSeq
Packit 9a2dfb
            ]
Packit 9a2dfb
        , bgroup "Vector"
Packit 9a2dfb
            [ benchEncodeB "-"     valueVector
Packit 9a2dfb
            , benchEncodeB "L" $ L valueVector
Packit 9a2dfb
            , benchEncodeB "F" $ F valueVector
Packit 9a2dfb
            , benchEncodeA "-"     valueVector
Packit 9a2dfb
            , benchEncodeA "L" $ L valueVector
Packit 9a2dfb
            , benchEncodeA "F" $ F valueVector
Packit 9a2dfb
            ]
Packit 9a2dfb
        , bgroup "Vector.Unboxed"
Packit 9a2dfb
            [ benchEncodeB "-"     valueUVector
Packit 9a2dfb
            , benchEncodeA "-"     valueUVector
Packit 9a2dfb
            ]
Packit 9a2dfb
        ]
Packit 9a2dfb
    ]