xref: /aosp_15_r20/external/libchrome/ui/gfx/geometry/box_unittest.cc (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "testing/gtest/include/gtest/gtest.h"
6 #include "ui/gfx/geometry/box_f.h"
7 
8 namespace gfx {
9 
TEST(BoxTest,Constructors)10 TEST(BoxTest, Constructors) {
11   EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 0.f).ToString(),
12             BoxF().ToString());
13   EXPECT_EQ(BoxF(0.f, 0.f, 0.f, -3.f, -5.f, -7.f).ToString(),
14             BoxF().ToString());
15 
16   EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 3.f, 5.f, 7.f).ToString(),
17             BoxF(3.f, 5.f, 7.f).ToString());
18   EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 0.f).ToString(),
19             BoxF(-3.f, -5.f, -7.f).ToString());
20 
21   EXPECT_EQ(BoxF(2.f, 4.f, 6.f, 3.f, 5.f, 7.f).ToString(),
22             BoxF(Point3F(2.f, 4.f, 6.f), 3.f, 5.f, 7.f).ToString());
23   EXPECT_EQ(BoxF(2.f, 4.f, 6.f, 0.f, 0.f, 0.f).ToString(),
24             BoxF(Point3F(2.f, 4.f, 6.f), -3.f, -5.f, -7.f).ToString());
25 }
26 
TEST(BoxTest,IsEmpty)27 TEST(BoxTest, IsEmpty) {
28   EXPECT_TRUE(BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 0.f).IsEmpty());
29   EXPECT_TRUE(BoxF(1.f, 2.f, 3.f, 0.f, 0.f, 0.f).IsEmpty());
30 
31   EXPECT_TRUE(BoxF(0.f, 0.f, 0.f, 2.f, 0.f, 0.f).IsEmpty());
32   EXPECT_TRUE(BoxF(1.f, 2.f, 3.f, 2.f, 0.f, 0.f).IsEmpty());
33   EXPECT_TRUE(BoxF(0.f, 0.f, 0.f, 0.f, 2.f, 0.f).IsEmpty());
34   EXPECT_TRUE(BoxF(1.f, 2.f, 3.f, 0.f, 2.f, 0.f).IsEmpty());
35   EXPECT_TRUE(BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 2.f).IsEmpty());
36   EXPECT_TRUE(BoxF(1.f, 2.f, 3.f, 0.f, 0.f, 2.f).IsEmpty());
37 
38   EXPECT_FALSE(BoxF(0.f, 0.f, 0.f, 0.f, 2.f, 2.f).IsEmpty());
39   EXPECT_FALSE(BoxF(1.f, 2.f, 3.f, 0.f, 2.f, 2.f).IsEmpty());
40   EXPECT_FALSE(BoxF(0.f, 0.f, 0.f, 2.f, 0.f, 2.f).IsEmpty());
41   EXPECT_FALSE(BoxF(1.f, 2.f, 3.f, 2.f, 0.f, 2.f).IsEmpty());
42   EXPECT_FALSE(BoxF(0.f, 0.f, 0.f, 2.f, 2.f, 0.f).IsEmpty());
43   EXPECT_FALSE(BoxF(1.f, 2.f, 3.f, 2.f, 2.f, 0.f).IsEmpty());
44 
45   EXPECT_FALSE(BoxF(0.f, 0.f, 0.f, 2.f, 2.f, 2.f).IsEmpty());
46   EXPECT_FALSE(BoxF(1.f, 2.f, 3.f, 2.f, 2.f, 2.f).IsEmpty());
47 }
48 
TEST(BoxTest,Union)49 TEST(BoxTest, Union) {
50   BoxF empty_box;
51   BoxF box1(0.f, 0.f, 0.f, 1.f, 1.f, 1.f);
52   BoxF box2(0.f, 0.f, 0.f, 4.f, 6.f, 8.f);
53   BoxF box3(3.f, 4.f, 5.f, 6.f, 4.f, 0.f);
54 
55   EXPECT_EQ(empty_box.ToString(), UnionBoxes(empty_box, empty_box).ToString());
56   EXPECT_EQ(box1.ToString(), UnionBoxes(empty_box, box1).ToString());
57   EXPECT_EQ(box1.ToString(), UnionBoxes(box1, empty_box).ToString());
58   EXPECT_EQ(box2.ToString(), UnionBoxes(empty_box, box2).ToString());
59   EXPECT_EQ(box2.ToString(), UnionBoxes(box2, empty_box).ToString());
60   EXPECT_EQ(box3.ToString(), UnionBoxes(empty_box, box3).ToString());
61   EXPECT_EQ(box3.ToString(), UnionBoxes(box3, empty_box).ToString());
62 
63   // box_1 is contained in box_2
64   EXPECT_EQ(box2.ToString(), UnionBoxes(box1, box2).ToString());
65   EXPECT_EQ(box2.ToString(), UnionBoxes(box2, box1).ToString());
66 
67   // box_1 and box_3 are disjoint
68   EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 9.f, 8.f, 5.f).ToString(),
69             UnionBoxes(box1, box3).ToString());
70   EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 9.f, 8.f, 5.f).ToString(),
71             UnionBoxes(box3, box1).ToString());
72 
73   // box_2 and box_3 intersect, but neither contains the other
74   EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 9.f, 8.f, 8.f).ToString(),
75             UnionBoxes(box2, box3).ToString());
76   EXPECT_EQ(BoxF(0.f, 0.f, 0.f, 9.f, 8.f, 8.f).ToString(),
77             UnionBoxes(box3, box2).ToString());
78 }
79 
TEST(BoxTest,ExpandTo)80 TEST(BoxTest, ExpandTo) {
81   BoxF box1;
82   BoxF box2(0.f, 0.f, 0.f, 1.f, 1.f, 1.f);
83   BoxF box3(1.f, 1.f, 1.f, 0.f, 0.f, 0.f);
84 
85   Point3F point1(0.5f, 0.5f, 0.5f);
86   Point3F point2(-0.5f, -0.5f, -0.5f);
87 
88   BoxF expected1_1(0.f, 0.f, 0.f, 0.5f, 0.5f, 0.5f);
89   BoxF expected1_2(-0.5f, -0.5f, -0.5f, 1.f, 1.f, 1.f);
90 
91   BoxF expected2_1 = box2;
92   BoxF expected2_2(-0.5f, -0.5f, -0.5f, 1.5f, 1.5f, 1.5f);
93 
94   BoxF expected3_1(0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f);
95   BoxF expected3_2(-0.5f, -0.5f, -0.5f, 1.5f, 1.5f, 1.5f);
96 
97   box1.ExpandTo(point1);
98   EXPECT_EQ(expected1_1.ToString(), box1.ToString());
99   box1.ExpandTo(point2);
100   EXPECT_EQ(expected1_2.ToString(), box1.ToString());
101 
102   box2.ExpandTo(point1);
103   EXPECT_EQ(expected2_1.ToString(), box2.ToString());
104   box2.ExpandTo(point2);
105   EXPECT_EQ(expected2_2.ToString(), box2.ToString());
106 
107   box3.ExpandTo(point1);
108   EXPECT_EQ(expected3_1.ToString(), box3.ToString());
109   box3.ExpandTo(point2);
110   EXPECT_EQ(expected3_2.ToString(), box3.ToString());
111 }
112 
TEST(BoxTest,Scale)113 TEST(BoxTest, Scale) {
114   BoxF box1(2.f, 3.f, 4.f, 5.f, 6.f, 7.f);
115 
116   EXPECT_EQ(BoxF().ToString(), ScaleBox(box1, 0.f).ToString());
117   EXPECT_EQ(box1.ToString(), ScaleBox(box1, 1.f).ToString());
118   EXPECT_EQ(BoxF(4.f, 12.f, 24.f, 10.f, 24.f, 42.f).ToString(),
119             ScaleBox(box1, 2.f, 4.f, 6.f).ToString());
120 
121   BoxF box2 = box1;
122   box2.Scale(0.f);
123   EXPECT_EQ(BoxF().ToString(), box2.ToString());
124 
125   box2 = box1;
126   box2.Scale(1.f);
127   EXPECT_EQ(box1.ToString(), box2.ToString());
128 
129   box2.Scale(2.f, 4.f, 6.f);
130   EXPECT_EQ(BoxF(4.f, 12.f, 24.f, 10.f, 24.f, 42.f).ToString(),
131             box2.ToString());
132 }
133 
TEST(BoxTest,Equals)134 TEST(BoxTest, Equals) {
135   EXPECT_TRUE(BoxF() == BoxF());
136   EXPECT_TRUE(BoxF(2.f, 3.f, 4.f, 6.f, 8.f, 10.f) ==
137               BoxF(2.f, 3.f, 4.f, 6.f, 8.f, 10.f));
138   EXPECT_FALSE(BoxF() == BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 1.f));
139   EXPECT_FALSE(BoxF() == BoxF(0.f, 0.f, 0.f, 0.f, 1.f, 0.f));
140   EXPECT_FALSE(BoxF() == BoxF(0.f, 0.f, 0.f, 1.f, 0.f, 0.f));
141   EXPECT_FALSE(BoxF() == BoxF(0.f, 0.f, 1.f, 0.f, 0.f, 0.f));
142   EXPECT_FALSE(BoxF() == BoxF(0.f, 1.f, 0.f, 0.f, 0.f, 0.f));
143   EXPECT_FALSE(BoxF() == BoxF(1.f, 0.f, 0.f, 0.f, 0.f, 0.f));
144 }
145 
TEST(BoxTest,NotEquals)146 TEST(BoxTest, NotEquals) {
147   EXPECT_FALSE(BoxF() != BoxF());
148   EXPECT_FALSE(BoxF(2.f, 3.f, 4.f, 6.f, 8.f, 10.f) !=
149                BoxF(2.f, 3.f, 4.f, 6.f, 8.f, 10.f));
150   EXPECT_TRUE(BoxF() != BoxF(0.f, 0.f, 0.f, 0.f, 0.f, 1.f));
151   EXPECT_TRUE(BoxF() != BoxF(0.f, 0.f, 0.f, 0.f, 1.f, 0.f));
152   EXPECT_TRUE(BoxF() != BoxF(0.f, 0.f, 0.f, 1.f, 0.f, 0.f));
153   EXPECT_TRUE(BoxF() != BoxF(0.f, 0.f, 1.f, 0.f, 0.f, 0.f));
154   EXPECT_TRUE(BoxF() != BoxF(0.f, 1.f, 0.f, 0.f, 0.f, 0.f));
155   EXPECT_TRUE(BoxF() != BoxF(1.f, 0.f, 0.f, 0.f, 0.f, 0.f));
156 }
157 
158 
TEST(BoxTest,Offset)159 TEST(BoxTest, Offset) {
160   BoxF box1(2.f, 3.f, 4.f, 5.f, 6.f, 7.f);
161 
162   EXPECT_EQ(box1.ToString(), (box1 + Vector3dF(0.f, 0.f, 0.f)).ToString());
163   EXPECT_EQ(BoxF(3.f, 1.f, 0.f, 5.f, 6.f, 7.f).ToString(),
164             (box1 + Vector3dF(1.f, -2.f, -4.f)).ToString());
165 
166   BoxF box2 = box1;
167   box2 += Vector3dF(0.f, 0.f, 0.f);
168   EXPECT_EQ(box1.ToString(), box2.ToString());
169 
170   box2 += Vector3dF(1.f, -2.f, -4.f);
171   EXPECT_EQ(BoxF(3.f, 1.f, 0.f, 5.f, 6.f, 7.f).ToString(),
172             box2.ToString());
173 }
174 
175 }  // namespace gfx
176