CSV would be better than JSON

This commit is contained in:
Seungheon Oh 2022-05-24 16:55:48 -05:00
parent 35ba59c5d6
commit 29dc10bf36
4 changed files with 41 additions and 22 deletions

View file

@ -1,12 +1,15 @@
{-# LANGUAGE RecordWildCards #-}
module Bench (Benchmark (..), benchmarkScript, specificationTreeToBenchmarks) where
import Codec.Serialise (serialise)
import Data.Aeson hiding (Success)
import Data.ByteString.Lazy qualified as LBS
import Data.ByteString.Short qualified as SBS
import Data.Csv (ToNamedRecord, DefaultOrdered, toNamedRecord, namedRecord, header, headerOrder, (.=))
import Data.List (intercalate)
import Data.Maybe (fromJust)
import Data.Text (Text, pack)
import GHC.Generics (Generic)
import Plutus.V1.Ledger.Api (
ExBudget (ExBudget),
ExCPU,
@ -34,25 +37,20 @@ data Benchmark = Benchmark
, bScriptSize :: Int
-- ^ The on-chain size of a script.
}
deriving stock (Show, Eq, Ord)
deriving stock (Show, Eq, Ord, Generic)
instance FromJSON Benchmark where
parseJSON (Object v) =
Benchmark <$> v .: "name"
<*> v .: "cpu"
<*> v .: "mem"
<*> v .: "size"
parseJSON _ = mempty
instance ToJSON Benchmark where
toJSON (Benchmark name cpu mem size) =
object
instance ToNamedRecord Benchmark where
toNamedRecord (Benchmark {..}) =
namedRecord
[ "name" .= name
, "cpu" .= cpu
, "mem" .= mem
, "size" .= size
, "cpu" .= bCPUBudget
, "mem" .= bMemoryBudget
, "size" .= bScriptSize
]
instance DefaultOrdered Benchmark where
headerOrder _ = header ["name", "cpu", "mem", "size"]
benchmarkScript :: String -> Script -> Benchmark
benchmarkScript name script = Benchmark (pack name) cpu mem size
where

View file

@ -1,7 +1,8 @@
module Main (main) where
import Bench (specificationTreeToBenchmarks)
import Data.Aeson.Text (encodeToLazyText)
import Data.Csv (encodeDefaultOrderedByName)
import Data.Text.Lazy.Encoding (decodeUtf8)
import Data.Text.Lazy.IO as I
import Spec.AuthorityToken qualified as AuthorityToken
import Spec.Effect.GovernorMutation qualified as GovernorMutation
@ -17,8 +18,8 @@ import Prelude
main :: IO ()
main = do
I.writeFile "bench.json" $
encodeToLazyText $
I.writeFile "bench.csv" $
(decodeUtf8 . encodeDefaultOrderedByName) $
specificationTreeToBenchmarks $
group
"Benchmark"