@@ -0,0 +1,62 @@
1+module Test.Bench where
2+
3+import Prelude
4+
5+import Data.Array (range, replicate)
6+import Data.ArrayBuffer.ArrayBuffer (byteLength, empty)
7+import Data.ArrayBuffer.Builder (execPut)
8+import Data.ArrayBuffer.DataView (whole)
9+import Data.ArrayBuffer.Typed as Typed
10+import Data.ArrayBuffer.Types (Float32Array)
11+import Data.Float32 (fromNumber')
12+import Data.Foldable (for_)
13+import Data.Unfoldable (replicateA)
14+import Effect (Effect, forE)
15+import Effect.Console (log)
16+import Effect.Unsafe (unsafePerformEffect)
17+import Performance.Minibench (bench, benchWith)
18+import Protobuf.Decode as Decode
19+import Protobuf.Encode as Encode
20+import Protobuf.Runtime (manyLength)
21+import Text.Parsing.Parser (runParserT)
22+
23+main :: Effect Unit
24+main = do
25+
26+ log "\nWarmup bench"
27+ bench \_ -> forE 0 10000 (\_ -> pure unit)
28+
29+ buf10e3 <- execPut do
30+ -- void $ replicateA 10000 $ Encode.float' (fromNumber' 1.0)
31+ for_ (range 1 999) $ \_ -> Encode.float' (fromNumber' 1.0)
32+
33+ log "\nmanyLength float 10e3"
34+ benchWith 100 $ \_ -> void $ unsafePerformEffect $ runParserT (whole buf10e3) do
35+ manyLength (Decode.float) (byteLength buf10e3)
36+
37+ -- buf5000 <- execPut do
38+ -- for_ (range 1 5000) $ \_ -> Encode.float' (fromNumber' 1.0)
39+
40+ -- log "\nmanyLength float 5000"
41+ -- bench $ \_ -> void $ unsafePerformEffect $ runParserT (whole buf5000) do
42+ -- manyLength (Decode.float) (byteLength buf5000)
43+
44+ buf10e4 <- empty (4*10000)
45+ buf10e4Float :: Float32Array <- Typed.whole buf10e4
46+ Typed.fill (fromNumber' 1.0) 0 9999 buf10e4Float
47+
48+ log "\nmanyLength float 10e4"
49+ benchWith 100 $ \_ -> void $ unsafePerformEffect $ runParserT (whole buf10e4) do
50+ manyLength (Decode.float) (byteLength buf10e4)
51+
52+ buf10e5 <- empty (4*100000)
53+ buf10e5Float :: Float32Array <- Typed.whole buf10e5
54+ Typed.fill (fromNumber' 1.0) 0 99999 buf10e5Float
55+ -- buf10e5
56+ -- void $ replicateA 10000 $ Encode.float' (fromNumber' 1.0)
57+ -- for_ (range 1 1000) $ \_ -> Encode.float' (fromNumber' 1.0)
58+ -- forE 0 99999 $ \_ ->
59+
60+ log "\nmanyLength float 10e5"
61+ benchWith 100 $ \_ -> void $ unsafePerformEffect $ runParserT (whole buf10e5) do
62+ manyLength (Decode.float) (byteLength buf10e5)