js/src/tests/ecma_5/Number/defaultvalue.js

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:d6b929ada03f
1 /*
2 * Any copyright is dedicated to the Public Domain.
3 * http://creativecommonn.org/licenses/publicdomain/
4 */
5
6 var BUGNUMBER = 645464;
7 var summary =
8 "[[DefaultValue]] behavior wrong for Number with overridden valueOf/toString";
9
10 print(BUGNUMBER + ": " + summary);
11
12 /**************
13 * BEGIN TEST *
14 **************/
15
16
17 // equality
18
19 var n = new Number();
20 assertEq(n == 0, true);
21
22 var n2 = new Number();
23 n2.valueOf = function() { return 17; };
24 assertEq(n2 == 17, true);
25
26 var n3 = new Number();
27 n3.toString = function() { return 42; };
28 assertEq(n3 == 0, true);
29
30 function testEquality()
31 {
32 var n = new Number();
33 assertEq(n == 0, true);
34
35 var n2 = new Number();
36 n2.valueOf = function() { return 17; };
37 assertEq(n2 == 17, true);
38
39 var n3 = new Number();
40 n3.toString = function() { return 42; };
41 assertEq(n3 == 0, true);
42 }
43 testEquality();
44
45
46 // addition of Number to number
47
48 var n = new Number();
49 assertEq(n + 5, 5);
50
51 var n2 = new Number();
52 n2.toString = function() { return 9; };
53 assertEq(n2 + 3, 3);
54
55 var n3 = new Number();
56 n3.valueOf = function() { return 17; };
57 assertEq(n3 + 5, 22);
58
59 function testNumberAddition()
60 {
61 var n = new Number();
62 assertEq(n + 5, 5);
63
64 var n2 = new Number();
65 n2.toString = function() { return 9; };
66 assertEq(n2 + 3, 3);
67
68 var n3 = new Number();
69 n3.valueOf = function() { return 17; };
70 assertEq(n3 + 5, 22);
71 }
72 testNumberAddition();
73
74
75 // addition of Number to Number
76
77 var n = new Number();
78 assertEq(n + n, 0);
79
80 var n2 = new Number();
81 n2.toString = function() { return 5; };
82 assertEq(n2 + n2, 0);
83
84 var n3 = new Number();
85 n3.valueOf = function() { return 8.5; };
86 assertEq(n3 + n3, 17);
87
88 function testNonNumberAddition()
89 {
90 var n = new Number();
91 assertEq(n + n, 0);
92
93 var n2 = new Number();
94 n2.toString = function() { return 5; };
95 assertEq(n2 + n2, 0);
96
97 var n3 = new Number();
98 n3.valueOf = function() { return 8.5; };
99 assertEq(n3 + n3, 17);
100 }
101 testNonNumberAddition();
102
103
104 // Number as bracketed property name
105
106 var obj = { 0: 17, 8: 42, 9: 8675309 };
107
108 var n = new Number();
109 assertEq(obj[n], 17);
110
111 var n2 = new Number();
112 n2.valueOf = function() { return 8; }
113 assertEq(obj[n2], 17);
114
115 var n3 = new Number();
116 n3.toString = function() { return 9; };
117 assertEq(obj[n3], 8675309);
118
119 function testPropertyNameToNumber()
120 {
121 var obj = { 0: 17, 8: 42, 9: 8675309 };
122
123 var n = new Number();
124 assertEq(obj[n], 17);
125
126 var n2 = new Number();
127 n2.valueOf = function() { return 8; }
128 assertEq(obj[n2], 17);
129
130 var n3 = new Number();
131 n3.toString = function() { return 9; };
132 assertEq(obj[n3], 8675309);
133 }
134 testPropertyNameToNumber();
135
136
137 // Number as property name with |in| operator
138
139 var n = new Number();
140 assertEq(n in { 0: 5 }, true);
141
142 var n2 = new Number();
143 n2.toString = function() { return "baz"; };
144 assertEq(n2 in { baz: 42 }, true);
145
146 var n3 = new Number();
147 n3.valueOf = function() { return "quux"; };
148 assertEq(n3 in { 0: 17 }, true);
149
150 function testInOperatorName()
151 {
152 var n = new Number();
153 assertEq(n in { 0: 5 }, true);
154
155 var n2 = new Number();
156 n2.toString = function() { return "baz"; };
157 assertEq(n2 in { baz: 42 }, true);
158
159 var n3 = new Number();
160 n3.valueOf = function() { return "quux"; };
161 assertEq(n3 in { 0: 17 }, true);
162 }
163 testInOperatorName();
164
165 /******************************************************************************/
166
167 if (typeof reportCompare === "function")
168 reportCompare(true, true);
169
170 print("All tests passed!");

mercurial