// 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 the operation returns correct value.
 * @author vasya
 */
import "../../../Utils/expect.dart";
import "dart:math" as Math;

main() {
  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(2 >= 1);
  Expect.isFalse(0 >= 1);
  Expect.isFalse(-10 >= 9);

  Expect.isTrue(2147483647 >= 2147483647);
  Expect.isTrue(-2147483647 >= -2147483648);
  Expect.isTrue(4294967296 >= 4294967295);
  Expect.isTrue(-4294967295 >= -4294967295);
  Expect.isTrue(9007199254740991 >= 9007199254740990);
  Expect.isTrue(-9007199254740990 >= -9007199254740991);
  
  // non-int argument
  Expect.isTrue(0 >= 0.0);
  Expect.isTrue(0 >= -0.0);
  Expect.isTrue(0 >= double.negativeInfinity);
  Expect.isTrue((-0x800000000000000) >= double.negativeInfinity);
  Expect.isFalse(0 >= double.nan);
  Expect.isFalse(0 >= double.infinity);
  Expect.isFalse(0x8000000000000000 >= double.infinity);
  Expect.isFalse(0 >= MIN_DOUBLE);
  Expect.isTrue(0 >= NEG_MIN_DOUBLE);
}
