Skip to content

Commit

Permalink
#11: added merge R1 under R2.
Browse files Browse the repository at this point in the history
  • Loading branch information
romankh3 committed Apr 9, 2019
1 parent 802c336 commit bbe8feb
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 4 deletions.
15 changes: 11 additions & 4 deletions src/main/java/ua/comparison/image/model/Rectangle.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,19 @@ public Rectangle merge(Rectangle that) {
mergedRectangle = new Rectangle(this);
} else if (isR2InsideR1(that, this)) {
mergedRectangle = new Rectangle(that);
} else if(isR2UnderR1(that, this)) {
mergedRectangle = new Rectangle(that.getMinX(), that.getMinY(), this.getMaxX(), this.getMaxY());
} else if(isR2UnderR1(this, that)) {
mergedRectangle = new Rectangle(this.getMinX(), this.getMinY(), that.getMaxX(), that.getMaxY());
}
return mergedRectangle;
}

private boolean isR2UnderR1(Rectangle r1, Rectangle r2) {
return r1.getMinX() <= r2.getMinX() && r1.getMinY() <= r2.getMinY() &&
r1.getMaxX() <= r2.getMaxX() && r1.getMaxY() <= r2.getMaxY();
}

/**
* Tell if r2 inside r1.
*
Expand All @@ -63,10 +72,8 @@ public Rectangle merge(Rectangle that) {
* @return true if r2 inside r1, otherwise false.
*/
private boolean isR2InsideR1(Rectangle r1, Rectangle r2) {
return r1.getMinX() <= r2.getMinX() &&
r1.getMinY() <= r2.getMinY() &&
r1.getMaxX() >= r2.getMaxX() &&
r1.getMaxY() >= r2.getMaxY();
return r1.getMinX() <= r2.getMinX() && r1.getMinY() <= r2.getMinY() &&
r1.getMaxX() >= r2.getMaxX() && r1.getMaxY() >= r2.getMaxY();
}

public boolean isOverlapping(Rectangle that) {
Expand Down
30 changes: 30 additions & 0 deletions src/test/java/ua/comparison/image/model/RectangleUnitTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -215,4 +215,34 @@ public void testMergeR1InsideR2() {
assertEquals(r2, mergedRectangleR2intoR1);
}

/**
* Cover test case with merging rectangles when R2 under R1.
*
* ....................
* . R1 .
* . ....................
* . . R2 . .
* . . . .
* . . . .
* .................... .
* . .
* ....................
*/
@Test
public void testMergeR2UnderR1() {
//given
Rectangle r1 = new Rectangle(4, 3, 8, 7);
Rectangle r2 = new Rectangle(6, 5, 11, 10);

Rectangle expectedMergedRectangle = new Rectangle(4, 3, 11, 10);

//when
Rectangle mergedRectangle1 = r1.merge(r2);
Rectangle mergedRectangle2 = r2.merge(r1);

//then
assertEquals(expectedMergedRectangle, mergedRectangle1);
assertEquals(expectedMergedRectangle, mergedRectangle2);
}

}

0 comments on commit bbe8feb

Please sign in to comment.