1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Main (main) where
import Criterion.Main
import Prelude.Compat
import Data.Foldable (toList)
import qualified Data.Aeson as A
import qualified Data.Sequence as S
import qualified Data.Vector as V
import qualified Data.Vector.Unboxed as U
-------------------------------------------------------------------------------
-- List
-------------------------------------------------------------------------------
newtype L f = L { getL :: f Int }
instance Foldable f => A.ToJSON (L f) where
toJSON = error "do not use this"
toEncoding = A.toEncoding . toList . getL
-------------------------------------------------------------------------------
-- Foldable
-------------------------------------------------------------------------------
newtype F f = F { getF :: f Int }
instance Foldable f => A.ToJSON (F f) where
toJSON = error "do not use this"
toEncoding = A.foldable . getF
-------------------------------------------------------------------------------
-- Values
-------------------------------------------------------------------------------
valueList :: [Int]
valueList = [1..1000]
valueSeq :: S.Seq Int
valueSeq = S.fromList valueList
valueVector :: V.Vector Int
valueVector = V.fromList valueList
valueUVector :: U.Vector Int
valueUVector = U.fromList valueList
-------------------------------------------------------------------------------
-- Main
-------------------------------------------------------------------------------
benchEncode
:: A.ToJSON a
=> String
-> a
-> Benchmark
benchEncode name val
= bench ("A " ++ name) $ nf A.encode val
main :: IO ()
main = defaultMain
[ bgroup "encode"
[ bgroup "List"
[ benchEncode "-" valueList
, benchEncode "L" $ L valueList
, benchEncode "F" $ F valueList
]
, bgroup "Seq"
[ benchEncode "-" valueSeq
, benchEncode "L" $ L valueSeq
, benchEncode "F" $ F valueSeq
]
, bgroup "Vector"
[ benchEncode "-" valueVector
, benchEncode "L" $ L valueVector
, benchEncode "F" $ F valueVector
]
, bgroup "Vector.Unboxed"
[ benchEncode "-" valueUVector
]
]
]
|