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.
144 lines
4.4 KiB
144 lines
4.4 KiB
|
2 years ago
|
{-# 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
|
||
|
|
]
|
||
|
|
]
|