Merge "Add new layouting support for TextLabel and ImageView." into devel/master
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-third-party / yoga / YGJustifyContentTest.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/YGJustifyContentTest.html
9
10 #include <gtest/gtest.h>
11 #include <yoga/Yoga.h>
12
13 TEST(YogaTest, justify_content_row_flex_start) {
14   const YGConfigRef config = YGConfigNew();
15
16   const YGNodeRef root = YGNodeNewWithConfig(config);
17   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
18   YGNodeStyleSetWidth(root, 102);
19   YGNodeStyleSetHeight(root, 102);
20
21   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
22   YGNodeStyleSetWidth(root_child0, 10);
23   YGNodeInsertChild(root, root_child0, 0);
24
25   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
26   YGNodeStyleSetWidth(root_child1, 10);
27   YGNodeInsertChild(root, root_child1, 1);
28
29   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
30   YGNodeStyleSetWidth(root_child2, 10);
31   YGNodeInsertChild(root, root_child2, 2);
32   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
33
34   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
35   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
36   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
37   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
38
39   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
40   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
41   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
42   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));
43
44   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1));
45   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
46   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));
47   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));
48
49   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child2));
50   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
51   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));
52   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));
53
54   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
55
56   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
57   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
58   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
59   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
60
61   ASSERT_FLOAT_EQ(92, YGNodeLayoutGetLeft(root_child0));
62   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
63   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
64   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));
65
66   ASSERT_FLOAT_EQ(82, YGNodeLayoutGetLeft(root_child1));
67   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
68   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));
69   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));
70
71   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetLeft(root_child2));
72   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
73   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));
74   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));
75
76   YGNodeFreeRecursive(root);
77
78   YGConfigFree(config);
79 }
80
81 TEST(YogaTest, justify_content_row_flex_end) {
82   const YGConfigRef config = YGConfigNew();
83
84   const YGNodeRef root = YGNodeNewWithConfig(config);
85   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
86   YGNodeStyleSetJustifyContent(root, YGJustifyFlexEnd);
87   YGNodeStyleSetWidth(root, 102);
88   YGNodeStyleSetHeight(root, 102);
89
90   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
91   YGNodeStyleSetWidth(root_child0, 10);
92   YGNodeInsertChild(root, root_child0, 0);
93
94   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
95   YGNodeStyleSetWidth(root_child1, 10);
96   YGNodeInsertChild(root, root_child1, 1);
97
98   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
99   YGNodeStyleSetWidth(root_child2, 10);
100   YGNodeInsertChild(root, root_child2, 2);
101   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
102
103   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
104   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
105   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
106   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
107
108   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetLeft(root_child0));
109   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
110   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
111   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));
112
113   ASSERT_FLOAT_EQ(82, YGNodeLayoutGetLeft(root_child1));
114   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
115   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));
116   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));
117
118   ASSERT_FLOAT_EQ(92, YGNodeLayoutGetLeft(root_child2));
119   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
120   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));
121   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));
122
123   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
124
125   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
126   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
127   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
128   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
129
130   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetLeft(root_child0));
131   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
132   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
133   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));
134
135   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child1));
136   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
137   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));
138   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));
139
140   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
141   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
142   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));
143   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));
144
145   YGNodeFreeRecursive(root);
146
147   YGConfigFree(config);
148 }
149
150 TEST(YogaTest, justify_content_row_center) {
151   const YGConfigRef config = YGConfigNew();
152
153   const YGNodeRef root = YGNodeNewWithConfig(config);
154   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
155   YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
156   YGNodeStyleSetWidth(root, 102);
157   YGNodeStyleSetHeight(root, 102);
158
159   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
160   YGNodeStyleSetWidth(root_child0, 10);
161   YGNodeInsertChild(root, root_child0, 0);
162
163   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
164   YGNodeStyleSetWidth(root_child1, 10);
165   YGNodeInsertChild(root, root_child1, 1);
166
167   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
168   YGNodeStyleSetWidth(root_child2, 10);
169   YGNodeInsertChild(root, root_child2, 2);
170   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
171
172   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
173   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
174   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
175   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
176
177   ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child0));
178   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
179   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
180   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));
181
182   ASSERT_FLOAT_EQ(46, YGNodeLayoutGetLeft(root_child1));
183   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
184   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));
185   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));
186
187   ASSERT_FLOAT_EQ(56, YGNodeLayoutGetLeft(root_child2));
188   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
189   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));
190   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));
191
192   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
193
194   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
195   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
196   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
197   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
198
199   ASSERT_FLOAT_EQ(56, YGNodeLayoutGetLeft(root_child0));
200   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
201   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
202   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));
203
204   ASSERT_FLOAT_EQ(46, YGNodeLayoutGetLeft(root_child1));
205   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
206   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));
207   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));
208
209   ASSERT_FLOAT_EQ(36, YGNodeLayoutGetLeft(root_child2));
210   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
211   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));
212   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));
213
214   YGNodeFreeRecursive(root);
215
216   YGConfigFree(config);
217 }
218
219 TEST(YogaTest, justify_content_row_space_between) {
220   const YGConfigRef config = YGConfigNew();
221
222   const YGNodeRef root = YGNodeNewWithConfig(config);
223   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
224   YGNodeStyleSetJustifyContent(root, YGJustifySpaceBetween);
225   YGNodeStyleSetWidth(root, 102);
226   YGNodeStyleSetHeight(root, 102);
227
228   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
229   YGNodeStyleSetWidth(root_child0, 10);
230   YGNodeInsertChild(root, root_child0, 0);
231
232   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
233   YGNodeStyleSetWidth(root_child1, 10);
234   YGNodeInsertChild(root, root_child1, 1);
235
236   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
237   YGNodeStyleSetWidth(root_child2, 10);
238   YGNodeInsertChild(root, root_child2, 2);
239   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
240
241   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
242   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
243   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
244   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
245
246   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
247   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
248   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
249   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));
250
251   ASSERT_FLOAT_EQ(46, YGNodeLayoutGetLeft(root_child1));
252   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
253   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));
254   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));
255
256   ASSERT_FLOAT_EQ(92, YGNodeLayoutGetLeft(root_child2));
257   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
258   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));
259   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));
260
261   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
262
263   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
264   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
265   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
266   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
267
268   ASSERT_FLOAT_EQ(92, YGNodeLayoutGetLeft(root_child0));
269   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
270   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
271   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));
272
273   ASSERT_FLOAT_EQ(46, YGNodeLayoutGetLeft(root_child1));
274   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
275   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));
276   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));
277
278   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
279   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
280   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));
281   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));
282
283   YGNodeFreeRecursive(root);
284
285   YGConfigFree(config);
286 }
287
288 TEST(YogaTest, justify_content_row_space_around) {
289   const YGConfigRef config = YGConfigNew();
290
291   const YGNodeRef root = YGNodeNewWithConfig(config);
292   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
293   YGNodeStyleSetJustifyContent(root, YGJustifySpaceAround);
294   YGNodeStyleSetWidth(root, 102);
295   YGNodeStyleSetHeight(root, 102);
296
297   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
298   YGNodeStyleSetWidth(root_child0, 10);
299   YGNodeInsertChild(root, root_child0, 0);
300
301   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
302   YGNodeStyleSetWidth(root_child1, 10);
303   YGNodeInsertChild(root, root_child1, 1);
304
305   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
306   YGNodeStyleSetWidth(root_child2, 10);
307   YGNodeInsertChild(root, root_child2, 2);
308   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
309
310   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
311   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
312   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
313   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
314
315   ASSERT_FLOAT_EQ(12, YGNodeLayoutGetLeft(root_child0));
316   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
317   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
318   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));
319
320   ASSERT_FLOAT_EQ(46, YGNodeLayoutGetLeft(root_child1));
321   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
322   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));
323   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));
324
325   ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child2));
326   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
327   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));
328   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));
329
330   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
331
332   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
333   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
334   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
335   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
336
337   ASSERT_FLOAT_EQ(80, YGNodeLayoutGetLeft(root_child0));
338   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
339   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child0));
340   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child0));
341
342   ASSERT_FLOAT_EQ(46, YGNodeLayoutGetLeft(root_child1));
343   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
344   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child1));
345   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child1));
346
347   ASSERT_FLOAT_EQ(12, YGNodeLayoutGetLeft(root_child2));
348   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
349   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetWidth(root_child2));
350   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root_child2));
351
352   YGNodeFreeRecursive(root);
353
354   YGConfigFree(config);
355 }
356
357 TEST(YogaTest, justify_content_column_flex_start) {
358   const YGConfigRef config = YGConfigNew();
359
360   const YGNodeRef root = YGNodeNewWithConfig(config);
361   YGNodeStyleSetWidth(root, 102);
362   YGNodeStyleSetHeight(root, 102);
363
364   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
365   YGNodeStyleSetHeight(root_child0, 10);
366   YGNodeInsertChild(root, root_child0, 0);
367
368   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
369   YGNodeStyleSetHeight(root_child1, 10);
370   YGNodeInsertChild(root, root_child1, 1);
371
372   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
373   YGNodeStyleSetHeight(root_child2, 10);
374   YGNodeInsertChild(root, root_child2, 2);
375   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
376
377   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
378   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
379   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
380   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
381
382   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
383   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
384   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));
385   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
386
387   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
388   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));
389   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));
390   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
391
392   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
393   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));
394   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));
395   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));
396
397   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
398
399   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
400   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
401   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
402   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
403
404   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
405   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
406   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));
407   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
408
409   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
410   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));
411   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));
412   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
413
414   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
415   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));
416   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));
417   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));
418
419   YGNodeFreeRecursive(root);
420
421   YGConfigFree(config);
422 }
423
424 TEST(YogaTest, justify_content_column_flex_end) {
425   const YGConfigRef config = YGConfigNew();
426
427   const YGNodeRef root = YGNodeNewWithConfig(config);
428   YGNodeStyleSetJustifyContent(root, YGJustifyFlexEnd);
429   YGNodeStyleSetWidth(root, 102);
430   YGNodeStyleSetHeight(root, 102);
431
432   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
433   YGNodeStyleSetHeight(root_child0, 10);
434   YGNodeInsertChild(root, root_child0, 0);
435
436   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
437   YGNodeStyleSetHeight(root_child1, 10);
438   YGNodeInsertChild(root, root_child1, 1);
439
440   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
441   YGNodeStyleSetHeight(root_child2, 10);
442   YGNodeInsertChild(root, root_child2, 2);
443   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
444
445   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
446   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
447   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
448   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
449
450   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
451   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetTop(root_child0));
452   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));
453   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
454
455   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
456   ASSERT_FLOAT_EQ(82, YGNodeLayoutGetTop(root_child1));
457   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));
458   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
459
460   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
461   ASSERT_FLOAT_EQ(92, YGNodeLayoutGetTop(root_child2));
462   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));
463   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));
464
465   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
466
467   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
468   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
469   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
470   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
471
472   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
473   ASSERT_FLOAT_EQ(72, YGNodeLayoutGetTop(root_child0));
474   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));
475   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
476
477   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
478   ASSERT_FLOAT_EQ(82, YGNodeLayoutGetTop(root_child1));
479   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));
480   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
481
482   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
483   ASSERT_FLOAT_EQ(92, YGNodeLayoutGetTop(root_child2));
484   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));
485   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));
486
487   YGNodeFreeRecursive(root);
488
489   YGConfigFree(config);
490 }
491
492 TEST(YogaTest, justify_content_column_center) {
493   const YGConfigRef config = YGConfigNew();
494
495   const YGNodeRef root = YGNodeNewWithConfig(config);
496   YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
497   YGNodeStyleSetWidth(root, 102);
498   YGNodeStyleSetHeight(root, 102);
499
500   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
501   YGNodeStyleSetHeight(root_child0, 10);
502   YGNodeInsertChild(root, root_child0, 0);
503
504   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
505   YGNodeStyleSetHeight(root_child1, 10);
506   YGNodeInsertChild(root, root_child1, 1);
507
508   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
509   YGNodeStyleSetHeight(root_child2, 10);
510   YGNodeInsertChild(root, root_child2, 2);
511   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
512
513   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
514   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
515   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
516   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
517
518   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
519   ASSERT_FLOAT_EQ(36, YGNodeLayoutGetTop(root_child0));
520   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));
521   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
522
523   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
524   ASSERT_FLOAT_EQ(46, YGNodeLayoutGetTop(root_child1));
525   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));
526   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
527
528   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
529   ASSERT_FLOAT_EQ(56, YGNodeLayoutGetTop(root_child2));
530   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));
531   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));
532
533   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
534
535   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
536   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
537   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
538   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
539
540   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
541   ASSERT_FLOAT_EQ(36, YGNodeLayoutGetTop(root_child0));
542   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));
543   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
544
545   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
546   ASSERT_FLOAT_EQ(46, YGNodeLayoutGetTop(root_child1));
547   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));
548   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
549
550   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
551   ASSERT_FLOAT_EQ(56, YGNodeLayoutGetTop(root_child2));
552   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));
553   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));
554
555   YGNodeFreeRecursive(root);
556
557   YGConfigFree(config);
558 }
559
560 TEST(YogaTest, justify_content_column_space_between) {
561   const YGConfigRef config = YGConfigNew();
562
563   const YGNodeRef root = YGNodeNewWithConfig(config);
564   YGNodeStyleSetJustifyContent(root, YGJustifySpaceBetween);
565   YGNodeStyleSetWidth(root, 102);
566   YGNodeStyleSetHeight(root, 102);
567
568   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
569   YGNodeStyleSetHeight(root_child0, 10);
570   YGNodeInsertChild(root, root_child0, 0);
571
572   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
573   YGNodeStyleSetHeight(root_child1, 10);
574   YGNodeInsertChild(root, root_child1, 1);
575
576   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
577   YGNodeStyleSetHeight(root_child2, 10);
578   YGNodeInsertChild(root, root_child2, 2);
579   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
580
581   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
582   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
583   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
584   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
585
586   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
587   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
588   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));
589   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
590
591   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
592   ASSERT_FLOAT_EQ(46, YGNodeLayoutGetTop(root_child1));
593   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));
594   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
595
596   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
597   ASSERT_FLOAT_EQ(92, YGNodeLayoutGetTop(root_child2));
598   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));
599   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));
600
601   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
602
603   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
604   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
605   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
606   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
607
608   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
609   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
610   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));
611   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
612
613   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
614   ASSERT_FLOAT_EQ(46, YGNodeLayoutGetTop(root_child1));
615   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));
616   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
617
618   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
619   ASSERT_FLOAT_EQ(92, YGNodeLayoutGetTop(root_child2));
620   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));
621   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));
622
623   YGNodeFreeRecursive(root);
624
625   YGConfigFree(config);
626 }
627
628 TEST(YogaTest, justify_content_column_space_around) {
629   const YGConfigRef config = YGConfigNew();
630
631   const YGNodeRef root = YGNodeNewWithConfig(config);
632   YGNodeStyleSetJustifyContent(root, YGJustifySpaceAround);
633   YGNodeStyleSetWidth(root, 102);
634   YGNodeStyleSetHeight(root, 102);
635
636   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
637   YGNodeStyleSetHeight(root_child0, 10);
638   YGNodeInsertChild(root, root_child0, 0);
639
640   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
641   YGNodeStyleSetHeight(root_child1, 10);
642   YGNodeInsertChild(root, root_child1, 1);
643
644   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
645   YGNodeStyleSetHeight(root_child2, 10);
646   YGNodeInsertChild(root, root_child2, 2);
647   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
648
649   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
650   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
651   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
652   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
653
654   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
655   ASSERT_FLOAT_EQ(12, YGNodeLayoutGetTop(root_child0));
656   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));
657   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
658
659   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
660   ASSERT_FLOAT_EQ(46, YGNodeLayoutGetTop(root_child1));
661   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));
662   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
663
664   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
665   ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child2));
666   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));
667   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));
668
669   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
670
671   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
672   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
673   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
674   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
675
676   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
677   ASSERT_FLOAT_EQ(12, YGNodeLayoutGetTop(root_child0));
678   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));
679   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
680
681   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
682   ASSERT_FLOAT_EQ(46, YGNodeLayoutGetTop(root_child1));
683   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));
684   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
685
686   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
687   ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child2));
688   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));
689   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));
690
691   YGNodeFreeRecursive(root);
692
693   YGConfigFree(config);
694 }
695
696 TEST(YogaTest, justify_content_row_min_width_and_margin) {
697   const YGConfigRef config = YGConfigNew();
698
699   const YGNodeRef root = YGNodeNewWithConfig(config);
700   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
701   YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
702   YGNodeStyleSetMargin(root, YGEdgeLeft, 100);
703   YGNodeStyleSetMinWidth(root, 50);
704
705   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
706   YGNodeStyleSetWidth(root_child0, 20);
707   YGNodeStyleSetHeight(root_child0, 20);
708   YGNodeInsertChild(root, root_child0, 0);
709   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
710
711   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root));
712   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
713   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));
714   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));
715
716   ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0));
717   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
718   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
719   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
720
721   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
722
723   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root));
724   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
725   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root));
726   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));
727
728   ASSERT_FLOAT_EQ(15, YGNodeLayoutGetLeft(root_child0));
729   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
730   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
731   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
732
733   YGNodeFreeRecursive(root);
734
735   YGConfigFree(config);
736 }
737
738 TEST(YogaTest, justify_content_row_max_width_and_margin) {
739   const YGConfigRef config = YGConfigNew();
740
741   const YGNodeRef root = YGNodeNewWithConfig(config);
742   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
743   YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
744   YGNodeStyleSetMargin(root, YGEdgeLeft, 100);
745   YGNodeStyleSetWidth(root, 100);
746   YGNodeStyleSetMaxWidth(root, 80);
747
748   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
749   YGNodeStyleSetWidth(root_child0, 20);
750   YGNodeStyleSetHeight(root_child0, 20);
751   YGNodeInsertChild(root, root_child0, 0);
752   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
753
754   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root));
755   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
756   ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));
757   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));
758
759   ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0));
760   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
761   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
762   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
763
764   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
765
766   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root));
767   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
768   ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root));
769   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root));
770
771   ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0));
772   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
773   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
774   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
775
776   YGNodeFreeRecursive(root);
777
778   YGConfigFree(config);
779 }
780
781 TEST(YogaTest, justify_content_column_min_height_and_margin) {
782   const YGConfigRef config = YGConfigNew();
783
784   const YGNodeRef root = YGNodeNewWithConfig(config);
785   YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
786   YGNodeStyleSetMargin(root, YGEdgeTop, 100);
787   YGNodeStyleSetMinHeight(root, 50);
788
789   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
790   YGNodeStyleSetWidth(root_child0, 20);
791   YGNodeStyleSetHeight(root_child0, 20);
792   YGNodeInsertChild(root, root_child0, 0);
793   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
794
795   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
796   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root));
797   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root));
798   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));
799
800   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
801   ASSERT_FLOAT_EQ(15, YGNodeLayoutGetTop(root_child0));
802   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
803   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
804
805   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
806
807   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
808   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root));
809   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root));
810   ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));
811
812   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
813   ASSERT_FLOAT_EQ(15, YGNodeLayoutGetTop(root_child0));
814   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
815   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
816
817   YGNodeFreeRecursive(root);
818
819   YGConfigFree(config);
820 }
821
822 TEST(YogaTest, justify_content_colunn_max_height_and_margin) {
823   const YGConfigRef config = YGConfigNew();
824
825   const YGNodeRef root = YGNodeNewWithConfig(config);
826   YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
827   YGNodeStyleSetMargin(root, YGEdgeTop, 100);
828   YGNodeStyleSetHeight(root, 100);
829   YGNodeStyleSetMaxHeight(root, 80);
830
831   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
832   YGNodeStyleSetWidth(root_child0, 20);
833   YGNodeStyleSetHeight(root_child0, 20);
834   YGNodeInsertChild(root, root_child0, 0);
835   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
836
837   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
838   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root));
839   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root));
840   ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));
841
842   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
843   ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));
844   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
845   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
846
847   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
848
849   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
850   ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root));
851   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root));
852   ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));
853
854   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
855   ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));
856   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetWidth(root_child0));
857   ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child0));
858
859   YGNodeFreeRecursive(root);
860
861   YGConfigFree(config);
862 }
863
864 TEST(YogaTest, justify_content_column_space_evenly) {
865   const YGConfigRef config = YGConfigNew();
866
867   const YGNodeRef root = YGNodeNewWithConfig(config);
868   YGNodeStyleSetJustifyContent(root, YGJustifySpaceEvenly);
869   YGNodeStyleSetWidth(root, 102);
870   YGNodeStyleSetHeight(root, 102);
871
872   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
873   YGNodeStyleSetHeight(root_child0, 10);
874   YGNodeInsertChild(root, root_child0, 0);
875
876   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
877   YGNodeStyleSetHeight(root_child1, 10);
878   YGNodeInsertChild(root, root_child1, 1);
879
880   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
881   YGNodeStyleSetHeight(root_child2, 10);
882   YGNodeInsertChild(root, root_child2, 2);
883   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
884
885   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
886   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
887   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
888   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
889
890   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
891   ASSERT_FLOAT_EQ(18, YGNodeLayoutGetTop(root_child0));
892   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));
893   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
894
895   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
896   ASSERT_FLOAT_EQ(46, YGNodeLayoutGetTop(root_child1));
897   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));
898   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
899
900   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
901   ASSERT_FLOAT_EQ(74, YGNodeLayoutGetTop(root_child2));
902   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));
903   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));
904
905   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
906
907   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
908   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
909   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
910   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
911
912   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
913   ASSERT_FLOAT_EQ(18, YGNodeLayoutGetTop(root_child0));
914   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child0));
915   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
916
917   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
918   ASSERT_FLOAT_EQ(46, YGNodeLayoutGetTop(root_child1));
919   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child1));
920   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
921
922   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
923   ASSERT_FLOAT_EQ(74, YGNodeLayoutGetTop(root_child2));
924   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root_child2));
925   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));
926
927   YGNodeFreeRecursive(root);
928
929   YGConfigFree(config);
930 }
931
932 TEST(YogaTest, justify_content_row_space_evenly) {
933   const YGConfigRef config = YGConfigNew();
934
935   const YGNodeRef root = YGNodeNewWithConfig(config);
936   YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
937   YGNodeStyleSetJustifyContent(root, YGJustifySpaceEvenly);
938   YGNodeStyleSetWidth(root, 102);
939   YGNodeStyleSetHeight(root, 102);
940
941   const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
942   YGNodeStyleSetHeight(root_child0, 10);
943   YGNodeInsertChild(root, root_child0, 0);
944
945   const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
946   YGNodeStyleSetHeight(root_child1, 10);
947   YGNodeInsertChild(root, root_child1, 1);
948
949   const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
950   YGNodeStyleSetHeight(root_child2, 10);
951   YGNodeInsertChild(root, root_child2, 2);
952   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
953
954   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
955   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
956   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
957   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
958
959   ASSERT_FLOAT_EQ(26, YGNodeLayoutGetLeft(root_child0));
960   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
961   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));
962   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
963
964   ASSERT_FLOAT_EQ(51, YGNodeLayoutGetLeft(root_child1));
965   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
966   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));
967   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
968
969   ASSERT_FLOAT_EQ(77, YGNodeLayoutGetLeft(root_child2));
970   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
971   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child2));
972   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));
973
974   YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
975
976   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
977   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
978   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetWidth(root));
979   ASSERT_FLOAT_EQ(102, YGNodeLayoutGetHeight(root));
980
981   ASSERT_FLOAT_EQ(77, YGNodeLayoutGetLeft(root_child0));
982   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
983   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));
984   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
985
986   ASSERT_FLOAT_EQ(51, YGNodeLayoutGetLeft(root_child1));
987   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
988   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child1));
989   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child1));
990
991   ASSERT_FLOAT_EQ(26, YGNodeLayoutGetLeft(root_child2));
992   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
993   ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child2));
994   ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child2));
995
996   YGNodeFreeRecursive(root);
997
998   YGConfigFree(config);
999 }