// Copyright (c) 2011, 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.

/// @assertion Relational operator <=.
/// @description Checks that this operator returns correct value.
/// @author vasya

import "../../../Utils/expect.dart";
import "dart:math" as Math;

main() {
  Expect.isTrue(1 <= 1);
  Expect.isFalse(1 <= 0);
  Expect.isFalse(9 <= -10);

  Expect.isTrue(2147483647 <= 2147483648);
  Expect.isTrue(-2147483648 <= -2147483648);
  Expect.isTrue(4294967295 <= 4294967296);
  Expect.isTrue(-4294967296 <= -4294967295);
  Expect.isTrue(9007199254740990 <= 9007199254740991);
  Expect.isTrue(-9007199254740991 <= -9007199254740991);

  // non-int argument
  final double MIN_DOUBLE = Math.pow(2.0, -1074)  as double;
  final double NEG_MIN_DOUBLE = -1 * MIN_DOUBLE; 
  final double MAX_DOUBLE =
      (2 - Math.pow(2.0, -52)) * Math.pow(2.0, 1023) as double;
  final double NEG_MAX_DOUBLE = -1 * MAX_DOUBLE; 

  Expect.isTrue(0 <= 0.0);
  Expect.isTrue(0 <= -0.0);
  Expect.isTrue(0 <= MIN_DOUBLE);
  Expect.isTrue(0 <= double.infinity);
  Expect.isTrue(0x8000000000000000 <= double.infinity);
  Expect.isFalse(0 <= double.negativeInfinity);
  Expect.isFalse((-0x800000000000000) <= double.negativeInfinity);
  Expect.isFalse(0 <= NEG_MIN_DOUBLE);
  Expect.isFalse(0 <= double.nan);
}
