{-# 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 ] ]