blob: c85fa54429229cfcc8dd0866930a0a896a901f69 [file] [log] [blame]
setJitCompilerOption("baseline.warmup.trigger", 10);
setJitCompilerOption("ion.warmup.trigger", 20);
function join_check() {
var lengthWasCalled = false;
var obj = {"0": "", "1": ""};
Object.defineProperty(obj, "length", {
get : function(){ lengthWasCalled = true; return 2; },
enumerable : true,
configurable : true
});
var res = Array.prototype.join.call(obj, { toString: function () {
if (lengthWasCalled)
return "good";
else
return "bad";
}})
assertEq(res, "good");
}
function split(i) {
var x = (i + "->" + i).split("->");
assertEq(x[0], "" + i);
return i;
}
function join(i) {
var x = [i, i].join("->");
assertEq(x, i + "->" + i);
return i;
}
function split_join(i) {
var x = (i + "-" + i).split("-").join("->");
assertEq(x, i + "->" + i);
return i;
}
function split_join_2(i) {
var x = (i + "-" + i).split("-");
x.push("" + i);
var res = x.join("->");
assertEq(res, i + "->" + i + "->" + i);
return i;
}
function resumeHere() { bailout(); }
function split_join_3(i) {
var x = (i + "-" + i).split("-");
resumeHere();
var res = x.join("->");
assertEq(res, i + "->" + i);
return i;
}
function trip(i) {
if (i == 99)
assertEq(myjoin.arguments[1][0], "" + i)
}
function myjoin(i, x) {
trip(i);
return x.join("->");
}
function split_join_4(i) {
var x = (i + "-" + i).split("-");
var res = myjoin(i, x);
assertEq(res, i + "->" + i);
return i;
}
// Check that we do not consider the string argument of join as a replacement
// pattern, as the string replace primitive is supposed to do.
function split_join_pattern(i) {
var s = i + "-" + i;
assertEq(s.split("-").join("$`$&$'"), i + "$`$&$'" + i);
assertEq(s.replace("-", "$`$&$'"), "" + i + i + "-" + i + i);
}
// Check that, as opposed to String.replace, we are doing a global replacement
// as String.split does.
function split_join_multiple(i) {
var s1 = i + "-\n-" + i + "-\n-" + i;
assertEq(s1.split("-\n-").join("-") , i + "-" + i + "-" + i);
assertEq(s1.replace("-\n-", "-") , i + "-" + i + "-\n-" + i);
// SpiderMonkey extension
assertEq(s1.replace("-\n-", "-", "g"), i + "-" + i + "-" + i);
var s2 = "abc";
assertEq(s2.split("").join("" + i) , "a" + i + "b" + i + "c");
assertEq(s2.replace("", "" + i) , i + "abc");
// SpiderMonkey extension
assertEq(s2.replace("", "" + i, "g") , i + "a" + i + "b" + i + "c" + i);
}
for (var i = 0; i < 100; ++i) {
join_check(i);
split(i);
join(i);
split_join(i);
split_join_2(i);
split_join_3(i);
split_join_4(i);
split_join_pattern(i);
split_join_multiple(i);
}