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