Rebase of facebook flexbox to yoga
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-third-party / yoga / YGFlexTest.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/YGFlexTest.html
9
10 #include <gtest/gtest.h>
11 #include <yoga/Yoga.h>
12
13 TEST(YogaTest, flex_basis_flex_grow_column) {
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   YGNodeStyleSetFlexGrow(root_child0, 1);
22   YGNodeStyleSetFlexBasis(root_child0, 50);
23   YGNodeInsertChild(root, root_child0, 0);
24
25   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
26   YGNodeStyleSetFlexGrow(root_child1, 1);
27   YGNodeInsertChild(root, root_child1, 1);
28   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
29
30   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
31   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
32   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
33   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
34
35   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
36   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
37   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
38   ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root_child0));
39
40   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
41   ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child1));
42   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
43   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
44
45   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
46
47   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
48   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
49   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
50   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
51
52   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
53   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
54   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
55   ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root_child0));
56
57   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
58   ASSERT_FLOAT_EQ(75, YGNodeLayoutGetTop(root_child1));
59   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
60   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetHeight(root_child1));
61
62   YGNodeFreeRecursive(root);
63
64   YGConfigFree(config);
65 }
66
67 TEST(YogaTest, flex_basis_flex_grow_row) {
68   const YGConfigRef config = YGConfigNew();
69
70   const YGNodeRef root = YGNodeNewWithConfig(config);
71   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
72   YGNodeStyleSetWidth(root, 100);
73   YGNodeStyleSetHeight(root, 100);
74
75   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
76   YGNodeStyleSetFlexGrow(root_child0, 1);
77   YGNodeStyleSetFlexBasis(root_child0, 50);
78   YGNodeInsertChild(root, root_child0, 0);
79
80   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
81   YGNodeStyleSetFlexGrow(root_child1, 1);
82   YGNodeInsertChild(root, root_child1, 1);
83   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
84
85   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
86   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
87   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
88   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
89
90   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
91   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
92   ASSERT_FLOAT_EQ(75, YGNodeLayoutGetWidth(root_child0));
93   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
94
95   ASSERT_FLOAT_EQ(75, YGNodeLayoutGetLeft(root_child1));
96   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
97   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));
98   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
99
100   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
101
102   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
103   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
104   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
105   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
106
107   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetLeft(root_child0));
108   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
109   ASSERT_FLOAT_EQ(75, YGNodeLayoutGetWidth(root_child0));
110   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
111
112   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
113   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
114   ASSERT_FLOAT_EQ(25, YGNodeLayoutGetWidth(root_child1));
115   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
116
117   YGNodeFreeRecursive(root);
118
119   YGConfigFree(config);
120 }
121
122 TEST(YogaTest, flex_basis_flex_shrink_column) {
123   const YGConfigRef config = YGConfigNew();
124
125   const YGNodeRef root = YGNodeNewWithConfig(config);
126   YGNodeStyleSetWidth(root, 100);
127   YGNodeStyleSetHeight(root, 100);
128
129   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
130   YGNodeStyleSetFlexShrink(root_child0, 1);
131   YGNodeStyleSetFlexBasis(root_child0, 100);
132   YGNodeInsertChild(root, root_child0, 0);
133
134   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
135   YGNodeStyleSetFlexBasis(root_child1, 50);
136   YGNodeInsertChild(root, root_child1, 1);
137   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
138
139   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
140   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
141   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
142   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
143
144   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
145   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
146   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
147   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
148
149   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
150   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
151   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
152   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
153
154   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
155
156   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
157   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
158   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
159   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
160
161   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
162   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
163   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
164   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
165
166   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
167   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
168   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
169   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
170
171   YGNodeFreeRecursive(root);
172
173   YGConfigFree(config);
174 }
175
176 TEST(YogaTest, flex_basis_flex_shrink_row) {
177   const YGConfigRef config = YGConfigNew();
178
179   const YGNodeRef root = YGNodeNewWithConfig(config);
180   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
181   YGNodeStyleSetWidth(root, 100);
182   YGNodeStyleSetHeight(root, 100);
183
184   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
185   YGNodeStyleSetFlexShrink(root_child0, 1);
186   YGNodeStyleSetFlexBasis(root_child0, 100);
187   YGNodeInsertChild(root, root_child0, 0);
188
189   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
190   YGNodeStyleSetFlexBasis(root_child1, 50);
191   YGNodeInsertChild(root, root_child1, 1);
192   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
193
194   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
195   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
196   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
197   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
198
199   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
200   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
201   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
202   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
203
204   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
205   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
206   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
207   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
208
209   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
210
211   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
212   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
213   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
214   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
215
216   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0));
217   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
218   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
219   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
220
221   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
222   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
223   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
224   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
225
226   YGNodeFreeRecursive(root);
227
228   YGConfigFree(config);
229 }
230
231 TEST(YogaTest, flex_shrink_to_zero) {
232   const YGConfigRef config = YGConfigNew();
233
234   const YGNodeRef root = YGNodeNewWithConfig(config);
235   YGNodeStyleSetHeight(root, 75);
236
237   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
238   YGNodeStyleSetWidth(root_child0, 50);
239   YGNodeStyleSetHeight(root_child0, 50);
240   YGNodeInsertChild(root, root_child0, 0);
241
242   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
243   YGNodeStyleSetFlexShrink(root_child1, 1);
244   YGNodeStyleSetWidth(root_child1, 50);
245   YGNodeStyleSetHeight(root_child1, 50);
246   YGNodeInsertChild(root, root_child1, 1);
247
248   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
249   YGNodeStyleSetWidth(root_child2, 50);
250   YGNodeStyleSetHeight(root_child2, 50);
251   YGNodeInsertChild(root, root_child2, 2);
252   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
253
254   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
255   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
256   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));
257   ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root));
258
259   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
260   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
261   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
262   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
263
264   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
265   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
266   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
267   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));
268
269   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
270   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));
271   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));
272   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));
273
274   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
275
276   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
277   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
278   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));
279   ASSERT_FLOAT_EQ(75, YGNodeLayoutGetHeight(root));
280
281   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
282   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
283   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
284   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
285
286   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
287   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
288   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
289   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child1));
290
291   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
292   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));
293   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child2));
294   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));
295
296   YGNodeFreeRecursive(root);
297
298   YGConfigFree(config);
299 }
300
301 TEST(YogaTest, flex_basis_overrides_main_size) {
302   const YGConfigRef config = YGConfigNew();
303
304   const YGNodeRef root = YGNodeNewWithConfig(config);
305   YGNodeStyleSetWidth(root, 100);
306   YGNodeStyleSetHeight(root, 100);
307
308   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
309   YGNodeStyleSetFlexGrow(root_child0, 1);
310   YGNodeStyleSetFlexBasis(root_child0, 50);
311   YGNodeStyleSetHeight(root_child0, 20);
312   YGNodeInsertChild(root, root_child0, 0);
313
314   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
315   YGNodeStyleSetFlexGrow(root_child1, 1);
316   YGNodeStyleSetHeight(root_child1, 10);
317   YGNodeInsertChild(root, root_child1, 1);
318
319   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
320   YGNodeStyleSetFlexGrow(root_child2, 1);
321   YGNodeStyleSetHeight(root_child2, 10);
322   YGNodeInsertChild(root, root_child2, 2);
323   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
324
325   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
326   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
327   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
328   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
329
330   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
331   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
332   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
333   ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
334
335   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
336   ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));
337   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
338   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
339
340   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
341   ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child2));
342   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
343   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));
344
345   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
346
347   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
348   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
349   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
350   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
351
352   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
353   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
354   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
355   ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root_child0));
356
357   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
358   ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));
359   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
360   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
361
362   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
363   ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child2));
364   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
365   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child2));
366
367   YGNodeFreeRecursive(root);
368
369   YGConfigFree(config);
370 }
371
372 TEST(YogaTest, flex_grow_shrink_at_most) {
373   const YGConfigRef config = YGConfigNew();
374
375   const YGNodeRef root = YGNodeNewWithConfig(config);
376   YGNodeStyleSetWidth(root, 100);
377   YGNodeStyleSetHeight(root, 100);
378
379   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
380   YGNodeInsertChild(root, root_child0, 0);
381
382   const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
383   YGNodeStyleSetFlexGrow(root_child0_child0, 1);
384   YGNodeStyleSetFlexShrink(root_child0_child0, 1);
385   YGNodeInsertChild(root_child0, root_child0_child0, 0);
386   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
387
388   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
389   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
390   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
391   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
392
393   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
394   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
395   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
396   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
397
398   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
399   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
400   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
401   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));
402
403   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
404
405   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
406   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
407   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
408   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
409
410   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
411   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
412   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
413   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
414
415   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
416   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
417   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
418   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0_child0));
419
420   YGNodeFreeRecursive(root);
421
422   YGConfigFree(config);
423 }
424
425 TEST(YogaTest, flex_grow_less_than_factor_one) {
426   const YGConfigRef config = YGConfigNew();
427
428   const YGNodeRef root = YGNodeNewWithConfig(config);
429   YGNodeStyleSetWidth(root, 200);
430   YGNodeStyleSetHeight(root, 500);
431
432   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
433   YGNodeStyleSetFlexGrow(root_child0, 0.2f);
434   YGNodeStyleSetFlexBasis(root_child0, 40);
435   YGNodeInsertChild(root, root_child0, 0);
436
437   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
438   YGNodeStyleSetFlexGrow(root_child1, 0.2f);
439   YGNodeInsertChild(root, root_child1, 1);
440
441   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
442   YGNodeStyleSetFlexGrow(root_child2, 0.4f);
443   YGNodeInsertChild(root, root_child2, 2);
444   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
445
446   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
447   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
448   ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
449   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
450
451   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
452   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
453   ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));
454   ASSERT_FLOAT_EQ(132, YGNodeLayoutGetHeight(root_child0));
455
456   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
457   ASSERT_FLOAT_EQ(132, YGNodeLayoutGetTop(root_child1));
458   ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));
459   ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child1));
460
461   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
462   ASSERT_FLOAT_EQ(224, YGNodeLayoutGetTop(root_child2));
463   ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child2));
464   ASSERT_FLOAT_EQ(184, YGNodeLayoutGetHeight(root_child2));
465
466   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
467
468   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
469   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
470   ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
471   ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
472
473   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
474   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
475   ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));
476   ASSERT_FLOAT_EQ(132, YGNodeLayoutGetHeight(root_child0));
477
478   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
479   ASSERT_FLOAT_EQ(132, YGNodeLayoutGetTop(root_child1));
480   ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));
481   ASSERT_FLOAT_EQ(92, YGNodeLayoutGetHeight(root_child1));
482
483   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
484   ASSERT_FLOAT_EQ(224, YGNodeLayoutGetTop(root_child2));
485   ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child2));
486   ASSERT_FLOAT_EQ(184, YGNodeLayoutGetHeight(root_child2));
487
488   YGNodeFreeRecursive(root);
489
490   YGConfigFree(config);
491 }