// 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 double operator +(num other)
/// @description Checks that when the 'other' is less than spacing the result
/// is rounded to the closest double. If 'other' is in the middle between two
/// adjacent doubles it's rounded to the value which significand ends in an
/// even digit.
/// @author pagolubev

import "../../../Utils/expect.dart";


main() {
  // round to closest
  // spacing 1.0
  Expect.equals(4503599627370497.0, 4503599627370496.0 + .6);
  Expect.equals(4503599627370496.0, 4503599627370496.0 + .4);
  // spacing .5
  Expect.equals(2251799813685248.5, 2251799813685248.0 + .26);
  Expect.equals(2251799813685248.0, 2251799813685248.0 + .24);

  // round half to even
  Expect.equals(4503599627370496.0, 4503599627370496.0 + .5);
  Expect.equals(4503599627370498.0, 4503599627370497.0 + .5);

  Expect.equals(2251799813685248.0, 2251799813685248.0 + .25);
  Expect.equals(2251799813685249.0, 2251799813685248.5 + .25);

  //big difference of exponents
  Expect.equals(2.225E-100, -1.256e-118 + 2.225e-100);
  Expect.equals(3.4567E100,  3.4567e100 + 4.125e-100);
  Expect.equals(1.45E-200,  7.185478e-300 + 1.45e-200);
  Expect.equals(8.569E20,    8.569e20 + 1.0);
}
