OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 // Don't convert !(a op b) to (a neg-op b) when a or b might be NaN. | |
6 test(double n) { | |
7 // Force known type to double, preserves NaN. | |
8 n = 0.0 + n; | |
9 Expect.isFalse(n >= 0); | |
10 Expect.isTrue(!(n < 0)); | |
11 | |
12 Expect.isFalse(n <= 0); | |
13 Expect.isTrue(!(n > 0)); | |
14 | |
15 Expect.isFalse(n < 0); | |
16 Expect.isTrue(!(n >= 0)); | |
17 | |
18 Expect.isFalse(n > 0); | |
19 Expect.isTrue(!(n <= 0)); | |
20 | |
21 Expect.isFalse(n == 0); | |
22 Expect.isFalse(!(n != 0)); | |
23 | |
24 Expect.isTrue(n != 0); | |
25 Expect.isTrue(!(n == 0)); | |
26 | |
27 Expect.isFalse(n === 0); | |
28 Expect.isFalse(!(n !== 0)); | |
29 | |
30 Expect.isTrue(n !== 0); | |
31 Expect.isTrue(!(n === 0)); | |
32 | |
33 Expect.isFalse(0 >= n); | |
34 Expect.isTrue(!(0 < n)); | |
35 | |
36 Expect.isFalse(0 <= n); | |
37 Expect.isTrue(!(0 > n)); | |
38 | |
39 Expect.isFalse(0 < n); | |
40 Expect.isTrue(!(0 >= n)); | |
41 | |
42 Expect.isFalse(0 > n); | |
43 Expect.isTrue(!(0 <= n)); | |
44 | |
45 Expect.isFalse(0 == n); | |
46 Expect.isFalse(!(0 != n)); | |
47 | |
48 Expect.isTrue(0 != n); | |
49 Expect.isTrue(!(0 == n)); | |
50 | |
51 Expect.isFalse(0 === n); | |
52 Expect.isFalse(!(0 !== n)); | |
53 | |
54 Expect.isTrue(0 !== n); | |
55 Expect.isTrue(!(0 === n)); | |
56 } | |
57 | |
58 testConstant() { | |
59 Expect.isFalse(double.NAN >= 0); | |
60 Expect.isTrue(!(double.NAN < 0)); | |
61 | |
62 Expect.isFalse(double.NAN <= 0); | |
63 Expect.isTrue(!(double.NAN > 0)); | |
64 | |
65 Expect.isFalse(double.NAN < 0); | |
66 Expect.isTrue(!(double.NAN >= 0)); | |
67 | |
68 Expect.isFalse(double.NAN > 0); | |
69 Expect.isTrue(!(double.NAN <= 0)); | |
70 | |
71 Expect.isFalse(double.NAN == 0); | |
72 Expect.isFalse(!(double.NAN != 0)); | |
73 | |
74 Expect.isTrue(double.NAN != 0); | |
75 Expect.isTrue(!(double.NAN == 0)); | |
76 | |
77 Expect.isFalse(double.NAN === 0); | |
78 Expect.isFalse(!(double.NAN !== 0)); | |
79 | |
80 Expect.isTrue(double.NAN !== 0); | |
81 Expect.isTrue(!(double.NAN === 0)); | |
82 | |
83 Expect.isFalse(0 >= double.NAN); | |
84 Expect.isTrue(!(0 < double.NAN)); | |
85 | |
86 Expect.isFalse(0 <= double.NAN); | |
87 Expect.isTrue(!(0 > double.NAN)); | |
88 | |
89 Expect.isFalse(0 < double.NAN); | |
90 Expect.isTrue(!(0 >= double.NAN)); | |
91 | |
92 Expect.isFalse(0 > double.NAN); | |
93 Expect.isTrue(!(0 <= double.NAN)); | |
94 | |
95 Expect.isFalse(0 == double.NAN); | |
96 Expect.isFalse(!(0 != double.NAN)); | |
97 | |
98 Expect.isTrue(0 != double.NAN); | |
99 Expect.isTrue(!(0 == double.NAN)); | |
100 | |
101 Expect.isFalse(0 === double.NAN); | |
102 Expect.isFalse(!(0 !== double.NAN)); | |
103 | |
104 Expect.isTrue(0 !== double.NAN); | |
105 Expect.isTrue(!(0 === double.NAN)); | |
106 } | |
107 | |
108 main() { | |
109 test(hideConstant(27, double.NAN)); | |
110 testConstant(); | |
111 } | |
112 | |
113 double hideConstant(int n, double result) { | |
114 if (n == 1) return result; | |
115 if ((n & 1) == 0) return hideConstant(n >> 1, result); | |
116 return hideConstant(3 * n + 1, result); | |
117 } | |
OLD | NEW |