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

import 'dart:math';
import 'package:expect/expect.dart';

main() {
  testConstruction();
  testIntersection();
  testIntersects();
  testBoundingBox();
  testContainsRectangle();
  testContainsPoint();
  testHashCode();
  testEdgeCases();
  testEquality();
  testNegativeLengths();
  testNaNLeft();
  testNaNTop();
  testNaNWidth();
  testNaNHeight();
}

Rectangle createRectangle(List<num> a) {
  return a != null ? new Rectangle(a[0], a[1], a[2] - a[0], a[3] - a[1]) : null;
}

testConstruction() {
  var r0 = new Rectangle(10, 20, 30, 40);
  Expect.equals('Rectangle (10, 20) 30 x 40', r0.toString());
  Expect.equals(40, r0.right);
  Expect.equals(60, r0.bottom);

  var r1 = new Rectangle.fromPoints(r0.topLeft, r0.bottomRight);
  Expect.equals(r0, r1);

  var r2 = new Rectangle.fromPoints(r0.bottomRight, r0.topLeft);
  Expect.equals(r0, r2);
}

testIntersection() {
  var tests = [
    [
      [10, 10, 20, 20],
      [15, 15, 25, 25],
      [15, 15, 20, 20]
    ],
    [
      [10, 10, 20, 20],
      [20, 0, 30, 10],
      [20, 10, 20, 10]
    ],
    [
      [0, 0, 1, 1],
      [10, 11, 12, 13],
      null
    ],
    [
      [11, 12, 98, 99],
      [22, 23, 34, 35],
      [22, 23, 34, 35]
    ]
  ];

  for (var test in tests) {
    var r0 = createRectangle(test[0]);
    var r1 = createRectangle(test[1]);
    var expected = createRectangle(test[2]);

    Expect.equals(expected, r0.intersection(r1));
    Expect.equals(expected, r1.intersection(r0));
  }
}

testIntersects() {
  var r0 = new Rectangle(10, 10, 20, 20);
  var r1 = new Rectangle(15, 15, 25, 25);
  var r2 = new Rectangle(0, 0, 1, 1);

  Expect.isTrue(r0.intersects(r1));
  Expect.isTrue(r1.intersects(r0));

  Expect.isFalse(r0.intersects(r2));
  Expect.isFalse(r2.intersects(r0));
}

testBoundingBox() {
  var tests = [
    [
      [10, 10, 20, 20],
      [15, 15, 25, 25],
      [10, 10, 25, 25]
    ],
    [
      [10, 10, 20, 20],
      [20, 0, 30, 10],
      [10, 0, 30, 20]
    ],
    [
      [0, 0, 1, 1],
      [10, 11, 12, 13],
      [0, 0, 12, 13]
    ],
    [
      [11, 12, 98, 99],
      [22, 23, 34, 35],
      [11, 12, 98, 99]
    ]
  ];

  for (var test in tests) {
    var r0 = createRectangle(test[0]);
    var r1 = createRectangle(test[1]);
    var expected = createRectangle(test[2]);

    Expect.equals(expected, r0.boundingBox(r1));
    Expect.equals(expected, r1.boundingBox(r0));
  }
}

testContainsRectangle() {
  var r = new Rectangle(-10, 0, 20, 10);
  Expect.isTrue(r.containsRectangle(r));

  Expect.isFalse(r.containsRectangle(
      new Rectangle(double.nan, double.nan, double.nan, double.nan)));

  var r2 = new Rectangle(0, 2, 5, 5);
  Expect.isTrue(r.containsRectangle(r2));
  Expect.isFalse(r2.containsRectangle(r));

  r2 = new Rectangle(-11, 2, 5, 5);
  Expect.isFalse(r.containsRectangle(r2));
  r2 = new Rectangle(0, 2, 15, 5);
  Expect.isFalse(r.containsRectangle(r2));
  r2 = new Rectangle(0, 2, 5, 10);
  Expect.isFalse(r.containsRectangle(r2));
  r2 = new Rectangle(0, 0, 5, 10);
  Expect.isTrue(r.containsRectangle(r2));
}

testContainsPoint() {
  var r = new Rectangle(20, 40, 60, 80);

  // Test middle.
  Expect.isTrue(r.containsPoint(new Point(50, 80)));

  // Test edges.
  Expect.isTrue(r.containsPoint(new Point(20, 40)));
  Expect.isTrue(r.containsPoint(new Point(50, 40)));
  Expect.isTrue(r.containsPoint(new Point(80, 40)));
  Expect.isTrue(r.containsPoint(new Point(80, 80)));
  Expect.isTrue(r.containsPoint(new Point(80, 120)));
  Expect.isTrue(r.containsPoint(new Point(50, 120)));
  Expect.isTrue(r.containsPoint(new Point(20, 120)));
  Expect.isTrue(r.containsPoint(new Point(20, 80)));

  // Test outside.
  Expect.isFalse(r.containsPoint(new Point(0, 0)));
  Expect.isFalse(r.containsPoint(new Point(50, 0)));
  Expect.isFalse(r.containsPoint(new Point(100, 0)));
  Expect.isFalse(r.containsPoint(new Point(100, 80)));
  Expect.isFalse(r.containsPoint(new Point(100, 160)));
  Expect.isFalse(r.containsPoint(new Point(50, 160)));
  Expect.isFalse(r.containsPoint(new Point(0, 160)));
  Expect.isFalse(r.containsPoint(new Point(0, 80)));
}

testHashCode() {
  var a = new Rectangle(0, 1, 2, 3);
  var b = new Rectangle(0, 1, 2, 3);
  Expect.equals(b.hashCode, a.hashCode);

  var c = new Rectangle(1, 0, 2, 3);
  Expect.isFalse(a.hashCode == c.hashCode);
}

testEdgeCases() {
  edgeTest(double a, double l) {
    var r = new Rectangle(a, a, l, l);
    Expect.equals(r, r.boundingBox(r));
    Expect.equals(r, r.intersection(r));
  }

  var bignum1 = 0x20000000000000 + 0.0;
  var bignum2 = 0x20000000000002 + 0.0;
  var bignum3 = 0x20000000000004 + 0.0;
  edgeTest(1.0, bignum1);
  edgeTest(1.0, bignum2);
  edgeTest(1.0, bignum3);
  edgeTest(bignum1, 1.0);
  edgeTest(bignum2, 1.0);
  edgeTest(bignum3, 1.0);
}

testEquality() {
  var bignum = 0x80000000000008 + 0.0;
  var r1 = new Rectangle(bignum, bignum, 1.0, 1.0);
  var r2 = new Rectangle(bignum, bignum, 2.0, 2.0);
  Expect.equals(r2, r1);
  Expect.equals(r2.hashCode, r1.hashCode);
  Expect.equals(r2.right, r1.right);
  Expect.equals(r2.bottom, r1.bottom);
  Expect.equals(1.0, r1.width);
  Expect.equals(2.0, r2.width);
}

testNegativeLengths() {
  // Constructor allows negative lengths, but clamps them to zero.
  Expect.equals(new Rectangle(4, 4, 0, 0), new Rectangle(4, 4, -2, -2));
  Expect.equals(new Rectangle(4, 4, 0, 0), new MutableRectangle(4, 4, -2, -2));

  // Setters clamp negative lengths to zero.
  var mutable = new MutableRectangle(0, 0, 1, 1);
  mutable.width = -1;
  mutable.height = -1;
  Expect.equals(new Rectangle(0, 0, 0, 0), mutable);

  // Test that doubles are clamped to double zero.
  var rectangle = new Rectangle(1.5, 1.5, -2.5, -2.5);
  Expect.isTrue(identical(rectangle.width, 0.0));
  Expect.isTrue(identical(rectangle.height, 0.0));
}

testNaNLeft() {
  var rectangles = [
    const Rectangle(double.nan, 1, 2, 3),
    new MutableRectangle(double.nan, 1, 2, 3),
    new Rectangle.fromPoints(new Point(double.nan, 1), new Point(2, 4)),
    new MutableRectangle.fromPoints(new Point(double.nan, 1), new Point(2, 4)),
  ];
  for (var r in rectangles) {
    Expect.isFalse(r.containsPoint(new Point(0, 1)));
    Expect.isFalse(r.containsRectangle(new Rectangle(0, 1, 2, 3)));
    Expect.isFalse(r.intersects(new Rectangle(0, 1, 2, 3)));
    Expect.isTrue(r.left.isNaN);
    Expect.isTrue(r.right.isNaN);
  }
}

testNaNTop() {
  var rectangles = [
    const Rectangle(0, double.nan, 2, 3),
    new MutableRectangle(0, double.nan, 2, 3),
    new Rectangle.fromPoints(new Point(0, double.nan), new Point(2, 4)),
    new MutableRectangle.fromPoints(new Point(0, double.nan), new Point(2, 4)),
  ];
  for (var r in rectangles) {
    Expect.isFalse(r.containsPoint(new Point(0, 1)));
    Expect.isFalse(r.containsRectangle(new Rectangle(0, 1, 2, 3)));
    Expect.isFalse(r.intersects(new Rectangle(0, 1, 2, 3)));
    Expect.isTrue(r.top.isNaN);
    Expect.isTrue(r.bottom.isNaN);
  }
}

testNaNWidth() {
  var rectangles = [
    const Rectangle(0, 1, double.nan, 3),
    new MutableRectangle(0, 1, double.nan, 3),
    new Rectangle.fromPoints(new Point(0, 1), new Point(double.nan, 4)),
    new MutableRectangle.fromPoints(new Point(0, 1), new Point(double.nan, 4)),
  ];
  for (var r in rectangles) {
    Expect.isFalse(r.containsPoint(new Point(0, 1)));
    Expect.isFalse(r.containsRectangle(new Rectangle(0, 1, 2, 3)));
    Expect.isFalse(r.intersects(new Rectangle(0, 1, 2, 3)));
    Expect.isTrue(r.right.isNaN);
    Expect.isTrue(r.width.isNaN);
  }
}

testNaNHeight() {
  var rectangles = [
    const Rectangle(0, 1, 2, double.nan),
    new MutableRectangle(0, 1, 2, double.nan),
    new Rectangle.fromPoints(new Point(0, 1), new Point(2, double.nan)),
    new MutableRectangle.fromPoints(new Point(0, 1), new Point(2, double.nan)),
  ];
  for (var r in rectangles) {
    Expect.isFalse(r.containsPoint(new Point(0, 1)));
    Expect.isFalse(r.containsRectangle(new Rectangle(0, 1, 2, 3)));
    Expect.isFalse(r.intersects(new Rectangle(0, 1, 2, 3)));
    Expect.isTrue(r.bottom.isNaN);
    Expect.isTrue(r.height.isNaN);
  }
}
