complex_case_test.js 1.67 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
// 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");