// 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 dividend is infinite the result is a NaN.
 * @author pagolubev
 */
import "../../../Utils/expect.dart";


class Constants {
  static const INF = 1 / 0;
  static const List<double> values = const [
     .0,
     4.9406564584124654e-324, // min
     2.2250738585072014e-308, // min normal
     1.7976931348623157e308, // max normal
     INF,
     .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,
  ];
}

checkNaN(d) {
  var msg = 'Expected: NaN, actual: $d';
  Expect.isTrue(d.isNaN, msg);
}

main() {
  Constants.values.forEach((double d) {
    checkNaN(Constants.INF % d);
    checkNaN((-Constants.INF) % d);
    checkNaN(Constants.INF % (-d));
    checkNaN((-Constants.INF) % (-d));
  });
}
