api-tools-0.8.0.1: main/Data/API/PerfTest.hs
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE OverloadedStrings #-}
module Data.API.PerfTest
( main
) where
import Data.API.API.DSL
import qualified Data.API.API.Gen as Gen
import Data.API.NormalForm
import Data.API.Types
import qualified Data.API.Value as Value
import Control.DeepSeq
import Control.Exception
import qualified Data.Aeson as JS
import qualified Codec.Serialise as CBOR
import Data.Binary.Serialise.CBOR.Extra
import System.Environment
import Test.QuickCheck
tyDesc :: APIType
{-
type T = [UTCTime]
tyDesc = TyList (TyBasic BTutc)
-}
type T = Gen.APISpec
tyDesc = TyName "APISpec"
newtype V = V { _V :: Value.Value }
instance CBOR.Serialise V where
encode (V v) = Value.encode v
decode = V <$!> Value.decode (apiNormalForm apiAPI) tyDesc
main :: IO ()
main = do
args <- getArgs
case args of
["read" , fp] -> do x <- CBOR.readFileDeserialise fp
_ <- evaluate (force (x :: T))
return ()
["read-aeson" , fp] -> do x <- CBOR.readFileDeserialise fp
_ <- evaluate (force (x :: JS.Value))
return ()
["read-generic", fp] -> do x <- CBOR.readFileDeserialise fp
_ <- evaluate (force (_V x))
return ()
["write" ,fp] -> do x <- generate (resize 500 arbitrary)
CBOR.writeFileSerialise fp (x :: T)
["write" ,fp,i] -> do x <- generate (resize (read i) arbitrary)
CBOR.writeFileSerialise fp (x :: T)
_ -> error "perf-test (read|read-generic|write) <file>"