@@ -157,3 +157,85 @@ end`)
157157 }
158158 }
159159}
160+
161+ func BenchmarkExecutionJSONParseLoop (b * testing.B ) {
162+ engine := benchmarkEngine ()
163+ script , err := engine .Compile (`def run(raw, n)
164+ total = 0
165+ for i in 1..n
166+ payload = JSON.parse(raw)
167+ total = total + payload[:score]
168+ end
169+ total
170+ end` )
171+ if err != nil {
172+ b .Fatalf ("compile failed: %v" , err )
173+ }
174+
175+ args := []Value {
176+ NewString (`{"score":7,"tags":["a","b","c"],"active":true}` ),
177+ NewInt (80 ),
178+ }
179+ b .ReportAllocs ()
180+ b .ResetTimer ()
181+ for i := 0 ; i < b .N ; i ++ {
182+ if _ , err := script .Call (context .Background (), "run" , args , CallOptions {}); err != nil {
183+ b .Fatalf ("call failed: %v" , err )
184+ }
185+ }
186+ }
187+
188+ func BenchmarkExecutionJSONStringifyLoop (b * testing.B ) {
189+ engine := benchmarkEngine ()
190+ script , err := engine .Compile (`def run(payload, n)
191+ out = ""
192+ for i in 1..n
193+ out = JSON.stringify(payload)
194+ end
195+ out
196+ end` )
197+ if err != nil {
198+ b .Fatalf ("compile failed: %v" , err )
199+ }
200+
201+ payload := NewHash (map [string ]Value {
202+ "id" : NewString ("player-7" ),
203+ "score" : NewInt (42 ),
204+ "active" : NewBool (true ),
205+ "tags" : NewArray ([]Value {NewString ("a" ), NewString ("b" ), NewString ("c" )}),
206+ })
207+ args := []Value {payload , NewInt (80 )}
208+ b .ReportAllocs ()
209+ b .ResetTimer ()
210+ for i := 0 ; i < b .N ; i ++ {
211+ if _ , err := script .Call (context .Background (), "run" , args , CallOptions {}); err != nil {
212+ b .Fatalf ("call failed: %v" , err )
213+ }
214+ }
215+ }
216+
217+ func BenchmarkExecutionRegexReplaceAllLoop (b * testing.B ) {
218+ engine := benchmarkEngine ()
219+ script , err := engine .Compile (`def run(text, n)
220+ out = ""
221+ for i in 1..n
222+ out = Regex.replace_all(text, "ID-[0-9]+", "X")
223+ end
224+ out
225+ end` )
226+ if err != nil {
227+ b .Fatalf ("compile failed: %v" , err )
228+ }
229+
230+ args := []Value {
231+ NewString ("ID-12 ID-34 ID-56 ID-78 ID-90" ),
232+ NewInt (80 ),
233+ }
234+ b .ReportAllocs ()
235+ b .ResetTimer ()
236+ for i := 0 ; i < b .N ; i ++ {
237+ if _ , err := script .Call (context .Background (), "run" , args , CallOptions {}); err != nil {
238+ b .Fatalf ("call failed: %v" , err )
239+ }
240+ }
241+ }
0 commit comments