Source code

Revision control

Copy as Markdown

Other Tools

var o = {
valueOf : function() {
return {
toString : function() { return "fail" }
}
},
toString : function() { return "good" }
};
var p = {
valueOf : function() {
return {
toString : function() { return "0" }
}
},
toString : function() { return "7" }
};
var q = {
toString : function() {
return {
valueOf : function() { return "0" }
}
},
valueOf : function() { return "7" }
};
function assert(b, s) {
if (b)
return;
assertEq("imacro produces incorrect result for " + s, "fail");
}
function run() {
for (var i = 0; i < 5; ++i) {
// equality / inequality
assert(!(o == "fail"), "obj == any");
assert(!("fail" == o), "any == obj");
assert(!(o != "good"), "obj != any");
assert(!("good" != o), "any != obj");
// binary
assert(!((p | 3) != 7), "obj | any");
assert(!((3 | p) != 7), "any | obj");
assert(!((p | p) != 7), "obj | obj");
assert(!((p & 3) != 3), "obj & any");
assert(!((3 & p) != 3), "any & obj");
assert(!((p & p) != 7), "obj & obj");
assert(!((p * 3) != 21), "obj * any");
assert(!((3 * p) != 21), "any * obj");
assert(!((p * p) != 49), "obj * obj");
// addition
assert(!(o + "" != "good"), "obj + any");
assert(!("" + o != "good"), "any + obj");
assert(!(o + o != "goodgood"), "any + any");
// sign
assert(!(-p != -7), "-obj");
assert(!(+p != 7), "+obj");
// String
assert(!(String(q) != "7"), "String(obj)");
assert(!(new String(q) != "7"), "new String(obj)");
}
return true;
}
run();