5 #include "gtest/gtest.h"
14 TEST(RectTest, RectOriginSizeXYWHGetters) {
19 EXPECT_EQ(r.
GetX(), 10);
20 EXPECT_EQ(r.
GetY(), 20);
23 auto expected_array = std::array<Scalar, 4>{10, 20, 50, 40};
24 EXPECT_EQ(r.
GetXYWH(), expected_array);
31 EXPECT_EQ(r.
GetX(), 10);
32 EXPECT_EQ(r.
GetY(), 20);
35 auto expected_array = std::array<Scalar, 4>{10, 20, 40, 20};
36 EXPECT_EQ(r.
GetXYWH(), expected_array);
40 TEST(RectTest, IRectOriginSizeXYWHGetters) {
45 EXPECT_EQ(r.
GetX(), 10);
46 EXPECT_EQ(r.
GetY(), 20);
49 auto expected_array = std::array<int64_t, 4>{10, 20, 50, 40};
50 EXPECT_EQ(r.
GetXYWH(), expected_array);
57 EXPECT_EQ(r.
GetX(), 10);
58 EXPECT_EQ(r.
GetY(), 20);
61 auto expected_array = std::array<int64_t, 4>{10, 20, 40, 20};
62 EXPECT_EQ(r.
GetXYWH(), expected_array);
66 TEST(RectTest, RectFromRect) {
73 TEST(RectTest, RectFromIRect) {
80 TEST(RectTest, IRectFromRect) {
92 TEST(RectTest, IRectFromIRect) {
99 TEST(RectTest, RectMakeSize) {
118 EXPECT_EQ(r, expected);
125 EXPECT_EQ(r, expected);
137 << rect <<
" * " << scale;
139 << rect <<
" * " << scale;
141 << rect <<
" * " << scale;
143 << rect <<
" * " << scale;
148 rect.
GetY() * scale_y,
153 << rect <<
" * " << scale_x <<
", " << scale_y;
155 << rect <<
" * " << scale_x <<
", " << scale_y;
157 << rect <<
" * " << scale_x <<
", " << scale_y;
159 test1(rect, scale_x);
160 test1(rect, scale_y);
172 auto test1 = [](
IRect rect, int64_t scale) {
178 EXPECT_EQ(rect.
Scale(scale), expected)
179 << rect <<
" * " << scale;
180 EXPECT_EQ(rect.
Scale(scale, scale), expected)
181 << rect <<
" * " << scale;
182 EXPECT_EQ(rect.
Scale(
IPoint(scale, scale)), expected)
183 << rect <<
" * " << scale;
184 EXPECT_EQ(rect.
Scale(
ISize(scale, scale)), expected)
185 << rect <<
" * " << scale;
188 auto test2 = [&test1](
IRect rect, int64_t scale_x, int64_t scale_y) {
190 rect.
GetY() * scale_y,
194 EXPECT_EQ(rect.
Scale(scale_x, scale_y), expected)
195 << rect <<
" * " << scale_x <<
", " << scale_y;
196 EXPECT_EQ(rect.
Scale(
IPoint(scale_x, scale_y)), expected)
197 << rect <<
" * " << scale_x <<
", " << scale_y;
198 EXPECT_EQ(rect.
Scale(
ISize(scale_x, scale_y)), expected)
199 << rect <<
" * " << scale_x <<
", " << scale_y;
201 test1(rect, scale_x);
202 test1(rect, scale_y);
231 TEST(RectTest, RectGetNormalizingTransform) {
237 EXPECT_EQ(r.GetNormalizingTransform(),
246 auto m = r.GetNormalizingTransform();
255 EXPECT_EQ(m *
Point(350, 600),
Point(0.5, 0.5));
258 EXPECT_EQ(m *
Point(200, 300),
Point(-1, -1));
270 EXPECT_EQ(
Rect::MakeXYWH(10, 10, 0, 10).GetNormalizingTransform(), zero);
271 EXPECT_EQ(
Rect::MakeXYWH(10, 10, 10, 0).GetNormalizingTransform(), zero);
272 EXPECT_EQ(
Rect::MakeXYWH(10, 10, 0, 0).GetNormalizingTransform(), zero);
275 EXPECT_EQ(
Rect::MakeXYWH(10, 10, -1, 10).GetNormalizingTransform(), zero);
276 EXPECT_EQ(
Rect::MakeXYWH(10, 10, 10, -1).GetNormalizingTransform(), zero);
277 EXPECT_EQ(
Rect::MakeXYWH(10, 10, -1, -1).GetNormalizingTransform(), zero);
284 auto nan = std::numeric_limits<Scalar>::quiet_NaN();
285 auto inf = std::numeric_limits<Scalar>::infinity();
288 EXPECT_EQ(
Rect::MakeXYWH(10, 10, nan, 10).GetNormalizingTransform(), z);
289 EXPECT_EQ(
Rect::MakeXYWH(10, 10, 10, nan).GetNormalizingTransform(), z);
290 EXPECT_EQ(
Rect::MakeXYWH(10, 10, nan, nan).GetNormalizingTransform(), z);
293 EXPECT_EQ(
Rect::MakeXYWH(10, 10, inf, 10).GetNormalizingTransform(), z);
294 EXPECT_EQ(
Rect::MakeXYWH(10, 10, 10, inf).GetNormalizingTransform(), z);
295 EXPECT_EQ(
Rect::MakeXYWH(10, 10, inf, inf).GetNormalizingTransform(), z);
298 EXPECT_EQ(
Rect::MakeXYWH(10, 10, -inf, 10).GetNormalizingTransform(), z);
299 EXPECT_EQ(
Rect::MakeXYWH(10, 10, 10, -inf).GetNormalizingTransform(), z);
300 EXPECT_EQ(
Rect::MakeXYWH(10, 10, -inf, -inf).GetNormalizingTransform(), z);
303 EXPECT_EQ(
Rect::MakeXYWH(nan, 10, 10, 10).GetNormalizingTransform(), z);
304 EXPECT_EQ(
Rect::MakeXYWH(10, nan, 10, 10).GetNormalizingTransform(), z);
305 EXPECT_EQ(
Rect::MakeXYWH(nan, nan, 10, 10).GetNormalizingTransform(), z);
308 EXPECT_EQ(
Rect::MakeXYWH(inf, 10, 10, 10).GetNormalizingTransform(), z);
309 EXPECT_EQ(
Rect::MakeXYWH(10, inf, 10, 10).GetNormalizingTransform(), z);
310 EXPECT_EQ(
Rect::MakeXYWH(inf, inf, 10, 10).GetNormalizingTransform(), z);
313 EXPECT_EQ(
Rect::MakeXYWH(-inf, 10, 10, 10).GetNormalizingTransform(), z);
314 EXPECT_EQ(
Rect::MakeXYWH(10, -inf, 10, 10).GetNormalizingTransform(), z);
315 EXPECT_EQ(
Rect::MakeXYWH(-inf, -inf, 10, 10).GetNormalizingTransform(), z);
319 TEST(RectTest, IRectGetNormalizingTransform) {
325 EXPECT_EQ(r.GetNormalizingTransform(),
334 auto m = r.GetNormalizingTransform();
343 EXPECT_EQ(m *
Point(350, 600),
Point(0.5, 0.5));
346 EXPECT_EQ(m *
Point(200, 300),
Point(-1, -1));
358 EXPECT_EQ(
IRect::MakeXYWH(10, 10, 0, 10).GetNormalizingTransform(), zero);
359 EXPECT_EQ(
IRect::MakeXYWH(10, 10, 10, 0).GetNormalizingTransform(), zero);
360 EXPECT_EQ(
IRect::MakeXYWH(10, 10, 0, 0).GetNormalizingTransform(), zero);
363 EXPECT_EQ(
IRect::MakeXYWH(10, 10, -1, 10).GetNormalizingTransform(), zero);
364 EXPECT_EQ(
IRect::MakeXYWH(10, 10, 10, -1).GetNormalizingTransform(), zero);
365 EXPECT_EQ(
IRect::MakeXYWH(10, 10, -1, -1).GetNormalizingTransform(), zero);
370 auto nan = std::numeric_limits<Scalar>::quiet_NaN();
410 TEST(RectTest, MakePointBoundsQuad) {
418 EXPECT_TRUE(bounds.has_value());
419 if (bounds.has_value()) {
452 EXPECT_EQ(rect.Expand(10, -10),
Rect::MakeLTRB(90, 110, 210, 190));
453 EXPECT_EQ(rect.Expand(-10, 10),
Rect::MakeLTRB(110, 90, 190, 210));
454 EXPECT_EQ(rect.Expand(-10, -10),
Rect::MakeLTRB(110, 110, 190, 190));
495 TEST(RectTest, ContainsFloatingPoint) {
497 Rect::MakeXYWH(472.599945f, 440.999969f, 1102.80005f, 654.000061f);
499 EXPECT_TRUE(rect1.Contains(rect2));