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