xref: /aosp_15_r20/external/libchrome/ui/gfx/range/range_unittest.cc (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard Worker // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker 
5*635a8641SAndroid Build Coastguard Worker #include <sstream>
6*635a8641SAndroid Build Coastguard Worker 
7*635a8641SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
8*635a8641SAndroid Build Coastguard Worker #include "ui/gfx/range/range.h"
9*635a8641SAndroid Build Coastguard Worker #include "ui/gfx/range/range_f.h"
10*635a8641SAndroid Build Coastguard Worker 
11*635a8641SAndroid Build Coastguard Worker namespace {
12*635a8641SAndroid Build Coastguard Worker 
13*635a8641SAndroid Build Coastguard Worker template <typename T>
14*635a8641SAndroid Build Coastguard Worker class RangeTest : public testing::Test {
15*635a8641SAndroid Build Coastguard Worker };
16*635a8641SAndroid Build Coastguard Worker 
17*635a8641SAndroid Build Coastguard Worker typedef testing::Types<gfx::Range, gfx::RangeF> RangeTypes;
18*635a8641SAndroid Build Coastguard Worker TYPED_TEST_CASE(RangeTest, RangeTypes);
19*635a8641SAndroid Build Coastguard Worker 
20*635a8641SAndroid Build Coastguard Worker template <typename T>
TestContainsAndIntersects(const T & r1,const T & r2,const T & r3)21*635a8641SAndroid Build Coastguard Worker void TestContainsAndIntersects(const T& r1,
22*635a8641SAndroid Build Coastguard Worker                                const T& r2,
23*635a8641SAndroid Build Coastguard Worker                                const T& r3) {
24*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r1.Intersects(r1));
25*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r1.Contains(r1));
26*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(T(10, 12), r1.Intersect(r1));
27*635a8641SAndroid Build Coastguard Worker 
28*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(r1.Intersects(r2));
29*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(r1.Contains(r2));
30*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r1.Intersect(r2).is_empty());
31*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(r2.Intersects(r1));
32*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(r2.Contains(r1));
33*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r2.Intersect(r1).is_empty());
34*635a8641SAndroid Build Coastguard Worker 
35*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r1.Intersects(r3));
36*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r3.Intersects(r1));
37*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r3.Contains(r1));
38*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(r1.Contains(r3));
39*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(T(10, 12), r1.Intersect(r3));
40*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(T(10, 12), r3.Intersect(r1));
41*635a8641SAndroid Build Coastguard Worker 
42*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r2.Intersects(r3));
43*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r3.Intersects(r2));
44*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(r3.Contains(r2));
45*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(r2.Contains(r3));
46*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(T(5, 8), r2.Intersect(r3));
47*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(T(5, 8), r3.Intersect(r2));
48*635a8641SAndroid Build Coastguard Worker }
49*635a8641SAndroid Build Coastguard Worker 
50*635a8641SAndroid Build Coastguard Worker }  // namespace
51*635a8641SAndroid Build Coastguard Worker 
TYPED_TEST(RangeTest,EmptyInit)52*635a8641SAndroid Build Coastguard Worker TYPED_TEST(RangeTest, EmptyInit) {
53*635a8641SAndroid Build Coastguard Worker   TypeParam r;
54*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(0U, r.start());
55*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(0U, r.end());
56*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(0U, r.length());
57*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(r.is_reversed());
58*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r.is_empty());
59*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r.IsValid());
60*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(0U, r.GetMin());
61*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(0U, r.GetMax());
62*635a8641SAndroid Build Coastguard Worker }
63*635a8641SAndroid Build Coastguard Worker 
TYPED_TEST(RangeTest,StartEndInit)64*635a8641SAndroid Build Coastguard Worker TYPED_TEST(RangeTest, StartEndInit) {
65*635a8641SAndroid Build Coastguard Worker   TypeParam r(10, 15);
66*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(10U, r.start());
67*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(15U, r.end());
68*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(5U, r.length());
69*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(r.is_reversed());
70*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(r.is_empty());
71*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r.IsValid());
72*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(10U, r.GetMin());
73*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(15U, r.GetMax());
74*635a8641SAndroid Build Coastguard Worker }
75*635a8641SAndroid Build Coastguard Worker 
TYPED_TEST(RangeTest,StartEndReversedInit)76*635a8641SAndroid Build Coastguard Worker TYPED_TEST(RangeTest, StartEndReversedInit) {
77*635a8641SAndroid Build Coastguard Worker   TypeParam r(10, 5);
78*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(10U, r.start());
79*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(5U, r.end());
80*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(5U, r.length());
81*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r.is_reversed());
82*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(r.is_empty());
83*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r.IsValid());
84*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(5U, r.GetMin());
85*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(10U, r.GetMax());
86*635a8641SAndroid Build Coastguard Worker }
87*635a8641SAndroid Build Coastguard Worker 
TYPED_TEST(RangeTest,PositionInit)88*635a8641SAndroid Build Coastguard Worker TYPED_TEST(RangeTest, PositionInit) {
89*635a8641SAndroid Build Coastguard Worker   TypeParam r(12);
90*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(12U, r.start());
91*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(12U, r.end());
92*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(0U, r.length());
93*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(r.is_reversed());
94*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r.is_empty());
95*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r.IsValid());
96*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(12U, r.GetMin());
97*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(12U, r.GetMax());
98*635a8641SAndroid Build Coastguard Worker }
99*635a8641SAndroid Build Coastguard Worker 
TYPED_TEST(RangeTest,InvalidRange)100*635a8641SAndroid Build Coastguard Worker TYPED_TEST(RangeTest, InvalidRange) {
101*635a8641SAndroid Build Coastguard Worker   TypeParam r(TypeParam::InvalidRange());
102*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(0U, r.length());
103*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(r.start(), r.end());
104*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(r.GetMax(), r.GetMin());
105*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(r.is_reversed());
106*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r.is_empty());
107*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(r.IsValid());
108*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(r, TypeParam::InvalidRange());
109*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r.EqualsIgnoringDirection(TypeParam::InvalidRange()));
110*635a8641SAndroid Build Coastguard Worker }
111*635a8641SAndroid Build Coastguard Worker 
TYPED_TEST(RangeTest,Equality)112*635a8641SAndroid Build Coastguard Worker TYPED_TEST(RangeTest, Equality) {
113*635a8641SAndroid Build Coastguard Worker   TypeParam r1(10, 4);
114*635a8641SAndroid Build Coastguard Worker   TypeParam r2(10, 4);
115*635a8641SAndroid Build Coastguard Worker   TypeParam r3(10, 2);
116*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(r1, r2);
117*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(r1, r3);
118*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(r2, r3);
119*635a8641SAndroid Build Coastguard Worker 
120*635a8641SAndroid Build Coastguard Worker   TypeParam r4(11, 4);
121*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(r1, r4);
122*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(r2, r4);
123*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(r3, r4);
124*635a8641SAndroid Build Coastguard Worker 
125*635a8641SAndroid Build Coastguard Worker   TypeParam r5(12, 5);
126*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(r1, r5);
127*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(r2, r5);
128*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(r3, r5);
129*635a8641SAndroid Build Coastguard Worker }
130*635a8641SAndroid Build Coastguard Worker 
TYPED_TEST(RangeTest,EqualsIgnoringDirection)131*635a8641SAndroid Build Coastguard Worker TYPED_TEST(RangeTest, EqualsIgnoringDirection) {
132*635a8641SAndroid Build Coastguard Worker   TypeParam r1(10, 5);
133*635a8641SAndroid Build Coastguard Worker   TypeParam r2(5, 10);
134*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r1.EqualsIgnoringDirection(r2));
135*635a8641SAndroid Build Coastguard Worker }
136*635a8641SAndroid Build Coastguard Worker 
TYPED_TEST(RangeTest,SetStart)137*635a8641SAndroid Build Coastguard Worker TYPED_TEST(RangeTest, SetStart) {
138*635a8641SAndroid Build Coastguard Worker   TypeParam r(10, 20);
139*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(10U, r.start());
140*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(10U, r.length());
141*635a8641SAndroid Build Coastguard Worker 
142*635a8641SAndroid Build Coastguard Worker   r.set_start(42);
143*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(42U, r.start());
144*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(20U, r.end());
145*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(22U, r.length());
146*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r.is_reversed());
147*635a8641SAndroid Build Coastguard Worker }
148*635a8641SAndroid Build Coastguard Worker 
TYPED_TEST(RangeTest,SetEnd)149*635a8641SAndroid Build Coastguard Worker TYPED_TEST(RangeTest, SetEnd) {
150*635a8641SAndroid Build Coastguard Worker   TypeParam r(10, 13);
151*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(10U, r.start());
152*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(3U, r.length());
153*635a8641SAndroid Build Coastguard Worker 
154*635a8641SAndroid Build Coastguard Worker   r.set_end(20);
155*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(10U, r.start());
156*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(20U, r.end());
157*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(10U, r.length());
158*635a8641SAndroid Build Coastguard Worker }
159*635a8641SAndroid Build Coastguard Worker 
TYPED_TEST(RangeTest,SetStartAndEnd)160*635a8641SAndroid Build Coastguard Worker TYPED_TEST(RangeTest, SetStartAndEnd) {
161*635a8641SAndroid Build Coastguard Worker   TypeParam r;
162*635a8641SAndroid Build Coastguard Worker   r.set_end(5);
163*635a8641SAndroid Build Coastguard Worker   r.set_start(1);
164*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(1U, r.start());
165*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(5U, r.end());
166*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(4U, r.length());
167*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(1U, r.GetMin());
168*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(5U, r.GetMax());
169*635a8641SAndroid Build Coastguard Worker }
170*635a8641SAndroid Build Coastguard Worker 
TYPED_TEST(RangeTest,ReversedRange)171*635a8641SAndroid Build Coastguard Worker TYPED_TEST(RangeTest, ReversedRange) {
172*635a8641SAndroid Build Coastguard Worker   TypeParam r(10, 5);
173*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(10U, r.start());
174*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(5U, r.end());
175*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(5U, r.length());
176*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r.is_reversed());
177*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r.IsValid());
178*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(5U, r.GetMin());
179*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(10U, r.GetMax());
180*635a8641SAndroid Build Coastguard Worker }
181*635a8641SAndroid Build Coastguard Worker 
TYPED_TEST(RangeTest,SetReversedRange)182*635a8641SAndroid Build Coastguard Worker TYPED_TEST(RangeTest, SetReversedRange) {
183*635a8641SAndroid Build Coastguard Worker   TypeParam r(10, 20);
184*635a8641SAndroid Build Coastguard Worker   r.set_start(25);
185*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(25U, r.start());
186*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(20U, r.end());
187*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(5U, r.length());
188*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r.is_reversed());
189*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r.IsValid());
190*635a8641SAndroid Build Coastguard Worker 
191*635a8641SAndroid Build Coastguard Worker   r.set_end(21);
192*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(25U, r.start());
193*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(21U, r.end());
194*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(4U, r.length());
195*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(r.IsValid());
196*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(21U, r.GetMin());
197*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(25U, r.GetMax());
198*635a8641SAndroid Build Coastguard Worker }
199*635a8641SAndroid Build Coastguard Worker 
TYPED_TEST(RangeTest,ContainAndIntersect)200*635a8641SAndroid Build Coastguard Worker TYPED_TEST(RangeTest, ContainAndIntersect) {
201*635a8641SAndroid Build Coastguard Worker   {
202*635a8641SAndroid Build Coastguard Worker     SCOPED_TRACE("contain and intersect");
203*635a8641SAndroid Build Coastguard Worker     TypeParam r1(10, 12);
204*635a8641SAndroid Build Coastguard Worker     TypeParam r2(1, 8);
205*635a8641SAndroid Build Coastguard Worker     TypeParam r3(5, 12);
206*635a8641SAndroid Build Coastguard Worker     TestContainsAndIntersects(r1, r2, r3);
207*635a8641SAndroid Build Coastguard Worker   }
208*635a8641SAndroid Build Coastguard Worker   {
209*635a8641SAndroid Build Coastguard Worker     SCOPED_TRACE("contain and intersect: reversed");
210*635a8641SAndroid Build Coastguard Worker     TypeParam r1(12, 10);
211*635a8641SAndroid Build Coastguard Worker     TypeParam r2(8, 1);
212*635a8641SAndroid Build Coastguard Worker     TypeParam r3(12, 5);
213*635a8641SAndroid Build Coastguard Worker     TestContainsAndIntersects(r1, r2, r3);
214*635a8641SAndroid Build Coastguard Worker   }
215*635a8641SAndroid Build Coastguard Worker   // Invalid rect tests
216*635a8641SAndroid Build Coastguard Worker   TypeParam r1(10, 12);
217*635a8641SAndroid Build Coastguard Worker   TypeParam r2(8, 1);
218*635a8641SAndroid Build Coastguard Worker   TypeParam invalid = r1.Intersect(r2);
219*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(invalid.IsValid());
220*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(invalid.Contains(invalid));
221*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(invalid.Contains(r1));
222*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(invalid.Intersects(invalid));
223*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(invalid.Intersects(r1));
224*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(r1.Contains(invalid));
225*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(r1.Intersects(invalid));
226*635a8641SAndroid Build Coastguard Worker }
227*635a8641SAndroid Build Coastguard Worker 
TEST(RangeTest,RangeFConverterTest)228*635a8641SAndroid Build Coastguard Worker TEST(RangeTest, RangeFConverterTest) {
229*635a8641SAndroid Build Coastguard Worker   gfx::RangeF range_f(1.2f, 3.9f);
230*635a8641SAndroid Build Coastguard Worker   gfx::Range range = range_f.Floor();
231*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(1U, range.start());
232*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(3U, range.end());
233*635a8641SAndroid Build Coastguard Worker 
234*635a8641SAndroid Build Coastguard Worker   range = range_f.Ceil();
235*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(2U, range.start());
236*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(4U, range.end());
237*635a8641SAndroid Build Coastguard Worker 
238*635a8641SAndroid Build Coastguard Worker   range = range_f.Round();
239*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(1U, range.start());
240*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(4U, range.end());
241*635a8641SAndroid Build Coastguard Worker 
242*635a8641SAndroid Build Coastguard Worker   // Test for negative values.
243*635a8641SAndroid Build Coastguard Worker   range_f.set_start(-1.2f);
244*635a8641SAndroid Build Coastguard Worker   range_f.set_end(-3.8f);
245*635a8641SAndroid Build Coastguard Worker   range = range_f.Floor();
246*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(0U, range.start());
247*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(0U, range.end());
248*635a8641SAndroid Build Coastguard Worker 
249*635a8641SAndroid Build Coastguard Worker   range = range_f.Ceil();
250*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(0U, range.start());
251*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(0U, range.end());
252*635a8641SAndroid Build Coastguard Worker 
253*635a8641SAndroid Build Coastguard Worker   range = range_f.Round();
254*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(0U, range.start());
255*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(0U, range.end());
256*635a8641SAndroid Build Coastguard Worker }
257*635a8641SAndroid Build Coastguard Worker 
TEST(RangeTest,ToString)258*635a8641SAndroid Build Coastguard Worker TEST(RangeTest, ToString) {
259*635a8641SAndroid Build Coastguard Worker   gfx::Range range(4, 7);
260*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ("{4,7}", range.ToString());
261*635a8641SAndroid Build Coastguard Worker 
262*635a8641SAndroid Build Coastguard Worker   range = gfx::Range::InvalidRange();
263*635a8641SAndroid Build Coastguard Worker   std::ostringstream expected;
264*635a8641SAndroid Build Coastguard Worker   expected << "{" << range.start() << "," << range.end() << "}";
265*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(expected.str(), range.ToString());
266*635a8641SAndroid Build Coastguard Worker }
267