// Copyright (c) 2014, 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.

// @dart = 2.9

/// @assertion bool operator ==(other)
/// The equality operator.
/// The default behavior for all Objects is to return true if and only if this
/// and other are the same object.
/// ...
/// A MutableRectangle is only equal to another MutableRectangle with the same
/// coordinates.
/// @description Checks that this operator uses value comparison rather than
/// identity comparison.
/// @needsreview #16170
/// @author kaigorodov


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

const List<num> values = const [
  0, -1, 1, 10, -10, 100, -100, -1.7976931348623157e308,
  -3.273390607896142E150, -4.503599627370497E15, -4.503599627370496E15,
  -4.5035996273704955E15, -4.294967296000001E9, -4.294967296E9,
  -4.2949672959999995E9, -6031769.5, -101.0, -100.00000000000001, -100.0,
  -99.99999999999999, -99.0, -10.0, -1.0000000000000002, -1.0,
  -.9999999999999999, -.7, -2.2250738585072014e-308, -4.9406564584124654e-324,
  .0, 4.9406564584124654e-324, 2.2250738585072014e-308, .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, 1.7976931348623157e308
];
 
Random rand = new Random(6031769);

num randomVal() {
  int k = rand.nextInt(values.length);
  return values[k];
}

main() {
  for (int i = 0; i < 1000; i++) {
    num x = randomVal();
    num y = randomVal();
    num z = randomVal();
    num w = randomVal();
    MutableRectangle r1 = new MutableRectangle(x, y, z, w);
    MutableRectangle r2 = new MutableRectangle(x, y, z, w);
    Expect.isFalse(identical(r1, r2));
    Expect.isTrue(r1 == r2, "x=$x, y=$y, z=$z, w=$w");
  }
}
