// Copyright (c) 2017, 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.
 * ...
 * Transitive: For all objects o1, o2, and o3, if o1 == o2 and o2 == o3 are
 * true, then o1 == o3 must be true.
 * @description Checks that the equality operator is transitive.
 * @author ngl@unipru.ru
 */
import "dart:math";
import "../../../Utils/expect.dart";

const List<num> values = const [
  0, -1, 1, 10, -10, 0.0, -1.0, 1.0, 10.0, -10.0,
  double.infinity, double.maxFinite, double.minPositive, -double.maxFinite,
  -double.minPositive, double.nan, double.negativeInfinity
];
 
main() {
  for (int i = 0; i < values.length; i++) {
    for (int j = 0; j < values.length; j++) {
      for (int k = 0; k < values.length; k++) {
        for (int l = 0; l < values.length; l++) {
          Rectangle r1 =
              new Rectangle(values[i], values[j], values[k], values[l]);
          Rectangle r2 =
              new Rectangle(values[k], values[l], values[i], values[j]);
          Rectangle r3 =
              new Rectangle(values[j], values[k], values[l], values[i]);
          var res1 = (r1 == r2);
          var res2 = (r2 == r3);
          var res3 = (r1 == r3);
          if (res1 && res2) {
            Expect.isTrue(res3);
          }
        }
      }
    }
  }
}
