tesseract  5.0.0
rect_test.cc
Go to the documentation of this file.
1 // (C) Copyright 2017, Google Inc.
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 // http://www.apache.org/licenses/LICENSE-2.0
6 // Unless required by applicable law or agreed to in writing, software
7 // distributed under the License is distributed on an "AS IS" BASIS,
8 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9 // See the License for the specific language governing permissions and
10 // limitations under the License.
11 
12 #include "rect.h"
13 
14 #include "include_gunit.h"
15 
16 namespace tesseract {
17 
18 class TBOXTest : public testing::Test {
19 public:
20  void SetUp() override {
21  std::locale::global(std::locale(""));
22  }
23 
24  void TearDown() override {}
25 };
26 
27 TEST_F(TBOXTest, OverlapInside) {
28  TBOX a(10, 10, 20, 20);
29  TBOX b(11, 11, 12, 12);
30 
31  EXPECT_TRUE(a.overlap(b));
32  EXPECT_TRUE(b.overlap(a));
33  EXPECT_DOUBLE_EQ(0.01, a.overlap_fraction(b));
34  EXPECT_DOUBLE_EQ(1.0, b.overlap_fraction(a));
35 }
36 
37 TEST_F(TBOXTest, OverlapBoolCorners) {
38  TBOX mid(10, 10, 30, 30);
39  TBOX bottom_left(5, 5, 15, 15);
40  TBOX top_left(5, 25, 15, 35);
41  // other corners covered by symmetry
42 
43  EXPECT_TRUE(mid.overlap(bottom_left));
44  EXPECT_TRUE(bottom_left.overlap(mid));
45  EXPECT_TRUE(mid.overlap(top_left));
46  EXPECT_TRUE(top_left.overlap(mid));
47 }
48 
49 TEST_F(TBOXTest, OverlapFractionCorners) {
50  TBOX mid(10, 10, 30, 30);
51  TBOX bottom_left(5, 5, 15, 15);
52  TBOX top_left(5, 25, 15, 35);
53  // other corners covered by symmetry
54 
55  EXPECT_DOUBLE_EQ((5.0 * 5.0) / (20.0 * 20.0), mid.overlap_fraction(bottom_left));
56  EXPECT_DOUBLE_EQ((5.0 * 5.0) / (10.0 * 10.0), bottom_left.overlap_fraction(mid));
57  EXPECT_DOUBLE_EQ((5.0 * 5.0) / (20.0 * 20.0), mid.overlap_fraction(top_left));
58  EXPECT_DOUBLE_EQ((5.0 * 5.0) / (10.0 * 10.0), top_left.overlap_fraction(mid));
59 }
60 
61 TEST_F(TBOXTest, OverlapBoolSides) {
62  TBOX mid(10, 10, 30, 30);
63  TBOX left(5, 15, 15, 25);
64  TBOX bottom(15, 5, 25, 15);
65  // other sides covered by symmetry
66 
67  EXPECT_TRUE(mid.overlap(left));
68  EXPECT_TRUE(left.overlap(mid));
69  EXPECT_TRUE(mid.overlap(bottom));
70  EXPECT_TRUE(bottom.overlap(mid));
71 }
72 
73 TEST_F(TBOXTest, OverlapFractionSides) {
74  TBOX mid(10, 10, 30, 30);
75  TBOX left(5, 15, 15, 25);
76  TBOX bottom(15, 5, 25, 15);
77  // other sides covered by symmetry
78 
79  EXPECT_DOUBLE_EQ((5.0 * 10.0) / (20.0 * 20.0), mid.overlap_fraction(left));
80  EXPECT_DOUBLE_EQ((5.0 * 10.0) / (10.0 * 10.0), left.overlap_fraction(mid));
81  EXPECT_DOUBLE_EQ((5.0 * 10.0) / (20.0 * 20.0), mid.overlap_fraction(bottom));
82  EXPECT_DOUBLE_EQ((5.0 * 10.0) / (10.0 * 10.0), bottom.overlap_fraction(mid));
83 }
84 
85 TEST_F(TBOXTest, OverlapBoolSpan) {
86  TBOX mid(10, 10, 30, 30);
87  TBOX vertical(15, 5, 25, 35);
88  TBOX horizontal(5, 15, 35, 25);
89  // other sides covered by symmetry in other test cases
90 
91  EXPECT_TRUE(mid.overlap(vertical));
92  EXPECT_TRUE(vertical.overlap(mid));
93  EXPECT_TRUE(mid.overlap(horizontal));
94  EXPECT_TRUE(horizontal.overlap(mid));
95 }
96 
97 TEST_F(TBOXTest, OverlapFractionSpan) {
98  TBOX mid(10, 10, 30, 30);
99  TBOX vertical(15, 5, 25, 35);
100  TBOX horizontal(5, 15, 35, 25);
101  // other sides covered by symmetry in other test cases
102 
103  EXPECT_DOUBLE_EQ((10.0 * 20.0) / (20.0 * 20.0), mid.overlap_fraction(vertical));
104  EXPECT_DOUBLE_EQ((10.0 * 20.0) / (10.0 * 30.0), vertical.overlap_fraction(mid));
105  EXPECT_DOUBLE_EQ((20.0 * 10.0) / (20.0 * 20.0), mid.overlap_fraction(horizontal));
106  EXPECT_DOUBLE_EQ((20.0 * 10.0) / (30.0 * 10.0), horizontal.overlap_fraction(mid));
107 }
108 
109 // TODO(nbeato): pretty much all cases
110 TEST_F(TBOXTest, OverlapOutsideTests) {
111  TBOX mid(10, 10, 30, 30);
112  TBOX left(0, 15, 5, 25);
113 
114  EXPECT_FALSE(mid.overlap(left));
115  EXPECT_FALSE(left.overlap(mid));
116  EXPECT_DOUBLE_EQ(0.0, mid.overlap_fraction(left));
117  EXPECT_DOUBLE_EQ(0.0, left.overlap_fraction(mid));
118 }
119 
120 TEST_F(TBOXTest, OverlapXFraction) {
121  TBOX a(10, 10, 20, 20);
122  TBOX b(12, 100, 26, 200);
123  TBOX c(0, 0, 100, 100);
124  TBOX d(0, 0, 1, 1);
125 
126  EXPECT_DOUBLE_EQ(8.0 / 10.0, a.x_overlap_fraction(b));
127  EXPECT_DOUBLE_EQ(8.0 / 14.0, b.x_overlap_fraction(a));
128  EXPECT_DOUBLE_EQ(1.0, a.x_overlap_fraction(c));
129  EXPECT_DOUBLE_EQ(10.0 / 100.0, c.x_overlap_fraction(a));
130  EXPECT_DOUBLE_EQ(0.0, a.x_overlap_fraction(d));
131  EXPECT_DOUBLE_EQ(0.0, d.x_overlap_fraction(a));
132 }
133 
134 TEST_F(TBOXTest, OverlapYFraction) {
135  TBOX a(10, 10, 20, 20);
136  TBOX b(100, 12, 200, 26);
137  TBOX c(0, 0, 100, 100);
138  TBOX d(0, 0, 1, 1);
139 
140  EXPECT_DOUBLE_EQ(8.0 / 10.0, a.y_overlap_fraction(b));
141  EXPECT_DOUBLE_EQ(8.0 / 14.0, b.y_overlap_fraction(a));
142  EXPECT_DOUBLE_EQ(1.0, a.y_overlap_fraction(c));
143  EXPECT_DOUBLE_EQ(10.0 / 100.0, c.y_overlap_fraction(a));
144  EXPECT_DOUBLE_EQ(0.0, a.y_overlap_fraction(d));
145  EXPECT_DOUBLE_EQ(0.0, d.y_overlap_fraction(a));
146 }
147 
148 TEST_F(TBOXTest, OverlapXFractionZeroSize) {
149  TBOX zero(10, 10, 10, 10);
150  TBOX big(0, 0, 100, 100);
151  TBOX small(0, 0, 1, 1);
152 
153  EXPECT_DOUBLE_EQ(1.0, zero.x_overlap_fraction(big));
154  EXPECT_DOUBLE_EQ(0.0, big.x_overlap_fraction(zero));
155  EXPECT_DOUBLE_EQ(0.0, zero.x_overlap_fraction(small));
156  EXPECT_DOUBLE_EQ(0.0, small.x_overlap_fraction(zero));
157 }
158 
159 TEST_F(TBOXTest, OverlapYFractionZeroSize) {
160  TBOX zero(10, 10, 10, 10);
161  TBOX big(0, 0, 100, 100);
162  TBOX small(0, 0, 1, 1);
163 
164  EXPECT_DOUBLE_EQ(1.0, zero.y_overlap_fraction(big));
165  EXPECT_DOUBLE_EQ(0.0, big.y_overlap_fraction(zero));
166  EXPECT_DOUBLE_EQ(0.0, zero.y_overlap_fraction(small));
167  EXPECT_DOUBLE_EQ(0.0, small.y_overlap_fraction(zero));
168 }
169 
170 } // namespace tesseract
TEST_F(EuroText, FastLatinOCR)
double y_overlap_fraction(const TBOX &box) const
Definition: rect.h:486
double x_overlap_fraction(const TBOX &box) const
Definition: rect.h:463
bool overlap(const TBOX &box) const
Definition: rect.h:363
double overlap_fraction(const TBOX &box) const
Definition: rect.h:396
void TearDown() override
Definition: rect_test.cc:24
void SetUp() override
Definition: rect_test.cc:20