Flutter Impeller
rounding_radii_unittests.cc
Go to the documentation of this file.
1 // Copyright 2013 The Flutter 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 "gtest/gtest.h"
6 
8 
10 
11 namespace impeller {
12 namespace testing {
13 
14 TEST(RoudingRadiiTest, RoundingRadiiEmptyDeclaration) {
15  RoundingRadii radii;
16 
17  EXPECT_TRUE(radii.AreAllCornersEmpty());
18  EXPECT_TRUE(radii.AreAllCornersSame());
19  EXPECT_TRUE(radii.AreAllCornersCircular());
20  EXPECT_TRUE(radii.IsFinite());
21  EXPECT_EQ(radii.top_left, Size());
22  EXPECT_EQ(radii.top_right, Size());
23  EXPECT_EQ(radii.bottom_left, Size());
24  EXPECT_EQ(radii.bottom_right, Size());
25  EXPECT_EQ(radii.top_left.width, 0.0f);
26  EXPECT_EQ(radii.top_left.height, 0.0f);
27  EXPECT_EQ(radii.top_right.width, 0.0f);
28  EXPECT_EQ(radii.top_right.height, 0.0f);
29  EXPECT_EQ(radii.bottom_left.width, 0.0f);
30  EXPECT_EQ(radii.bottom_left.height, 0.0f);
31  EXPECT_EQ(radii.bottom_right.width, 0.0f);
32  EXPECT_EQ(radii.bottom_right.height, 0.0f);
33 }
34 
35 TEST(RoudingRadiiTest, RoundingRadiiDefaultConstructor) {
36  RoundingRadii radii = RoundingRadii();
37 
38  EXPECT_TRUE(radii.AreAllCornersEmpty());
39  EXPECT_TRUE(radii.AreAllCornersSame());
40  EXPECT_TRUE(radii.AreAllCornersCircular());
41  EXPECT_TRUE(radii.IsFinite());
42  EXPECT_EQ(radii.top_left, Size());
43  EXPECT_EQ(radii.top_right, Size());
44  EXPECT_EQ(radii.bottom_left, Size());
45  EXPECT_EQ(radii.bottom_right, Size());
46 }
47 
48 TEST(RoudingRadiiTest, RoundingRadiiScalarConstructor) {
50 
51  EXPECT_FALSE(radii.AreAllCornersEmpty());
52  EXPECT_TRUE(radii.AreAllCornersSame());
53  EXPECT_TRUE(radii.AreAllCornersCircular());
54  EXPECT_TRUE(radii.IsFinite());
55  EXPECT_EQ(radii.top_left, Size(5.0f, 5.0f));
56  EXPECT_EQ(radii.top_right, Size(5.0f, 5.0f));
57  EXPECT_EQ(radii.bottom_left, Size(5.0f, 5.0f));
58  EXPECT_EQ(radii.bottom_right, Size(5.0f, 5.0f));
59 }
60 
61 TEST(RoudingRadiiTest, RoundingRadiiEmptyScalarConstructor) {
63 
64  EXPECT_TRUE(radii.AreAllCornersEmpty());
65  EXPECT_TRUE(radii.AreAllCornersSame());
66  EXPECT_TRUE(radii.AreAllCornersCircular());
67  EXPECT_TRUE(radii.IsFinite());
68  EXPECT_EQ(radii.top_left, Size(-5.0f, -5.0f));
69  EXPECT_EQ(radii.top_right, Size(-5.0f, -5.0f));
70  EXPECT_EQ(radii.bottom_left, Size(-5.0f, -5.0f));
71  EXPECT_EQ(radii.bottom_right, Size(-5.0f, -5.0f));
72 }
73 
74 TEST(RoudingRadiiTest, RoundingRadiiSizeConstructor) {
75  RoundingRadii radii = RoundingRadii::MakeRadii(Size(5.0f, 6.0f));
76 
77  EXPECT_FALSE(radii.AreAllCornersEmpty());
78  EXPECT_TRUE(radii.AreAllCornersSame());
79  EXPECT_FALSE(radii.AreAllCornersCircular());
80  EXPECT_TRUE(radii.IsFinite());
81  EXPECT_EQ(radii.top_left, Size(5.0f, 6.0f));
82  EXPECT_EQ(radii.top_right, Size(5.0f, 6.0f));
83  EXPECT_EQ(radii.bottom_left, Size(5.0f, 6.0f));
84  EXPECT_EQ(radii.bottom_right, Size(5.0f, 6.0f));
85 }
86 
87 TEST(RoudingRadiiTest, RoundingRadiiEmptySizeConstructor) {
88  {
89  RoundingRadii radii = RoundingRadii::MakeRadii(Size(-5.0f, 6.0f));
90 
91  EXPECT_TRUE(radii.AreAllCornersEmpty());
92  EXPECT_TRUE(radii.AreAllCornersSame());
93  EXPECT_FALSE(radii.AreAllCornersCircular());
94  EXPECT_TRUE(radii.IsFinite());
95  EXPECT_EQ(radii.top_left, Size(-5.0f, 6.0f));
96  EXPECT_EQ(radii.top_right, Size(-5.0f, 6.0f));
97  EXPECT_EQ(radii.bottom_left, Size(-5.0f, 6.0f));
98  EXPECT_EQ(radii.bottom_right, Size(-5.0f, 6.0f));
99  }
100 
101  {
102  RoundingRadii radii = RoundingRadii::MakeRadii(Size(5.0f, -6.0f));
103 
104  EXPECT_TRUE(radii.AreAllCornersEmpty());
105  EXPECT_TRUE(radii.AreAllCornersSame());
106  EXPECT_FALSE(radii.AreAllCornersCircular());
107  EXPECT_TRUE(radii.IsFinite());
108  EXPECT_EQ(radii.top_left, Size(5.0f, -6.0f));
109  EXPECT_EQ(radii.top_right, Size(5.0f, -6.0f));
110  EXPECT_EQ(radii.bottom_left, Size(5.0f, -6.0f));
111  EXPECT_EQ(radii.bottom_right, Size(5.0f, -6.0f));
112  }
113 }
114 
115 TEST(RoudingRadiiTest, RoundingRadiiNamedSizesConstructor) {
116  RoundingRadii radii = {
117  .top_left = Size(5.0f, 5.5f),
118  .top_right = Size(6.0f, 6.5f),
119  .bottom_left = Size(7.0f, 7.5f),
120  .bottom_right = Size(8.0f, 8.5f),
121  };
122 
123  EXPECT_FALSE(radii.AreAllCornersEmpty());
124  EXPECT_FALSE(radii.AreAllCornersSame());
125  EXPECT_FALSE(radii.AreAllCornersCircular());
126  EXPECT_TRUE(radii.IsFinite());
127  EXPECT_EQ(radii.top_left, Size(5.0f, 5.5f));
128  EXPECT_EQ(radii.top_right, Size(6.0f, 6.5f));
129  EXPECT_EQ(radii.bottom_left, Size(7.0f, 7.5f));
130  EXPECT_EQ(radii.bottom_right, Size(8.0f, 8.5f));
131 }
132 
133 TEST(RoudingRadiiTest, RoundingRadiiPartialNamedSizesConstructor) {
134  {
135  RoundingRadii radii = {
136  .top_left = Size(5.0f, 5.5f),
137  };
138 
139  EXPECT_FALSE(radii.AreAllCornersEmpty());
140  EXPECT_FALSE(radii.AreAllCornersSame());
141  EXPECT_FALSE(radii.AreAllCornersCircular());
142  EXPECT_TRUE(radii.IsFinite());
143  EXPECT_EQ(radii.top_left, Size(5.0f, 5.5f));
144  EXPECT_EQ(radii.top_right, Size());
145  EXPECT_EQ(radii.bottom_left, Size());
146  EXPECT_EQ(radii.bottom_right, Size());
147  }
148 
149  {
150  RoundingRadii radii = {
151  .top_right = Size(6.0f, 6.5f),
152  };
153 
154  EXPECT_FALSE(radii.AreAllCornersEmpty());
155  EXPECT_FALSE(radii.AreAllCornersSame());
156  EXPECT_FALSE(radii.AreAllCornersCircular());
157  EXPECT_TRUE(radii.IsFinite());
158  EXPECT_EQ(radii.top_left, Size());
159  EXPECT_EQ(radii.top_right, Size(6.0f, 6.5f));
160  EXPECT_EQ(radii.bottom_left, Size());
161  EXPECT_EQ(radii.bottom_right, Size());
162  }
163 
164  {
165  RoundingRadii radii = {
166  .bottom_left = Size(7.0f, 7.5f),
167  };
168 
169  EXPECT_FALSE(radii.AreAllCornersEmpty());
170  EXPECT_FALSE(radii.AreAllCornersSame());
171  EXPECT_FALSE(radii.AreAllCornersCircular());
172  EXPECT_TRUE(radii.IsFinite());
173  EXPECT_EQ(radii.top_left, Size());
174  EXPECT_EQ(radii.top_right, Size());
175  EXPECT_EQ(radii.bottom_left, Size(7.0f, 7.5f));
176  EXPECT_EQ(radii.bottom_right, Size());
177  }
178 
179  {
180  RoundingRadii radii = {
181  .bottom_right = Size(8.0f, 8.5f),
182  };
183 
184  EXPECT_FALSE(radii.AreAllCornersEmpty());
185  EXPECT_FALSE(radii.AreAllCornersSame());
186  EXPECT_FALSE(radii.AreAllCornersCircular());
187  EXPECT_TRUE(radii.IsFinite());
188  EXPECT_EQ(radii.top_left, Size());
189  EXPECT_EQ(radii.top_right, Size());
190  EXPECT_EQ(radii.bottom_left, Size());
191  EXPECT_EQ(radii.bottom_right, Size(8.0f, 8.5f));
192  }
193 }
194 
195 TEST(RoudingRadiiTest, RoundingRadiiMultiply) {
196  RoundingRadii radii = {
197  .top_left = Size(5.0f, 5.5f),
198  .top_right = Size(6.0f, 6.5f),
199  .bottom_left = Size(7.0f, 7.5f),
200  .bottom_right = Size(8.0f, 8.5f),
201  };
202  RoundingRadii doubled = radii * 2.0f;
203 
204  EXPECT_FALSE(doubled.AreAllCornersEmpty());
205  EXPECT_FALSE(doubled.AreAllCornersSame());
206  EXPECT_FALSE(doubled.AreAllCornersCircular());
207  EXPECT_TRUE(doubled.IsFinite());
208  EXPECT_EQ(doubled.top_left, Size(10.0f, 11.0f));
209  EXPECT_EQ(doubled.top_right, Size(12.0f, 13.0f));
210  EXPECT_EQ(doubled.bottom_left, Size(14.0f, 15.0f));
211  EXPECT_EQ(doubled.bottom_right, Size(16.0f, 17.0f));
212 }
213 
214 TEST(RoudingRadiiTest, RoundingRadiiEquals) {
215  RoundingRadii radii = {
216  .top_left = Size(5.0f, 5.5f),
217  .top_right = Size(6.0f, 6.5f),
218  .bottom_left = Size(7.0f, 7.5f),
219  .bottom_right = Size(8.0f, 8.5f),
220  };
221  RoundingRadii other = {
222  .top_left = Size(5.0f, 5.5f),
223  .top_right = Size(6.0f, 6.5f),
224  .bottom_left = Size(7.0f, 7.5f),
225  .bottom_right = Size(8.0f, 8.5f),
226  };
227 
228  EXPECT_EQ(radii, other);
229 }
230 
231 TEST(RoudingRadiiTest, RoundingRadiiNotEquals) {
232  const RoundingRadii radii = {
233  .top_left = Size(5.0f, 5.5f),
234  .top_right = Size(6.0f, 6.5f),
235  .bottom_left = Size(7.0f, 7.5f),
236  .bottom_right = Size(8.0f, 8.5f),
237  };
238 
239  {
240  RoundingRadii different = radii;
241  different.top_left.width = 100.0f;
242  EXPECT_NE(different, radii);
243  }
244  {
245  RoundingRadii different = radii;
246  different.top_left.height = 100.0f;
247  EXPECT_NE(different, radii);
248  }
249  {
250  RoundingRadii different = radii;
251  different.top_right.width = 100.0f;
252  EXPECT_NE(different, radii);
253  }
254  {
255  RoundingRadii different = radii;
256  different.top_right.height = 100.0f;
257  EXPECT_NE(different, radii);
258  }
259  {
260  RoundingRadii different = radii;
261  different.bottom_left.width = 100.0f;
262  EXPECT_NE(different, radii);
263  }
264  {
265  RoundingRadii different = radii;
266  different.bottom_left.height = 100.0f;
267  EXPECT_NE(different, radii);
268  }
269  {
270  RoundingRadii different = radii;
271  different.bottom_right.width = 100.0f;
272  EXPECT_NE(different, radii);
273  }
274  {
275  RoundingRadii different = radii;
276  different.bottom_right.height = 100.0f;
277  EXPECT_NE(different, radii);
278  }
279 }
280 
281 TEST(RoudingRadiiTest, RoundingRadiiCornersSameTolerance) {
282  RoundingRadii radii{
283  .top_left = {10, 20},
284  .top_right = {10.01, 20.01},
285  .bottom_left = {9.99, 19.99},
286  .bottom_right = {9.99, 20.01},
287  };
288 
289  EXPECT_TRUE(radii.AreAllCornersSame(.02));
290 
291  {
292  RoundingRadii different = radii;
293  different.top_left.width = 10.03;
294  EXPECT_FALSE(different.AreAllCornersSame(.02));
295  }
296  {
297  RoundingRadii different = radii;
298  different.top_left.height = 20.03;
299  EXPECT_FALSE(different.AreAllCornersSame(.02));
300  }
301  {
302  RoundingRadii different = radii;
303  different.top_right.width = 10.03;
304  EXPECT_FALSE(different.AreAllCornersSame(.02));
305  }
306  {
307  RoundingRadii different = radii;
308  different.top_right.height = 20.03;
309  EXPECT_FALSE(different.AreAllCornersSame(.02));
310  }
311  {
312  RoundingRadii different = radii;
313  different.bottom_left.width = 9.97;
314  EXPECT_FALSE(different.AreAllCornersSame(.02));
315  }
316  {
317  RoundingRadii different = radii;
318  different.bottom_left.height = 19.97;
319  EXPECT_FALSE(different.AreAllCornersSame(.02));
320  }
321  {
322  RoundingRadii different = radii;
323  different.bottom_right.width = 9.97;
324  EXPECT_FALSE(different.AreAllCornersSame(.02));
325  }
326  {
327  RoundingRadii different = radii;
328  different.bottom_right.height = 20.03;
329  EXPECT_FALSE(different.AreAllCornersSame(.02));
330  }
331 }
332 
333 } // namespace testing
334 } // namespace impeller
TEST(AllocationSizeTest, CanCreateTypedAllocations)
TSize< Scalar > Size
Definition: size.h:159
constexpr bool AreAllCornersEmpty() const
constexpr static RoundingRadii MakeRadii(Size radii)
constexpr bool IsFinite() const
constexpr bool AreAllCornersCircular() const
constexpr bool AreAllCornersSame(Scalar tolerance=kEhCloseEnough) const
constexpr static RoundingRadii MakeRadius(Scalar radius)
Type height
Definition: size.h:29
Type width
Definition: size.h:28