summaryrefslogtreecommitdiff
path: root/deps/v8/test/js-perf-test/Strings/string-matchall.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/js-perf-test/Strings/string-matchall.js')
-rw-r--r--deps/v8/test/js-perf-test/Strings/string-matchall.js77
1 files changed, 77 insertions, 0 deletions
diff --git a/deps/v8/test/js-perf-test/Strings/string-matchall.js b/deps/v8/test/js-perf-test/Strings/string-matchall.js
new file mode 100644
index 0000000000..2b86d50f49
--- /dev/null
+++ b/deps/v8/test/js-perf-test/Strings/string-matchall.js
@@ -0,0 +1,77 @@
+// 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)
+]);
+
+})();