summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'tesseract/unittest/rect_test.cc')
-rw-r--r--tesseract/unittest/rect_test.cc176
1 files changed, 176 insertions, 0 deletions
diff --git a/tesseract/unittest/rect_test.cc b/tesseract/unittest/rect_test.cc
new file mode 100644
index 00000000..5d9d439f
--- /dev/null
+++ b/tesseract/unittest/rect_test.cc
@@ -0,0 +1,176 @@
+// (C) Copyright 2017, Google Inc.
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "rect.h"
+
+#include "include_gunit.h"
+
+namespace tesseract {
+
+class TBOXTest : public testing::Test {
+ public:
+ void SetUp() {
+ std::locale::global(std::locale(""));
+ }
+
+ void TearDown() {}
+};
+
+TEST_F(TBOXTest, OverlapInside) {
+ TBOX a(10, 10, 20, 20);
+ TBOX b(11, 11, 12, 12);
+
+ EXPECT_TRUE(a.overlap(b));
+ EXPECT_TRUE(b.overlap(a));
+ EXPECT_DOUBLE_EQ(0.01, a.overlap_fraction(b));
+ EXPECT_DOUBLE_EQ(1.0, b.overlap_fraction(a));
+}
+
+TEST_F(TBOXTest, OverlapBoolCorners) {
+ TBOX mid(10, 10, 30, 30);
+ TBOX bottom_left(5, 5, 15, 15);
+ TBOX top_left(5, 25, 15, 35);
+ // other corners covered by symmetry
+
+ EXPECT_TRUE(mid.overlap(bottom_left));
+ EXPECT_TRUE(bottom_left.overlap(mid));
+ EXPECT_TRUE(mid.overlap(top_left));
+ EXPECT_TRUE(top_left.overlap(mid));
+}
+
+TEST_F(TBOXTest, OverlapFractionCorners) {
+ TBOX mid(10, 10, 30, 30);
+ TBOX bottom_left(5, 5, 15, 15);
+ TBOX top_left(5, 25, 15, 35);
+ // other corners covered by symmetry
+
+ EXPECT_DOUBLE_EQ((5.0 * 5.0) / (20.0 * 20.0),
+ mid.overlap_fraction(bottom_left));
+ EXPECT_DOUBLE_EQ((5.0 * 5.0) / (10.0 * 10.0),
+ bottom_left.overlap_fraction(mid));
+ EXPECT_DOUBLE_EQ((5.0 * 5.0) / (20.0 * 20.0), mid.overlap_fraction(top_left));
+ EXPECT_DOUBLE_EQ((5.0 * 5.0) / (10.0 * 10.0), top_left.overlap_fraction(mid));
+}
+
+TEST_F(TBOXTest, OverlapBoolSides) {
+ TBOX mid(10, 10, 30, 30);
+ TBOX left(5, 15, 15, 25);
+ TBOX bottom(15, 5, 25, 15);
+ // other sides covered by symmetry
+
+ EXPECT_TRUE(mid.overlap(left));
+ EXPECT_TRUE(left.overlap(mid));
+ EXPECT_TRUE(mid.overlap(bottom));
+ EXPECT_TRUE(bottom.overlap(mid));
+}
+
+TEST_F(TBOXTest, OverlapFractionSides) {
+ TBOX mid(10, 10, 30, 30);
+ TBOX left(5, 15, 15, 25);
+ TBOX bottom(15, 5, 25, 15);
+ // other sides covered by symmetry
+
+ EXPECT_DOUBLE_EQ((5.0 * 10.0) / (20.0 * 20.0), mid.overlap_fraction(left));
+ EXPECT_DOUBLE_EQ((5.0 * 10.0) / (10.0 * 10.0), left.overlap_fraction(mid));
+ EXPECT_DOUBLE_EQ((5.0 * 10.0) / (20.0 * 20.0), mid.overlap_fraction(bottom));
+ EXPECT_DOUBLE_EQ((5.0 * 10.0) / (10.0 * 10.0), bottom.overlap_fraction(mid));
+}
+
+TEST_F(TBOXTest, OverlapBoolSpan) {
+ TBOX mid(10, 10, 30, 30);
+ TBOX vertical(15, 5, 25, 35);
+ TBOX horizontal(5, 15, 35, 25);
+ // other sides covered by symmetry in other test cases
+
+ EXPECT_TRUE(mid.overlap(vertical));
+ EXPECT_TRUE(vertical.overlap(mid));
+ EXPECT_TRUE(mid.overlap(horizontal));
+ EXPECT_TRUE(horizontal.overlap(mid));
+}
+
+TEST_F(TBOXTest, OverlapFractionSpan) {
+ TBOX mid(10, 10, 30, 30);
+ TBOX vertical(15, 5, 25, 35);
+ TBOX horizontal(5, 15, 35, 25);
+ // other sides covered by symmetry in other test cases
+
+ EXPECT_DOUBLE_EQ((10.0 * 20.0) / (20.0 * 20.0),
+ mid.overlap_fraction(vertical));
+ EXPECT_DOUBLE_EQ((10.0 * 20.0) / (10.0 * 30.0),
+ vertical.overlap_fraction(mid));
+ EXPECT_DOUBLE_EQ((20.0 * 10.0) / (20.0 * 20.0),
+ mid.overlap_fraction(horizontal));
+ EXPECT_DOUBLE_EQ((20.0 * 10.0) / (30.0 * 10.0),
+ horizontal.overlap_fraction(mid));
+}
+
+// TODO(nbeato): pretty much all cases
+TEST_F(TBOXTest, OverlapOutsideTests) {
+ TBOX mid(10, 10, 30, 30);
+ TBOX left(0, 15, 5, 25);
+
+ EXPECT_FALSE(mid.overlap(left));
+ EXPECT_FALSE(left.overlap(mid));
+ EXPECT_DOUBLE_EQ(0.0, mid.overlap_fraction(left));
+ EXPECT_DOUBLE_EQ(0.0, left.overlap_fraction(mid));
+}
+
+TEST_F(TBOXTest, OverlapXFraction) {
+ TBOX a(10, 10, 20, 20);
+ TBOX b(12, 100, 26, 200);
+ TBOX c(0, 0, 100, 100);
+ TBOX d(0, 0, 1, 1);
+
+ EXPECT_DOUBLE_EQ(8.0 / 10.0, a.x_overlap_fraction(b));
+ EXPECT_DOUBLE_EQ(8.0 / 14.0, b.x_overlap_fraction(a));
+ EXPECT_DOUBLE_EQ(1.0, a.x_overlap_fraction(c));
+ EXPECT_DOUBLE_EQ(10.0 / 100.0, c.x_overlap_fraction(a));
+ EXPECT_DOUBLE_EQ(0.0, a.x_overlap_fraction(d));
+ EXPECT_DOUBLE_EQ(0.0, d.x_overlap_fraction(a));
+}
+
+TEST_F(TBOXTest, OverlapYFraction) {
+ TBOX a(10, 10, 20, 20);
+ TBOX b(100, 12, 200, 26);
+ TBOX c(0, 0, 100, 100);
+ TBOX d(0, 0, 1, 1);
+
+ EXPECT_DOUBLE_EQ(8.0 / 10.0, a.y_overlap_fraction(b));
+ EXPECT_DOUBLE_EQ(8.0 / 14.0, b.y_overlap_fraction(a));
+ EXPECT_DOUBLE_EQ(1.0, a.y_overlap_fraction(c));
+ EXPECT_DOUBLE_EQ(10.0 / 100.0, c.y_overlap_fraction(a));
+ EXPECT_DOUBLE_EQ(0.0, a.y_overlap_fraction(d));
+ EXPECT_DOUBLE_EQ(0.0, d.y_overlap_fraction(a));
+}
+
+TEST_F(TBOXTest, OverlapXFractionZeroSize) {
+ TBOX zero(10, 10, 10, 10);
+ TBOX big(0, 0, 100, 100);
+ TBOX small(0, 0, 1, 1);
+
+ EXPECT_DOUBLE_EQ(1.0, zero.x_overlap_fraction(big));
+ EXPECT_DOUBLE_EQ(0.0, big.x_overlap_fraction(zero));
+ EXPECT_DOUBLE_EQ(0.0, zero.x_overlap_fraction(small));
+ EXPECT_DOUBLE_EQ(0.0, small.x_overlap_fraction(zero));
+}
+
+TEST_F(TBOXTest, OverlapYFractionZeroSize) {
+ TBOX zero(10, 10, 10, 10);
+ TBOX big(0, 0, 100, 100);
+ TBOX small(0, 0, 1, 1);
+
+ EXPECT_DOUBLE_EQ(1.0, zero.y_overlap_fraction(big));
+ EXPECT_DOUBLE_EQ(0.0, big.y_overlap_fraction(zero));
+ EXPECT_DOUBLE_EQ(0.0, zero.y_overlap_fraction(small));
+ EXPECT_DOUBLE_EQ(0.0, small.y_overlap_fraction(zero));
+}
+
+} // namespace