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