2 * Copyright (c) 2014-present, Facebook, Inc.
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
8 // @Generated by gentest/gentest.rb from gentest/fixtures/YGFlexWrapTest.html
10 #include <gtest/gtest.h>
11 #include <yoga/Yoga.h>
13 TEST(YogaTest, wrap_column) {
14 const YGConfigRef config = YGConfigNew();
16 const YGNodeRef root = YGNodeNewWithConfig(config);
17 YGNodeStyleSetFlexWrap(root, YGWrapWrap);
18 YGNodeStyleSetHeight(root, 100);
20 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
21 YGNodeStyleSetWidth(root_child0, 30);
22 YGNodeStyleSetHeight(root_child0, 30);
23 YGNodeInsertChild(root, root_child0, 0);
25 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
26 YGNodeStyleSetWidth(root_child1, 30);
27 YGNodeStyleSetHeight(root_child1, 30);
28 YGNodeInsertChild(root, root_child1, 1);
30 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
31 YGNodeStyleSetWidth(root_child2, 30);
32 YGNodeStyleSetHeight(root_child2, 30);
33 YGNodeInsertChild(root, root_child2, 2);
35 const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
36 YGNodeStyleSetWidth(root_child3, 30);
37 YGNodeStyleSetHeight(root_child3, 30);
38 YGNodeInsertChild(root, root_child3, 3);
39 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
41 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
42 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
43 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));
44 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
46 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
47 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
48 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
49 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));
51 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
52 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));
53 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
54 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1));
56 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
57 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child2));
58 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
59 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
61 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child3));
62 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));
63 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
64 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child3));
66 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
68 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
69 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
70 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetWidth(root));
71 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
73 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0));
74 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
75 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
76 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));
78 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));
79 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));
80 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
81 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1));
83 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child2));
84 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child2));
85 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
86 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
88 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
89 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child3));
90 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
91 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child3));
93 YGNodeFreeRecursive(root);
98 TEST(YogaTest, wrap_row) {
99 const YGConfigRef config = YGConfigNew();
101 const YGNodeRef root = YGNodeNewWithConfig(config);
102 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
103 YGNodeStyleSetFlexWrap(root, YGWrapWrap);
104 YGNodeStyleSetWidth(root, 100);
106 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
107 YGNodeStyleSetWidth(root_child0, 30);
108 YGNodeStyleSetHeight(root_child0, 30);
109 YGNodeInsertChild(root, root_child0, 0);
111 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
112 YGNodeStyleSetWidth(root_child1, 30);
113 YGNodeStyleSetHeight(root_child1, 30);
114 YGNodeInsertChild(root, root_child1, 1);
116 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
117 YGNodeStyleSetWidth(root_child2, 30);
118 YGNodeStyleSetHeight(root_child2, 30);
119 YGNodeInsertChild(root, root_child2, 2);
121 const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
122 YGNodeStyleSetWidth(root_child3, 30);
123 YGNodeStyleSetHeight(root_child3, 30);
124 YGNodeInsertChild(root, root_child3, 3);
125 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
127 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
128 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
129 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
130 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root));
132 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
133 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
134 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
135 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));
137 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));
138 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
139 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
140 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1));
142 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));
143 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
144 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
145 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
147 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
148 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));
149 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
150 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child3));
152 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
154 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
155 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
156 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
157 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root));
159 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0));
160 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
161 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
162 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child0));
164 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));
165 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
166 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
167 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child1));
169 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));
170 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
171 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
172 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
174 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));
175 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));
176 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
177 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child3));
179 YGNodeFreeRecursive(root);
181 YGConfigFree(config);
184 TEST(YogaTest, wrap_row_align_items_flex_end) {
185 const YGConfigRef config = YGConfigNew();
187 const YGNodeRef root = YGNodeNewWithConfig(config);
188 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
189 YGNodeStyleSetAlignItems(root, YGAlignFlexEnd);
190 YGNodeStyleSetFlexWrap(root, YGWrapWrap);
191 YGNodeStyleSetWidth(root, 100);
193 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
194 YGNodeStyleSetWidth(root_child0, 30);
195 YGNodeStyleSetHeight(root_child0, 10);
196 YGNodeInsertChild(root, root_child0, 0);
198 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
199 YGNodeStyleSetWidth(root_child1, 30);
200 YGNodeStyleSetHeight(root_child1, 20);
201 YGNodeInsertChild(root, root_child1, 1);
203 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
204 YGNodeStyleSetWidth(root_child2, 30);
205 YGNodeStyleSetHeight(root_child2, 30);
206 YGNodeInsertChild(root, root_child2, 2);
208 const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
209 YGNodeStyleSetWidth(root_child3, 30);
210 YGNodeStyleSetHeight(root_child3, 30);
211 YGNodeInsertChild(root, root_child3, 3);
212 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
214 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
215 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
216 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
217 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root));
219 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
220 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));
221 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
222 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
224 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));
225 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));
226 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
227 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
229 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));
230 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
231 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
232 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
234 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
235 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));
236 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
237 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child3));
239 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
241 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
242 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
243 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
244 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root));
246 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0));
247 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child0));
248 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
249 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
251 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));
252 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));
253 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
254 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
256 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));
257 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
258 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
259 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
261 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));
262 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));
263 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
264 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child3));
266 YGNodeFreeRecursive(root);
268 YGConfigFree(config);
271 TEST(YogaTest, wrap_row_align_items_center) {
272 const YGConfigRef config = YGConfigNew();
274 const YGNodeRef root = YGNodeNewWithConfig(config);
275 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
276 YGNodeStyleSetAlignItems(root, YGAlignCenter);
277 YGNodeStyleSetFlexWrap(root, YGWrapWrap);
278 YGNodeStyleSetWidth(root, 100);
280 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
281 YGNodeStyleSetWidth(root_child0, 30);
282 YGNodeStyleSetHeight(root_child0, 10);
283 YGNodeInsertChild(root, root_child0, 0);
285 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
286 YGNodeStyleSetWidth(root_child1, 30);
287 YGNodeStyleSetHeight(root_child1, 20);
288 YGNodeInsertChild(root, root_child1, 1);
290 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
291 YGNodeStyleSetWidth(root_child2, 30);
292 YGNodeStyleSetHeight(root_child2, 30);
293 YGNodeInsertChild(root, root_child2, 2);
295 const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
296 YGNodeStyleSetWidth(root_child3, 30);
297 YGNodeStyleSetHeight(root_child3, 30);
298 YGNodeInsertChild(root, root_child3, 3);
299 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
301 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
302 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
303 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
304 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root));
306 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
307 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));
308 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
309 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
311 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));
312 ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child1));
313 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
314 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
316 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));
317 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
318 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
319 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
321 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
322 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));
323 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
324 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child3));
326 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
328 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
329 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
330 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
331 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetHeight(root));
333 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0));
334 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child0));
335 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
336 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
338 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));
339 ASSERT_FLOAT_EQ(5, YGNodeLayoutGetTop(root_child1));
340 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
341 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
343 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));
344 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child2));
345 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
346 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
348 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));
349 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child3));
350 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
351 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child3));
353 YGNodeFreeRecursive(root);
355 YGConfigFree(config);
358 TEST(YogaTest, flex_wrap_children_with_min_main_overriding_flex_basis) {
359 const YGConfigRef config = YGConfigNew();
361 const YGNodeRef root = YGNodeNewWithConfig(config);
362 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
363 YGNodeStyleSetFlexWrap(root, YGWrapWrap);
364 YGNodeStyleSetWidth(root, 100);
366 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
367 YGNodeStyleSetFlexBasis(root_child0, 50);
368 YGNodeStyleSetMinWidth(root_child0, 55);
369 YGNodeStyleSetHeight(root_child0, 50);
370 YGNodeInsertChild(root, root_child0, 0);
372 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
373 YGNodeStyleSetFlexBasis(root_child1, 50);
374 YGNodeStyleSetMinWidth(root_child1, 55);
375 YGNodeStyleSetHeight(root_child1, 50);
376 YGNodeInsertChild(root, root_child1, 1);
377 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
379 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
380 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
381 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
382 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
384 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
385 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
386 ASSERT_FLOAT_EQ(55, YGNodeLayoutGetWidth(root_child0));
387 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
389 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
390 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
391 ASSERT_FLOAT_EQ(55, YGNodeLayoutGetWidth(root_child1));
392 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
394 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
396 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
397 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
398 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
399 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
401 ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0));
402 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
403 ASSERT_FLOAT_EQ(55, YGNodeLayoutGetWidth(root_child0));
404 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
406 ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child1));
407 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child1));
408 ASSERT_FLOAT_EQ(55, YGNodeLayoutGetWidth(root_child1));
409 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
411 YGNodeFreeRecursive(root);
413 YGConfigFree(config);
416 TEST(YogaTest, flex_wrap_wrap_to_child_height) {
417 const YGConfigRef config = YGConfigNew();
419 const YGNodeRef root = YGNodeNewWithConfig(config);
421 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
422 YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);
423 YGNodeStyleSetAlignItems(root_child0, YGAlignFlexStart);
424 YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);
425 YGNodeInsertChild(root, root_child0, 0);
427 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
428 YGNodeStyleSetWidth(root_child0_child0, 100);
429 YGNodeInsertChild(root_child0, root_child0_child0, 0);
431 const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
432 YGNodeStyleSetWidth(root_child0_child0_child0, 100);
433 YGNodeStyleSetHeight(root_child0_child0_child0, 100);
434 YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
436 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
437 YGNodeStyleSetWidth(root_child1, 100);
438 YGNodeStyleSetHeight(root_child1, 100);
439 YGNodeInsertChild(root, root_child1, 1);
440 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
442 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
443 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
444 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
445 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));
447 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
448 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
449 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
450 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
452 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
453 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
454 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
455 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));
457 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
458 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
459 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0));
460 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0));
462 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
463 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));
464 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
465 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
467 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
469 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
470 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
471 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
472 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));
474 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
475 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
476 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
477 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
479 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
480 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
481 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0));
482 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0));
484 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
485 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
486 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0_child0_child0));
487 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0_child0_child0));
489 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
490 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetTop(root_child1));
491 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child1));
492 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
494 YGNodeFreeRecursive(root);
496 YGConfigFree(config);
499 TEST(YogaTest, flex_wrap_align_stretch_fits_one_row) {
500 const YGConfigRef config = YGConfigNew();
502 const YGNodeRef root = YGNodeNewWithConfig(config);
503 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
504 YGNodeStyleSetFlexWrap(root, YGWrapWrap);
505 YGNodeStyleSetWidth(root, 150);
506 YGNodeStyleSetHeight(root, 100);
508 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
509 YGNodeStyleSetWidth(root_child0, 50);
510 YGNodeInsertChild(root, root_child0, 0);
512 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
513 YGNodeStyleSetWidth(root_child1, 50);
514 YGNodeInsertChild(root, root_child1, 1);
515 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
517 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
518 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
519 ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));
520 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
522 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
523 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
524 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
525 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
527 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
528 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
529 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
530 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
532 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
534 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
535 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
536 ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root));
537 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
539 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetLeft(root_child0));
540 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
541 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child0));
542 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child0));
544 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
545 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child1));
546 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
547 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
549 YGNodeFreeRecursive(root);
551 YGConfigFree(config);
554 TEST(YogaTest, wrap_reverse_row_align_content_flex_start) {
555 const YGConfigRef config = YGConfigNew();
557 const YGNodeRef root = YGNodeNewWithConfig(config);
558 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
559 YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);
560 YGNodeStyleSetWidth(root, 100);
562 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
563 YGNodeStyleSetWidth(root_child0, 30);
564 YGNodeStyleSetHeight(root_child0, 10);
565 YGNodeInsertChild(root, root_child0, 0);
567 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
568 YGNodeStyleSetWidth(root_child1, 30);
569 YGNodeStyleSetHeight(root_child1, 20);
570 YGNodeInsertChild(root, root_child1, 1);
572 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
573 YGNodeStyleSetWidth(root_child2, 30);
574 YGNodeStyleSetHeight(root_child2, 30);
575 YGNodeInsertChild(root, root_child2, 2);
577 const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
578 YGNodeStyleSetWidth(root_child3, 30);
579 YGNodeStyleSetHeight(root_child3, 40);
580 YGNodeInsertChild(root, root_child3, 3);
582 const YGNodeRef root_child4 = YGNodeNewWithConfig(config);
583 YGNodeStyleSetWidth(root_child4, 30);
584 YGNodeStyleSetHeight(root_child4, 50);
585 YGNodeInsertChild(root, root_child4, 4);
586 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
588 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
589 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
590 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
591 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));
593 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
594 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child0));
595 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
596 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
598 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));
599 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));
600 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
601 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
603 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));
604 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));
605 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
606 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
608 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
609 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));
610 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
611 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));
613 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));
614 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));
615 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));
616 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));
618 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
620 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
621 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
622 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
623 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));
625 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0));
626 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child0));
627 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
628 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
630 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));
631 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));
632 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
633 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
635 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));
636 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));
637 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
638 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
640 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));
641 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));
642 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
643 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));
645 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child4));
646 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));
647 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));
648 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));
650 YGNodeFreeRecursive(root);
652 YGConfigFree(config);
655 TEST(YogaTest, wrap_reverse_row_align_content_center) {
656 const YGConfigRef config = YGConfigNew();
658 const YGNodeRef root = YGNodeNewWithConfig(config);
659 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
660 YGNodeStyleSetAlignContent(root, YGAlignCenter);
661 YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);
662 YGNodeStyleSetWidth(root, 100);
664 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
665 YGNodeStyleSetWidth(root_child0, 30);
666 YGNodeStyleSetHeight(root_child0, 10);
667 YGNodeInsertChild(root, root_child0, 0);
669 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
670 YGNodeStyleSetWidth(root_child1, 30);
671 YGNodeStyleSetHeight(root_child1, 20);
672 YGNodeInsertChild(root, root_child1, 1);
674 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
675 YGNodeStyleSetWidth(root_child2, 30);
676 YGNodeStyleSetHeight(root_child2, 30);
677 YGNodeInsertChild(root, root_child2, 2);
679 const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
680 YGNodeStyleSetWidth(root_child3, 30);
681 YGNodeStyleSetHeight(root_child3, 40);
682 YGNodeInsertChild(root, root_child3, 3);
684 const YGNodeRef root_child4 = YGNodeNewWithConfig(config);
685 YGNodeStyleSetWidth(root_child4, 30);
686 YGNodeStyleSetHeight(root_child4, 50);
687 YGNodeInsertChild(root, root_child4, 4);
688 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
690 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
691 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
692 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
693 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));
695 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
696 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child0));
697 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
698 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
700 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));
701 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));
702 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
703 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
705 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));
706 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));
707 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
708 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
710 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
711 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));
712 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
713 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));
715 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));
716 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));
717 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));
718 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));
720 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
722 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
723 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
724 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
725 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));
727 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0));
728 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child0));
729 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
730 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
732 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));
733 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));
734 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
735 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
737 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));
738 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));
739 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
740 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
742 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));
743 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));
744 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
745 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));
747 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child4));
748 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));
749 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));
750 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));
752 YGNodeFreeRecursive(root);
754 YGConfigFree(config);
757 TEST(YogaTest, wrap_reverse_row_single_line_different_size) {
758 const YGConfigRef config = YGConfigNew();
760 const YGNodeRef root = YGNodeNewWithConfig(config);
761 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
762 YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);
763 YGNodeStyleSetWidth(root, 300);
765 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
766 YGNodeStyleSetWidth(root_child0, 30);
767 YGNodeStyleSetHeight(root_child0, 10);
768 YGNodeInsertChild(root, root_child0, 0);
770 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
771 YGNodeStyleSetWidth(root_child1, 30);
772 YGNodeStyleSetHeight(root_child1, 20);
773 YGNodeInsertChild(root, root_child1, 1);
775 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
776 YGNodeStyleSetWidth(root_child2, 30);
777 YGNodeStyleSetHeight(root_child2, 30);
778 YGNodeInsertChild(root, root_child2, 2);
780 const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
781 YGNodeStyleSetWidth(root_child3, 30);
782 YGNodeStyleSetHeight(root_child3, 40);
783 YGNodeInsertChild(root, root_child3, 3);
785 const YGNodeRef root_child4 = YGNodeNewWithConfig(config);
786 YGNodeStyleSetWidth(root_child4, 30);
787 YGNodeStyleSetHeight(root_child4, 50);
788 YGNodeInsertChild(root, root_child4, 4);
789 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
791 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
792 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
793 ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));
794 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));
796 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
797 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0));
798 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
799 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
801 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));
802 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));
803 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
804 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
806 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));
807 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));
808 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
809 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
811 ASSERT_FLOAT_EQ(90, YGNodeLayoutGetLeft(root_child3));
812 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));
813 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
814 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));
816 ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child4));
817 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));
818 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));
819 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));
821 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
823 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
824 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
825 ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));
826 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root));
828 ASSERT_FLOAT_EQ(270, YGNodeLayoutGetLeft(root_child0));
829 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0));
830 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
831 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
833 ASSERT_FLOAT_EQ(240, YGNodeLayoutGetLeft(root_child1));
834 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child1));
835 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
836 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
838 ASSERT_FLOAT_EQ(210, YGNodeLayoutGetLeft(root_child2));
839 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetTop(root_child2));
840 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
841 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
843 ASSERT_FLOAT_EQ(180, YGNodeLayoutGetLeft(root_child3));
844 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));
845 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
846 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));
848 ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child4));
849 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));
850 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));
851 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));
853 YGNodeFreeRecursive(root);
855 YGConfigFree(config);
858 TEST(YogaTest, wrap_reverse_row_align_content_stretch) {
859 const YGConfigRef config = YGConfigNew();
861 const YGNodeRef root = YGNodeNewWithConfig(config);
862 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
863 YGNodeStyleSetAlignContent(root, YGAlignStretch);
864 YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);
865 YGNodeStyleSetWidth(root, 100);
867 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
868 YGNodeStyleSetWidth(root_child0, 30);
869 YGNodeStyleSetHeight(root_child0, 10);
870 YGNodeInsertChild(root, root_child0, 0);
872 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
873 YGNodeStyleSetWidth(root_child1, 30);
874 YGNodeStyleSetHeight(root_child1, 20);
875 YGNodeInsertChild(root, root_child1, 1);
877 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
878 YGNodeStyleSetWidth(root_child2, 30);
879 YGNodeStyleSetHeight(root_child2, 30);
880 YGNodeInsertChild(root, root_child2, 2);
882 const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
883 YGNodeStyleSetWidth(root_child3, 30);
884 YGNodeStyleSetHeight(root_child3, 40);
885 YGNodeInsertChild(root, root_child3, 3);
887 const YGNodeRef root_child4 = YGNodeNewWithConfig(config);
888 YGNodeStyleSetWidth(root_child4, 30);
889 YGNodeStyleSetHeight(root_child4, 50);
890 YGNodeInsertChild(root, root_child4, 4);
891 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
893 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
894 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
895 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
896 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));
898 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
899 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child0));
900 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
901 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
903 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));
904 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));
905 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
906 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
908 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));
909 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));
910 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
911 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
913 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
914 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));
915 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
916 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));
918 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));
919 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));
920 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));
921 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));
923 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
925 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
926 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
927 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
928 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));
930 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0));
931 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child0));
932 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
933 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
935 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));
936 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));
937 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
938 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
940 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));
941 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));
942 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
943 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
945 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));
946 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));
947 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
948 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));
950 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child4));
951 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));
952 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));
953 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));
955 YGNodeFreeRecursive(root);
957 YGConfigFree(config);
960 TEST(YogaTest, wrap_reverse_row_align_content_space_around) {
961 const YGConfigRef config = YGConfigNew();
963 const YGNodeRef root = YGNodeNewWithConfig(config);
964 YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
965 YGNodeStyleSetAlignContent(root, YGAlignSpaceAround);
966 YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);
967 YGNodeStyleSetWidth(root, 100);
969 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
970 YGNodeStyleSetWidth(root_child0, 30);
971 YGNodeStyleSetHeight(root_child0, 10);
972 YGNodeInsertChild(root, root_child0, 0);
974 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
975 YGNodeStyleSetWidth(root_child1, 30);
976 YGNodeStyleSetHeight(root_child1, 20);
977 YGNodeInsertChild(root, root_child1, 1);
979 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
980 YGNodeStyleSetWidth(root_child2, 30);
981 YGNodeStyleSetHeight(root_child2, 30);
982 YGNodeInsertChild(root, root_child2, 2);
984 const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
985 YGNodeStyleSetWidth(root_child3, 30);
986 YGNodeStyleSetHeight(root_child3, 40);
987 YGNodeInsertChild(root, root_child3, 3);
989 const YGNodeRef root_child4 = YGNodeNewWithConfig(config);
990 YGNodeStyleSetWidth(root_child4, 30);
991 YGNodeStyleSetHeight(root_child4, 50);
992 YGNodeInsertChild(root, root_child4, 4);
993 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
995 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
996 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
997 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
998 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));
1000 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1001 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child0));
1002 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
1003 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
1005 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));
1006 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));
1007 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
1008 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
1010 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetLeft(root_child2));
1011 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));
1012 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
1013 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
1015 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
1016 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));
1017 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
1018 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));
1020 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));
1021 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));
1022 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));
1023 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));
1025 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1027 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1028 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1029 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
1030 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));
1032 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child0));
1033 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetTop(root_child0));
1034 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
1035 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
1037 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child1));
1038 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child1));
1039 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
1040 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
1042 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetLeft(root_child2));
1043 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child2));
1044 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
1045 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
1047 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetLeft(root_child3));
1048 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child3));
1049 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
1050 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));
1052 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetLeft(root_child4));
1053 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));
1054 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));
1055 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));
1057 YGNodeFreeRecursive(root);
1059 YGConfigFree(config);
1062 TEST(YogaTest, wrap_reverse_column_fixed_size) {
1063 const YGConfigRef config = YGConfigNew();
1065 const YGNodeRef root = YGNodeNewWithConfig(config);
1066 YGNodeStyleSetAlignItems(root, YGAlignCenter);
1067 YGNodeStyleSetFlexWrap(root, YGWrapWrapReverse);
1068 YGNodeStyleSetWidth(root, 200);
1069 YGNodeStyleSetHeight(root, 100);
1071 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1072 YGNodeStyleSetWidth(root_child0, 30);
1073 YGNodeStyleSetHeight(root_child0, 10);
1074 YGNodeInsertChild(root, root_child0, 0);
1076 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
1077 YGNodeStyleSetWidth(root_child1, 30);
1078 YGNodeStyleSetHeight(root_child1, 20);
1079 YGNodeInsertChild(root, root_child1, 1);
1081 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
1082 YGNodeStyleSetWidth(root_child2, 30);
1083 YGNodeStyleSetHeight(root_child2, 30);
1084 YGNodeInsertChild(root, root_child2, 2);
1086 const YGNodeRef root_child3 = YGNodeNewWithConfig(config);
1087 YGNodeStyleSetWidth(root_child3, 30);
1088 YGNodeStyleSetHeight(root_child3, 40);
1089 YGNodeInsertChild(root, root_child3, 3);
1091 const YGNodeRef root_child4 = YGNodeNewWithConfig(config);
1092 YGNodeStyleSetWidth(root_child4, 30);
1093 YGNodeStyleSetHeight(root_child4, 50);
1094 YGNodeInsertChild(root, root_child4, 4);
1095 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1097 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1098 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1099 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
1100 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1102 ASSERT_FLOAT_EQ(170, YGNodeLayoutGetLeft(root_child0));
1103 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1104 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
1105 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
1107 ASSERT_FLOAT_EQ(170, YGNodeLayoutGetLeft(root_child1));
1108 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));
1109 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
1110 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
1112 ASSERT_FLOAT_EQ(170, YGNodeLayoutGetLeft(root_child2));
1113 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child2));
1114 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
1115 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
1117 ASSERT_FLOAT_EQ(170, YGNodeLayoutGetLeft(root_child3));
1118 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child3));
1119 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
1120 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));
1122 ASSERT_FLOAT_EQ(140, YGNodeLayoutGetLeft(root_child4));
1123 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));
1124 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));
1125 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));
1127 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1129 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1130 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1131 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
1132 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root));
1134 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1135 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1136 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child0));
1137 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetHeight(root_child0));
1139 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child1));
1140 ASSERT_FLOAT_EQ(10, YGNodeLayoutGetTop(root_child1));
1141 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child1));
1142 ASSERT_FLOAT_EQ(20, YGNodeLayoutGetHeight(root_child1));
1144 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
1145 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child2));
1146 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child2));
1147 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetHeight(root_child2));
1149 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child3));
1150 ASSERT_FLOAT_EQ(60, YGNodeLayoutGetTop(root_child3));
1151 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child3));
1152 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child3));
1154 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child4));
1155 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child4));
1156 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetWidth(root_child4));
1157 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child4));
1159 YGNodeFreeRecursive(root);
1161 YGConfigFree(config);
1164 TEST(YogaTest, wrapped_row_within_align_items_center) {
1165 const YGConfigRef config = YGConfigNew();
1167 const YGNodeRef root = YGNodeNewWithConfig(config);
1168 YGNodeStyleSetAlignItems(root, YGAlignCenter);
1169 YGNodeStyleSetWidth(root, 200);
1170 YGNodeStyleSetHeight(root, 200);
1172 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1173 YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);
1174 YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);
1175 YGNodeInsertChild(root, root_child0, 0);
1177 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1178 YGNodeStyleSetWidth(root_child0_child0, 150);
1179 YGNodeStyleSetHeight(root_child0_child0, 80);
1180 YGNodeInsertChild(root_child0, root_child0_child0, 0);
1182 const YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);
1183 YGNodeStyleSetWidth(root_child0_child1, 80);
1184 YGNodeStyleSetHeight(root_child0_child1, 80);
1185 YGNodeInsertChild(root_child0, root_child0_child1, 1);
1186 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1188 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1189 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1190 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
1191 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));
1193 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1194 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1195 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));
1196 ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child0));
1198 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1199 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1200 ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0_child0));
1201 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child0));
1203 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
1204 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0_child1));
1205 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0_child1));
1206 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child1));
1208 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1210 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1211 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1212 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
1213 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));
1215 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1216 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1217 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));
1218 ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child0));
1220 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));
1221 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1222 ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0_child0));
1223 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child0));
1225 ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child0_child1));
1226 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0_child1));
1227 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0_child1));
1228 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child1));
1230 YGNodeFreeRecursive(root);
1232 YGConfigFree(config);
1235 TEST(YogaTest, wrapped_row_within_align_items_flex_start) {
1236 const YGConfigRef config = YGConfigNew();
1238 const YGNodeRef root = YGNodeNewWithConfig(config);
1239 YGNodeStyleSetAlignItems(root, YGAlignFlexStart);
1240 YGNodeStyleSetWidth(root, 200);
1241 YGNodeStyleSetHeight(root, 200);
1243 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1244 YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);
1245 YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);
1246 YGNodeInsertChild(root, root_child0, 0);
1248 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1249 YGNodeStyleSetWidth(root_child0_child0, 150);
1250 YGNodeStyleSetHeight(root_child0_child0, 80);
1251 YGNodeInsertChild(root_child0, root_child0_child0, 0);
1253 const YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);
1254 YGNodeStyleSetWidth(root_child0_child1, 80);
1255 YGNodeStyleSetHeight(root_child0_child1, 80);
1256 YGNodeInsertChild(root_child0, root_child0_child1, 1);
1257 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1259 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1260 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1261 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
1262 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));
1264 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1265 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1266 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));
1267 ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child0));
1269 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1270 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1271 ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0_child0));
1272 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child0));
1274 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
1275 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0_child1));
1276 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0_child1));
1277 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child1));
1279 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1281 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1282 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1283 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
1284 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));
1286 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1287 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1288 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));
1289 ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child0));
1291 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));
1292 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1293 ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0_child0));
1294 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child0));
1296 ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child0_child1));
1297 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0_child1));
1298 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0_child1));
1299 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child1));
1301 YGNodeFreeRecursive(root);
1303 YGConfigFree(config);
1306 TEST(YogaTest, wrapped_row_within_align_items_flex_end) {
1307 const YGConfigRef config = YGConfigNew();
1309 const YGNodeRef root = YGNodeNewWithConfig(config);
1310 YGNodeStyleSetAlignItems(root, YGAlignFlexEnd);
1311 YGNodeStyleSetWidth(root, 200);
1312 YGNodeStyleSetHeight(root, 200);
1314 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1315 YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);
1316 YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);
1317 YGNodeInsertChild(root, root_child0, 0);
1319 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1320 YGNodeStyleSetWidth(root_child0_child0, 150);
1321 YGNodeStyleSetHeight(root_child0_child0, 80);
1322 YGNodeInsertChild(root_child0, root_child0_child0, 0);
1324 const YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);
1325 YGNodeStyleSetWidth(root_child0_child1, 80);
1326 YGNodeStyleSetHeight(root_child0_child1, 80);
1327 YGNodeInsertChild(root_child0, root_child0_child1, 1);
1328 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1330 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1331 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1332 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
1333 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));
1335 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1336 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1337 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));
1338 ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child0));
1340 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1341 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1342 ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0_child0));
1343 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child0));
1345 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
1346 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0_child1));
1347 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0_child1));
1348 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child1));
1350 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1352 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1353 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1354 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root));
1355 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root));
1357 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1358 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1359 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child0));
1360 ASSERT_FLOAT_EQ(160, YGNodeLayoutGetHeight(root_child0));
1362 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child0_child0));
1363 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1364 ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0_child0));
1365 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child0));
1367 ASSERT_FLOAT_EQ(120, YGNodeLayoutGetLeft(root_child0_child1));
1368 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetTop(root_child0_child1));
1369 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetWidth(root_child0_child1));
1370 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0_child1));
1372 YGNodeFreeRecursive(root);
1374 YGConfigFree(config);
1377 TEST(YogaTest, wrapped_column_max_height) {
1378 const YGConfigRef config = YGConfigNew();
1380 const YGNodeRef root = YGNodeNewWithConfig(config);
1381 YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
1382 YGNodeStyleSetAlignContent(root, YGAlignCenter);
1383 YGNodeStyleSetAlignItems(root, YGAlignCenter);
1384 YGNodeStyleSetFlexWrap(root, YGWrapWrap);
1385 YGNodeStyleSetWidth(root, 700);
1386 YGNodeStyleSetHeight(root, 500);
1388 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1389 YGNodeStyleSetWidth(root_child0, 100);
1390 YGNodeStyleSetHeight(root_child0, 500);
1391 YGNodeStyleSetMaxHeight(root_child0, 200);
1392 YGNodeInsertChild(root, root_child0, 0);
1394 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
1395 YGNodeStyleSetMargin(root_child1, YGEdgeLeft, 20);
1396 YGNodeStyleSetMargin(root_child1, YGEdgeTop, 20);
1397 YGNodeStyleSetMargin(root_child1, YGEdgeRight, 20);
1398 YGNodeStyleSetMargin(root_child1, YGEdgeBottom, 20);
1399 YGNodeStyleSetWidth(root_child1, 200);
1400 YGNodeStyleSetHeight(root_child1, 200);
1401 YGNodeInsertChild(root, root_child1, 1);
1403 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
1404 YGNodeStyleSetWidth(root_child2, 100);
1405 YGNodeStyleSetHeight(root_child2, 100);
1406 YGNodeInsertChild(root, root_child2, 2);
1407 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1409 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1410 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1411 ASSERT_FLOAT_EQ(700, YGNodeLayoutGetWidth(root));
1412 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
1414 ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child0));
1415 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));
1416 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
1417 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));
1419 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetLeft(root_child1));
1420 ASSERT_FLOAT_EQ(250, YGNodeLayoutGetTop(root_child1));
1421 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));
1422 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));
1424 ASSERT_FLOAT_EQ(420, YGNodeLayoutGetLeft(root_child2));
1425 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child2));
1426 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
1427 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));
1429 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1431 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1432 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1433 ASSERT_FLOAT_EQ(700, YGNodeLayoutGetWidth(root));
1434 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
1436 ASSERT_FLOAT_EQ(350, YGNodeLayoutGetLeft(root_child0));
1437 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetTop(root_child0));
1438 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
1439 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child0));
1441 ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child1));
1442 ASSERT_FLOAT_EQ(250, YGNodeLayoutGetTop(root_child1));
1443 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));
1444 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetHeight(root_child1));
1446 ASSERT_FLOAT_EQ(180, YGNodeLayoutGetLeft(root_child2));
1447 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child2));
1448 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
1449 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));
1451 YGNodeFreeRecursive(root);
1453 YGConfigFree(config);
1456 TEST(YogaTest, wrapped_column_max_height_flex) {
1457 const YGConfigRef config = YGConfigNew();
1459 const YGNodeRef root = YGNodeNewWithConfig(config);
1460 YGNodeStyleSetJustifyContent(root, YGJustifyCenter);
1461 YGNodeStyleSetAlignContent(root, YGAlignCenter);
1462 YGNodeStyleSetAlignItems(root, YGAlignCenter);
1463 YGNodeStyleSetFlexWrap(root, YGWrapWrap);
1464 YGNodeStyleSetWidth(root, 700);
1465 YGNodeStyleSetHeight(root, 500);
1467 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1468 YGNodeStyleSetFlexGrow(root_child0, 1);
1469 YGNodeStyleSetFlexShrink(root_child0, 1);
1470 YGNodeStyleSetFlexBasisPercent(root_child0, 0);
1471 YGNodeStyleSetWidth(root_child0, 100);
1472 YGNodeStyleSetHeight(root_child0, 500);
1473 YGNodeStyleSetMaxHeight(root_child0, 200);
1474 YGNodeInsertChild(root, root_child0, 0);
1476 const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
1477 YGNodeStyleSetFlexGrow(root_child1, 1);
1478 YGNodeStyleSetFlexShrink(root_child1, 1);
1479 YGNodeStyleSetFlexBasisPercent(root_child1, 0);
1480 YGNodeStyleSetMargin(root_child1, YGEdgeLeft, 20);
1481 YGNodeStyleSetMargin(root_child1, YGEdgeTop, 20);
1482 YGNodeStyleSetMargin(root_child1, YGEdgeRight, 20);
1483 YGNodeStyleSetMargin(root_child1, YGEdgeBottom, 20);
1484 YGNodeStyleSetWidth(root_child1, 200);
1485 YGNodeStyleSetHeight(root_child1, 200);
1486 YGNodeInsertChild(root, root_child1, 1);
1488 const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
1489 YGNodeStyleSetWidth(root_child2, 100);
1490 YGNodeStyleSetHeight(root_child2, 100);
1491 YGNodeInsertChild(root, root_child2, 2);
1492 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1494 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1495 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1496 ASSERT_FLOAT_EQ(700, YGNodeLayoutGetWidth(root));
1497 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
1499 ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child0));
1500 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1501 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
1502 ASSERT_FLOAT_EQ(180, YGNodeLayoutGetHeight(root_child0));
1504 ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child1));
1505 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));
1506 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));
1507 ASSERT_FLOAT_EQ(180, YGNodeLayoutGetHeight(root_child1));
1509 ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child2));
1510 ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child2));
1511 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
1512 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));
1514 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1516 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1517 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1518 ASSERT_FLOAT_EQ(700, YGNodeLayoutGetWidth(root));
1519 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
1521 ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child0));
1522 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1523 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child0));
1524 ASSERT_FLOAT_EQ(180, YGNodeLayoutGetHeight(root_child0));
1526 ASSERT_FLOAT_EQ(250, YGNodeLayoutGetLeft(root_child1));
1527 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetTop(root_child1));
1528 ASSERT_FLOAT_EQ(200, YGNodeLayoutGetWidth(root_child1));
1529 ASSERT_FLOAT_EQ(180, YGNodeLayoutGetHeight(root_child1));
1531 ASSERT_FLOAT_EQ(300, YGNodeLayoutGetLeft(root_child2));
1532 ASSERT_FLOAT_EQ(400, YGNodeLayoutGetTop(root_child2));
1533 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root_child2));
1534 ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child2));
1536 YGNodeFreeRecursive(root);
1538 YGConfigFree(config);
1541 TEST(YogaTest, wrap_nodes_with_content_sizing_overflowing_margin) {
1542 const YGConfigRef config = YGConfigNew();
1544 const YGNodeRef root = YGNodeNewWithConfig(config);
1545 YGNodeStyleSetWidth(root, 500);
1546 YGNodeStyleSetHeight(root, 500);
1548 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1549 YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);
1550 YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);
1551 YGNodeStyleSetWidth(root_child0, 85);
1552 YGNodeInsertChild(root, root_child0, 0);
1554 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1555 YGNodeInsertChild(root_child0, root_child0_child0, 0);
1557 const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
1558 YGNodeStyleSetWidth(root_child0_child0_child0, 40);
1559 YGNodeStyleSetHeight(root_child0_child0_child0, 40);
1560 YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
1562 const YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);
1563 YGNodeStyleSetMargin(root_child0_child1, YGEdgeRight, 10);
1564 YGNodeInsertChild(root_child0, root_child0_child1, 1);
1566 const YGNodeRef root_child0_child1_child0 = YGNodeNewWithConfig(config);
1567 YGNodeStyleSetWidth(root_child0_child1_child0, 40);
1568 YGNodeStyleSetHeight(root_child0_child1_child0, 40);
1569 YGNodeInsertChild(root_child0_child1, root_child0_child1_child0, 0);
1570 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1572 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1573 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1574 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
1575 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
1577 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1578 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1579 ASSERT_FLOAT_EQ(85, YGNodeLayoutGetWidth(root_child0));
1580 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));
1582 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1583 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1584 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0));
1585 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0));
1587 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
1588 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
1589 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));
1590 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0_child0));
1592 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
1593 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child1));
1594 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1));
1595 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1));
1597 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1_child0));
1598 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1_child0));
1599 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1_child0));
1600 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1_child0));
1602 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1604 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1605 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1606 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
1607 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
1609 ASSERT_FLOAT_EQ(415, YGNodeLayoutGetLeft(root_child0));
1610 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1611 ASSERT_FLOAT_EQ(85, YGNodeLayoutGetWidth(root_child0));
1612 ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root_child0));
1614 ASSERT_FLOAT_EQ(45, YGNodeLayoutGetLeft(root_child0_child0));
1615 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1616 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0));
1617 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0));
1619 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
1620 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
1621 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));
1622 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0_child0));
1624 ASSERT_FLOAT_EQ(35, YGNodeLayoutGetLeft(root_child0_child1));
1625 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0_child1));
1626 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1));
1627 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1));
1629 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1_child0));
1630 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1_child0));
1631 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1_child0));
1632 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1_child0));
1634 YGNodeFreeRecursive(root);
1636 YGConfigFree(config);
1639 TEST(YogaTest, wrap_nodes_with_content_sizing_margin_cross) {
1640 const YGConfigRef config = YGConfigNew();
1642 const YGNodeRef root = YGNodeNewWithConfig(config);
1643 YGNodeStyleSetWidth(root, 500);
1644 YGNodeStyleSetHeight(root, 500);
1646 const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
1647 YGNodeStyleSetFlexDirection(root_child0, YGFlexDirectionRow);
1648 YGNodeStyleSetFlexWrap(root_child0, YGWrapWrap);
1649 YGNodeStyleSetWidth(root_child0, 70);
1650 YGNodeInsertChild(root, root_child0, 0);
1652 const YGNodeRef root_child0_child0 = YGNodeNewWithConfig(config);
1653 YGNodeInsertChild(root_child0, root_child0_child0, 0);
1655 const YGNodeRef root_child0_child0_child0 = YGNodeNewWithConfig(config);
1656 YGNodeStyleSetWidth(root_child0_child0_child0, 40);
1657 YGNodeStyleSetHeight(root_child0_child0_child0, 40);
1658 YGNodeInsertChild(root_child0_child0, root_child0_child0_child0, 0);
1660 const YGNodeRef root_child0_child1 = YGNodeNewWithConfig(config);
1661 YGNodeStyleSetMargin(root_child0_child1, YGEdgeTop, 10);
1662 YGNodeInsertChild(root_child0, root_child0_child1, 1);
1664 const YGNodeRef root_child0_child1_child0 = YGNodeNewWithConfig(config);
1665 YGNodeStyleSetWidth(root_child0_child1_child0, 40);
1666 YGNodeStyleSetHeight(root_child0_child1_child0, 40);
1667 YGNodeInsertChild(root_child0_child1, root_child0_child1_child0, 0);
1668 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
1670 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1671 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1672 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
1673 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
1675 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
1676 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1677 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetWidth(root_child0));
1678 ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child0));
1680 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0));
1681 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1682 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0));
1683 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0));
1685 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
1686 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
1687 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));
1688 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0_child0));
1690 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1));
1691 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));
1692 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1));
1693 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1));
1695 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1_child0));
1696 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1_child0));
1697 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1_child0));
1698 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1_child0));
1700 YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
1702 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
1703 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
1704 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetWidth(root));
1705 ASSERT_FLOAT_EQ(500, YGNodeLayoutGetHeight(root));
1707 ASSERT_FLOAT_EQ(430, YGNodeLayoutGetLeft(root_child0));
1708 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0));
1709 ASSERT_FLOAT_EQ(70, YGNodeLayoutGetWidth(root_child0));
1710 ASSERT_FLOAT_EQ(90, YGNodeLayoutGetHeight(root_child0));
1712 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0_child0));
1713 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0));
1714 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0));
1715 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0));
1717 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child0_child0));
1718 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child0_child0));
1719 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child0_child0));
1720 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child0_child0));
1722 ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child0_child1));
1723 ASSERT_FLOAT_EQ(50, YGNodeLayoutGetTop(root_child0_child1));
1724 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1));
1725 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1));
1727 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0_child1_child0));
1728 ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root_child0_child1_child0));
1729 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetWidth(root_child0_child1_child0));
1730 ASSERT_FLOAT_EQ(40, YGNodeLayoutGetHeight(root_child0_child1_child0));
1732 YGNodeFreeRecursive(root);
1734 YGConfigFree(config);