// 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 bool operator >=(num other)
 * @description Checks operator >= when 'other' is of type int.
 * @author pagolubev
 */
import "../../../Utils/expect.dart";

check(double d, int i, bool greaterThan) {
  if (greaterThan)
    Expect.isTrue(d >= i, 'Expected $d > $i');
  else
    Expect.isFalse(d >= i, 'Expected !($d > $i)');
}

main() {
  check(-1/0, -9007199254740991, false); // !(-infinity >= -2^63)
  check(-1.7976931348623157e308, -9007199254740991, false); // !(-maxdouble >= -2^63)

  check(-100.00000000000001, -100, false);
  check(-100.0, -100, true);
  check(-99.99999999999999, -100, true);

  check(-1.0000000000000002, -1, false);
  check(-1.0, -1, true);
  check(-.9999999999999999, -1, true);

  check(-4.9406564584124654e-324, 0, false); // !(-mindouble > 0)

  check(-.0, 0, true);
  check(.0, 0, true);

  check(4.9406564584124654e-324, 0, true); // mindouble > 0

  check(.9999999999999999, 1, false);
  check(1.0, 1, true);
  check(1.0000000000000002, 1, true);

  check(99.99999999999999, 100, false);
  check(100.0, 100, true);
  check(100.00000000000001, 100, true);

  check(1.7976931348623157e308, 9007199254740991, true); // maxdouble > 2^53 - 1
  check(1/0, 9007199254740991, true); // infinity > 2^53 - 1

  check(9007199254740991.0, 9007199254740991, true);
  check(-9007199254740991.0, -9007199254740991, true);
}
