startTest("dromaeo-object-regexp", '812dde38'); // Try to force real results var str = [], tmp, ret, re, testStrings = []; var i = 65536; function randomChar() { return String.fromCharCode((25 * Math.random()) + 97); } for (var i = 0; i < 16384; i++) str.push(randomChar()); str = str.join(""); str += str; str += str; function generateTestStrings(count) { var t, nest; if (testStrings.length >= count) return testStrings.slice(0, count); for (var i = testStrings.length; i < count; i++) { // Make all tested strings different t = randomChar() + str + randomChar(); nest = Math.floor(4 * Math.random()); for (var j = 0; j < nest; j++) { t = randomChar() + t + randomChar(); } // Try to minimize benchmark order dependencies by // exercising the strings for (var j = 0; j < t.length; j += 100) { ret = t[j]; ret = t.substring(j, j + 100); } testStrings[i] = t; } return testStrings; } // TESTS: split prep(function () { // It's impossible to specify empty regexp by simply // using two slashes as this will be interpreted as a // comment start. See note to ECMA-262 5th 7.8.5. re = /(?:)/; tmp = generateTestStrings(30); }); test("Compiled Object Empty Split", function () { for (var i = 0; i < 30; i++) ret = tmp[i].split(re); }); prep(function () { re = /a/; tmp = generateTestStrings(30); }); test("Compiled Object Char Split", function () { for (var i = 0; i < 30; i++) ret = tmp[i].split(re); }); prep(function () { re = /.*/; tmp = generateTestStrings(100); }); test("Compiled Object Variable Split", function () { for (var i = 0; i < 100; i++) ret = tmp[i].split(re); }); // TESTS: Compiled RegExps prep(function () { re = /aaaaaaaaaa/g; tmp = generateTestStrings(100); }); test("Compiled Match", function () { for (var i = 0; i < 100; i++) ret = tmp[i].match(re); }); prep(function () { tmp = generateTestStrings(100); }); test("Compiled Test", function () { for (var i = 0; i < 100; i++) ret = re.test(tmp[i]); }); prep(function () { tmp = generateTestStrings(100); }); test("Compiled Empty Replace", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(re, ""); }); prep(function () { tmp = generateTestStrings(50); }); test("Compiled 12 Char Replace", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(re, "asdfasdfasdf"); }); prep(function () { re = new RegExp("aaaaaaaaaa", "g"); tmp = generateTestStrings(100); }); test("Compiled Object Match", function () { for (var i = 0; i < 100; i++) ret = tmp[i].match(re); }); prep(function () { tmp = generateTestStrings(100); }); test("Compiled Object Test", function () { for (var i = 0; i < 100; i++) ret = re.test(tmp[i]); }); prep(function () { tmp = generateTestStrings(50); }); test("Compiled Object Empty Replace", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(re, ""); }); prep(function () { tmp = generateTestStrings(50); }); test("Compiled Object 12 Char Replace", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(re, "asdfasdfasdf"); }); prep(function () { tmp = generateTestStrings(50); }); test("Compiled Object 12 Char Replace Function", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(re, function (all) { return "asdfasdfasdf"; }); }); // TESTS: Variable Length prep(function () { re = /a.*a/; tmp = generateTestStrings(100); }); test("Compiled Variable Match", function () { for (var i = 0; i < 100; i++) ret = tmp[i].match(re); }); prep(function () { tmp = generateTestStrings(100); }); test("Compiled Variable Test", function () { for (var i = 0; i < 100; i++) ret = re.test(tmp[i]); }); prep(function () { tmp = generateTestStrings(50); }); test("Compiled Variable Empty Replace", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(re, ""); }); prep(function () { tmp = generateTestStrings(50); }); test("Compiled Variable 12 Char Replace", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(re, "asdfasdfasdf"); }); prep(function () { re = new RegExp("aaaaaaaaaa", "g"); tmp = generateTestStrings(100); }); test("Compiled Variable Object Match", function () { for (var i = 0; i < 100; i++) ret = tmp[i].match(re); }); prep(function () { tmp = generateTestStrings(100); }); test("Compiled Variable Object Test", function () { for (var i = 0; i < 100; i++) ret = re.test(tmp[i]); }); prep(function () { tmp = generateTestStrings(50); }); test("Compiled Variable Object Empty Replace", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(re, ""); }); prep(function () { tmp = generateTestStrings(50); }); test("Compiled Variable Object 12 Char Replace", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(re, "asdfasdfasdf"); }); prep(function () { tmp = generateTestStrings(50); }); test("Compiled Variable Object 12 Char Replace Function", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(re, function (all) { return "asdfasdfasdf"; }); }); // TESTS: Capturing prep(function () { re = /aa(b)aa/g; tmp = generateTestStrings(100); }); test("Compiled Capture Match", function () { for (var i = 0; i < 100; i++) ret = tmp[i].match(re); }); prep(function () { tmp = generateTestStrings(50); }); test("Compiled Capture Replace", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(re, "asdfasdfasdf"); }); prep(function () { tmp = generateTestStrings(50); }); test("Compiled Capture Replace with Capture", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(re, "asdf\\1asdfasdf"); }); prep(function () { tmp = generateTestStrings(50); }); test("Compiled Capture Replace with Capture Function", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(re, function (all, capture) { return "asdf" + capture + "asdfasdf"; }); }); prep(function () { tmp = generateTestStrings(50); }); test("Compiled Capture Replace with Upperase Capture Function", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(re, function (all, capture) { return capture.toUpperCase(); }); }); // TESTS: Uncompiled RegExps prep(function () { tmp = generateTestStrings(100); }); test("Uncompiled Match", function () { for (var i = 0; i < 100; i++) ret = tmp[i].match(/aaaaaaaaaa/g); }); prep(function () { tmp = generateTestStrings(100); }); test("Uncompiled Test", function () { for (var i = 0; i < 100; i++) ret = (/aaaaaaaaaa/g).test(tmp[i]); }); prep(function () { tmp = generateTestStrings(50); }); test("Uncompiled Empty Replace", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(/aaaaaaaaaa/g, ""); }); prep(function () { tmp = generateTestStrings(50); }); test("Uncompiled 12 Char Replace", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(/aaaaaaaaaa/g, "asdfasdfasdf"); }); prep(function () { tmp = generateTestStrings(100); }); test("Uncompiled Object Match", function () { for (var i = 0; i < 100; i++) ret = tmp[i].match(new RegExp("aaaaaaaaaa", "g")); }); prep(function () { tmp = generateTestStrings(100); }); test("Uncompiled Object Test", function () { for (var i = 0; i < 100; i++) ret = (new RegExp("aaaaaaaaaa", "g")).test(tmp[i]); }); prep(function () { tmp = generateTestStrings(50); }); test("Uncompiled Object Empty Replace", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(new RegExp("aaaaaaaaaa", "g"), ""); }); prep(function () { tmp = generateTestStrings(50); }); test("Uncompiled Object 12 Char Replace", function () { for (var i = 0; i < 50; i++) ret = tmp[i].replace(new RegExp("aaaaaaaaaa", "g"), "asdfasdfasdf"); }); endTest();