// 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 containsPoint(Point<num> another)
/// Tests whether another is inside or along the edges of this.
/// @description Checks the predicate for some predefined data.
/// @author kaigorodov

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

void check(MutableRectangle r, num px, num py, bool expected) {
  Point p = new Point(px, py);
  bool actual = r.containsPoint(p);
  Expect.equals(expected, actual, "r=$r, p=$p, expected=$expected");
}

main() {
  MutableRectangle r = new MutableRectangle(0, 0, 1, 1);
  check(r, 0, 0, true);
  check(r, 0, 1, true);
  check(r, 1, 0, true);
  check(r, 0.5, 1, true);
  check(r, 1, 0.5, true);
  check(r, 0.5, 0.5, true);
  check(r, -0.001, 0, false);
  check(r, 0, -0.001, false);
  check(r, 1.0001, 0, false);
  check(r, 1.001, 1.0001, false);
  check(r, 1, -0.001, false);
  check(r, -0.001, -0.001, false);
  check(r, 1.001, -0.001, false);
}
