// 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); }