blob: a348eeaaa565fdf2050c023cc0d78f664d9a9733 [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// Copyright 2013 the V8 project authors. All rights reserved.
2// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions
6// are met:
7// 1. Redistributions of source code must retain the above copyright
8// notice, this list of conditions and the following disclaimer.
9// 2. Redistributions in binary form must reproduce the above copyright
10// notice, this list of conditions and the following disclaimer in the
11// documentation and/or other materials provided with the distribution.
12//
13// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23
24description(
25"This test checks some cases that might be affected by constant folding."
26);
27
28shouldBe('"abc" + "2.1"', '"abc2.1"');
29shouldBe('"123" + "2.1"', '"1232.1"');
30shouldBe('"123" + "="', '"123="');
31shouldBe('"*" + "123"', '"*123"');
32
33shouldBe('!"abc"', 'false');
34shouldBe('!""', 'true');
35
36shouldBe('10.3 + 2.1', '12.4');
37shouldBe('10.3 + "2.1"', '"10.32.1"');
38shouldBe('"10.3" + 2.1 ', '"10.32.1"');
39shouldBe('"10.3" + "2.1"', '"10.32.1"');
40shouldBe('10.3 + true', '11.3');
41shouldBe('"10.3" + true', '"10.3true"');
42shouldBe('10.3 + false', '10.3');
43shouldBe('"10.3" + false', '"10.3false"');
44shouldBe('true + 2.1', '3.1');
45shouldBe('true + "2.1"', '"true2.1"');
46shouldBe('false + 2.1', '2.1');
47shouldBe('false + "2.1"', '"false2.1"');
48
49shouldBe('10.3 - 2.1', '8.200000000000001');
50shouldBe('10.3 - "2.1"', '8.200000000000001');
51shouldBe('"10.3" - 2.1 ', '8.200000000000001');
52shouldBe('"10.3" - "2.1"', '8.200000000000001');
53shouldBe('10.3 - true', '9.3');
54shouldBe('"10.3" - true', '9.3');
55shouldBe('10.3 - false', '10.3');
56shouldBe('"10.3" - false', '10.3');
57shouldBe('true - 2.1', '-1.1');
58shouldBe('true - "2.1"', '-1.1');
59shouldBe('false - 2.1', '-2.1');
60shouldBe('false - "2.1"', '-2.1');
61
62shouldBe('10.3 * 2.1', '21.630000000000003');
63shouldBe('10.3 * "2.1"', '21.630000000000003');
64shouldBe('"10.3" * 2.1', '21.630000000000003');
65shouldBe('"10.3" * "2.1"', '21.630000000000003');
66shouldBe('10.3 * true', '10.3');
67shouldBe('"10.3" * true', '10.3');
68shouldBe('10.3 * false', '0');
69shouldBe('"10.3" * false', '0');
70shouldBe('true * 10.3', '10.3');
71shouldBe('true * "10.3"', '10.3');
72shouldBe('false * 10.3', '0');
73shouldBe('false * "10.3"', '0');
74
75shouldBe('10.3 / 2', '5.15');
76shouldBe('"10.3" / 2', '5.15');
77shouldBe('10.3 / "2"', '5.15');
78shouldBe('"10.3" / "2"', '5.15');
79shouldBe('10.3 / true', '10.3');
80shouldBe('"10.3" / true', '10.3');
81shouldBe('true / 2', '0.5');
82shouldBe('true / "2"', '0.5');
83shouldBe('false / 2', '0');
84shouldBe('false / "2"', '0');
85
86shouldBe('10.3 % 2.1', '1.9000000000000004');
87shouldBe('"10.3" % 2.1', '1.9000000000000004');
88shouldBe('10.3 % "2.1"', '1.9000000000000004');
89shouldBe('"10.3" % "2.1"', '1.9000000000000004');
90shouldBe('10.3 % true', '0.3000000000000007');
91shouldBe('"10.3" % true', '0.3000000000000007');
92shouldBe('true % 2', '1');
93shouldBe('true % "2"', '1');
94shouldBe('false % 2', '0');
95shouldBe('false % "2"', '0');
96
97shouldBe('10.3 << 2.1', '40');
98shouldBe('"10.3" << 2.1', '40');
99shouldBe('10.3 << "2.1"', '40');
100shouldBe('"10.3" << "2.1"', '40');
101shouldBe('10.3 << true', '20');
102shouldBe('"10.3" << true', '20');
103shouldBe('10.3 << false', '10');
104shouldBe('"10.3" << false', '10');
105shouldBe('true << 2.1', '4');
106shouldBe('true << "2.1"', '4');
107shouldBe('false << 2.1', '0');
108shouldBe('false << "2.1"', '0');
109
110shouldBe('10.3 >> 2.1', '2');
111shouldBe('"10.3" >> 2.1', '2');
112shouldBe('10.3 >> "2.1"', '2');
113shouldBe('"10.3" >> "2.1"', '2');
114shouldBe('10.3 >> true', '5');
115shouldBe('"10.3" >> true', '5');
116shouldBe('10.3 >> false', '10');
117shouldBe('"10.3" >> false', '10');
118shouldBe('true >> 2.1', '0');
119shouldBe('true >> "2.1"', '0');
120shouldBe('false >> 2.1', '0');
121shouldBe('false >> "2.1"', '0');
122
123shouldBe('-10.3 >>> 2.1', '1073741821');
124shouldBe('"-10.3">>> 2.1', '1073741821');
125shouldBe('-10.3 >>> "2.1"', '1073741821');
126shouldBe('"-10.3">>> "2.1"', '1073741821');
127shouldBe('-10.3 >>> true', '2147483643');
128shouldBe('"-10.3">>> true', '2147483643');
129shouldBe('-10.3 >>> false', '4294967286');
130shouldBe('"-10.3" >>> false', '4294967286');
131shouldBe('true >>> 2.1', '0');
132shouldBe('true >>> "2.1"', '0');
133shouldBe('false >>> 2.1', '0');
134shouldBe('false >>> "2.1"', '0');
135
136
137shouldBe('10.3 & 3.1', '2');
138shouldBe('"10.3" & 3.1', '2');
139shouldBe('10.3 & "3.1"', '2');
140shouldBe('"10.3" & "3.1"', '2');
141shouldBe('10.3 & true', '0');
142shouldBe('"10.3" & true', '0');
143shouldBe('11.3 & true', '1');
144shouldBe('"11.3" & true', '1');
145shouldBe('10.3 & false', '0');
146shouldBe('"10.3" & false', '0');
147shouldBe('11.3 & false', '0');
148shouldBe('"11.3" & false', '0');
149shouldBe('true & 3.1', '1');
150shouldBe('true & "3.1"', '1');
151shouldBe('true & 2.1', '0');
152shouldBe('true & "2.1"', '0');
153shouldBe('false & 3.1', '0');
154shouldBe('false & "3.1"', '0');
155shouldBe('false & 2.1', '0');
156shouldBe('false & "2.1"', '0');
157
158
159shouldBe('10.3 | 3.1', '11');
160shouldBe('"10.3" | 3.1', '11');
161shouldBe('10.3 | "3.1"', '11');
162shouldBe('"10.3" | "3.1"', '11');
163shouldBe('10.3 | true', '11');
164shouldBe('"10.3" | true', '11');
165shouldBe('11.3 | true', '11');
166shouldBe('"11.3" | true', '11');
167shouldBe('10.3 | false', '10');
168shouldBe('"10.3" | false', '10');
169shouldBe('11.3 | false', '11');
170shouldBe('"11.3" | false', '11');
171shouldBe('true | 3.1', '3');
172shouldBe('true | "3.1"', '3');
173shouldBe('true | 2.1', '3');
174shouldBe('true | "2.1"', '3');
175shouldBe('false | 3.1', '3');
176shouldBe('false | "3.1"', '3');
177shouldBe('false | 2.1', '2');
178shouldBe('false | "2.1"', '2');
179
180shouldBe('10.3 ^ 3.1', '9');
181shouldBe('"10.3" ^ 3.1', '9');
182shouldBe('10.3 ^ "3.1"', '9');
183shouldBe('"10.3" ^ "3.1"', '9');
184shouldBe('10.3 ^ true', '11');
185shouldBe('"10.3" ^ true', '11');
186shouldBe('11.3 ^ true', '10');
187shouldBe('"11.3" ^ true', '10');
188shouldBe('10.3 ^ false', '10');
189shouldBe('"10.3" ^ false', '10');
190shouldBe('11.3 ^ false', '11');
191shouldBe('"11.3" ^ false', '11');
192shouldBe('true ^ 3.1', '2');
193shouldBe('true ^ "3.1"', '2');
194shouldBe('true ^ 2.1', '3');
195shouldBe('true ^ "2.1"', '3');
196shouldBe('false ^ 3.1', '3');
197shouldBe('false ^ "3.1"', '3');
198shouldBe('false ^ 2.1', '2');
199shouldBe('false ^ "2.1"', '2');
200
201shouldBe('10.3 == 3.1', 'false');
202shouldBe('3.1 == 3.1', 'true');
203shouldBe('"10.3" == 3.1', 'false');
204shouldBe('"3.1" == 3.1', 'true');
205shouldBe('10.3 == "3.1"', 'false');
206shouldBe('3.1 == "3.1"', 'true');
207shouldBe('"10.3" == "3.1"', 'false');
208shouldBe('"3.1" == "3.1"', 'true');
209shouldBe('10.3 == true', 'false');
210shouldBe('1 == true', 'true');
211shouldBe('"10.3" == true', 'false');
212shouldBe('"1" == true', 'true');
213shouldBe('10.3 == false', 'false');
214shouldBe('0 == false', 'true');
215shouldBe('"10.3" == false', 'false');
216shouldBe('"0" == false', 'true');
217shouldBe('true == 3.1', 'false');
218shouldBe('true == 1', 'true');
219shouldBe('true == "3.1"', 'false');
220shouldBe('true == "1" ', 'true');
221shouldBe('false == 3.1', 'false');
222shouldBe('false == 0', 'true');
223shouldBe('false == "3.1"', 'false');
224shouldBe('false == "0"', 'true');
225shouldBe('true == true', 'true');
226shouldBe('false == true', 'false');
227shouldBe('true == false', 'false');
228shouldBe('false == false', 'true');
229
230shouldBe('10.3 != 3.1', 'true');
231shouldBe('3.1 != 3.1', 'false');
232shouldBe('"10.3" != 3.1', 'true');
233shouldBe('"3.1" != 3.1', 'false');
234shouldBe('10.3 != "3.1"', 'true');
235shouldBe('3.1 != "3.1"', 'false');
236shouldBe('"10.3" != "3.1"', 'true');
237shouldBe('"3.1" != "3.1"', 'false');
238shouldBe('10.3 != true', 'true');
239shouldBe('1 != true', 'false');
240shouldBe('"10.3" != true', 'true');
241shouldBe('"1" != true', 'false');
242shouldBe('10.3 != false', 'true');
243shouldBe('0 != false', 'false');
244shouldBe('"10.3" != false', 'true');
245shouldBe('"0" != false', 'false');
246shouldBe('true != 3.1', 'true');
247shouldBe('true != 1', 'false');
248shouldBe('true != "3.1"', 'true');
249shouldBe('true != "1" ', 'false');
250shouldBe('false != 3.1', 'true');
251shouldBe('false != 0', 'false');
252shouldBe('false != "3.1"', 'true');
253shouldBe('false != "0"', 'false');
254shouldBe('true != true', 'false');
255shouldBe('false != true', 'true');
256shouldBe('true != false', 'true');
257shouldBe('false != false', 'false');
258
259shouldBe('10.3 > 3.1', 'true');
260shouldBe('3.1 > 3.1', 'false');
261shouldBe('"10.3" > 3.1', 'true');
262shouldBe('"3.1" > 3.1', 'false');
263shouldBe('10.3 > "3.1"', 'true');
264shouldBe('3.1 > "3.1"', 'false');
265shouldBe('"10.3" > "3.1"', 'false');
266shouldBe('"3.1" > "3.1"', 'false');
267shouldBe('10.3 > true', 'true');
268shouldBe('0 > true', 'false');
269shouldBe('"10.3" > true', 'true');
270shouldBe('"0" > true', 'false');
271shouldBe('10.3 > false', 'true');
272shouldBe('-1 > false', 'false');
273shouldBe('"10.3" > false', 'true');
274shouldBe('"-1" > false', 'false');
275shouldBe('true > 0.1', 'true');
276shouldBe('true > 1.1', 'false');
277shouldBe('true > "0.1"', 'true');
278shouldBe('true > "1.1"', 'false');
279shouldBe('false > -3.1', 'true');
280shouldBe('false > 0', 'false');
281shouldBe('false > "-3.1"', 'true');
282shouldBe('false > "0"', 'false');
283shouldBe('true > true', 'false');
284shouldBe('false > true', 'false');
285shouldBe('true > false', 'true');
286shouldBe('false > false', 'false');
287
288shouldBe('10.3 < 3.1', 'false');
289shouldBe('2.1 < 3.1', 'true');
290shouldBe('"10.3" < 3.1', 'false');
291shouldBe('"2.1" < 3.1', 'true');
292shouldBe('10.3 < "3.1"', 'false');
293shouldBe('2.1 < "3.1"', 'true');
294shouldBe('"10.3" < "3.1"', 'true');
295shouldBe('"2.1" < "3.1"', 'true');
296shouldBe('10.3 < true', 'false');
297shouldBe('0 < true', 'true');
298shouldBe('"10.3" < true', 'false');
299shouldBe('"0" < true', 'true');
300shouldBe('10.3 < false', 'false');
301shouldBe('-1 < false', 'true');
302shouldBe('"10.3" < false', 'false');
303shouldBe('"-1" < false', 'true');
304shouldBe('true < 0.1', 'false');
305shouldBe('true < 1.1', 'true');
306shouldBe('true < "0.1"', 'false');
307shouldBe('true < "1.1"', 'true');
308shouldBe('false < -3.1', 'false');
309shouldBe('false < 0.1', 'true');
310shouldBe('false < "-3.1"', 'false');
311shouldBe('false < "0.1"', 'true');
312shouldBe('true < true', 'false');
313shouldBe('false < true', 'true');
314shouldBe('true < false', 'false');
315shouldBe('false < false', 'false');
316
317shouldBe('10.3 >= 3.1', 'true');
318shouldBe('2.1 >= 3.1', 'false');
319shouldBe('"10.3" >= 3.1', 'true');
320shouldBe('"2.1" >= 3.1', 'false');
321shouldBe('10.3 >= "3.1"', 'true');
322shouldBe('2.1 >= "3.1"', 'false');
323shouldBe('"10.3" >= "3.1"', 'false');
324shouldBe('"2.1" >= "3.1"', 'false');
325shouldBe('10.3 >= true', 'true');
326shouldBe('0 >= true', 'false');
327shouldBe('"10.3" >= true', 'true');
328shouldBe('"0" >= true', 'false');
329shouldBe('10.3 >= false', 'true');
330shouldBe('-1 >= false', 'false');
331shouldBe('"10.3" >= false', 'true');
332shouldBe('"-1" >= false', 'false');
333shouldBe('true >= 0.1', 'true');
334shouldBe('true >= 1.1', 'false');
335shouldBe('true >= "0.1"', 'true');
336shouldBe('true >= "1.1"', 'false');
337shouldBe('false >= -3.1', 'true');
338shouldBe('false >= 0', 'true');
339shouldBe('false >= "-3.1"', 'true');
340shouldBe('false >= "0"', 'true');
341shouldBe('true >= true', 'true');
342shouldBe('false >= true', 'false');
343shouldBe('true >= false', 'true');
344shouldBe('false >= false', 'true');
345
346shouldBe('10.3 <= 3.1', 'false');
347shouldBe('2.1 <= 3.1', 'true');
348shouldBe('"10.3" <= 3.1', 'false');
349shouldBe('"2.1" <= 3.1', 'true');
350shouldBe('10.3 <= "3.1"', 'false');
351shouldBe('2.1 <= "3.1"', 'true');
352shouldBe('"10.3" <= "3.1"', 'true');
353shouldBe('"2.1" <= "3.1"', 'true');
354shouldBe('10.3 <= true', 'false');
355shouldBe('0 <= true', 'true');
356shouldBe('"10.3" <= true', 'false');
357shouldBe('"0" <= true', 'true');
358shouldBe('10.3 <= false', 'false');
359shouldBe('-1 <= false', 'true');
360shouldBe('"10.3" <= false', 'false');
361shouldBe('"-1" <= false', 'true');
362shouldBe('true <= 0.1', 'false');
363shouldBe('true <= 1.1', 'true');
364shouldBe('true <= "0.1"', 'false');
365shouldBe('true <= "1.1"', 'true');
366shouldBe('false <= -3.1', 'false');
367shouldBe('false <= 0.1', 'true');
368shouldBe('false <= "-3.1"', 'false');
369shouldBe('false <= "0.1"', 'true');
370shouldBe('true <= true', 'true');
371shouldBe('false <= true', 'true');
372shouldBe('true <= false', 'false');
373shouldBe('false <= false', 'true');
374
375shouldBe('true && true', 'true');
376shouldBe('true && false', 'false');
377shouldBe('false && true', 'false');
378shouldBe('false && false', 'false');
379shouldBe('1.1 && true', 'true');
380shouldBe('1.1 && false', 'false');
381shouldBe('0 && true', '0');
382shouldBe('0 && false', '0');
383shouldBe('"1.1" && true', 'true');
384shouldBe('"1.1" && false', 'false');
385shouldBe('"0" && true', 'true');
386shouldBe('"0" && false', 'false');
387shouldBe('true && 1.1', '1.1');
388shouldBe('true && 0', '0');
389shouldBe('false && 1.1', 'false');
390shouldBe('false && 0', 'false');
391shouldBe('true && "1.1"', '"1.1"');
392shouldBe('true && "0"', '"0"');
393shouldBe('false && "1.1"', 'false');
394shouldBe('false && "0"', 'false');
395shouldBe('1.1 && 1.1', '1.1');
396shouldBe('1.1 && 0', '0');
397shouldBe('0 && 1.1', '0');
398shouldBe('0 && 0', '0');
399shouldBe('"1.1" && 1.1', '1.1');
400shouldBe('"1.1" && 0', '0');
401shouldBe('"0" && 1.1', '1.1');
402shouldBe('"0" && 0', '0');
403shouldBe('1.1 && "1.1"', '"1.1"');
404shouldBe('1.1 && "0"', '"0"');
405shouldBe('0 && "1.1"', '0');
406shouldBe('0 && "0"', '0');
407shouldBe('"1.1" && "1.1"', '"1.1"');
408shouldBe('"1.1" && "0"', '"0"');
409shouldBe('"0" && "1.1"', '"1.1"');
410shouldBe('"0" && "0"', '"0"');
411
412shouldBe('true || true', 'true');
413shouldBe('true || false', 'true');
414shouldBe('false || true', 'true');
415shouldBe('false || false', 'false');
416shouldBe('1.1 || true', '1.1');
417shouldBe('1.1 || false', '1.1');
418shouldBe('0 || true', 'true');
419shouldBe('0 || false', 'false');
420shouldBe('"1.1" || true', '"1.1"');
421shouldBe('"1.1" || false', '"1.1"');
422shouldBe('"0" || true', '"0"');
423shouldBe('"0" || false', '"0"');
424shouldBe('true || 1.1', 'true');
425shouldBe('true || 0', 'true');
426shouldBe('false || 1.1', '1.1');
427shouldBe('false || 0', '0');
428shouldBe('true || "1.1"', 'true');
429shouldBe('true || "0"', 'true');
430shouldBe('false || "1.1"', '"1.1"');
431shouldBe('false || "0"', '"0"');
432shouldBe('1.1 || 1.1', '1.1');
433shouldBe('1.1 || 0', '1.1');
434shouldBe('0 || 1.1', '1.1');
435shouldBe('0 || 0', '0');
436shouldBe('"1.1" || 1.1', '"1.1"');
437shouldBe('"1.1" || 0', '"1.1"');
438shouldBe('"0" || 1.1', '"0"');
439shouldBe('"0" || 0', '"0"');
440shouldBe('1.1 || "1.1"', '1.1');
441shouldBe('1.1 || "0"', '1.1');
442shouldBe('0 || "1.1"', '"1.1"');
443shouldBe('0 || "0"', '"0"');
444shouldBe('"1.1" || "1.1"', '"1.1"');
445shouldBe('"1.1" || "0"', '"1.1"');
446shouldBe('"0" || "1.1"', '"0"');
447shouldBe('"0" || "0"', '"0"');
448
449shouldBe('+3.1', '3.1');
450shouldBe('+ +3.1', '3.1');
451shouldBe('+"3.1"', '3.1');
452shouldBe('+true', '1');
453shouldBe('+false', '0');
454
455shouldBe('-3.1', '-3.1');
456shouldBe('- -3.1', '3.1');
457shouldBe('-"3.1"', '-3.1');
458shouldBe('-true', '-1');
459shouldBe('-false', '-0');
460
461shouldBe('~3', '-4');
462shouldBe('~ ~3', '3');
463shouldBe('~"3"', '-4');
464shouldBe('~true', '-2');
465shouldBe('~false', '-1');
466
467shouldBe('!true', 'false');
468shouldBe('!false', 'true');
469shouldBe('!3', 'false');
470shouldBe('!0', 'true');
471
472shouldBe('10.3 / 0', 'Infinity');
473shouldBe('"10.3" / 0', 'Infinity');
474shouldBe('-10.3 / 0', '-Infinity');
475shouldBe('"-10.3" / 0', '-Infinity');
476shouldBe('true / 0', 'Infinity');
477shouldBe('false / 0', 'NaN');
478shouldBe('0 / 0', 'NaN');
479
480shouldBe('10.3 / -0', '-Infinity');
481shouldBe('"10.3" / -0', '-Infinity');
482shouldBe('-10.3 / -0', 'Infinity');
483shouldBe('"-10.3" / -0', 'Infinity');
484shouldBe('true / -0', '-Infinity');
485shouldBe('false / -0', 'NaN');
486shouldBe('0 / -0', 'NaN');
487
488shouldBe('1 / -0', '-Infinity');
489shouldBe('1 / - 0', '-Infinity');
490shouldBe('1 / - -0', 'Infinity');
491shouldBe('1 / - - -0', '-Infinity');