// 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 roundToDouble()
/// Returns the integer value, as a double, closest to this.
/// Rounds away from zero when there is no closest integer:
/// (3.5).round() == 4 and (-3.5).round() == -4.
/// @description Checks that if the value is already equal to a mathematical
/// integer, then the result is the same as the value.
/// @author pagolubev

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

check(double arg) {
  Expect.equals(arg, arg.roundToDouble());
  Expect.equals(-arg, (-arg).roundToDouble());
}

main() {
  check(1.0);
  check(2.0);
  check(3.0);
  check(4.0);
  check(5.0);
  check(12.0);
  check(123.0);
  check(1234.0);
  check(12345.0);
  check(123456.0);
  check(1234567.0);
  check(123456789012345.0);
  check(1234567.0E10);
  check(1234567.0E15);
  check(1234567.0E20);
  check(1234567.0E40);
  check(1234567.0E80);
  check(Math.pow(2.0, 52) as double);
  check(Math.pow(2.0, 53) as double);
  check(Math.pow(2.0, 520) as double);
  check(1.0E308);
}
