2 * Copyright (c) 2014-present, Facebook, Inc.
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
8 // @Generated by gentest/gentest.rb from gentest/fixtures/YGRoundingTest.html
10 #include <gtest/gtest.h>
11 #include <yoga/Yoga.h>
13 TEST(YogaTest, rounding_flex_basis_flex_grow_row_width_of_100) {
14 const YGConfigRef config = YGConfigNew();
16 const YGNodeRef root = YGNodeNewWithConfig(config);
17 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
18 YGNodeStyleSetWidth(root, 100);
19 YGNodeStyleSetHeight(root, 100);
21 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
22 YGNodeStyleSetFlexGrow(root_child0, 1);
23 YGNodeInsertChild(root, root_child0, 0);
25 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
26 YGNodeStyleSetFlexGrow(root_child1, 1);
27 YGNodeInsertChild(root, root_child1, 1);
29 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
30 YGNodeStyleSetFlexGrow(root_child2, 1);
31 YGNodeInsertChild(root, root_child2, 2);
32 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
34 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
35 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
36 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
37 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
39 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
40 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
41 ASSERT_FLOAT_EQ(33, YGNodeLayoutGetWidth(root_child0));
42 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
44 ASSERT_FLOAT_EQ(33, YGNodeLayoutGetLeft(root_child1));
45 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
46 ASSERT_FLOAT_EQ(34, YGNodeLayoutGetWidth(root_child1));
47 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
49 ASSERT_FLOAT_EQ(67, YGNodeLayoutGetLeft(root_child2));
50 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
51 ASSERT_FLOAT_EQ(33, YGNodeLayoutGetWidth(root_child2));
52 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));
54 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
56 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
57 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
58 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
59 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
61 ASSERT_FLOAT_EQ(67, YGNodeLayoutGetLeft(root_child0));
62 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
63 ASSERT_FLOAT_EQ(33, YGNodeLayoutGetWidth(root_child0));
64 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
66 ASSERT_FLOAT_EQ(33, YGNodeLayoutGetLeft(root_child1));
67 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
68 ASSERT_FLOAT_EQ(34, YGNodeLayoutGetWidth(root_child1));
69 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
71 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
72 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
73 ASSERT_FLOAT_EQ(33, YGNodeLayoutGetWidth(root_child2));
74 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));
76 YGNodeFreeRecursive(root);
81 TEST(YogaTest, rounding_flex_basis_flex_grow_row_prime_number_width) {
82 const YGConfigRef config = YGConfigNew();
84 const YGNodeRef root = YGNodeNewWithConfig(config);
85 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
86 YGNodeStyleSetWidth(root, 113);
87 YGNodeStyleSetHeight(root, 100);
89 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
90 YGNodeStyleSetFlexGrow(root_child0, 1);
91 YGNodeInsertChild(root, root_child0, 0);
93 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
94 YGNodeStyleSetFlexGrow(root_child1, 1);
95 YGNodeInsertChild(root, root_child1, 1);
97 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
98 YGNodeStyleSetFlexGrow(root_child2, 1);
99 YGNodeInsertChild(root, root_child2, 2);
101 const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
102 YGNodeStyleSetFlexGrow(root_child3, 1);
103 YGNodeInsertChild(root, root_child3, 3);
105 const YGNodeRef root_child4 = YGNodeNewWithConfig(config);
106 YGNodeStyleSetFlexGrow(root_child4, 1);
107 YGNodeInsertChild(root, root_child4, 4);
108 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
110 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
111 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
112 ASSERT_FLOAT_EQ(113, YGNodeLayoutGetWidth(root));
113 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
115 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
116 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
117 ASSERT_FLOAT_EQ(23, YGNodeLayoutGetWidth(root_child0));
118 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
120 ASSERT_FLOAT_EQ(23, YGNodeLayoutGetLeft(root_child1));
121 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
122 ASSERT_FLOAT_EQ(22, YGNodeLayoutGetWidth(root_child1));
123 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
125 ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child2));
126 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
127 ASSERT_FLOAT_EQ(23, YGNodeLayoutGetWidth(root_child2));
128 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));
130 ASSERT_FLOAT_EQ(68, YGNodeLayoutGetLeft(root_child3));
131 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));
132 ASSERT_FLOAT_EQ(22, YGNodeLayoutGetWidth(root_child3));
133 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));
135 ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child4));
136 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));
137 ASSERT_FLOAT_EQ(23, YGNodeLayoutGetWidth(root_child4));
138 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));
140 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
142 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
143 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
144 ASSERT_FLOAT_EQ(113, YGNodeLayoutGetWidth(root));
145 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
147 ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));
148 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
149 ASSERT_FLOAT_EQ(23, YGNodeLayoutGetWidth(root_child0));
150 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
152 ASSERT_FLOAT_EQ(68, YGNodeLayoutGetLeft(root_child1));
153 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
154 ASSERT_FLOAT_EQ(22, YGNodeLayoutGetWidth(root_child1));
155 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
157 ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child2));
158 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
159 ASSERT_FLOAT_EQ(23, YGNodeLayoutGetWidth(root_child2));
160 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));
162 ASSERT_FLOAT_EQ(23, YGNodeLayoutGetLeft(root_child3));
163 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));
164 ASSERT_FLOAT_EQ(22, YGNodeLayoutGetWidth(root_child3));
165 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child3));
167 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child4));
168 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));
169 ASSERT_FLOAT_EQ(23, YGNodeLayoutGetWidth(root_child4));
170 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child4));
172 YGNodeFreeRecursive(root);
174 YGConfigFree(config);
177 TEST(YogaTest, rounding_flex_basis_flex_shrink_row) {
178 const YGConfigRef config = YGConfigNew();
180 const YGNodeRef root = YGNodeNewWithConfig(config);
181 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
182 YGNodeStyleSetWidth(root, 101);
183 YGNodeStyleSetHeight(root, 100);
185 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
186 YGNodeStyleSetFlexShrink(root_child0, 1);
187 YGNodeStyleSetFlexBasis(root_child0, 100);
188 YGNodeInsertChild(root, root_child0, 0);
190 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
191 YGNodeStyleSetFlexBasis(root_child1, 25);
192 YGNodeInsertChild(root, root_child1, 1);
194 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
195 YGNodeStyleSetFlexBasis(root_child2, 25);
196 YGNodeInsertChild(root, root_child2, 2);
197 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
199 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
200 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
201 ASSERT_FLOAT_EQ(101, YGNodeLayoutGetWidth(root));
202 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
204 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
205 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
206 ASSERT_FLOAT_EQ(51, YGNodeLayoutGetWidth(root_child0));
207 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
209 ASSERT_FLOAT_EQ(51, YGNodeLayoutGetLeft(root_child1));
210 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
211 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));
212 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
214 ASSERT_FLOAT_EQ(76, YGNodeLayoutGetLeft(root_child2));
215 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
216 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));
217 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));
219 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
221 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
222 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
223 ASSERT_FLOAT_EQ(101, YGNodeLayoutGetWidth(root));
224 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
226 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
227 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
228 ASSERT_FLOAT_EQ(51, YGNodeLayoutGetWidth(root_child0));
229 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
231 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1));
232 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
233 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));
234 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
236 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
237 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
238 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child2));
239 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));
241 YGNodeFreeRecursive(root);
243 YGConfigFree(config);
246 TEST(YogaTest, rounding_flex_basis_overrides_main_size) {
247 const YGConfigRef config = YGConfigNew();
249 const YGNodeRef root = YGNodeNewWithConfig(config);
250 YGNodeStyleSetWidth(root, 100);
251 YGNodeStyleSetHeight(root, 113);
253 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
254 YGNodeStyleSetFlexGrow(root_child0, 1);
255 YGNodeStyleSetFlexBasis(root_child0, 50);
256 YGNodeStyleSetHeight(root_child0, 20);
257 YGNodeInsertChild(root, root_child0, 0);
259 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
260 YGNodeStyleSetFlexGrow(root_child1, 1);
261 YGNodeStyleSetHeight(root_child1, 10);
262 YGNodeInsertChild(root, root_child1, 1);
264 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
265 YGNodeStyleSetFlexGrow(root_child2, 1);
266 YGNodeStyleSetHeight(root_child2, 10);
267 YGNodeInsertChild(root, root_child2, 2);
268 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
270 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
271 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
272 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
273 ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));
275 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
276 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
277 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
278 ASSERT_FLOAT_EQ(64, YGNodeLayoutGetHeight(root_child0));
280 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
281 ASSERT_FLOAT_EQ(64, YGNodeLayoutGetTop(root_child1));
282 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
283 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
285 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
286 ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));
287 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
288 ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));
290 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
292 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
293 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
294 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
295 ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));
297 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
298 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
299 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
300 ASSERT_FLOAT_EQ(64, YGNodeLayoutGetHeight(root_child0));
302 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
303 ASSERT_FLOAT_EQ(64, YGNodeLayoutGetTop(root_child1));
304 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
305 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
307 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
308 ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));
309 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
310 ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));
312 YGNodeFreeRecursive(root);
314 YGConfigFree(config);
317 TEST(YogaTest, rounding_total_fractial) {
318 const YGConfigRef config = YGConfigNew();
320 const YGNodeRef root = YGNodeNewWithConfig(config);
321 YGNodeStyleSetWidth(root, 87.4f);
322 YGNodeStyleSetHeight(root, 113.4f);
324 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
325 YGNodeStyleSetFlexGrow(root_child0, 0.7f);
326 YGNodeStyleSetFlexBasis(root_child0, 50.3f);
327 YGNodeStyleSetHeight(root_child0, 20.3f);
328 YGNodeInsertChild(root, root_child0, 0);
330 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
331 YGNodeStyleSetFlexGrow(root_child1, 1.6f);
332 YGNodeStyleSetHeight(root_child1, 10);
333 YGNodeInsertChild(root, root_child1, 1);
335 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
336 YGNodeStyleSetFlexGrow(root_child2, 1.1f);
337 YGNodeStyleSetHeight(root_child2, 10.7f);
338 YGNodeInsertChild(root, root_child2, 2);
339 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
341 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
342 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
343 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root));
344 ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));
346 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
347 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
348 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child0));
349 ASSERT_FLOAT_EQ(59, YGNodeLayoutGetHeight(root_child0));
351 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
352 ASSERT_FLOAT_EQ(59, YGNodeLayoutGetTop(root_child1));
353 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child1));
354 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1));
356 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
357 ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));
358 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child2));
359 ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));
361 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
363 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
364 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
365 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root));
366 ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));
368 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
369 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
370 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child0));
371 ASSERT_FLOAT_EQ(59, YGNodeLayoutGetHeight(root_child0));
373 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
374 ASSERT_FLOAT_EQ(59, YGNodeLayoutGetTop(root_child1));
375 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child1));
376 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1));
378 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
379 ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));
380 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child2));
381 ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));
383 YGNodeFreeRecursive(root);
385 YGConfigFree(config);
388 TEST(YogaTest, rounding_total_fractial_nested) {
389 const YGConfigRef config = YGConfigNew();
391 const YGNodeRef root = YGNodeNewWithConfig(config);
392 YGNodeStyleSetWidth(root, 87.4f);
393 YGNodeStyleSetHeight(root, 113.4f);
395 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
396 YGNodeStyleSetFlexGrow(root_child0, 0.7f);
397 YGNodeStyleSetFlexBasis(root_child0, 50.3f);
398 YGNodeStyleSetHeight(root_child0, 20.3f);
399 YGNodeInsertChild(root, root_child0, 0);
401 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
402 YGNodeStyleSetFlexGrow(root_child0_child0, 1);
403 YGNodeStyleSetFlexBasis(root_child0_child0, 0.3f);
404 YGNodeStyleSetPosition(root_child0_child0, YGEdgeBottom, 13.3f);
405 YGNodeStyleSetHeight(root_child0_child0, 9.9f);
406 YGNodeInsertChild(root_child0, root_child0_child0, 0);
408 const YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);
409 YGNodeStyleSetFlexGrow(root_child0_child1, 4);
410 YGNodeStyleSetFlexBasis(root_child0_child1, 0.3f);
411 YGNodeStyleSetPosition(root_child0_child1, YGEdgeTop, 13.3f);
412 YGNodeStyleSetHeight(root_child0_child1, 1.1f);
413 YGNodeInsertChild(root_child0, root_child0_child1, 1);
415 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
416 YGNodeStyleSetFlexGrow(root_child1, 1.6f);
417 YGNodeStyleSetHeight(root_child1, 10);
418 YGNodeInsertChild(root, root_child1, 1);
420 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
421 YGNodeStyleSetFlexGrow(root_child2, 1.1f);
422 YGNodeStyleSetHeight(root_child2, 10.7f);
423 YGNodeInsertChild(root, root_child2, 2);
424 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
426 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
427 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
428 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root));
429 ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));
431 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
432 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
433 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child0));
434 ASSERT_FLOAT_EQ(59, YGNodeLayoutGetHeight(root_child0));
436 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
437 ASSERT_FLOAT_EQ(-13, YGNodeLayoutGetTop(root_child0_child0));
438 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child0_child0));
439 ASSERT_FLOAT_EQ(12, YGNodeLayoutGetHeight(root_child0_child0));
441 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
442 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0_child1));
443 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child0_child1));
444 ASSERT_FLOAT_EQ(47, YGNodeLayoutGetHeight(root_child0_child1));
446 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
447 ASSERT_FLOAT_EQ(59, YGNodeLayoutGetTop(root_child1));
448 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child1));
449 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1));
451 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
452 ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));
453 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child2));
454 ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));
456 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
458 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
459 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
460 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root));
461 ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));
463 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
464 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
465 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child0));
466 ASSERT_FLOAT_EQ(59, YGNodeLayoutGetHeight(root_child0));
468 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
469 ASSERT_FLOAT_EQ(-13, YGNodeLayoutGetTop(root_child0_child0));
470 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child0_child0));
471 ASSERT_FLOAT_EQ(12, YGNodeLayoutGetHeight(root_child0_child0));
473 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
474 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetTop(root_child0_child1));
475 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child0_child1));
476 ASSERT_FLOAT_EQ(47, YGNodeLayoutGetHeight(root_child0_child1));
478 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
479 ASSERT_FLOAT_EQ(59, YGNodeLayoutGetTop(root_child1));
480 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child1));
481 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1));
483 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
484 ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));
485 ASSERT_FLOAT_EQ(87, YGNodeLayoutGetWidth(root_child2));
486 ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));
488 YGNodeFreeRecursive(root);
490 YGConfigFree(config);
493 TEST(YogaTest, rounding_fractial_input_1) {
494 const YGConfigRef config = YGConfigNew();
496 const YGNodeRef root = YGNodeNewWithConfig(config);
497 YGNodeStyleSetWidth(root, 100);
498 YGNodeStyleSetHeight(root, 113.4f);
500 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
501 YGNodeStyleSetFlexGrow(root_child0, 1);
502 YGNodeStyleSetFlexBasis(root_child0, 50);
503 YGNodeStyleSetHeight(root_child0, 20);
504 YGNodeInsertChild(root, root_child0, 0);
506 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
507 YGNodeStyleSetFlexGrow(root_child1, 1);
508 YGNodeStyleSetHeight(root_child1, 10);
509 YGNodeInsertChild(root, root_child1, 1);
511 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
512 YGNodeStyleSetFlexGrow(root_child2, 1);
513 YGNodeStyleSetHeight(root_child2, 10);
514 YGNodeInsertChild(root, root_child2, 2);
515 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
517 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
518 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
519 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
520 ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));
522 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
523 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
524 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
525 ASSERT_FLOAT_EQ(64, YGNodeLayoutGetHeight(root_child0));
527 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
528 ASSERT_FLOAT_EQ(64, YGNodeLayoutGetTop(root_child1));
529 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
530 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
532 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
533 ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));
534 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
535 ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));
537 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
539 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
540 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
541 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
542 ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));
544 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
545 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
546 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
547 ASSERT_FLOAT_EQ(64, YGNodeLayoutGetHeight(root_child0));
549 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
550 ASSERT_FLOAT_EQ(64, YGNodeLayoutGetTop(root_child1));
551 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
552 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
554 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
555 ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));
556 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
557 ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));
559 YGNodeFreeRecursive(root);
561 YGConfigFree(config);
564 TEST(YogaTest, rounding_fractial_input_2) {
565 const YGConfigRef config = YGConfigNew();
567 const YGNodeRef root = YGNodeNewWithConfig(config);
568 YGNodeStyleSetWidth(root, 100);
569 YGNodeStyleSetHeight(root, 113.6f);
571 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
572 YGNodeStyleSetFlexGrow(root_child0, 1);
573 YGNodeStyleSetFlexBasis(root_child0, 50);
574 YGNodeStyleSetHeight(root_child0, 20);
575 YGNodeInsertChild(root, root_child0, 0);
577 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
578 YGNodeStyleSetFlexGrow(root_child1, 1);
579 YGNodeStyleSetHeight(root_child1, 10);
580 YGNodeInsertChild(root, root_child1, 1);
582 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
583 YGNodeStyleSetFlexGrow(root_child2, 1);
584 YGNodeStyleSetHeight(root_child2, 10);
585 YGNodeInsertChild(root, root_child2, 2);
586 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
588 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
589 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
590 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
591 ASSERT_FLOAT_EQ(114, YGNodeLayoutGetHeight(root));
593 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
594 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
595 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
596 ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child0));
598 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
599 ASSERT_FLOAT_EQ(65, YGNodeLayoutGetTop(root_child1));
600 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
601 ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child1));
603 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
604 ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));
605 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
606 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));
608 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
610 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
611 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
612 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
613 ASSERT_FLOAT_EQ(114, YGNodeLayoutGetHeight(root));
615 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
616 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
617 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
618 ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child0));
620 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
621 ASSERT_FLOAT_EQ(65, YGNodeLayoutGetTop(root_child1));
622 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
623 ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child1));
625 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
626 ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));
627 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
628 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));
630 YGNodeFreeRecursive(root);
632 YGConfigFree(config);
635 TEST(YogaTest, rounding_fractial_input_3) {
636 const YGConfigRef config = YGConfigNew();
638 const YGNodeRef root = YGNodeNewWithConfig(config);
639 YGNodeStyleSetPosition(root, YGEdgeTop, 0.3f);
640 YGNodeStyleSetWidth(root, 100);
641 YGNodeStyleSetHeight(root, 113.4f);
643 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
644 YGNodeStyleSetFlexGrow(root_child0, 1);
645 YGNodeStyleSetFlexBasis(root_child0, 50);
646 YGNodeStyleSetHeight(root_child0, 20);
647 YGNodeInsertChild(root, root_child0, 0);
649 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
650 YGNodeStyleSetFlexGrow(root_child1, 1);
651 YGNodeStyleSetHeight(root_child1, 10);
652 YGNodeInsertChild(root, root_child1, 1);
654 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
655 YGNodeStyleSetFlexGrow(root_child2, 1);
656 YGNodeStyleSetHeight(root_child2, 10);
657 YGNodeInsertChild(root, root_child2, 2);
658 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
660 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
661 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
662 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
663 ASSERT_FLOAT_EQ(114, YGNodeLayoutGetHeight(root));
665 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
666 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
667 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
668 ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child0));
670 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
671 ASSERT_FLOAT_EQ(64, YGNodeLayoutGetTop(root_child1));
672 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
673 ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child1));
675 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
676 ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));
677 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
678 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));
680 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
682 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
683 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
684 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
685 ASSERT_FLOAT_EQ(114, YGNodeLayoutGetHeight(root));
687 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
688 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
689 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
690 ASSERT_FLOAT_EQ(65, YGNodeLayoutGetHeight(root_child0));
692 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
693 ASSERT_FLOAT_EQ(64, YGNodeLayoutGetTop(root_child1));
694 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
695 ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child1));
697 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
698 ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));
699 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
700 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child2));
702 YGNodeFreeRecursive(root);
704 YGConfigFree(config);
707 TEST(YogaTest, rounding_fractial_input_4) {
708 const YGConfigRef config = YGConfigNew();
710 const YGNodeRef root = YGNodeNewWithConfig(config);
711 YGNodeStyleSetPosition(root, YGEdgeTop, 0.7f);
712 YGNodeStyleSetWidth(root, 100);
713 YGNodeStyleSetHeight(root, 113.4f);
715 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
716 YGNodeStyleSetFlexGrow(root_child0, 1);
717 YGNodeStyleSetFlexBasis(root_child0, 50);
718 YGNodeStyleSetHeight(root_child0, 20);
719 YGNodeInsertChild(root, root_child0, 0);
721 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
722 YGNodeStyleSetFlexGrow(root_child1, 1);
723 YGNodeStyleSetHeight(root_child1, 10);
724 YGNodeInsertChild(root, root_child1, 1);
726 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
727 YGNodeStyleSetFlexGrow(root_child2, 1);
728 YGNodeStyleSetHeight(root_child2, 10);
729 YGNodeInsertChild(root, root_child2, 2);
730 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
732 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
733 ASSERT_FLOAT_EQ(1, YGNodeLayoutGetTop(root));
734 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
735 ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));
737 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
738 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
739 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
740 ASSERT_FLOAT_EQ(64, YGNodeLayoutGetHeight(root_child0));
742 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
743 ASSERT_FLOAT_EQ(64, YGNodeLayoutGetTop(root_child1));
744 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
745 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
747 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
748 ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));
749 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
750 ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));
752 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
754 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
755 ASSERT_FLOAT_EQ(1, YGNodeLayoutGetTop(root));
756 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
757 ASSERT_FLOAT_EQ(113, YGNodeLayoutGetHeight(root));
759 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
760 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
761 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
762 ASSERT_FLOAT_EQ(64, YGNodeLayoutGetHeight(root_child0));
764 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
765 ASSERT_FLOAT_EQ(64, YGNodeLayoutGetTop(root_child1));
766 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
767 ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
769 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
770 ASSERT_FLOAT_EQ(89, YGNodeLayoutGetTop(root_child2));
771 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
772 ASSERT_FLOAT_EQ(24, YGNodeLayoutGetHeight(root_child2));
774 YGNodeFreeRecursive(root);
776 YGConfigFree(config);
779 TEST(YogaTest, rounding_inner_node_controversy_horizontal) {
780 const YGConfigRef config = YGConfigNew();
782 const YGNodeRef root = YGNodeNewWithConfig(config);
783 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
784 YGNodeStyleSetWidth(root, 320);
786 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
787 YGNodeStyleSetFlexGrow(root_child0, 1);
788 YGNodeStyleSetHeight(root_child0, 10);
789 YGNodeInsertChild(root, root_child0, 0);
791 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
792 YGNodeStyleSetFlexGrow(root_child1, 1);
793 YGNodeStyleSetHeight(root_child1, 10);
794 YGNodeInsertChild(root, root_child1, 1);
796 const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
797 YGNodeStyleSetFlexGrow(root_child1_child0, 1);
798 YGNodeStyleSetHeight(root_child1_child0, 10);
799 YGNodeInsertChild(root_child1, root_child1_child0, 0);
801 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
802 YGNodeStyleSetFlexGrow(root_child2, 1);
803 YGNodeStyleSetHeight(root_child2, 10);
804 YGNodeInsertChild(root, root_child2, 2);
805 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
807 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
808 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
809 ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));
810 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root));
812 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
813 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
814 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetWidth(root_child0));
815 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
817 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetLeft(root_child1));
818 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
819 ASSERT_FLOAT_EQ(106, YGNodeLayoutGetWidth(root_child1));
820 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
822 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
823 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
824 ASSERT_FLOAT_EQ(106, YGNodeLayoutGetWidth(root_child1_child0));
825 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
827 ASSERT_FLOAT_EQ(213, YGNodeLayoutGetLeft(root_child2));
828 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
829 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetWidth(root_child2));
830 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));
832 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
834 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
835 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
836 ASSERT_FLOAT_EQ(320, YGNodeLayoutGetWidth(root));
837 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root));
839 ASSERT_FLOAT_EQ(213, YGNodeLayoutGetLeft(root_child0));
840 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
841 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetWidth(root_child0));
842 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
844 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetLeft(root_child1));
845 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
846 ASSERT_FLOAT_EQ(106, YGNodeLayoutGetWidth(root_child1));
847 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
849 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
850 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
851 ASSERT_FLOAT_EQ(106, YGNodeLayoutGetWidth(root_child1_child0));
852 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
854 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
855 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
856 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetWidth(root_child2));
857 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));
859 YGNodeFreeRecursive(root);
861 YGConfigFree(config);
864 TEST(YogaTest, rounding_inner_node_controversy_vertical) {
865 const YGConfigRef config = YGConfigNew();
867 const YGNodeRef root = YGNodeNewWithConfig(config);
868 YGNodeStyleSetHeight(root, 320);
870 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
871 YGNodeStyleSetFlexGrow(root_child0, 1);
872 YGNodeStyleSetWidth(root_child0, 10);
873 YGNodeInsertChild(root, root_child0, 0);
875 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
876 YGNodeStyleSetFlexGrow(root_child1, 1);
877 YGNodeStyleSetWidth(root_child1, 10);
878 YGNodeInsertChild(root, root_child1, 1);
880 const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
881 YGNodeStyleSetFlexGrow(root_child1_child0, 1);
882 YGNodeStyleSetWidth(root_child1_child0, 10);
883 YGNodeInsertChild(root_child1, root_child1_child0, 0);
885 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
886 YGNodeStyleSetFlexGrow(root_child2, 1);
887 YGNodeStyleSetWidth(root_child2, 10);
888 YGNodeInsertChild(root, root_child2, 2);
889 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
891 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
892 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
893 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root));
894 ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));
896 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
897 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
898 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
899 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetHeight(root_child0));
901 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
902 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetTop(root_child1));
903 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));
904 ASSERT_FLOAT_EQ(106, YGNodeLayoutGetHeight(root_child1));
906 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
907 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
908 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1_child0));
909 ASSERT_FLOAT_EQ(106, YGNodeLayoutGetHeight(root_child1_child0));
911 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
912 ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));
913 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));
914 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetHeight(root_child2));
916 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
918 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
919 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
920 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root));
921 ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));
923 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
924 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
925 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
926 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetHeight(root_child0));
928 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
929 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetTop(root_child1));
930 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));
931 ASSERT_FLOAT_EQ(106, YGNodeLayoutGetHeight(root_child1));
933 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
934 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
935 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1_child0));
936 ASSERT_FLOAT_EQ(106, YGNodeLayoutGetHeight(root_child1_child0));
938 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
939 ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));
940 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));
941 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetHeight(root_child2));
943 YGNodeFreeRecursive(root);
945 YGConfigFree(config);
948 TEST(YogaTest, rounding_inner_node_controversy_combined) {
949 const YGConfigRef config = YGConfigNew();
951 const YGNodeRef root = YGNodeNewWithConfig(config);
952 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
953 YGNodeStyleSetWidth(root, 640);
954 YGNodeStyleSetHeight(root, 320);
956 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
957 YGNodeStyleSetFlexGrow(root_child0, 1);
958 YGNodeStyleSetHeightPercent(root_child0, 100);
959 YGNodeInsertChild(root, root_child0, 0);
961 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
962 YGNodeStyleSetFlexGrow(root_child1, 1);
963 YGNodeStyleSetHeightPercent(root_child1, 100);
964 YGNodeInsertChild(root, root_child1, 1);
966 const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
967 YGNodeStyleSetFlexGrow(root_child1_child0, 1);
968 YGNodeStyleSetWidthPercent(root_child1_child0, 100);
969 YGNodeInsertChild(root_child1, root_child1_child0, 0);
971 const YGNodeRef root_child1_child1 = YGNodeNewWithConfig(config);
972 YGNodeStyleSetFlexGrow(root_child1_child1, 1);
973 YGNodeStyleSetWidthPercent(root_child1_child1, 100);
974 YGNodeInsertChild(root_child1, root_child1_child1, 1);
976 const YGNodeRef root_child1_child1_child0 = YGNodeNewWithConfig(config);
977 YGNodeStyleSetFlexGrow(root_child1_child1_child0, 1);
978 YGNodeStyleSetWidthPercent(root_child1_child1_child0, 100);
979 YGNodeInsertChild(root_child1_child1, root_child1_child1_child0, 0);
981 const YGNodeRef root_child1_child2 = YGNodeNewWithConfig(config);
982 YGNodeStyleSetFlexGrow(root_child1_child2, 1);
983 YGNodeStyleSetWidthPercent(root_child1_child2, 100);
984 YGNodeInsertChild(root_child1, root_child1_child2, 2);
986 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
987 YGNodeStyleSetFlexGrow(root_child2, 1);
988 YGNodeStyleSetHeightPercent(root_child2, 100);
989 YGNodeInsertChild(root, root_child2, 2);
990 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
992 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
993 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
994 ASSERT_FLOAT_EQ(640, YGNodeLayoutGetWidth(root));
995 ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));
997 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
998 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
999 ASSERT_FLOAT_EQ(213, YGNodeLayoutGetWidth(root_child0));
1000 ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root_child0));
1002 ASSERT_FLOAT_EQ(213, YGNodeLayoutGetLeft(root_child1));
1003 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
1004 ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1));
1005 ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root_child1));
1007 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
1008 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1009 ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1_child0));
1010 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetHeight(root_child1_child0));
1012 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));
1013 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetTop(root_child1_child1));
1014 ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1_child1));
1015 ASSERT_FLOAT_EQ(106, YGNodeLayoutGetHeight(root_child1_child1));
1017 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1_child0));
1018 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1_child0));
1019 ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1_child1_child0));
1020 ASSERT_FLOAT_EQ(106, YGNodeLayoutGetHeight(root_child1_child1_child0));
1022 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child2));
1023 ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child1_child2));
1024 ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1_child2));
1025 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetHeight(root_child1_child2));
1027 ASSERT_FLOAT_EQ(427, YGNodeLayoutGetLeft(root_child2));
1028 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
1029 ASSERT_FLOAT_EQ(213, YGNodeLayoutGetWidth(root_child2));
1030 ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root_child2));
1032 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1034 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1035 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1036 ASSERT_FLOAT_EQ(640, YGNodeLayoutGetWidth(root));
1037 ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root));
1039 ASSERT_FLOAT_EQ(427, YGNodeLayoutGetLeft(root_child0));
1040 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1041 ASSERT_FLOAT_EQ(213, YGNodeLayoutGetWidth(root_child0));
1042 ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root_child0));
1044 ASSERT_FLOAT_EQ(213, YGNodeLayoutGetLeft(root_child1));
1045 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
1046 ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1));
1047 ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root_child1));
1049 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
1050 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1051 ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1_child0));
1052 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetHeight(root_child1_child0));
1054 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));
1055 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetTop(root_child1_child1));
1056 ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1_child1));
1057 ASSERT_FLOAT_EQ(106, YGNodeLayoutGetHeight(root_child1_child1));
1059 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1_child0));
1060 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1_child0));
1061 ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1_child1_child0));
1062 ASSERT_FLOAT_EQ(106, YGNodeLayoutGetHeight(root_child1_child1_child0));
1064 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child2));
1065 ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child1_child2));
1066 ASSERT_FLOAT_EQ(214, YGNodeLayoutGetWidth(root_child1_child2));
1067 ASSERT_FLOAT_EQ(107, YGNodeLayoutGetHeight(root_child1_child2));
1069 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
1070 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
1071 ASSERT_FLOAT_EQ(213, YGNodeLayoutGetWidth(root_child2));
1072 ASSERT_FLOAT_EQ(320, YGNodeLayoutGetHeight(root_child2));
1074 YGNodeFreeRecursive(root);
1076 YGConfigFree(config);