// 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 MutableRectangle<T> intersection(MutableRectangle<T> other)
/// Computes the intersection of this and other.
/// The intersection of two axis-aligned rectangles, if any, is always another
/// axis-aligned rectangle.
/// Returns the intersection of this and other, or null if they don't intersect.
/// @description Checks the function for some predefined data.
/// @author kaigorodov

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

void check(
    MutableRectangle r1, MutableRectangle r2, MutableRectangle? expected) {
  Rectangle? actual1 = r1.intersection(r2);
  Expect.equals(expected, actual1,
      "r1=$r1, r2=$r2, expected=$expected, actual1=$actual1");
  Rectangle? actual2 = r2.intersection(r1);
  Expect.equals(actual1, actual2, "r1=$r1, r2=$r2");
}

main() {
  MutableRectangle r = new MutableRectangle(0, 0, 1, 1);
  check(r, new MutableRectangle(0, 0, 1, 1), new MutableRectangle(0, 0, 1, 1));
  check(r, new MutableRectangle(0.5, 0, 0.5, 1),
      new MutableRectangle(0.5, 0, 0.5, 1));
  check(r, new MutableRectangle(-10, -5, 1, 1.5), null);
  check(
      r, new MutableRectangle(0, 0, 1.1, 1), new MutableRectangle(0, 0, 1, 1));
  check(r, new MutableRectangle(1.1, 1.1, 2, 2), null);
  check(r, new MutableRectangle(1.0, 1.0, 2.1, 3.1),
      new MutableRectangle(1.0, 1.0, 0, 0));
}
