Skip to content

Commit 3ddb84d

Browse files
committed
More idiomatic F# implementation.
1 parent 3698057 commit 3ddb84d

File tree

1 file changed

+38
-37
lines changed

1 file changed

+38
-37
lines changed

FS.fs

+38-37
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,46 @@
1-
let NUM_RECORDS = 50 * 1000 * 444
1+
open System.Diagnostics
22

3-
type FSMemTrade = {
4-
mutable TradeId : int64;
5-
mutable ClientId : int64;
6-
mutable VenueId : int32;
7-
mutable InstrumentCode : int32;
8-
mutable Price : int64;
9-
mutable Quantity : int64;
10-
mutable Side : char}
3+
let NUM_RECORDS = 50L * 1000L * 444L
114

12-
let trades : FSMemTrade array = Array.zeroCreate NUM_RECORDS
13-
let prepareArray =
14-
for i in 0 .. (NUM_RECORDS - 1) do
15-
Array.set trades i {TradeId = (int64 0); ClientId = (int64 0); VenueId = (int32 0); InstrumentCode = (int32 0); Price = (int64 0); Quantity = (int64 0); Side = 'a'}
5+
type FSMemTrade = {
6+
TradeId : int64;
7+
ClientId : int64;
8+
VenueId : int32;
9+
InstrumentCode : int32;
10+
Price : int64;
11+
Quantity : int64;
12+
Side : char}
1613

17-
let initTrades() =
18-
printfn "initiating trades"
19-
for i in 0 .. (NUM_RECORDS - 1) do
20-
let trade = {
21-
TradeId = (int64 i);
22-
ClientId = (int64 1);
23-
VenueId = (int32 123);
24-
InstrumentCode = (int32 321);
25-
Price = (int64 i);
26-
Quantity = (int64 i);
27-
Side = if (i%2 = 0) then 'S' else 'B'}
28-
Array.set trades i trade
14+
let initTrades (tradesArray : FSMemTrade array) =
15+
printfn "initiating trades"
16+
for i in 0 .. tradesArray.Length - 1 do
17+
let idx = int64 i
18+
tradesArray.[i] <- {
19+
TradeId = idx;
20+
ClientId = idx;
21+
VenueId = 123;
22+
InstrumentCode = 321;
23+
Price = idx;
24+
Quantity = idx;
25+
Side = if (i % 2 = 0) then 'S' else 'B'
26+
}
2927

30-
let perfRun n =
31-
let startT = System.DateTime.Now.Ticks / System.TimeSpan.TicksPerMillisecond
32-
let mutable buyCost = (int64 0)
33-
let mutable sellCost = (int64 0)
34-
initTrades()
35-
for i in 0 .. (NUM_RECORDS - 1) do
36-
if (trades.[i].Side = 'B') then buyCost <- trades.[i].Price * trades.[i].Quantity else sellCost <- trades.[i].Price * trades.[i].Quantity
37-
let endT = System.DateTime.Now.Ticks / System.TimeSpan.TicksPerMillisecond
38-
let duration = endT - startT
28+
let perfRun n trades =
29+
let sw = Stopwatch.StartNew()
30+
let mutable buyCost = 0L
31+
let mutable sellCost = 0L
32+
initTrades trades
33+
for trade in trades do
34+
if (trade.Side = 'B') then
35+
buyCost <- trade.Price * trade.Quantity
36+
else
37+
sellCost <- trade.Price * trade.Quantity
38+
let duration = sw.ElapsedMilliseconds
39+
sw.Stop()
3940
printfn "%d - duration %d ms" n duration
4041
printfn "buyCost = %O sellCost = %O" buyCost sellCost
4142

4243
let main =
43-
prepareArray
44-
for i in 0 .. 4 do
45-
perfRun i
44+
let array = Array.zeroCreate (int32 NUM_RECORDS)
45+
for i in 0 .. 5 do
46+
perfRun i array

0 commit comments

Comments
 (0)