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