// 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.

/// @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.
/// @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");
  }
}
