// Copyright (c) 2016, 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 bool operator ==(Object other)
/// Test whether this value is numerically equal to other.
///
/// If both operands are doubles, they are equal if they have the same
/// representation, except that:
///
/// - zero and minus zero (0.0 and -0.0) are considered equal. They both have the
/// numerical value zero.
/// - NaN is not equal to anything, including NaN. If either operand is NaN,
/// the result is always false.
/// If one operand is a double and the other is an int, they are equal if the
/// double has an integer value (finite with no fractional part) and
/// identical(doubleValue.toInt(), intValue) is true.
///
/// If both operands are integers, they are equal if they have the same value.
///
/// Returns false if other is not a num.
///
/// Notice that the behavior for NaN is non-reflexive. This means that equality
/// of double values is not a proper equality relation, as is otherwise required
/// of operator==. Using NaN in, e.g., a HashSet will fail to work. The behavior
/// is the standard IEEE-754 equality of doubles.
///
/// If you can avoid NaN values, the remaining doubles do have a proper equality
/// relation, and can be used safely.
///
/// Use compareTo for a comparison that distinguishes zero and minus zero, and
/// that considers NaN values as equal.
/// @description Check that integer values are equal if they have the same value
/// @author sgrekhov@unipro.ru

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

main() {
  Expect.isTrue(0 == 0);
  Expect.isTrue(2 == 2);
  Expect.isTrue(2147483648 == 2147483648);
  Expect.isTrue(-2147483647 == -2147483647);
  Expect.isTrue(4294967296 == 4294967296);
  Expect.isTrue(-4294967295 == -4294967295);
  Expect.isTrue(9007199254740991 == 9007199254740991);

  int x = 1;
  int y = 1;
  Expect.isTrue(x == y);
}
