| // 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) |
| ]); |
| |
| })(); |