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