{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE QuasiQuotes #-}
import Criterion.Main
import qualified Data.ByteString as BS
import Data.Text.Encoding
import Data.Text.Encoding.Error
import Safe
import Text.RawString.QQ
import Text.XML.Light.Input (parseXMLDoc)
import Transaq
import Transaq.Parsing
validClient =
[r|
TYPE
CURRENCY
MARKET
UNION
FORTS_ACC
|] :: BS.ByteString
validCandleKinds =
[r|
4
600
M10
5
900
M15
|] :: BS.ByteString
validCandles =
[r|
|] :: BS.ByteString
validServerStatus =
[r| |] :: BS.ByteString
validMarkets =
[r|
FOO
BAR
|] :: BS.ByteString
validSecurities =
[r|
SECCODE
CLASS
BOARD
15
CURRENCY
SHORTNAME
3
0.1
10
1
6.28
SECTYPE
SECTZ
1
FOO
CURRENCYID
|] :: BS.ByteString
validAllTrades =
[r|
SEC1
14
BOARD
12.34
10
B
100
N
SEC2
15
BOARD
12.35
11
S
200
N
|] :: BS.ByteString
parseDom :: BS.ByteString -> Maybe TransaqResponse
parseDom d = parseXMLDoc (decodeUtf8With lenientDecode d) >>= fromXml
parseSax :: BS.ByteString -> Maybe TransaqResponse
parseSax = headMay . parseTransaqResponses
main = defaultMain
[
bgroup "DOM"
[
bench "" $ whnf parseDom validClient
, bench "" $ whnf parseDom validCandleKinds
, bench "" $ whnf parseDom validCandles
, bench "" $ whnf parseDom validServerStatus
, bench "" $ whnf parseDom validMarkets
, bench "" $ whnf parseDom validSecurities
, bench "" $ whnf parseDom validAllTrades
]
, bgroup "SAX"
[
bench "" $ whnf parseSax validClient
, bench "" $ whnf parseSax validCandleKinds
, bench "" $ whnf parseSax validCandles
, bench "" $ whnf parseSax validServerStatus
, bench "" $ whnf parseSax validMarkets
, bench "" $ whnf parseSax validSecurities
, bench "" $ whnf parseSax validAllTrades
]
]