Unreviewed build fix after r202429; AVStreamDataParser does not exist on iOS.
[WebKit.git] / Source / JavaScriptCore / tests / stress / global-isNaN-basics.js
1 function isNaNOnInteger(value)
2 {
3     return isNaN(value);
4 }
5 noInline(isNaNOnInteger);
6
7 // *** Test simple cases on integers. ***
8 function testIsNaNOnIntegers()
9 {
10     // Bounds.
11     var value = isNaNOnInteger(0);
12     if (value)
13         throw "isNaNOnInteger(0) = " + value;
14
15     var value = isNaNOnInteger(-2147483648);
16     if (value)
17         throw "isNaNOnInteger(-2147483648) = " + value;
18
19     var value = isNaNOnInteger(2147483647);
20     if (value)
21         throw "isNaNOnInteger(2147483647) = " + value;
22
23     // Simple values.
24     var value = isNaNOnInteger(-1);
25     if (value)
26         throw "isNaNOnInteger(-1) = " + value;
27
28     var value = isNaNOnInteger(42);
29     if (value)
30         throw "isNaNOnInteger(42) = " + value;
31
32     var value = isNaNOnInteger(-42);
33     if (value)
34         throw "isNaNOnInteger(-42) = " + value;
35 }
36 noInline(testIsNaNOnIntegers);
37
38 for (var i = 0; i < 1e4; ++i) {
39     testIsNaNOnIntegers();
40 }
41
42 // Make sure we don't do anything stupid when the type is unexpected.
43 function verifyIsNaNOnIntegerWithOtherTypes()
44 {
45     var value = isNaNOnInteger(Math.PI);
46     if (value)
47         throw "isNaNOnInteger(Math.PI) = " + value;
48
49     var value = isNaNOnInteger("42");
50     if (value)
51         throw "isNaNOnInteger(\"42\") = " + value;
52
53     var value = isNaNOnInteger("WebKit");
54     if (!value)
55         throw "isNaNOnInteger(\"WebKit\") = " + value;
56
57     var value = isNaNOnInteger(-0);
58     if (value)
59         throw "isNaNOnInteger(-0) = " + value;
60 }
61 noInline(verifyIsNaNOnIntegerWithOtherTypes);
62
63 for (var i = 0; i < 1e4; ++i) {
64     verifyIsNaNOnIntegerWithOtherTypes();
65 }
66
67 // *** Test simple cases on doubles. ***
68 function isNaNOnDouble(value)
69 {
70     return isNaN(value);
71 }
72 noInline(isNaNOnDouble);
73
74 // Test simple cases on doubles.
75 function testIsNaNOnDoubles()
76 {
77     var value = isNaNOnDouble(Math.PI);
78     if (value)
79         throw "isNaNOnDouble(Math.PI) = " + value;
80
81     var value = isNaNOnDouble(Math.E);
82     if (value)
83         throw "isNaNOnDouble(Math.E) = " + value;
84
85     var value = isNaNOnDouble(Math.LN2);
86     if (value)
87         throw "isNaNOnDouble(Math.LN2) = " + value;
88
89     var value = isNaNOnDouble(-0);
90     if (value)
91         throw "isNaNOnDouble(-0) = " + value;
92
93     var value = isNaNOnDouble(NaN);
94     if (!value)
95         throw "isNaNOnDouble(NaN) = " + value;
96
97     var value = isNaNOnDouble(Number.POSITIVE_INFINITY);
98     if (value)
99         throw "isNaNOnDouble(Number.POSITIVE_INFINITY) = " + value;
100
101     var value = isNaNOnDouble(Number.NEGATIVE_INFINITY);
102     if (value)
103         throw "isNaNOnDouble(Number.NEGATIVE_INFINITY) = " + value;
104 }
105 noInline(testIsNaNOnDoubles);
106
107 for (var i = 0; i < 1e6; ++i) {
108     testIsNaNOnDoubles();
109 }
110
111 // Make sure we don't do anything stupid when the type is unexpected.
112 function verifyIsNaNOnDoublesWithOtherTypes()
113 {
114     var value = isNaNOnDouble(1);
115     if (value)
116         throw "isNaNOnDouble(1) = " + value;
117
118     var value = isNaNOnDouble("42");
119     if (value)
120         throw "isNaNOnDouble(\"42\") = " + value;
121
122     var value = isNaNOnDouble("WebKit");
123     if (!value)
124         throw "isNaNOnDouble(\"WebKit\") = " + value;
125
126     var value = isNaNOnDouble({});
127     if (!value)
128         throw "isNaNOnDouble({}) = " + value;
129 }
130 noInline(verifyIsNaNOnDoublesWithOtherTypes);
131
132 for (var i = 0; i < 1e4; ++i) {
133     verifyIsNaNOnDoublesWithOtherTypes();
134 }
135
136 // Make sure we still return NaN for type coerced values for global isNaN.
137 function verifyIsNaNOnCoercedTypes()
138 {
139     var value = isNaNOnInteger("NaN");
140     if (!value)
141         throw "isNaNOnInteger(\"NaN\") = " + value;
142
143     var value = isNaNOnInteger({ valueOf() { return NaN; } });
144     if (!value)
145         throw "isNaNOnInteger({ valueOf() { return NaN; } }) = " + value;
146 }
147 noInline(verifyIsNaNOnCoercedTypes);
148
149 for (var i = 0; i < 1e4; ++i) {
150     verifyIsNaNOnCoercedTypes();
151 }
152
153
154 // *** Unusual arguments. ***
155 function isNaNNoArguments()
156 {
157     return isNaN();
158 }
159 noInline(isNaNNoArguments);
160
161 function isNaNTooManyArguments(a, b, c)
162 {
163     return isNaN(a, b, c);
164 }
165 noInline(isNaNTooManyArguments);
166
167
168 for (var i = 0; i < 1e4; ++i) {
169     var value = isNaNNoArguments();
170     if (!value)
171         throw "isNaNNoArguments() = " + value;
172
173     value = isNaNTooManyArguments(2, 3, 5);
174     if (value)
175         throw "isNaNTooManyArguments() = " + value;
176 }
177
178
179 // *** Constant as arguments. ***
180 function testIsNaNOnConstants()
181 {
182     var value = isNaN(0);
183     if (value)
184         throw "isNaN(0) = " + value;
185     var value = isNaN(-0);
186     if (value)
187         throw "isNaN(-0) = " + value;
188     var value = isNaN(1);
189     if (value)
190         throw "isNaN(1) = " + value;
191     var value = isNaN(-1);
192     if (value)
193         throw "isNaN(-1) = " + value;
194     var value = isNaN(42);
195     if (value)
196         throw "isNaN(42) = " + value;
197     var value = isNaN(-42);
198     if (value)
199         throw "isNaN(-42) = " + value;
200     var value = isNaN(Number.POSITIVE_INFINITY);
201     if (value)
202         throw "isNaN(Number.POSITIVE_INFINITY) = " + value;
203     var value = isNaN(Number.NEGATIVE_INFINITY);
204     if (value)
205         throw "isNaN(Number.NEGATIVE_INFINITY) = " + value;
206     var value = isNaN(Math.E);
207     if (value)
208         throw "isNaN(Math.E) = " + value;
209     var value = isNaN(NaN);
210     if (!value)
211         throw "isNaN(NaN) = " + value;
212 }
213 noInline(testIsNaNOnConstants);
214
215 for (var i = 0; i < 1e4; ++i) {
216     testIsNaNOnConstants();
217 }
218
219
220 // *** Type Coercion Side effects. ***
221 function isNaNTypeCoercionSideEffects(value)
222 {
223     return isNaN(value);
224 }
225 noInline(isNaNTypeCoercionSideEffects);
226
227 for (var i = 0; i < 1e4; ++i) {
228     var value = isNaNTypeCoercionSideEffects(42);
229     if (value)
230         throw "isNaNTypeCoercionSideEffects(42) = " + value;
231 }
232
233 var globalCounter = 0;
234 for (var i = 0; i < 1e4; ++i) {
235     var value = isNaNTypeCoercionSideEffects({ valueOf() { return globalCounter++; } });
236     if (value)
237         throw "isNaNTypeCoercionSideEffects({ valueOf() { return globalCounter++; } }) = " + value;
238 }
239 if (globalCounter !== 1e4)
240     throw "globalCounter =" + globalCounter;
241
242
243 // *** Struct transition. ***
244 function isNaNStructTransition(value)
245 {
246     return isNaN(value);
247 }
248 noInline(isNaNStructTransition);
249
250 for (var i = 0; i < 1e4; ++i) {
251     var value = isNaNStructTransition(42);
252     if (value)
253         throw "isNaNStructTransition(42) = " + value;
254 }
255
256 isNaN = function() { return 123; }
257
258 var value = isNaNStructTransition(42);
259 if (value !== 123)
260     throw "isNaNStructTransition(42) after transition = " + value;