@Test
 public void testTwoNonOverlappedRectangles() {
   RectangleQuery rq = new RectangleQuery(new Rectangle(1, 1, 2, 2), new Rectangle(3, 1, 4, 3));
   assertThat(rq.query(1, 1), equalTo(1));
   assertThat(rq.query(3, 1), equalTo(1));
   assertThat(rq.query(4, 2), equalTo(0));
 }
 @Test
 public void testTwoNonOverlappedRectanglesInYAxis() {
   RectangleQuery rq = new RectangleQuery(new Rectangle(0, 0, 2, 1), new Rectangle(0, 2, 1, 3));
   assertThat(rq.query(0, 0), equalTo(1));
   assertThat(rq.query(1, 1), equalTo(0));
   assertThat(rq.query(0, 1), equalTo(0));
   assertThat(rq.query(0, 2), equalTo(1));
 }
 @Test
 public void testTwoOverlappedRectangles() {
   RectangleQuery rq = new RectangleQuery(new Rectangle(1, 1, 3, 3), new Rectangle(2, 0, 4, 2));
   assertThat(rq.query(1, 1), equalTo(1));
   assertThat(rq.query(3, 1), equalTo(1));
   assertThat(rq.query(2, 1), equalTo(2));
   assertThat(rq.query(0, 2), equalTo(0));
   assertThat(rq.query(2, 0), equalTo(1));
 }
 @Test
 public void testEmbeddedRectangles() {
   RectangleQuery rq = new RectangleQuery(new Rectangle(1, 1, 4, 4), new Rectangle(2, 2, 3, 3));
   assertThat(rq.query(1, 1), equalTo(1));
   assertThat(rq.query(2, 1), equalTo(1));
   assertThat(rq.query(3, 0), equalTo(0));
   assertThat(rq.query(3, 3), equalTo(1));
   assertThat(rq.query(2, 2), equalTo(2));
   assertThat(rq.query(5, 5), equalTo(0));
 }
  @Test
  public void testThreeOverlappedRectangles() {
    RectangleQuery rq =
        new RectangleQuery(
            new Rectangle(1, 1, 4, 4), new Rectangle(2, 2, 6, 6), new Rectangle(3, 3, 5, 5));
    for (int y = 0; y < 10; y++) {
      assertThat(rq.query(0, y), equalTo(0));
    }

    for (int x = 0; x < 10; x++) {
      assertThat(rq.query(x, 0), equalTo(0));
    }

    assertThat(rq.query(1, 4), equalTo(0));
    assertThat(rq.query(1, 5), equalTo(0));

    assertThat(rq.query(4, 1), equalTo(0));
    assertThat(rq.query(5, 1), equalTo(0));

    assertThat(rq.query(1, 1), equalTo(1));
    assertThat(rq.query(1, 2), equalTo(1));
    assertThat(rq.query(1, 3), equalTo(1));

    assertThat(rq.query(2, 1), equalTo(1));
    assertThat(rq.query(2, 4), equalTo(1));
    assertThat(rq.query(2, 5), equalTo(1));

    assertThat(rq.query(3, 1), equalTo(1));
    assertThat(rq.query(3, 5), equalTo(1));

    assertThat(rq.query(4, 2), equalTo(1));
    assertThat(rq.query(4, 5), equalTo(1));

    assertThat(rq.query(5, 2), equalTo(1));
    assertThat(rq.query(5, 3), equalTo(1));
    assertThat(rq.query(5, 4), equalTo(1));
    assertThat(rq.query(5, 5), equalTo(1));

    assertThat(rq.query(2, 2), equalTo(2));
    assertThat(rq.query(2, 3), equalTo(2));
    assertThat(rq.query(3, 2), equalTo(2));

    assertThat(rq.query(3, 3), equalTo(3));
  }
 @Test
 public void testOneRectangleStartingFromMin() {
   RectangleQuery rq = new RectangleQuery(new Rectangle(0, 0, 2, 2));
   assertThat(rq.query(0, 1), equalTo(1));
 }
 @Test
 public void testOneRectangleXSmallerThanMinQuery() {
   RectangleQuery rq = new RectangleQuery(new Rectangle(0, 0, 2, 2));
   assertThat(rq.query(-1, 1), equalTo(0));
 }
 @Test
 public void testOneRectangleXLargerThanMaxQuery() {
   RectangleQuery rq = new RectangleQuery(new Rectangle(0, 0, 2, 2));
   assertThat(rq.query(3, 1), equalTo(0));
 }
 @Test
 public void testOneRectangle() {
   RectangleQuery rq = new RectangleQuery(new Rectangle(0, 0, 2, 2));
   assertThat(rq.query(1, 1), equalTo(1));
 }