@@ -59,8 +59,7 @@ import Bench.Json.TestData (largeJson, mediumJson)
59
59
import Data.Array (fold , replicate )
60
60
import Data.Array as Array
61
61
import Data.Either (Either (..), either )
62
- import Data.List (many , manyRec )
63
- import Data.List.Types (List )
62
+ import Data.List as List
64
63
import Data.Maybe (Maybe (..))
65
64
import Data.String.Regex (Regex , regex )
66
65
import Data.String.Regex as Regex
@@ -69,9 +68,9 @@ import Effect (Effect)
69
68
import Effect.Console (log )
70
69
import Effect.Exception (throw )
71
70
import Effect.Unsafe (unsafePerformEffect )
72
- import Parsing (Parser , runParser )
73
- import Parsing.Combinators (chainl , chainlRec , chainr , chainrRec , manyTill , manyTillRec , manyTillRec_ , manyTill_ , sepBy , sepByRec , sepEndBy1 , sepEndBy1Rec )
74
- import Parsing.String (anyChar , char , eof , string )
71
+ import Parsing (runParser )
72
+ import Parsing.Combinators (chainl , chainr , many , manyTill , manyTill_ , sepBy , sepEndBy1 , skipMany )
73
+ import Parsing.String (anyChar , eof , string )
75
74
import Parsing.String.Basic (digit )
76
75
import Performance.Minibench (benchWith )
77
76
import StringParser as StringParser
@@ -81,36 +80,18 @@ import StringParser.CodeUnits as StringParser.CodeUnits
81
80
string23 :: String
82
81
string23 = " 23"
83
82
84
- string23_10000 :: String
85
- string23_10000 = fold $ replicate 5000 string23
86
-
87
83
string23_1000 :: String
88
84
string23_1000 = fold $ replicate 500 string23
89
85
86
+ string23_10000 :: String
87
+ string23_10000 = fold $ replicate 5000 string23
88
+
90
89
stringSkidoo :: String
91
90
stringSkidoo = " skidoooooo"
92
91
93
92
stringSkidoo_100000 :: String
94
93
stringSkidoo_100000 = fold $ replicate 10000 stringSkidoo
95
94
96
- parse23 :: Parser String (List Char )
97
- parse23 = many digit
98
-
99
- parse23Points :: StringParser.Parser (List Char )
100
- parse23Points = many StringParser.CodePoints .anyDigit
101
-
102
- parse23Units :: StringParser.Parser (List Char )
103
- parse23Units = many StringParser.CodeUnits .anyDigit
104
-
105
- parse23Rec :: Parser String (List Char )
106
- parse23Rec = manyRec digit
107
-
108
- parse23PointsRec :: StringParser.Parser (List Char )
109
- parse23PointsRec = manyRec StringParser.CodePoints .anyDigit
110
-
111
- parse23UnitsRec :: StringParser.Parser (List Char )
112
- parse23UnitsRec = manyRec StringParser.CodeUnits .anyDigit
113
-
114
95
pattern23 :: Regex
115
96
pattern23 = either (unsafePerformEffect <<< throw) identity
116
97
$ regex " \\ d"
@@ -123,12 +104,6 @@ pattern23 = either (unsafePerformEffect <<< throw) identity
123
104
, unicode: true
124
105
}
125
106
126
- parseSkidoo :: Parser String (List String )
127
- parseSkidoo = many $ string " skidoooooo"
128
-
129
- parseSkidooRec :: Parser String (List String )
130
- parseSkidooRec = manyRec $ string " skidoooooo"
131
-
132
107
patternSkidoo :: Regex
133
108
patternSkidoo = either (unsafePerformEffect <<< throw) identity
134
109
$ regex " skidoooooo"
@@ -164,81 +139,63 @@ main = do
164
139
165
140
log " <th><h2>digit 10000</h2></th>"
166
141
htmlTableWrap " runParser many digit 10000" $ benchWith 50
167
- $ \_ -> throwLeft $ runParser string23_10000 parse23
168
- htmlTableWrap " runParser manyRec digit 10000" $ benchWith 50
169
- $ \_ -> throwLeft $ runParser string23_10000 parse23Rec
142
+ $ \_ -> throwLeft $ runParser string23_10000 (many digit)
170
143
htmlTableWrap " runParser Array.many digit 10000" $ benchWith 50
171
144
$ \_ -> throwLeft $ runParser string23_10000 (Array .many digit)
172
145
htmlTableWrap " StringParser manyRec CodePoints.anyDigit 10000" $ benchWith 20
173
- $ \_ -> throwLeft $ StringParser .runParser parse23PointsRec string23_10000
146
+ $ \_ -> throwLeft $ StringParser .runParser ( List .manyRec StringParser.CodePoints .anyDigit) string23_10000
174
147
htmlTableWrap " StringParser manyRec CodeUnits.anyDigit 10000" $ benchWith 200
175
- $ \_ -> throwLeft $ StringParser .runParser parse23UnitsRec string23_10000
148
+ $ \_ -> throwLeft $ StringParser .runParser ( List .manyRec StringParser.CodeUnits .anyDigit) string23_10000
176
149
htmlTableWrap " Regex.match \\ d* 10000" $ benchWith 200
177
150
$ \_ -> throwNothing " Regex.match failed" $ Regex .match pattern23 string23_10000
178
151
179
152
log " <th><h2>string 100000</h2></th>"
180
153
htmlTableWrap " runParser many string" $ benchWith 200
181
- $ \_ -> throwLeft $ runParser stringSkidoo_100000 parseSkidoo
182
- htmlTableWrap " runParser manyRec string" $ benchWith 200
183
- $ \_ -> throwLeft $ runParser stringSkidoo_100000 parseSkidooRec
154
+ $ \_ -> throwLeft $ runParser stringSkidoo_100000 (many $ string " skidoooooo" )
184
155
htmlTableWrap " Regex.match literal*" $ benchWith 200
185
156
$ \_ -> throwNothing " Regex.match failed" $ Regex .match patternSkidoo stringSkidoo_100000
186
157
187
- log " <th><h2>sepBy 1000</h2></th>"
188
- htmlTableWrap " runParser sepBy 1000" $ benchWith 200
189
- $ \_ -> throwLeft $ runParser string23_1000 $ sepBy anyChar (pure unit)
190
- htmlTableWrap " runParser sepByRec 1000" $ benchWith 200
191
- $ \_ -> throwLeft $ runParser string23_1000 $ sepByRec anyChar (pure unit)
158
+ log " <th><h2>many anyChar 10000</h2></th>"
159
+ htmlTableWrap " runParser many anyChar 10000" $ benchWith 50
160
+ $ \_ -> throwLeft $ runParser string23_10000 (many anyChar)
161
+ htmlTableWrap " runParser Array.many anyChar 10000" $ benchWith 50
162
+ $ \_ -> throwLeft $ runParser string23_10000 (Array .many anyChar)
163
+
164
+ log " <th><h2>skipMany anyChar 10000</h2></th>"
165
+ htmlTableWrap " runParser skipMany anyChar 10000" $ benchWith 50
166
+ $ \_ -> throwLeft $ runParser string23_10000 (skipMany anyChar)
192
167
193
168
log " <th><h2>sepBy 10000</h2></th>"
194
169
htmlTableWrap " runParser sepBy 10000" $ benchWith 50
195
170
$ \_ -> throwLeft $ runParser string23_10000 $ sepBy anyChar (pure unit)
196
- htmlTableWrap " runParser sepByRec 10000" $ benchWith 50
197
- $ \_ -> throwLeft $ runParser string23_10000 $ sepByRec anyChar (pure unit)
198
171
199
172
log " <th><h2>sepEndBy1 10000</h2></th>"
200
173
htmlTableWrap " runParser sepEndBy1 10000" $ benchWith 50
201
174
$ \_ -> throwLeft $ runParser string23_10000 $ sepEndBy1 anyChar (pure unit)
202
- htmlTableWrap " runParser sepEndBy1Rec 10000" $ benchWith 50
203
- $ \_ -> throwLeft $ runParser string23_10000 $ sepEndBy1Rec anyChar (pure unit)
204
175
205
176
log " <th><h2>chainl 10000</h2></th>"
206
177
htmlTableWrap " runParser chainl 10000" $ benchWith 50
207
178
$ \_ -> throwLeft $ runParser string23_10000 $ chainl anyChar (pure const) ' x'
208
- htmlTableWrap " runParser chainlRec 10000" $ benchWith 50
209
- $ \_ -> throwLeft $ runParser string23_10000 $ chainlRec anyChar (pure const) ' x'
210
179
211
180
log " <th><h2>chainr 1000</h2></th>"
212
181
htmlTableWrap " runParser chainr 1000" $ benchWith 200
213
182
$ \_ -> throwLeft $ runParser string23_1000 $ chainr anyChar (pure const) ' x'
214
- htmlTableWrap " runParser chainrRec 1000" $ benchWith 200
215
- $ \_ -> throwLeft $ runParser string23_1000 $ chainrRec anyChar (pure const) ' x'
216
183
217
184
log " <th><h2>chainr 10000</h2></th>"
218
185
htmlTableWrap " runParser chainr 10000" $ benchWith 50
219
186
$ \_ -> throwLeft $ runParser string23_10000 $ chainr anyChar (pure const) ' x'
220
- htmlTableWrap " runParser chainrRec 10000" $ benchWith 50
221
- $ \_ -> throwLeft $ runParser string23_10000 $ chainrRec anyChar (pure const) ' x'
222
187
223
188
log " <th><h2>manyTill 1000</h2></th>"
224
189
htmlTableWrap " runParser manyTill 1000" $ benchWith 200
225
190
$ \_ -> throwLeft $ runParser string23_1000 $ manyTill anyChar eof
226
- htmlTableWrap " runParser manyTillRec 1000" $ benchWith 200
227
- $ \_ -> throwLeft $ runParser string23_1000 $ manyTillRec anyChar eof
228
191
htmlTableWrap " runParser manyTill_ 1000" $ benchWith 200
229
192
$ \_ -> throwLeft $ runParser string23_1000 $ manyTill_ anyChar eof
230
- htmlTableWrap " runParser manyTillRec_ 1000" $ benchWith 200
231
- $ \_ -> throwLeft $ runParser string23_1000 $ manyTillRec_ anyChar eof
232
193
233
194
log " <th><h2>manyTill 10000</h2></th>"
234
195
htmlTableWrap " runParser manyTill 10000" $ benchWith 50
235
196
$ \_ -> throwLeft $ runParser string23_10000 $ manyTill anyChar eof
236
- htmlTableWrap " runParser manyTillRec 10000" $ benchWith 50
237
- $ \_ -> throwLeft $ runParser string23_10000 $ manyTillRec anyChar eof
238
197
htmlTableWrap " runParser manyTill_ 10000" $ benchWith 50
239
198
$ \_ -> throwLeft $ runParser string23_10000 $ manyTill_ anyChar eof
240
- htmlTableWrap " runParser manyTillRec_ 10000" $ benchWith 50
241
- $ \_ -> throwLeft $ runParser string23_10000 $ manyTillRec_ anyChar eof
242
199
243
200
log " <th><h2>mediumJson</h2></th>"
244
201
htmlTableWrap " runParser json mediumJson" $ benchWith 200
0 commit comments