mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 10:48:25 +00:00
05ca544f15
Change-Id: Iaa0ca2b4f2d1b15f79ddca37834d3ed2497bc068 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149242 Commit-Queue: Joshua Litt <joshualitt@google.com> Reviewed-by: Sigmund Cherem <sigmund@google.com>
122 lines
2.8 KiB
Dart
122 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.
|
|
|
|
// @dart = 2.7
|
|
|
|
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);
|
|
}
|