Rebase of facebook flexbox to yoga
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-third-party / yoga / YGAlignItemsTest.cpp
1 /**
2  * Copyright (c) 2014-present, Facebook, Inc.
3  *
4  * This source code is licensed under the MIT license found in the
5  * LICENSE file in the root directory of this source tree.
6  */
7
8 // @Generated by gentest/gentest.rb from gentest/fixtures/YGAlignItemsTest.html
9
10 #include <gtest/gtest.h>
11 #include <yoga/Yoga.h>
12
13 TEST(YogaTest, align_items_stretch) {
14   const YGConfigRef config = YGConfigNew();
15
16   const YGNodeRef root = YGNodeNewWithConfig(config);
17   YGNodeStyleSetWidth(root, 100);
18   YGNodeStyleSetHeight(root, 100);
19
20   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
21   YGNodeStyleSetHeight(root_child0, 10);
22   YGNodeInsertChild(root, root_child0, 0);
23   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
24
25   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
26   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
27   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
28   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
29
30   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
31   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
32   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
33   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
34
35   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
36
37   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
38   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
39   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
40   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
41
42   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
43   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
44   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
45   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
46
47   YGNodeFreeRecursive(root);
48
49   YGConfigFree(config);
50 }
51
52 TEST(YogaTest, align_items_center) {
53   const YGConfigRef config = YGConfigNew();
54
55   const YGNodeRef root = YGNodeNewWithConfig(config);
56   YGNodeStyleSetAlignItems(root, YGAlignCenter);
57   YGNodeStyleSetWidth(root, 100);
58   YGNodeStyleSetHeight(root, 100);
59
60   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
61   YGNodeStyleSetWidth(root_child0, 10);
62   YGNodeStyleSetHeight(root_child0, 10);
63   YGNodeInsertChild(root, root_child0, 0);
64   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
65
66   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
67   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
68   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
69   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
70
71   ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));
72   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
73   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
74   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
75
76   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
77
78   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
79   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
80   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
81   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
82
83   ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));
84   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
85   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
86   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
87
88   YGNodeFreeRecursive(root);
89
90   YGConfigFree(config);
91 }
92
93 TEST(YogaTest, align_items_flex_start) {
94   const YGConfigRef config = YGConfigNew();
95
96   const YGNodeRef root = YGNodeNewWithConfig(config);
97   YGNodeStyleSetAlignItems(root, YGAlignFlexStart);
98   YGNodeStyleSetWidth(root, 100);
99   YGNodeStyleSetHeight(root, 100);
100
101   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
102   YGNodeStyleSetWidth(root_child0, 10);
103   YGNodeStyleSetHeight(root_child0, 10);
104   YGNodeInsertChild(root, root_child0, 0);
105   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
106
107   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
108   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
109   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
110   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
111
112   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
113   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
114   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
115   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
116
117   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
118
119   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
120   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
121   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
122   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
123
124   ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));
125   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
126   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
127   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
128
129   YGNodeFreeRecursive(root);
130
131   YGConfigFree(config);
132 }
133
134 TEST(YogaTest, align_items_flex_end) {
135   const YGConfigRef config = YGConfigNew();
136
137   const YGNodeRef root = YGNodeNewWithConfig(config);
138   YGNodeStyleSetAlignItems(root, YGAlignFlexEnd);
139   YGNodeStyleSetWidth(root, 100);
140   YGNodeStyleSetHeight(root, 100);
141
142   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
143   YGNodeStyleSetWidth(root_child0, 10);
144   YGNodeStyleSetHeight(root_child0, 10);
145   YGNodeInsertChild(root, root_child0, 0);
146   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
147
148   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
149   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
150   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
151   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
152
153   ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child0));
154   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
155   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
156   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
157
158   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
159
160   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
161   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
162   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
163   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
164
165   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
166   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
167   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
168   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
169
170   YGNodeFreeRecursive(root);
171
172   YGConfigFree(config);
173 }
174
175 TEST(YogaTest, align_baseline) {
176   const YGConfigRef config = YGConfigNew();
177
178   const YGNodeRef root = YGNodeNewWithConfig(config);
179   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
180   YGNodeStyleSetAlignItems(root, YGAlignBaseline);
181   YGNodeStyleSetWidth(root, 100);
182   YGNodeStyleSetHeight(root, 100);
183
184   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
185   YGNodeStyleSetWidth(root_child0, 50);
186   YGNodeStyleSetHeight(root_child0, 50);
187   YGNodeInsertChild(root, root_child0, 0);
188
189   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
190   YGNodeStyleSetWidth(root_child1, 50);
191   YGNodeStyleSetHeight(root_child1, 20);
192   YGNodeInsertChild(root, root_child1, 1);
193   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
194
195   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
196   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
197   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
198   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
199
200   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
201   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
202   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
203   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
204
205   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
206   ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));
207   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
208   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
209
210   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
211
212   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
213   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
214   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
215   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
216
217   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
218   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
219   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
220   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
221
222   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
223   ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));
224   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
225   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
226
227   YGNodeFreeRecursive(root);
228
229   YGConfigFree(config);
230 }
231
232 TEST(YogaTest, align_baseline_child) {
233   const YGConfigRef config = YGConfigNew();
234
235   const YGNodeRef root = YGNodeNewWithConfig(config);
236   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
237   YGNodeStyleSetAlignItems(root, YGAlignBaseline);
238   YGNodeStyleSetWidth(root, 100);
239   YGNodeStyleSetHeight(root, 100);
240
241   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
242   YGNodeStyleSetWidth(root_child0, 50);
243   YGNodeStyleSetHeight(root_child0, 50);
244   YGNodeInsertChild(root, root_child0, 0);
245
246   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
247   YGNodeStyleSetWidth(root_child1, 50);
248   YGNodeStyleSetHeight(root_child1, 20);
249   YGNodeInsertChild(root, root_child1, 1);
250
251   const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
252   YGNodeStyleSetWidth(root_child1_child0, 50);
253   YGNodeStyleSetHeight(root_child1_child0, 10);
254   YGNodeInsertChild(root_child1, root_child1_child0, 0);
255   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
256
257   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
258   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
259   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
260   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
261
262   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
263   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
264   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
265   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
266
267   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
268   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
269   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
270   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
271
272   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
273   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
274   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
275   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
276
277   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
278
279   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
280   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
281   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
282   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
283
284   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
285   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
286   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
287   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
288
289   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
290   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
291   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
292   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
293
294   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
295   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
296   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
297   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
298
299   YGNodeFreeRecursive(root);
300
301   YGConfigFree(config);
302 }
303
304 TEST(YogaTest, align_baseline_child_multiline) {
305   const YGConfigRef config = YGConfigNew();
306
307   const YGNodeRef root = YGNodeNewWithConfig(config);
308   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
309   YGNodeStyleSetAlignItems(root, YGAlignBaseline);
310   YGNodeStyleSetWidth(root, 100);
311   YGNodeStyleSetHeight(root, 100);
312
313   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
314   YGNodeStyleSetWidth(root_child0, 50);
315   YGNodeStyleSetHeight(root_child0, 60);
316   YGNodeInsertChild(root, root_child0, 0);
317
318   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
319   YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow);
320   YGNodeStyleSetFlexWrap(root_child1, YGWrapWrap);
321   YGNodeStyleSetWidth(root_child1, 50);
322   YGNodeStyleSetHeight(root_child1, 25);
323   YGNodeInsertChild(root, root_child1, 1);
324
325   const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
326   YGNodeStyleSetWidth(root_child1_child0, 25);
327   YGNodeStyleSetHeight(root_child1_child0, 20);
328   YGNodeInsertChild(root_child1, root_child1_child0, 0);
329
330   const YGNodeRef root_child1_child1 = YGNodeNewWithConfig(config);
331   YGNodeStyleSetWidth(root_child1_child1, 25);
332   YGNodeStyleSetHeight(root_child1_child1, 10);
333   YGNodeInsertChild(root_child1, root_child1_child1, 1);
334
335   const YGNodeRef root_child1_child2 = YGNodeNewWithConfig(config);
336   YGNodeStyleSetWidth(root_child1_child2, 25);
337   YGNodeStyleSetHeight(root_child1_child2, 20);
338   YGNodeInsertChild(root_child1, root_child1_child2, 2);
339
340   const YGNodeRef root_child1_child3 = YGNodeNewWithConfig(config);
341   YGNodeStyleSetWidth(root_child1_child3, 25);
342   YGNodeStyleSetHeight(root_child1_child3, 10);
343   YGNodeInsertChild(root_child1, root_child1_child3, 3);
344   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
345
346   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
347   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
348   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
349   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
350
351   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
352   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
353   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
354   ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
355
356   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
357   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
358   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
359   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
360
361   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
362   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
363   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));
364   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
365
366   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child1));
367   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));
368   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));
369   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));
370
371   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child2));
372   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));
373   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));
374   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));
375
376   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child3));
377   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));
378   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));
379   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));
380
381   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
382
383   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
384   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
385   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
386   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
387
388   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
389   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
390   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
391   ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
392
393   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
394   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
395   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
396   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
397
398   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child0));
399   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
400   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));
401   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
402
403   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));
404   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));
405   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));
406   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));
407
408   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child2));
409   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));
410   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));
411   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));
412
413   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child3));
414   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));
415   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));
416   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));
417
418   YGNodeFreeRecursive(root);
419
420   YGConfigFree(config);
421 }
422
423 TEST(YogaTest, align_baseline_child_multiline_override) {
424   const YGConfigRef config = YGConfigNew();
425
426   const YGNodeRef root = YGNodeNewWithConfig(config);
427   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
428   YGNodeStyleSetAlignItems(root, YGAlignBaseline);
429   YGNodeStyleSetWidth(root, 100);
430   YGNodeStyleSetHeight(root, 100);
431
432   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
433   YGNodeStyleSetWidth(root_child0, 50);
434   YGNodeStyleSetHeight(root_child0, 60);
435   YGNodeInsertChild(root, root_child0, 0);
436
437   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
438   YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow);
439   YGNodeStyleSetFlexWrap(root_child1, YGWrapWrap);
440   YGNodeStyleSetWidth(root_child1, 50);
441   YGNodeStyleSetHeight(root_child1, 25);
442   YGNodeInsertChild(root, root_child1, 1);
443
444   const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
445   YGNodeStyleSetWidth(root_child1_child0, 25);
446   YGNodeStyleSetHeight(root_child1_child0, 20);
447   YGNodeInsertChild(root_child1, root_child1_child0, 0);
448
449   const YGNodeRef root_child1_child1 = YGNodeNewWithConfig(config);
450   YGNodeStyleSetAlignSelf(root_child1_child1, YGAlignBaseline);
451   YGNodeStyleSetWidth(root_child1_child1, 25);
452   YGNodeStyleSetHeight(root_child1_child1, 10);
453   YGNodeInsertChild(root_child1, root_child1_child1, 1);
454
455   const YGNodeRef root_child1_child2 = YGNodeNewWithConfig(config);
456   YGNodeStyleSetWidth(root_child1_child2, 25);
457   YGNodeStyleSetHeight(root_child1_child2, 20);
458   YGNodeInsertChild(root_child1, root_child1_child2, 2);
459
460   const YGNodeRef root_child1_child3 = YGNodeNewWithConfig(config);
461   YGNodeStyleSetAlignSelf(root_child1_child3, YGAlignBaseline);
462   YGNodeStyleSetWidth(root_child1_child3, 25);
463   YGNodeStyleSetHeight(root_child1_child3, 10);
464   YGNodeInsertChild(root_child1, root_child1_child3, 3);
465   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
466
467   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
468   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
469   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
470   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
471
472   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
473   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
474   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
475   ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
476
477   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
478   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
479   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
480   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
481
482   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
483   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
484   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));
485   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
486
487   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child1));
488   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));
489   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));
490   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));
491
492   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child2));
493   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));
494   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));
495   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));
496
497   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child3));
498   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));
499   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));
500   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));
501
502   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
503
504   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
505   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
506   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
507   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
508
509   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
510   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
511   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
512   ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
513
514   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
515   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
516   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
517   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
518
519   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child0));
520   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
521   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));
522   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
523
524   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));
525   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));
526   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));
527   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));
528
529   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child2));
530   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));
531   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));
532   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));
533
534   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child3));
535   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));
536   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));
537   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));
538
539   YGNodeFreeRecursive(root);
540
541   YGConfigFree(config);
542 }
543
544 TEST(YogaTest, align_baseline_child_multiline_no_override_on_secondline) {
545   const YGConfigRef config = YGConfigNew();
546
547   const YGNodeRef root = YGNodeNewWithConfig(config);
548   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
549   YGNodeStyleSetAlignItems(root, YGAlignBaseline);
550   YGNodeStyleSetWidth(root, 100);
551   YGNodeStyleSetHeight(root, 100);
552
553   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
554   YGNodeStyleSetWidth(root_child0, 50);
555   YGNodeStyleSetHeight(root_child0, 60);
556   YGNodeInsertChild(root, root_child0, 0);
557
558   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
559   YGNodeStyleSetFlexDirection(root_child1, YGFlexDirectionRow);
560   YGNodeStyleSetFlexWrap(root_child1, YGWrapWrap);
561   YGNodeStyleSetWidth(root_child1, 50);
562   YGNodeStyleSetHeight(root_child1, 25);
563   YGNodeInsertChild(root, root_child1, 1);
564
565   const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
566   YGNodeStyleSetWidth(root_child1_child0, 25);
567   YGNodeStyleSetHeight(root_child1_child0, 20);
568   YGNodeInsertChild(root_child1, root_child1_child0, 0);
569
570   const YGNodeRef root_child1_child1 = YGNodeNewWithConfig(config);
571   YGNodeStyleSetWidth(root_child1_child1, 25);
572   YGNodeStyleSetHeight(root_child1_child1, 10);
573   YGNodeInsertChild(root_child1, root_child1_child1, 1);
574
575   const YGNodeRef root_child1_child2 = YGNodeNewWithConfig(config);
576   YGNodeStyleSetWidth(root_child1_child2, 25);
577   YGNodeStyleSetHeight(root_child1_child2, 20);
578   YGNodeInsertChild(root_child1, root_child1_child2, 2);
579
580   const YGNodeRef root_child1_child3 = YGNodeNewWithConfig(config);
581   YGNodeStyleSetAlignSelf(root_child1_child3, YGAlignBaseline);
582   YGNodeStyleSetWidth(root_child1_child3, 25);
583   YGNodeStyleSetHeight(root_child1_child3, 10);
584   YGNodeInsertChild(root_child1, root_child1_child3, 3);
585   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
586
587   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
588   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
589   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
590   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
591
592   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
593   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
594   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
595   ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
596
597   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
598   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
599   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
600   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
601
602   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
603   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
604   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));
605   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
606
607   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child1));
608   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));
609   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));
610   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));
611
612   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child2));
613   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));
614   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));
615   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));
616
617   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child3));
618   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));
619   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));
620   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));
621
622   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
623
624   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
625   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
626   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
627   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
628
629   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
630   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
631   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
632   ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
633
634   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
635   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
636   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
637   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
638
639   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child0));
640   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
641   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child0));
642   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
643
644   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child1));
645   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child1));
646   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child1));
647   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child1));
648
649   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child1_child2));
650   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child2));
651   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child2));
652   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child2));
653
654   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child3));
655   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child1_child3));
656   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1_child3));
657   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child3));
658
659   YGNodeFreeRecursive(root);
660
661   YGConfigFree(config);
662 }
663
664 TEST(YogaTest, align_baseline_child_top) {
665   const YGConfigRef config = YGConfigNew();
666
667   const YGNodeRef root = YGNodeNewWithConfig(config);
668   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
669   YGNodeStyleSetAlignItems(root, YGAlignBaseline);
670   YGNodeStyleSetWidth(root, 100);
671   YGNodeStyleSetHeight(root, 100);
672
673   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
674   YGNodeStyleSetPosition(root_child0, YGEdgeTop, 10);
675   YGNodeStyleSetWidth(root_child0, 50);
676   YGNodeStyleSetHeight(root_child0, 50);
677   YGNodeInsertChild(root, root_child0, 0);
678
679   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
680   YGNodeStyleSetWidth(root_child1, 50);
681   YGNodeStyleSetHeight(root_child1, 20);
682   YGNodeInsertChild(root, root_child1, 1);
683
684   const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
685   YGNodeStyleSetWidth(root_child1_child0, 50);
686   YGNodeStyleSetHeight(root_child1_child0, 10);
687   YGNodeInsertChild(root_child1, root_child1_child0, 0);
688   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
689
690   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
691   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
692   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
693   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
694
695   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
696   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));
697   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
698   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
699
700   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
701   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
702   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
703   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
704
705   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
706   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
707   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
708   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
709
710   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
711
712   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
713   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
714   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
715   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
716
717   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
718   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));
719   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
720   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
721
722   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
723   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
724   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
725   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
726
727   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
728   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
729   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
730   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
731
732   YGNodeFreeRecursive(root);
733
734   YGConfigFree(config);
735 }
736
737 TEST(YogaTest, align_baseline_child_top2) {
738   const YGConfigRef config = YGConfigNew();
739
740   const YGNodeRef root = YGNodeNewWithConfig(config);
741   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
742   YGNodeStyleSetAlignItems(root, YGAlignBaseline);
743   YGNodeStyleSetWidth(root, 100);
744   YGNodeStyleSetHeight(root, 100);
745
746   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
747   YGNodeStyleSetWidth(root_child0, 50);
748   YGNodeStyleSetHeight(root_child0, 50);
749   YGNodeInsertChild(root, root_child0, 0);
750
751   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
752   YGNodeStyleSetPosition(root_child1, YGEdgeTop, 5);
753   YGNodeStyleSetWidth(root_child1, 50);
754   YGNodeStyleSetHeight(root_child1, 20);
755   YGNodeInsertChild(root, root_child1, 1);
756
757   const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
758   YGNodeStyleSetWidth(root_child1_child0, 50);
759   YGNodeStyleSetHeight(root_child1_child0, 10);
760   YGNodeInsertChild(root_child1, root_child1_child0, 0);
761   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
762
763   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
764   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
765   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
766   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
767
768   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
769   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
770   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
771   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
772
773   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
774   ASSERT_FLOAT_EQ(45, YGNodeLayoutGetTop(root_child1));
775   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
776   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
777
778   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
779   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
780   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
781   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
782
783   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
784
785   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
786   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
787   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
788   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
789
790   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
791   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
792   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
793   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
794
795   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
796   ASSERT_FLOAT_EQ(45, YGNodeLayoutGetTop(root_child1));
797   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
798   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
799
800   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
801   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
802   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
803   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
804
805   YGNodeFreeRecursive(root);
806
807   YGConfigFree(config);
808 }
809
810 TEST(YogaTest, align_baseline_double_nested_child) {
811   const YGConfigRef config = YGConfigNew();
812
813   const YGNodeRef root = YGNodeNewWithConfig(config);
814   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
815   YGNodeStyleSetAlignItems(root, YGAlignBaseline);
816   YGNodeStyleSetWidth(root, 100);
817   YGNodeStyleSetHeight(root, 100);
818
819   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
820   YGNodeStyleSetWidth(root_child0, 50);
821   YGNodeStyleSetHeight(root_child0, 50);
822   YGNodeInsertChild(root, root_child0, 0);
823
824   const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
825   YGNodeStyleSetWidth(root_child0_child0, 50);
826   YGNodeStyleSetHeight(root_child0_child0, 20);
827   YGNodeInsertChild(root_child0, root_child0_child0, 0);
828
829   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
830   YGNodeStyleSetWidth(root_child1, 50);
831   YGNodeStyleSetHeight(root_child1, 20);
832   YGNodeInsertChild(root, root_child1, 1);
833
834   const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
835   YGNodeStyleSetWidth(root_child1_child0, 50);
836   YGNodeStyleSetHeight(root_child1_child0, 15);
837   YGNodeInsertChild(root_child1, root_child1_child0, 0);
838   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
839
840   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
841   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
842   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
843   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
844
845   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
846   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
847   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
848   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
849
850   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
851   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
852   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));
853   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
854
855   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
856   ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child1));
857   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
858   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
859
860   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
861   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
862   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
863   ASSERT_FLOAT_EQ(15, YGNodeLayoutGetHeight(root_child1_child0));
864
865   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
866
867   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
868   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
869   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
870   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
871
872   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
873   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
874   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
875   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
876
877   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
878   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
879   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0_child0));
880   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
881
882   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
883   ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child1));
884   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
885   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
886
887   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
888   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
889   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
890   ASSERT_FLOAT_EQ(15, YGNodeLayoutGetHeight(root_child1_child0));
891
892   YGNodeFreeRecursive(root);
893
894   YGConfigFree(config);
895 }
896
897 TEST(YogaTest, align_baseline_column) {
898   const YGConfigRef config = YGConfigNew();
899
900   const YGNodeRef root = YGNodeNewWithConfig(config);
901   YGNodeStyleSetAlignItems(root, YGAlignBaseline);
902   YGNodeStyleSetWidth(root, 100);
903   YGNodeStyleSetHeight(root, 100);
904
905   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
906   YGNodeStyleSetWidth(root_child0, 50);
907   YGNodeStyleSetHeight(root_child0, 50);
908   YGNodeInsertChild(root, root_child0, 0);
909
910   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
911   YGNodeStyleSetWidth(root_child1, 50);
912   YGNodeStyleSetHeight(root_child1, 20);
913   YGNodeInsertChild(root, root_child1, 1);
914   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
915
916   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
917   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
918   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
919   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
920
921   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
922   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
923   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
924   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
925
926   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
927   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
928   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
929   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
930
931   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
932
933   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
934   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
935   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
936   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
937
938   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
939   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
940   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
941   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
942
943   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
944   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
945   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
946   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
947
948   YGNodeFreeRecursive(root);
949
950   YGConfigFree(config);
951 }
952
953 TEST(YogaTest, align_baseline_child_margin) {
954   const YGConfigRef config = YGConfigNew();
955
956   const YGNodeRef root = YGNodeNewWithConfig(config);
957   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
958   YGNodeStyleSetAlignItems(root, YGAlignBaseline);
959   YGNodeStyleSetWidth(root, 100);
960   YGNodeStyleSetHeight(root, 100);
961
962   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
963   YGNodeStyleSetMargin(root_child0, YGEdgeLeft, 5);
964   YGNodeStyleSetMargin(root_child0, YGEdgeTop, 5);
965   YGNodeStyleSetMargin(root_child0, YGEdgeRight, 5);
966   YGNodeStyleSetMargin(root_child0, YGEdgeBottom, 5);
967   YGNodeStyleSetWidth(root_child0, 50);
968   YGNodeStyleSetHeight(root_child0, 50);
969   YGNodeInsertChild(root, root_child0, 0);
970
971   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
972   YGNodeStyleSetWidth(root_child1, 50);
973   YGNodeStyleSetHeight(root_child1, 20);
974   YGNodeInsertChild(root, root_child1, 1);
975
976   const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
977   YGNodeStyleSetMargin(root_child1_child0, YGEdgeLeft, 1);
978   YGNodeStyleSetMargin(root_child1_child0, YGEdgeTop, 1);
979   YGNodeStyleSetMargin(root_child1_child0, YGEdgeRight, 1);
980   YGNodeStyleSetMargin(root_child1_child0, YGEdgeBottom, 1);
981   YGNodeStyleSetWidth(root_child1_child0, 50);
982   YGNodeStyleSetHeight(root_child1_child0, 10);
983   YGNodeInsertChild(root_child1, root_child1_child0, 0);
984   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
985
986   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
987   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
988   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
989   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
990
991   ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0));
992   ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));
993   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
994   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
995
996   ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child1));
997   ASSERT_FLOAT_EQ(44, YGNodeLayoutGetTop(root_child1));
998   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
999   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
1000
1001   ASSERT_FLOAT_EQ(1, YGNodeLayoutGetLeft(root_child1_child0));
1002   ASSERT_FLOAT_EQ(1, YGNodeLayoutGetTop(root_child1_child0));
1003   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
1004   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
1005
1006   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1007
1008   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1009   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1010   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1011   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1012
1013   ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));
1014   ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));
1015   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1016   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1017
1018   ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child1));
1019   ASSERT_FLOAT_EQ(44, YGNodeLayoutGetTop(root_child1));
1020   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
1021   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
1022
1023   ASSERT_FLOAT_EQ(-1, YGNodeLayoutGetLeft(root_child1_child0));
1024   ASSERT_FLOAT_EQ(1, YGNodeLayoutGetTop(root_child1_child0));
1025   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
1026   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
1027
1028   YGNodeFreeRecursive(root);
1029
1030   YGConfigFree(config);
1031 }
1032
1033 TEST(YogaTest, align_baseline_child_padding) {
1034   const YGConfigRef config = YGConfigNew();
1035
1036   const YGNodeRef root = YGNodeNewWithConfig(config);
1037   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
1038   YGNodeStyleSetAlignItems(root, YGAlignBaseline);
1039   YGNodeStyleSetPadding(root, YGEdgeLeft, 5);
1040   YGNodeStyleSetPadding(root, YGEdgeTop, 5);
1041   YGNodeStyleSetPadding(root, YGEdgeRight, 5);
1042   YGNodeStyleSetPadding(root, YGEdgeBottom, 5);
1043   YGNodeStyleSetWidth(root, 100);
1044   YGNodeStyleSetHeight(root, 100);
1045
1046   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1047   YGNodeStyleSetWidth(root_child0, 50);
1048   YGNodeStyleSetHeight(root_child0, 50);
1049   YGNodeInsertChild(root, root_child0, 0);
1050
1051   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
1052   YGNodeStyleSetPadding(root_child1, YGEdgeLeft, 5);
1053   YGNodeStyleSetPadding(root_child1, YGEdgeTop, 5);
1054   YGNodeStyleSetPadding(root_child1, YGEdgeRight, 5);
1055   YGNodeStyleSetPadding(root_child1, YGEdgeBottom, 5);
1056   YGNodeStyleSetWidth(root_child1, 50);
1057   YGNodeStyleSetHeight(root_child1, 20);
1058   YGNodeInsertChild(root, root_child1, 1);
1059
1060   const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
1061   YGNodeStyleSetWidth(root_child1_child0, 50);
1062   YGNodeStyleSetHeight(root_child1_child0, 10);
1063   YGNodeInsertChild(root_child1, root_child1_child0, 0);
1064   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1065
1066   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1067   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1068   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1069   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1070
1071   ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child0));
1072   ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));
1073   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1074   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1075
1076   ASSERT_FLOAT_EQ(55, YGNodeLayoutGetLeft(root_child1));
1077   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
1078   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
1079   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
1080
1081   ASSERT_FLOAT_EQ(5, YGNodeLayoutGetLeft(root_child1_child0));
1082   ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child1_child0));
1083   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
1084   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
1085
1086   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1087
1088   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1089   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1090   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1091   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1092
1093   ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));
1094   ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child0));
1095   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1096   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1097
1098   ASSERT_FLOAT_EQ(-5, YGNodeLayoutGetLeft(root_child1));
1099   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
1100   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
1101   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
1102
1103   ASSERT_FLOAT_EQ(-5, YGNodeLayoutGetLeft(root_child1_child0));
1104   ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child1_child0));
1105   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
1106   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
1107
1108   YGNodeFreeRecursive(root);
1109
1110   YGConfigFree(config);
1111 }
1112
1113 TEST(YogaTest, align_baseline_multiline) {
1114   const YGConfigRef config = YGConfigNew();
1115
1116   const YGNodeRef root = YGNodeNewWithConfig(config);
1117   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
1118   YGNodeStyleSetAlignItems(root, YGAlignBaseline);
1119   YGNodeStyleSetFlexWrap(root, YGWrapWrap);
1120   YGNodeStyleSetWidth(root, 100);
1121   YGNodeStyleSetHeight(root, 100);
1122
1123   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1124   YGNodeStyleSetWidth(root_child0, 50);
1125   YGNodeStyleSetHeight(root_child0, 50);
1126   YGNodeInsertChild(root, root_child0, 0);
1127
1128   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
1129   YGNodeStyleSetWidth(root_child1, 50);
1130   YGNodeStyleSetHeight(root_child1, 20);
1131   YGNodeInsertChild(root, root_child1, 1);
1132
1133   const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
1134   YGNodeStyleSetWidth(root_child1_child0, 50);
1135   YGNodeStyleSetHeight(root_child1_child0, 10);
1136   YGNodeInsertChild(root_child1, root_child1_child0, 0);
1137
1138   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
1139   YGNodeStyleSetWidth(root_child2, 50);
1140   YGNodeStyleSetHeight(root_child2, 20);
1141   YGNodeInsertChild(root, root_child2, 2);
1142
1143   const YGNodeRef root_child2_child0 = YGNodeNewWithConfig(config);
1144   YGNodeStyleSetWidth(root_child2_child0, 50);
1145   YGNodeStyleSetHeight(root_child2_child0, 10);
1146   YGNodeInsertChild(root_child2, root_child2_child0, 0);
1147
1148   const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
1149   YGNodeStyleSetWidth(root_child3, 50);
1150   YGNodeStyleSetHeight(root_child3, 50);
1151   YGNodeInsertChild(root, root_child3, 3);
1152   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1153
1154   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1155   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1156   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1157   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1158
1159   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1160   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1161   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1162   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1163
1164   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
1165   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
1166   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
1167   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
1168
1169   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
1170   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1171   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
1172   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
1173
1174   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
1175   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));
1176   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));
1177   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));
1178
1179   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));
1180   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));
1181   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2_child0));
1182   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));
1183
1184   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));
1185   ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child3));
1186   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
1187   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));
1188
1189   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1190
1191   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1192   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1193   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1194   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1195
1196   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
1197   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1198   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1199   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1200
1201   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
1202   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
1203   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
1204   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
1205
1206   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
1207   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1208   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
1209   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
1210
1211   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));
1212   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));
1213   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));
1214   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));
1215
1216   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));
1217   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));
1218   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2_child0));
1219   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));
1220
1221   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
1222   ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child3));
1223   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
1224   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child3));
1225
1226   YGNodeFreeRecursive(root);
1227
1228   YGConfigFree(config);
1229 }
1230
1231 TEST(YogaTest, align_baseline_multiline_column) {
1232   const YGConfigRef config = YGConfigNew();
1233
1234   const YGNodeRef root = YGNodeNewWithConfig(config);
1235   YGNodeStyleSetAlignItems(root, YGAlignBaseline);
1236   YGNodeStyleSetFlexWrap(root, YGWrapWrap);
1237   YGNodeStyleSetWidth(root, 100);
1238   YGNodeStyleSetHeight(root, 100);
1239
1240   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1241   YGNodeStyleSetWidth(root_child0, 50);
1242   YGNodeStyleSetHeight(root_child0, 50);
1243   YGNodeInsertChild(root, root_child0, 0);
1244
1245   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
1246   YGNodeStyleSetWidth(root_child1, 30);
1247   YGNodeStyleSetHeight(root_child1, 50);
1248   YGNodeInsertChild(root, root_child1, 1);
1249
1250   const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
1251   YGNodeStyleSetWidth(root_child1_child0, 20);
1252   YGNodeStyleSetHeight(root_child1_child0, 20);
1253   YGNodeInsertChild(root_child1, root_child1_child0, 0);
1254
1255   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
1256   YGNodeStyleSetWidth(root_child2, 40);
1257   YGNodeStyleSetHeight(root_child2, 70);
1258   YGNodeInsertChild(root, root_child2, 2);
1259
1260   const YGNodeRef root_child2_child0 = YGNodeNewWithConfig(config);
1261   YGNodeStyleSetWidth(root_child2_child0, 10);
1262   YGNodeStyleSetHeight(root_child2_child0, 10);
1263   YGNodeInsertChild(root_child2, root_child2_child0, 0);
1264
1265   const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
1266   YGNodeStyleSetWidth(root_child3, 50);
1267   YGNodeStyleSetHeight(root_child3, 20);
1268   YGNodeInsertChild(root, root_child3, 3);
1269   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1270
1271   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1272   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1273   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1274   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1275
1276   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1277   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1278   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1279   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1280
1281   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
1282   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
1283   ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
1284   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
1285
1286   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
1287   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1288   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1_child0));
1289   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
1290
1291   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));
1292   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
1293   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));
1294   ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root_child2));
1295
1296   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));
1297   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));
1298   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2_child0));
1299   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));
1300
1301   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));
1302   ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child3));
1303   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
1304   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));
1305
1306   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1307
1308   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1309   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1310   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1311   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1312
1313   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
1314   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1315   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1316   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1317
1318   ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child1));
1319   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
1320   ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
1321   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
1322
1323   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1_child0));
1324   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1325   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1_child0));
1326   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
1327
1328   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));
1329   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
1330   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));
1331   ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root_child2));
1332
1333   ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child2_child0));
1334   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));
1335   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2_child0));
1336   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));
1337
1338   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
1339   ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child3));
1340   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
1341   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));
1342
1343   YGNodeFreeRecursive(root);
1344
1345   YGConfigFree(config);
1346 }
1347
1348 TEST(YogaTest, align_baseline_multiline_column2) {
1349   const YGConfigRef config = YGConfigNew();
1350
1351   const YGNodeRef root = YGNodeNewWithConfig(config);
1352   YGNodeStyleSetAlignItems(root, YGAlignBaseline);
1353   YGNodeStyleSetFlexWrap(root, YGWrapWrap);
1354   YGNodeStyleSetWidth(root, 100);
1355   YGNodeStyleSetHeight(root, 100);
1356
1357   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1358   YGNodeStyleSetWidth(root_child0, 50);
1359   YGNodeStyleSetHeight(root_child0, 50);
1360   YGNodeInsertChild(root, root_child0, 0);
1361
1362   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
1363   YGNodeStyleSetWidth(root_child1, 30);
1364   YGNodeStyleSetHeight(root_child1, 50);
1365   YGNodeInsertChild(root, root_child1, 1);
1366
1367   const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
1368   YGNodeStyleSetWidth(root_child1_child0, 20);
1369   YGNodeStyleSetHeight(root_child1_child0, 20);
1370   YGNodeInsertChild(root_child1, root_child1_child0, 0);
1371
1372   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
1373   YGNodeStyleSetWidth(root_child2, 40);
1374   YGNodeStyleSetHeight(root_child2, 70);
1375   YGNodeInsertChild(root, root_child2, 2);
1376
1377   const YGNodeRef root_child2_child0 = YGNodeNewWithConfig(config);
1378   YGNodeStyleSetWidth(root_child2_child0, 10);
1379   YGNodeStyleSetHeight(root_child2_child0, 10);
1380   YGNodeInsertChild(root_child2, root_child2_child0, 0);
1381
1382   const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
1383   YGNodeStyleSetWidth(root_child3, 50);
1384   YGNodeStyleSetHeight(root_child3, 20);
1385   YGNodeInsertChild(root, root_child3, 3);
1386   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1387
1388   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1389   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1390   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1391   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1392
1393   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1394   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1395   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1396   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1397
1398   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
1399   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
1400   ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
1401   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
1402
1403   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
1404   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1405   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1_child0));
1406   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
1407
1408   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));
1409   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
1410   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));
1411   ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root_child2));
1412
1413   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));
1414   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));
1415   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2_child0));
1416   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));
1417
1418   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));
1419   ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child3));
1420   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
1421   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));
1422
1423   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1424
1425   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1426   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1427   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1428   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1429
1430   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
1431   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1432   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1433   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1434
1435   ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child1));
1436   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
1437   ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
1438   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
1439
1440   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1_child0));
1441   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1442   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child1_child0));
1443   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1_child0));
1444
1445   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));
1446   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
1447   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child2));
1448   ASSERT_FLOAT_EQ(70, YGNodeLayoutGetHeight(root_child2));
1449
1450   ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child2_child0));
1451   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));
1452   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2_child0));
1453   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));
1454
1455   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
1456   ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child3));
1457   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
1458   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));
1459
1460   YGNodeFreeRecursive(root);
1461
1462   YGConfigFree(config);
1463 }
1464
1465 TEST(YogaTest, align_baseline_multiline_row_and_column) {
1466   const YGConfigRef config = YGConfigNew();
1467
1468   const YGNodeRef root = YGNodeNewWithConfig(config);
1469   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
1470   YGNodeStyleSetAlignItems(root, YGAlignBaseline);
1471   YGNodeStyleSetFlexWrap(root, YGWrapWrap);
1472   YGNodeStyleSetWidth(root, 100);
1473   YGNodeStyleSetHeight(root, 100);
1474
1475   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1476   YGNodeStyleSetWidth(root_child0, 50);
1477   YGNodeStyleSetHeight(root_child0, 50);
1478   YGNodeInsertChild(root, root_child0, 0);
1479
1480   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
1481   YGNodeStyleSetWidth(root_child1, 50);
1482   YGNodeStyleSetHeight(root_child1, 50);
1483   YGNodeInsertChild(root, root_child1, 1);
1484
1485   const YGNodeRef root_child1_child0 = YGNodeNewWithConfig(config);
1486   YGNodeStyleSetWidth(root_child1_child0, 50);
1487   YGNodeStyleSetHeight(root_child1_child0, 10);
1488   YGNodeInsertChild(root_child1, root_child1_child0, 0);
1489
1490   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
1491   YGNodeStyleSetWidth(root_child2, 50);
1492   YGNodeStyleSetHeight(root_child2, 20);
1493   YGNodeInsertChild(root, root_child2, 2);
1494
1495   const YGNodeRef root_child2_child0 = YGNodeNewWithConfig(config);
1496   YGNodeStyleSetWidth(root_child2_child0, 50);
1497   YGNodeStyleSetHeight(root_child2_child0, 10);
1498   YGNodeInsertChild(root_child2, root_child2_child0, 0);
1499
1500   const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
1501   YGNodeStyleSetWidth(root_child3, 50);
1502   YGNodeStyleSetHeight(root_child3, 20);
1503   YGNodeInsertChild(root, root_child3, 3);
1504   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1505
1506   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1507   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1508   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1509   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1510
1511   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1512   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1513   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1514   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1515
1516   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
1517   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
1518   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
1519   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
1520
1521   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
1522   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1523   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
1524   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
1525
1526   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
1527   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));
1528   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));
1529   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));
1530
1531   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));
1532   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));
1533   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2_child0));
1534   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));
1535
1536   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child3));
1537   ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child3));
1538   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
1539   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));
1540
1541   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1542
1543   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1544   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1545   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1546   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1547
1548   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
1549   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1550   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
1551   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
1552
1553   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
1554   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child1));
1555   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
1556   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
1557
1558   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1_child0));
1559   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1_child0));
1560   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1_child0));
1561   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1_child0));
1562
1563   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child2));
1564   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child2));
1565   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));
1566   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));
1567
1568   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2_child0));
1569   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2_child0));
1570   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2_child0));
1571   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2_child0));
1572
1573   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
1574   ASSERT_FLOAT_EQ(90, YGNodeLayoutGetTop(root_child3));
1575   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child3));
1576   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child3));
1577
1578   YGNodeFreeRecursive(root);
1579
1580   YGConfigFree(config);
1581 }
1582
1583 TEST(YogaTest, align_items_center_child_with_margin_bigger_than_parent) {
1584   const YGConfigRef config = YGConfigNew();
1585
1586   const YGNodeRef root = YGNodeNewWithConfig(config);
1587   YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
1588   YGNodeStyleSetAlignItems(root, YGAlignCenter);
1589   YGNodeStyleSetWidth(root, 52);
1590   YGNodeStyleSetHeight(root, 52);
1591
1592   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1593   YGNodeStyleSetAlignItems(root_child0, YGAlignCenter);
1594   YGNodeInsertChild(root, root_child0, 0);
1595
1596   const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1597   YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 10);
1598   YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 10);
1599   YGNodeStyleSetWidth(root_child0_child0, 52);
1600   YGNodeStyleSetHeight(root_child0_child0, 52);
1601   YGNodeInsertChild(root_child0, root_child0_child0, 0);
1602   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1603
1604   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1605   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1606   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
1607   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
1608
1609   ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));
1610   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1611   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));
1612   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0));
1613
1614   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));
1615   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1616   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root_child0_child0));
1617   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0_child0));
1618
1619   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1620
1621   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1622   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1623   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
1624   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
1625
1626   ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));
1627   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1628   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));
1629   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0));
1630
1631   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));
1632   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1633   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root_child0_child0));
1634   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0_child0));
1635
1636   YGNodeFreeRecursive(root);
1637
1638   YGConfigFree(config);
1639 }
1640
1641 TEST(YogaTest, align_items_flex_end_child_with_margin_bigger_than_parent) {
1642   const YGConfigRef config = YGConfigNew();
1643
1644   const YGNodeRef root = YGNodeNewWithConfig(config);
1645   YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
1646   YGNodeStyleSetAlignItems(root, YGAlignCenter);
1647   YGNodeStyleSetWidth(root, 52);
1648   YGNodeStyleSetHeight(root, 52);
1649
1650   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1651   YGNodeStyleSetAlignItems(root_child0, YGAlignFlexEnd);
1652   YGNodeInsertChild(root, root_child0, 0);
1653
1654   const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1655   YGNodeStyleSetMargin(root_child0_child0, YGEdgeLeft, 10);
1656   YGNodeStyleSetMargin(root_child0_child0, YGEdgeRight, 10);
1657   YGNodeStyleSetWidth(root_child0_child0, 52);
1658   YGNodeStyleSetHeight(root_child0_child0, 52);
1659   YGNodeInsertChild(root_child0, root_child0_child0, 0);
1660   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1661
1662   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1663   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1664   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
1665   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
1666
1667   ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));
1668   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1669   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));
1670   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0));
1671
1672   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));
1673   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1674   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root_child0_child0));
1675   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0_child0));
1676
1677   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1678
1679   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1680   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1681   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
1682   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
1683
1684   ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));
1685   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1686   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));
1687   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0));
1688
1689   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child0_child0));
1690   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1691   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root_child0_child0));
1692   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root_child0_child0));
1693
1694   YGNodeFreeRecursive(root);
1695
1696   YGConfigFree(config);
1697 }
1698
1699 TEST(YogaTest, align_items_center_child_without_margin_bigger_than_parent) {
1700   const YGConfigRef config = YGConfigNew();
1701
1702   const YGNodeRef root = YGNodeNewWithConfig(config);
1703   YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
1704   YGNodeStyleSetAlignItems(root, YGAlignCenter);
1705   YGNodeStyleSetWidth(root, 52);
1706   YGNodeStyleSetHeight(root, 52);
1707
1708   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1709   YGNodeStyleSetAlignItems(root_child0, YGAlignCenter);
1710   YGNodeInsertChild(root, root_child0, 0);
1711
1712   const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1713   YGNodeStyleSetWidth(root_child0_child0, 72);
1714   YGNodeStyleSetHeight(root_child0_child0, 72);
1715   YGNodeInsertChild(root_child0, root_child0_child0, 0);
1716   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1717
1718   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1719   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1720   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
1721   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
1722
1723   ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));
1724   ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));
1725   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));
1726   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));
1727
1728   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1729   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1730   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0));
1731   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0));
1732
1733   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1734
1735   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1736   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1737   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
1738   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
1739
1740   ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));
1741   ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));
1742   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));
1743   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));
1744
1745   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1746   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1747   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0));
1748   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0));
1749
1750   YGNodeFreeRecursive(root);
1751
1752   YGConfigFree(config);
1753 }
1754
1755 TEST(YogaTest, align_items_flex_end_child_without_margin_bigger_than_parent) {
1756   const YGConfigRef config = YGConfigNew();
1757
1758   const YGNodeRef root = YGNodeNewWithConfig(config);
1759   YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
1760   YGNodeStyleSetAlignItems(root, YGAlignCenter);
1761   YGNodeStyleSetWidth(root, 52);
1762   YGNodeStyleSetHeight(root, 52);
1763
1764   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1765   YGNodeStyleSetAlignItems(root_child0, YGAlignFlexEnd);
1766   YGNodeInsertChild(root, root_child0, 0);
1767
1768   const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1769   YGNodeStyleSetWidth(root_child0_child0, 72);
1770   YGNodeStyleSetHeight(root_child0_child0, 72);
1771   YGNodeInsertChild(root_child0, root_child0_child0, 0);
1772   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1773
1774   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1775   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1776   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
1777   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
1778
1779   ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));
1780   ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));
1781   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));
1782   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));
1783
1784   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1785   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1786   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0));
1787   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0));
1788
1789   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1790
1791   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1792   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1793   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetWidth(root));
1794   ASSERT_FLOAT_EQ(52, YGNodeLayoutGetHeight(root));
1795
1796   ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetLeft(root_child0));
1797   ASSERT_FLOAT_EQ(-10, YGNodeLayoutGetTop(root_child0));
1798   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0));
1799   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0));
1800
1801   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1802   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1803   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetWidth(root_child0_child0));
1804   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetHeight(root_child0_child0));
1805
1806   YGNodeFreeRecursive(root);
1807
1808   YGConfigFree(config);
1809 }
1810
1811 TEST(YogaTest, align_center_should_size_based_on_content) {
1812   const YGConfigRef config = YGConfigNew();
1813
1814   const YGNodeRef root = YGNodeNewWithConfig(config);
1815   YGNodeStyleSetAlignItems(root, YGAlignCenter);
1816   YGNodeStyleSetMargin(root, YGEdgeTop, 20);
1817   YGNodeStyleSetWidth(root, 100);
1818   YGNodeStyleSetHeight(root, 100);
1819
1820   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1821   YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);
1822   YGNodeStyleSetFlexShrink(root_child0, 1);
1823   YGNodeInsertChild(root, root_child0, 0);
1824
1825   const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1826   YGNodeStyleSetFlexGrow(root_child0_child0, 1);
1827   YGNodeStyleSetFlexShrink(root_child0_child0, 1);
1828   YGNodeInsertChild(root_child0, root_child0_child0, 0);
1829
1830   const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
1831   YGNodeStyleSetWidth(root_child0_child0_child0, 20);
1832   YGNodeStyleSetHeight(root_child0_child0_child0, 20);
1833   YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
1834   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1835
1836   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1837   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
1838   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1839   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1840
1841   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0));
1842   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1843   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
1844   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
1845
1846   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1847   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1848   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));
1849   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
1850
1851   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
1852   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
1853   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));
1854   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child0));
1855
1856   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1857
1858   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1859   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
1860   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1861   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1862
1863   ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child0));
1864   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1865   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
1866   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
1867
1868   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1869   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1870   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0));
1871   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
1872
1873   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
1874   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
1875   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));
1876   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child0));
1877
1878   YGNodeFreeRecursive(root);
1879
1880   YGConfigFree(config);
1881 }
1882
1883 TEST(YogaTest, align_strech_should_size_based_on_parent) {
1884   const YGConfigRef config = YGConfigNew();
1885
1886   const YGNodeRef root = YGNodeNewWithConfig(config);
1887   YGNodeStyleSetMargin(root, YGEdgeTop, 20);
1888   YGNodeStyleSetWidth(root, 100);
1889   YGNodeStyleSetHeight(root, 100);
1890
1891   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1892   YGNodeStyleSetJustifyContent(root_child0, YGJustifyCenter);
1893   YGNodeStyleSetFlexShrink(root_child0, 1);
1894   YGNodeInsertChild(root, root_child0, 0);
1895
1896   const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1897   YGNodeStyleSetFlexGrow(root_child0_child0, 1);
1898   YGNodeStyleSetFlexShrink(root_child0_child0, 1);
1899   YGNodeInsertChild(root_child0, root_child0_child0, 0);
1900
1901   const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
1902   YGNodeStyleSetWidth(root_child0_child0_child0, 20);
1903   YGNodeStyleSetHeight(root_child0_child0_child0, 20);
1904   YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
1905   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1906
1907   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1908   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
1909   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1910   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1911
1912   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1913   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1914   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
1915   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
1916
1917   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1918   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1919   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
1920   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
1921
1922   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
1923   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
1924   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));
1925   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child0));
1926
1927   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1928
1929   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1930   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root));
1931   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1932   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1933
1934   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1935   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1936   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
1937   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
1938
1939   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1940   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1941   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
1942   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0));
1943
1944   ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0_child0_child0));
1945   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
1946   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0_child0_child0));
1947   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0_child0_child0));
1948
1949   YGNodeFreeRecursive(root);
1950
1951   YGConfigFree(config);
1952 }
1953
1954 TEST(YogaTest, align_flex_start_with_shrinking_children) {
1955   const YGConfigRef config = YGConfigNew();
1956
1957   const YGNodeRef root = YGNodeNewWithConfig(config);
1958   YGNodeStyleSetWidth(root, 500);
1959   YGNodeStyleSetHeight(root, 500);
1960
1961   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1962   YGNodeStyleSetAlignItems(root_child0, YGAlignFlexStart);
1963   YGNodeInsertChild(root, root_child0, 0);
1964
1965   const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1966   YGNodeStyleSetFlexGrow(root_child0_child0, 1);
1967   YGNodeStyleSetFlexShrink(root_child0_child0, 1);
1968   YGNodeInsertChild(root_child0, root_child0_child0, 0);
1969
1970   const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
1971   YGNodeStyleSetFlexGrow(root_child0_child0_child0, 1);
1972   YGNodeStyleSetFlexShrink(root_child0_child0_child0, 1);
1973   YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
1974   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1975
1976   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1977   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1978   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
1979   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
1980
1981   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1982   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1983   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));
1984   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
1985
1986   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1987   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1988   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));
1989   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));
1990
1991   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
1992   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
1993   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));
1994   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));
1995
1996   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1997
1998   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1999   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
2000   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
2001   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
2002
2003   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
2004   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
2005   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));
2006   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
2007
2008   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child0_child0));
2009   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
2010   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));
2011   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));
2012
2013   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
2014   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
2015   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));
2016   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));
2017
2018   YGNodeFreeRecursive(root);
2019
2020   YGConfigFree(config);
2021 }
2022
2023 TEST(YogaTest, align_flex_start_with_stretching_children) {
2024   const YGConfigRef config = YGConfigNew();
2025
2026   const YGNodeRef root = YGNodeNewWithConfig(config);
2027   YGNodeStyleSetWidth(root, 500);
2028   YGNodeStyleSetHeight(root, 500);
2029
2030   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
2031   YGNodeInsertChild(root, root_child0, 0);
2032
2033   const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
2034   YGNodeStyleSetFlexGrow(root_child0_child0, 1);
2035   YGNodeStyleSetFlexShrink(root_child0_child0, 1);
2036   YGNodeInsertChild(root_child0, root_child0_child0, 0);
2037
2038   const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
2039   YGNodeStyleSetFlexGrow(root_child0_child0_child0, 1);
2040   YGNodeStyleSetFlexShrink(root_child0_child0_child0, 1);
2041   YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
2042   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
2043
2044   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
2045   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
2046   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
2047   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
2048
2049   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
2050   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
2051   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));
2052   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
2053
2054   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
2055   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
2056   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0_child0));
2057   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));
2058
2059   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
2060   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
2061   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0_child0_child0));
2062   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));
2063
2064   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
2065
2066   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
2067   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
2068   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
2069   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
2070
2071   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
2072   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
2073   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));
2074   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
2075
2076   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
2077   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
2078   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0_child0));
2079   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));
2080
2081   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
2082   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
2083   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0_child0_child0));
2084   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));
2085
2086   YGNodeFreeRecursive(root);
2087
2088   YGConfigFree(config);
2089 }
2090
2091 TEST(YogaTest, align_flex_start_with_shrinking_children_with_stretch) {
2092   const YGConfigRef config = YGConfigNew();
2093
2094   const YGNodeRef root = YGNodeNewWithConfig(config);
2095   YGNodeStyleSetWidth(root, 500);
2096   YGNodeStyleSetHeight(root, 500);
2097
2098   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
2099   YGNodeStyleSetAlignItems(root_child0, YGAlignFlexStart);
2100   YGNodeInsertChild(root, root_child0, 0);
2101
2102   const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
2103   YGNodeStyleSetFlexGrow(root_child0_child0, 1);
2104   YGNodeStyleSetFlexShrink(root_child0_child0, 1);
2105   YGNodeInsertChild(root_child0, root_child0_child0, 0);
2106
2107   const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
2108   YGNodeStyleSetFlexGrow(root_child0_child0_child0, 1);
2109   YGNodeStyleSetFlexShrink(root_child0_child0_child0, 1);
2110   YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
2111   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
2112
2113   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
2114   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
2115   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
2116   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
2117
2118   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
2119   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
2120   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));
2121   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
2122
2123   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
2124   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
2125   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));
2126   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));
2127
2128   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
2129   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
2130   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));
2131   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));
2132
2133   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
2134
2135   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
2136   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
2137   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
2138   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
2139
2140   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
2141   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
2142   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root_child0));
2143   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
2144
2145   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetLeft(root_child0_child0));
2146   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
2147   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0));
2148   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));
2149
2150   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
2151   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
2152   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0_child0_child0));
2153   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0_child0));
2154
2155   YGNodeFreeRecursive(root);
2156
2157   YGConfigFree(config);
2158 }