mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 16:13:19 +00:00
912005267d
Change-Id: I46be49b2effec3e38a3dc44cd45cfe736f77fa78 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/182680 Commit-Queue: Sigmund Cherem <sigmund@google.com> Reviewed-by: Joshua Litt <joshualitt@google.com> Reviewed-by: Nicholas Shahan <nshahan@google.com> Reviewed-by: Stephen Adams <sra@google.com>
120 lines
2.8 KiB
Dart
120 lines
2.8 KiB
Dart
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
// Don't convert !(a op b) to (a neg-op b) when a or b might be NaN.
|
|
test(double n) {
|
|
// Force known type to double, preserves NaN.
|
|
n = 0.0 + n;
|
|
Expect.isFalse(n >= 0);
|
|
Expect.isTrue(!(n < 0));
|
|
|
|
Expect.isFalse(n <= 0);
|
|
Expect.isTrue(!(n > 0));
|
|
|
|
Expect.isFalse(n < 0);
|
|
Expect.isTrue(!(n >= 0));
|
|
|
|
Expect.isFalse(n > 0);
|
|
Expect.isTrue(!(n <= 0));
|
|
|
|
Expect.isFalse(n == 0);
|
|
Expect.isFalse(!(n != 0));
|
|
|
|
Expect.isTrue(n != 0);
|
|
Expect.isTrue(!(n == 0));
|
|
|
|
Expect.isFalse(identical(n, 0));
|
|
Expect.isFalse(!(!identical(n, 0)));
|
|
|
|
Expect.isTrue(!identical(n, 0));
|
|
Expect.isTrue(!(identical(n, 0)));
|
|
|
|
Expect.isFalse(0 >= n);
|
|
Expect.isTrue(!(0 < n));
|
|
|
|
Expect.isFalse(0 <= n);
|
|
Expect.isTrue(!(0 > n));
|
|
|
|
Expect.isFalse(0 < n);
|
|
Expect.isTrue(!(0 >= n));
|
|
|
|
Expect.isFalse(0 > n);
|
|
Expect.isTrue(!(0 <= n));
|
|
|
|
Expect.isFalse(0 == n);
|
|
Expect.isFalse(!(0 != n));
|
|
|
|
Expect.isTrue(0 != n);
|
|
Expect.isTrue(!(0 == n));
|
|
|
|
Expect.isFalse(identical(0, n));
|
|
Expect.isFalse(!(!identical(0, n)));
|
|
|
|
Expect.isTrue(!identical(0, n));
|
|
Expect.isTrue(!(identical(0, n)));
|
|
}
|
|
|
|
testConstant() {
|
|
Expect.isFalse(double.nan >= 0);
|
|
Expect.isTrue(!(double.nan < 0));
|
|
|
|
Expect.isFalse(double.nan <= 0);
|
|
Expect.isTrue(!(double.nan > 0));
|
|
|
|
Expect.isFalse(double.nan < 0);
|
|
Expect.isTrue(!(double.nan >= 0));
|
|
|
|
Expect.isFalse(double.nan > 0);
|
|
Expect.isTrue(!(double.nan <= 0));
|
|
|
|
Expect.isFalse(double.nan == 0);
|
|
Expect.isFalse(!(double.nan != 0));
|
|
|
|
Expect.isTrue(double.nan != 0);
|
|
Expect.isTrue(!(double.nan == 0));
|
|
|
|
Expect.isFalse(identical(double.nan, 0));
|
|
Expect.isFalse(!(!identical(double.nan, 0)));
|
|
|
|
Expect.isTrue(!identical(double.nan, 0));
|
|
Expect.isTrue(!(identical(double.nan, 0)));
|
|
|
|
Expect.isFalse(0 >= double.nan);
|
|
Expect.isTrue(!(0 < double.nan));
|
|
|
|
Expect.isFalse(0 <= double.nan);
|
|
Expect.isTrue(!(0 > double.nan));
|
|
|
|
Expect.isFalse(0 < double.nan);
|
|
Expect.isTrue(!(0 >= double.nan));
|
|
|
|
Expect.isFalse(0 > double.nan);
|
|
Expect.isTrue(!(0 <= double.nan));
|
|
|
|
Expect.isFalse(0 == double.nan);
|
|
Expect.isFalse(!(0 != double.nan));
|
|
|
|
Expect.isTrue(0 != double.nan);
|
|
Expect.isTrue(!(0 == double.nan));
|
|
|
|
Expect.isFalse(identical(0, double.nan));
|
|
Expect.isFalse(!(!identical(0, double.nan)));
|
|
|
|
Expect.isTrue(!identical(0, double.nan));
|
|
Expect.isTrue(!(identical(0, double.nan)));
|
|
}
|
|
|
|
main() {
|
|
test(hideConstant(27, double.nan));
|
|
testConstant();
|
|
}
|
|
|
|
double hideConstant(int n, double result) {
|
|
if (n == 1) return result;
|
|
if ((n & 1) == 0) return hideConstant(n >> 1, result);
|
|
return hideConstant(3 * n + 1, result);
|
|
}
|