// 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 if the divisor is infinite and the dividend is a
/// finite positive double the result equals the dividend, the result is infinity
/// if dividend is negative.
/// @author pagolubev

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

final inf = double.infinity;

final List<double> values = const [
   4.9406564584124654e-324, // min
   2.2250738585072014e-308, // min normal
   1.7976931348623157e308, // max normal
   .7,
   .9999999999999999,
   1.0,
   1.0000000000000002,
   10.0,
   99.0,
   99.99999999999999,
   100.0,
   100.00000000000001,
   101.0,
   6031769.5,
   4.2949672959999995E9,
   4.294967296E9,
   4.294967296000001E9,
   4.5035996273704955E15,
   4.503599627370496E15,
   4.503599627370497E15,
   3.273390607896142E150,
];

main() {
  Expect.equals(0.0, 0.0 % inf);
  Expect.equals(0.0, 0.0 % (-inf));
  Expect.equals(0.0, (-0.0) % inf);
  Expect.equals(0.0, (-0.0) % (-inf));

  values.forEach((double d) {
    Expect.equals(d, d % inf);
    Expect.equals(double.infinity, (-d) % inf);
    Expect.equals(d, d % (-inf));
    Expect.equals(double.infinity, (-d) % (-inf));
  });
}
