|  | // Copyright 2018 the V8 project authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | (() => { | 
|  |  | 
|  | function Internalize(s) { | 
|  | return Object.keys({[s]:0})[0]; | 
|  | } | 
|  |  | 
|  | const string = Internalize('a'.repeat(100)); | 
|  | let pattern; | 
|  | let result; | 
|  |  | 
|  | const setupString = () => pattern = '.'; | 
|  | const setupRegExp = () => pattern = /./g; | 
|  | const setupZeroWidth = () => pattern = /(?:)/g; | 
|  | const setupZeroWidthUnicode = () => pattern = /(?:)/gu; | 
|  |  | 
|  | function benchIteratorCreation() { | 
|  | result = string.matchAll(pattern); | 
|  | } | 
|  |  | 
|  | function benchBuiltin() { | 
|  | for (const match of string.matchAll(pattern)) { | 
|  | result = match[0]; | 
|  | } | 
|  | } | 
|  |  | 
|  | function benchManualString() { | 
|  | let regexp = new RegExp(pattern, 'g'); | 
|  | let match; | 
|  | while ((match = regexp.exec(string)) !== null) { | 
|  | result = match[0]; | 
|  | } | 
|  | } | 
|  |  | 
|  | function benchManualRegExp() { | 
|  | let match; | 
|  | while ((match = pattern.exec(string)) !== null) { | 
|  | result = match[0]; | 
|  | } | 
|  | } | 
|  |  | 
|  | // Iterator Creation | 
|  | new BenchmarkSuite('StringMatchAllBuiltinRegExpIteratorCreation', [20], [ | 
|  | new Benchmark('StringMatchAllBuiltinRegExpIteratorCreation', false, false, 0, benchIteratorCreation, setupRegExp) | 
|  | ]); | 
|  | new BenchmarkSuite('StringMatchAllBuiltinStringIteratorCreation', [20], [ | 
|  | new Benchmark('StringMatchAllBuiltinStringIteratorCreation', false, false, 0, benchIteratorCreation, setupString) | 
|  | ]); | 
|  |  | 
|  | // String | 
|  | new BenchmarkSuite('StringMatchAllBuiltinString', [20], [ | 
|  | new Benchmark('StringMatchAllBuiltinString', false, false, 0, benchBuiltin, setupString) | 
|  | ]); | 
|  | new BenchmarkSuite('StringMatchAllManualString', [20], [ | 
|  | new Benchmark('StringMatchAllManualString', false, false, 0, benchManualString, setupString) | 
|  | ]); | 
|  |  | 
|  | // RegExp | 
|  | new BenchmarkSuite('StringMatchAllBuiltinRegExp', [20], [ | 
|  | new Benchmark('StringMatchAllBuiltinRegExp', false, false, 0, benchBuiltin, setupRegExp) | 
|  | ]); | 
|  | new BenchmarkSuite('StringMatchAllManualRegExp', [20], [ | 
|  | new Benchmark('StringMatchAllManualRegExp', false, false, 0, benchManualRegExp, setupRegExp) | 
|  | ]); | 
|  |  | 
|  | // Zero width | 
|  | new BenchmarkSuite('StringMatchAllBuiltinZeroWidth', [20], [ | 
|  | new Benchmark('StringMatchAllBuiltinZeroWidth', false, false, 0, benchBuiltin, setupZeroWidth) | 
|  | ]); | 
|  | new BenchmarkSuite('StringMatchAllBuiltinZeroWidthUnicode', [20], [ | 
|  | new Benchmark('StringMatchAllBuiltinZeroWidthUnicode', false, false, 0, benchBuiltin, setupZeroWidthUnicode) | 
|  | ]); | 
|  |  | 
|  | })(); |