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