1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/ecma_5/Number/defaultvalue.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,170 @@ 1.4 +/* 1.5 + * Any copyright is dedicated to the Public Domain. 1.6 + * http://creativecommonn.org/licenses/publicdomain/ 1.7 + */ 1.8 + 1.9 +var BUGNUMBER = 645464; 1.10 +var summary = 1.11 + "[[DefaultValue]] behavior wrong for Number with overridden valueOf/toString"; 1.12 + 1.13 +print(BUGNUMBER + ": " + summary); 1.14 + 1.15 +/************** 1.16 + * BEGIN TEST * 1.17 + **************/ 1.18 + 1.19 + 1.20 +// equality 1.21 + 1.22 +var n = new Number(); 1.23 +assertEq(n == 0, true); 1.24 + 1.25 +var n2 = new Number(); 1.26 +n2.valueOf = function() { return 17; }; 1.27 +assertEq(n2 == 17, true); 1.28 + 1.29 +var n3 = new Number(); 1.30 +n3.toString = function() { return 42; }; 1.31 +assertEq(n3 == 0, true); 1.32 + 1.33 +function testEquality() 1.34 +{ 1.35 + var n = new Number(); 1.36 + assertEq(n == 0, true); 1.37 + 1.38 + var n2 = new Number(); 1.39 + n2.valueOf = function() { return 17; }; 1.40 + assertEq(n2 == 17, true); 1.41 + 1.42 + var n3 = new Number(); 1.43 + n3.toString = function() { return 42; }; 1.44 + assertEq(n3 == 0, true); 1.45 +} 1.46 +testEquality(); 1.47 + 1.48 + 1.49 +// addition of Number to number 1.50 + 1.51 +var n = new Number(); 1.52 +assertEq(n + 5, 5); 1.53 + 1.54 +var n2 = new Number(); 1.55 +n2.toString = function() { return 9; }; 1.56 +assertEq(n2 + 3, 3); 1.57 + 1.58 +var n3 = new Number(); 1.59 +n3.valueOf = function() { return 17; }; 1.60 +assertEq(n3 + 5, 22); 1.61 + 1.62 +function testNumberAddition() 1.63 +{ 1.64 + var n = new Number(); 1.65 + assertEq(n + 5, 5); 1.66 + 1.67 + var n2 = new Number(); 1.68 + n2.toString = function() { return 9; }; 1.69 + assertEq(n2 + 3, 3); 1.70 + 1.71 + var n3 = new Number(); 1.72 + n3.valueOf = function() { return 17; }; 1.73 + assertEq(n3 + 5, 22); 1.74 +} 1.75 +testNumberAddition(); 1.76 + 1.77 + 1.78 +// addition of Number to Number 1.79 + 1.80 +var n = new Number(); 1.81 +assertEq(n + n, 0); 1.82 + 1.83 +var n2 = new Number(); 1.84 +n2.toString = function() { return 5; }; 1.85 +assertEq(n2 + n2, 0); 1.86 + 1.87 +var n3 = new Number(); 1.88 +n3.valueOf = function() { return 8.5; }; 1.89 +assertEq(n3 + n3, 17); 1.90 + 1.91 +function testNonNumberAddition() 1.92 +{ 1.93 + var n = new Number(); 1.94 + assertEq(n + n, 0); 1.95 + 1.96 + var n2 = new Number(); 1.97 + n2.toString = function() { return 5; }; 1.98 + assertEq(n2 + n2, 0); 1.99 + 1.100 + var n3 = new Number(); 1.101 + n3.valueOf = function() { return 8.5; }; 1.102 + assertEq(n3 + n3, 17); 1.103 +} 1.104 +testNonNumberAddition(); 1.105 + 1.106 + 1.107 +// Number as bracketed property name 1.108 + 1.109 +var obj = { 0: 17, 8: 42, 9: 8675309 }; 1.110 + 1.111 +var n = new Number(); 1.112 +assertEq(obj[n], 17); 1.113 + 1.114 +var n2 = new Number(); 1.115 +n2.valueOf = function() { return 8; } 1.116 +assertEq(obj[n2], 17); 1.117 + 1.118 +var n3 = new Number(); 1.119 +n3.toString = function() { return 9; }; 1.120 +assertEq(obj[n3], 8675309); 1.121 + 1.122 +function testPropertyNameToNumber() 1.123 +{ 1.124 + var obj = { 0: 17, 8: 42, 9: 8675309 }; 1.125 + 1.126 + var n = new Number(); 1.127 + assertEq(obj[n], 17); 1.128 + 1.129 + var n2 = new Number(); 1.130 + n2.valueOf = function() { return 8; } 1.131 + assertEq(obj[n2], 17); 1.132 + 1.133 + var n3 = new Number(); 1.134 + n3.toString = function() { return 9; }; 1.135 + assertEq(obj[n3], 8675309); 1.136 +} 1.137 +testPropertyNameToNumber(); 1.138 + 1.139 + 1.140 +// Number as property name with |in| operator 1.141 + 1.142 +var n = new Number(); 1.143 +assertEq(n in { 0: 5 }, true); 1.144 + 1.145 +var n2 = new Number(); 1.146 +n2.toString = function() { return "baz"; }; 1.147 +assertEq(n2 in { baz: 42 }, true); 1.148 + 1.149 +var n3 = new Number(); 1.150 +n3.valueOf = function() { return "quux"; }; 1.151 +assertEq(n3 in { 0: 17 }, true); 1.152 + 1.153 +function testInOperatorName() 1.154 +{ 1.155 + var n = new Number(); 1.156 + assertEq(n in { 0: 5 }, true); 1.157 + 1.158 + var n2 = new Number(); 1.159 + n2.toString = function() { return "baz"; }; 1.160 + assertEq(n2 in { baz: 42 }, true); 1.161 + 1.162 + var n3 = new Number(); 1.163 + n3.valueOf = function() { return "quux"; }; 1.164 + assertEq(n3 in { 0: 17 }, true); 1.165 +} 1.166 +testInOperatorName(); 1.167 + 1.168 +/******************************************************************************/ 1.169 + 1.170 +if (typeof reportCompare === "function") 1.171 + reportCompare(true, true); 1.172 + 1.173 +print("All tests passed!");