You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
4.4 KiB
143 lines
4.4 KiB
{-# 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| |
|
<client id="FOO"> |
|
<type>TYPE</type> |
|
<currency>CURRENCY</currency> |
|
<market>MARKET</market> |
|
<union>UNION</union> |
|
<forts_acc>FORTS_ACC</forts_acc> |
|
</client> |
|
|] :: BS.ByteString |
|
|
|
validCandleKinds = |
|
[r| |
|
<candlekinds> |
|
<kind> |
|
<id>4</id> |
|
<period>600</period> |
|
<name>M10</name> |
|
</kind> |
|
<kind> |
|
<id>5</id> |
|
<period>900</period> |
|
<name>M15</name> |
|
</kind> |
|
</candlekinds> |
|
|] :: BS.ByteString |
|
|
|
validCandles = |
|
[r| |
|
<candles secid="12" period="1" status="0" board="foo" seccode="bar"> |
|
<candle date="05.01.2024 12:30:00.123" open="41.3" high="42" low="40" close="41.6" volume="1234" oi="78" /> |
|
<candle date="05.01.2024 12:30:01.123" open="40.3" high="44" low="40" close="41.8" volume="1234" /> |
|
<candle date="05.01.2024 12:30:02.123" open="40.3" high="44" low="40" close="41.8" volume="1234" /> |
|
<candle date="05.01.2024 12:30:03.123" open="40.3" high="44" low="40" close="41.8" volume="1234" /> |
|
</candles> |
|
|] :: BS.ByteString |
|
|
|
validServerStatus = |
|
[r|<server_status id="22" connected="true" recover="true" server_tz="TZ" sys_ver="42" build="51" /> |] :: BS.ByteString |
|
|
|
validMarkets = |
|
[r| |
|
<markets> |
|
<market id="1">FOO</market> |
|
<market id="2">BAR</market> |
|
</markets> |
|
|] :: BS.ByteString |
|
|
|
validSecurities = |
|
[r| |
|
<securities> |
|
<security secid="1" active="true"> |
|
<seccode>SECCODE</seccode> |
|
<instrclass>CLASS</instrclass> |
|
<board>BOARD</board> |
|
<market>15</market> |
|
<currency>CURRENCY</currency> |
|
<shortname>SHORTNAME</shortname> |
|
<decimals>3</decimals> |
|
<minstep>0.1</minstep> |
|
<lotsize>10</lotsize> |
|
<lotdivider>1</lotdivider> |
|
<point_cost>6.28</point_cost> |
|
<optmask usecredit="yes" bymarket="no" nosplit="yes" fok="no" ioc="no" /> |
|
<sectype>SECTYPE</sectype> |
|
<sec_tz>SECTZ</sec_tz> |
|
<quotestype>1</quotestype> |
|
<MIC>FOO</MIC> |
|
<currencyid>CURRENCYID</currencyid> |
|
</security> |
|
</securities> |
|
|] :: BS.ByteString |
|
|
|
validAllTrades = |
|
[r| |
|
<alltrades> |
|
<trade secid="1"> |
|
<seccode>SEC1</seccode> |
|
<tradeno>14</tradeno> |
|
<time>05.01.2024 19:34:18.234</time> |
|
<board>BOARD</board> |
|
<price>12.34</price> |
|
<quantity>10</quantity> |
|
<buysell>B</buysell> |
|
<openinterest>100</openinterest> |
|
<period>N</period> |
|
</trade> |
|
<trade secid="2"> |
|
<seccode>SEC2</seccode> |
|
<tradeno>15</tradeno> |
|
<time>05.01.2024 19:34:19.234</time> |
|
<board>BOARD</board> |
|
<price>12.35</price> |
|
<quantity>11</quantity> |
|
<buysell>S</buysell> |
|
<openinterest>200</openinterest> |
|
<period>N</period> |
|
</trade> |
|
</alltrades> |
|
|] :: 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 "<client>" $ whnf parseDom validClient |
|
, bench "<candlekinds>" $ whnf parseDom validCandleKinds |
|
, bench "<candles>" $ whnf parseDom validCandles |
|
, bench "<server_status>" $ whnf parseDom validServerStatus |
|
, bench "<markets>" $ whnf parseDom validMarkets |
|
, bench "<securities>" $ whnf parseDom validSecurities |
|
, bench "<alltrades>" $ whnf parseDom validAllTrades |
|
] |
|
, bgroup "SAX" |
|
[ |
|
bench "<client>" $ whnf parseSax validClient |
|
, bench "<candlekinds>" $ whnf parseSax validCandleKinds |
|
, bench "<candles>" $ whnf parseSax validCandles |
|
, bench "<server_status>" $ whnf parseSax validServerStatus |
|
, bench "<markets>" $ whnf parseSax validMarkets |
|
, bench "<securities>" $ whnf parseSax validSecurities |
|
, bench "<alltrades>" $ whnf parseSax validAllTrades |
|
] |
|
]
|
|
|