Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
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
11namespace impeller {
12namespace testing {
13
14TEST(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
35TEST(RoudingRadiiTest, RoundingRadiiDefaultConstructor) {
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
48TEST(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
61TEST(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
74TEST(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
87TEST(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
115TEST(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
133TEST(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
195TEST(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
214TEST(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
231TEST(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
281TEST(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
double height() const
Definition geometry.h:45
double width() const
Definition geometry.h:44
TEST(FrameTimingsRecorderTest, RecordVsync)
static constexpr RoundingRadii MakeRadii(Size radii)
constexpr bool AreAllCornersEmpty() const
constexpr bool IsFinite() const
constexpr bool AreAllCornersCircular() const
static constexpr RoundingRadii MakeRadius(Scalar radius)
constexpr bool AreAllCornersSame(Scalar tolerance=kEhCloseEnough) const