// 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  abstract double ceilToDouble()
 * Returns this.toDouble().
 * @description Checks that this method same value as this.toDouble();
 * for very large integers).
 * @author vasya
 */
import "../../../Utils/expect.dart";
import "dart:math" as Math;

void check(int x) {
  Expect.equals(x.toDouble(), x.ceilToDouble());
}

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; 

  check(0);
  check(2147483647);
  check(-2147483648);
  check(4294967295);
  check(-4294967296);
  check(9007199254740991);
  check(-9007199254740991);
  check(1 << 1024);
  check(1 << 1124);
  check(-(1 << 1024));
  check(-(1 << 1124));
}
