1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/basic/bug507180.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,69 @@ 1.4 +var o = { 1.5 + valueOf : function() { 1.6 + return { 1.7 + toString : function() { return "fail" } 1.8 + } 1.9 + }, 1.10 + toString : function() { return "good" } 1.11 +}; 1.12 + 1.13 +var p = { 1.14 + valueOf : function() { 1.15 + return { 1.16 + toString : function() { return "0" } 1.17 + } 1.18 + }, 1.19 + toString : function() { return "7" } 1.20 +}; 1.21 + 1.22 +var q = { 1.23 + toString : function() { 1.24 + return { 1.25 + valueOf : function() { return "0" } 1.26 + } 1.27 + }, 1.28 + valueOf : function() { return "7" } 1.29 +}; 1.30 + 1.31 +function assert(b, s) { 1.32 + if (b) 1.33 + return; 1.34 + assertEq("imacro produces incorrect result for " + s, "fail"); 1.35 +} 1.36 + 1.37 +function run() { 1.38 + for (var i = 0; i < 5; ++i) { 1.39 + // equality / inequality 1.40 + assert(!(o == "fail"), "obj == any"); 1.41 + assert(!("fail" == o), "any == obj"); 1.42 + assert(!(o != "good"), "obj != any"); 1.43 + assert(!("good" != o), "any != obj"); 1.44 + 1.45 + // binary 1.46 + assert(!((p | 3) != 7), "obj | any"); 1.47 + assert(!((3 | p) != 7), "any | obj"); 1.48 + assert(!((p | p) != 7), "obj | obj"); 1.49 + assert(!((p & 3) != 3), "obj & any"); 1.50 + assert(!((3 & p) != 3), "any & obj"); 1.51 + assert(!((p & p) != 7), "obj & obj"); 1.52 + assert(!((p * 3) != 21), "obj * any"); 1.53 + assert(!((3 * p) != 21), "any * obj"); 1.54 + assert(!((p * p) != 49), "obj * obj"); 1.55 + 1.56 + // addition 1.57 + assert(!(o + "" != "good"), "obj + any"); 1.58 + assert(!("" + o != "good"), "any + obj"); 1.59 + assert(!(o + o != "goodgood"), "any + any"); 1.60 + 1.61 + // sign 1.62 + assert(!(-p != -7), "-obj"); 1.63 + assert(!(+p != 7), "+obj"); 1.64 + 1.65 + // String 1.66 + assert(!(String(q) != "7"), "String(obj)"); 1.67 + assert(!(new String(q) != "7"), "new String(obj)"); 1.68 + } 1.69 + return true; 1.70 +} 1.71 + 1.72 +run();