v8/test/js-perf-test/RegExp/complex_case_test.js
Frank Tang b9e1c2c4e9 Add benchmark for regexp "gi".
Measure speed regression of a range of char in complex regexp
The measurement is using the code from chromium:977003

To measure
python -u tools/run_perf.py --binary-override-path  out/x64.release/d8 \
  test/js-perf-test/RegExp.json

Run on three setting:
a. m74 based on tag 7.4.301
b. trunk (m77)
c. apply cl 1674851 on trunk

ComplexCaseInsensitiveTest-RegExp
Score is better if higher
		Score	imp %	comp to m74
m74		22910
		23430
		23360
Trunk (m77)	15190	66.30%
		15710	67.05%
		15570	66.65%
CL 1674851	24590	161.88%	107.33%
		24690	157.16%	105.38%
		24200	155.43%	103.60%

Bug: chromium:977003

Change-Id: I7756f4739c44a07949103650565d1ca902e1b7ca
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1679651
Reviewed-by: Jakob Kummerow <jkummerow@chromium.org>
Commit-Queue: Frank Tang <ftang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#62449}
2019-06-28 17:56:31 +00:00

47 lines
1.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright 2019 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.
// The following RegExp regression case from
// https://bugs.chromium.org/p/chromium/issues/detail?id=977003
let g = "[\\t\\n\\f ]";
let W = g + "*";
let h = "[\\ud800-\\udbff][\\udc00-\\udfff]";
let k = "[\\u0080-\\ud7ff\\ue000-\\ufffd]|" + h;
let U = "[0-9a-fA-F]{1,6}" + g + "?";
let E = "(?:" + U + "|[\\u0020-\\u007e\\u0080-\\ud7ff\\ue000\\ufffd]|" + h + ")";
let m = "\\\\" + E;
let o = "(?:[\\t\\x21\\x23-\\x26\\x28-\\x5b\\x5d-\\x7e]|" + k + "|" + m + ")";
let p = '[^\'"\\n\\f\\\\]|\\\\[\\s\\S]';
let q = '"(?:\'|' + p + ')*"' + '|\'(?:\"|' + p + ')*\'';
let r = "[-+]?(?:[0-9]+(?:[.][0-9]+)?|[.][0-9]+)";
let t = "(?:[a-zA-Z_]|" + k + "|" + m + ")";
let u = "(?:[a-zA-Z0-9_-]|" + k + "|" + m + ")";
let v = u + "+";
let I = "-?" + t + u + "*";
let x = "(?:@?-?" + t + "|#)" + u + "*";
let y = r + "(?:%|" + I + ")?";
let z = "url[(]" + W + "(?:" + q + "|" + o + "*)" + W + "[)]";
let B = "U[+][0-9A-F?]{1,6}(?:-[0-9A-F]{1,6})?";
let C = "<\!--";
let F = "-->";
let S = g + "+";
let G = "/(?:[*][^*]*[*]+(?:[^/][^*]*[*]+)*/|/[^\\n\\f]*)";
let J = "(?!url[(])" + I + "[(]";
let R = "[~|^$*]=";
let T = '[^"\'\\\\/]|/(?![/*])';
let V = "\\uFEFF";
let Y = [V, B, z, J, x, q, y, C, F, S, G, R, T].join("|");
function ComplexGlobalCaseInsensitiveMatch() {
// keep the RegExp in the measurement but not string concat nor join.
let X = new RegExp(Y, "gi");
"abcſABCβκς".match(X);
"color:".match(X);
}
benchmarks = [ [ComplexGlobalCaseInsensitiveMatch, () => {}],
];
createBenchmarkSuite("ComplexCaseInsensitiveTest");