tesseract v5.3.3.20231005
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
16namespace tesseract {
17
18class TBOXTest : public testing::Test {
19public:
20 void SetUp() override {
21 std::locale::global(std::locale(""));
22 }
23
24 void TearDown() override {}
25};
26
27TEST_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));
35}
36
37TEST_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
49TEST_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
61TEST_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
73TEST_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
85TEST_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
97TEST_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
110TEST_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
120TEST_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));
129 EXPECT_DOUBLE_EQ(10.0 / 100.0, c.x_overlap_fraction(a));
132}
133
134TEST_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));
143 EXPECT_DOUBLE_EQ(10.0 / 100.0, c.y_overlap_fraction(a));
146}
147
148TEST_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
159TEST_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
#define EXPECT_DOUBLE_EQ(val1, val2)
Definition: gtest.h:2148
#define EXPECT_TRUE(condition)
Definition: gtest.h:1982
#define EXPECT_FALSE(condition)
Definition: gtest.h:1986
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