tawasuyu

tawasuyu/taffy

A high performance rust-powered UI layout library

Rust 583HTML 275Markdown 8TOML 41586 Sutichaykuna

add parent size to compute function

56d979017712765e115bf644225f874a0d680ab4 · ruwaq Emil Sjölander · (7 wata ñawpaq) · tayta 5685579e2 · kay commitpi sach'ata qhaway

Semántico sayk'uy · 259

examples/basic.rs

  • ukhunpi t'ikrakurqan fn main

scripts/gentest/src/main.rs

src/algo.rs

  • silq'uyninpi t'ikrakurqan fn compute pub

src/geometry.rs

tests/generated.rs

tests/measure.rs

tests/root_constraints.rs

8 qillqakuna · +6348 −5354

diff --git a/Cargo.toml b/Cargo.toml
index 42a76d584..7772e0c27 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -9,7 +9,6 @@ repository = "https://github.com/vislyhq/stretch"
 readme = "README.md"
 keywords = ["ios", "android", "cross-platform", "layout", "flexbox"]
 categories = ["gui"]
-license = "MIT"
 license-file = "LICENSE"
 
 [badges]
diff --git a/examples/basic.rs b/examples/basic.rs
index 239734919..3fb41089e 100644
--- a/examples/basic.rs
+++ b/examples/basic.rs
@@ -1,15 +1,18 @@
+use stretch::geometry::Size;
+use stretch::style::*;
+
 fn main() {
-    let node = stretch::style::Node {
-        size: stretch::geometry::Size {
-            width: stretch::style::Dimension::Points(100.0),
-            height: stretch::style::Dimension::Points(100.0),
+    let node = Node {
+        size: Size {
+            width: Dimension::Points(100.0),
+            height: Dimension::Points(100.0),
         },
-        justify_content: stretch::style::JustifyContent::Center,
+        justify_content: JustifyContent::Center,
 
-        children: vec![stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Percent(0.5),
-                height: stretch::style::Dimension::Auto,
+        children: vec![Node {
+            size: Size {
+                width: Dimension::Percent(0.5),
+                height: Dimension::Auto,
             },
             ..Default::default()
         }],
@@ -17,7 +20,7 @@ fn main() {
         ..Default::default()
     };
 
-    let layout = stretch::compute(&node);
+    let layout = stretch::compute(&node, Size::undefined());
 
     println!("{:#?}", layout);
 }
diff --git a/scripts/gentest/src/main.rs b/scripts/gentest/src/main.rs
index 8e2d526c8..54bd74e2f 100644
--- a/scripts/gentest/src/main.rs
+++ b/scripts/gentest/src/main.rs
@@ -73,7 +73,7 @@ fn generate_test(name: &str, root: Element) -> String {
     
     src.push_str("let layout = stretch::compute(\n");
     src.push_str(&format!("&{}", &generate_node(&description)));
-    src.push_str(");\n\n");
+    src.push_str(", stretch::geometry::Size::undefined());\n\n");
 
     src.push_str(&generate_assertions("layout".to_string(), &description));
     src.push_str("}\n");
diff --git a/src/algo.rs b/src/algo.rs
index d7010b2e3..ffd03dec9 100644
--- a/src/algo.rs
+++ b/src/algo.rs
@@ -54,14 +54,14 @@ struct FlexLine<'a> {
     offset_cross: f32,
 }
 
-pub fn compute(root: &style::Node) -> layout::Node {
+pub fn compute(root: &style::Node, size: Size<Number>) -> layout::Node {
     // TODO - Don't do two passes here just to handle min/max.
     // Probably want to pass min/max down as top level paramerer instead.
     let first_pass = compute_internal(
         root,
-        Size { width: root.size.width.resolve(Undefined), height: root.size.height.resolve(Undefined) },
-        Size { width: Undefined, height: Undefined },
-        Undefined,
+        Size { width: root.size.width.resolve(size.width), height: root.size.height.resolve(size.width) },
+        size,
+        size.width,
     );
 
     let result = compute_internal(
@@ -70,18 +70,18 @@ pub fn compute(root: &style::Node) -> layout::Node {
             width: first_pass
                 .size
                 .width
-                .maybe_max(root.min_size.width.resolve(Undefined))
-                .maybe_min(root.max_size.width.resolve(Undefined))
+                .maybe_max(root.min_size.width.resolve(size.width))
+                .maybe_min(root.max_size.width.resolve(size.width))
                 .to_number(),
             height: first_pass
                 .size
                 .height
-                .maybe_max(root.min_size.height.resolve(Undefined))
-                .maybe_min(root.max_size.height.resolve(Undefined))
+                .maybe_max(root.min_size.height.resolve(size.width))
+                .maybe_min(root.max_size.height.resolve(size.width))
                 .to_number(),
         },
-        Size { width: Undefined, height: Undefined },
-        Undefined,
+        size,
+        size.width,
     );
 
     let mut layout = layout::Node {
diff --git a/src/geometry.rs b/src/geometry.rs
index 91de4cc80..3b2c0ee59 100644
--- a/src/geometry.rs
+++ b/src/geometry.rs
@@ -1,5 +1,6 @@
 use std::ops::Add;
 
+use crate::number::Number;
 use crate::style;
 
 #[derive(Debug, Copy, Clone, PartialEq)]
@@ -85,6 +86,15 @@ pub struct Size<T> {
     pub height: T,
 }
 
+impl Size<()> {
+    pub fn undefined() -> Size<Number> {
+        Size {
+            width: Number::Undefined,
+            height: Number::Undefined,
+        }
+    }
+}
+
 impl<T> Size<T> {
     pub(crate) fn map<R, F>(self, f: F) -> Size<R>
     where
diff --git a/tests/generated.rs b/tests/generated.rs
index 03a18ea25..6d3cc77f1 100644
--- a/tests/generated.rs
+++ b/tests/generated.rs
@@ -2,38 +2,41 @@
 mod generated {
     #[test]
     fn justify_content_row_space_around() {
-        let layout = stretch::compute(&stretch::style::Node {
-            justify_content: stretch::style::JustifyContent::SpaceAround,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                justify_content: stretch::style::JustifyContent::SpaceAround,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -58,23 +61,26 @@ mod generated {
 
     #[test]
     fn align_items_center() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::Center,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(10.0000),
-                    height: stretch::style::Dimension::Points(10.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10.0000),
+                        height: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -89,24 +95,27 @@ mod generated {
 
     #[test]
     fn absolute_layout_justify_content_center() {
-        let layout = stretch::compute(&stretch::style::Node {
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(110.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                position_type: stretch::style::PositionType::Absolute,
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                justify_content: stretch::style::JustifyContent::Center,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(60.0000),
-                    height: stretch::style::Dimension::Points(40.0000),
+                    width: stretch::style::Dimension::Points(110.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(60.0000),
+                        height: stretch::style::Dimension::Points(40.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 110.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -121,38 +130,41 @@ mod generated {
 
     #[test]
     fn margin_auto_bottom_and_top() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
-                    margin: stretch::geometry::Rect {
-                        top: stretch::style::Dimension::Auto,
-                        bottom: stretch::style::Dimension::Auto,
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        margin: stretch::geometry::Rect {
+                            top: stretch::style::Dimension::Auto,
+                            bottom: stretch::style::Dimension::Auto,
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -172,37 +184,40 @@ mod generated {
 
     #[test]
     fn margin_auto_left_and_right_strech() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
-                    margin: stretch::geometry::Rect {
-                        start: stretch::style::Dimension::Auto,
-                        end: stretch::style::Dimension::Auto,
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        margin: stretch::geometry::Rect {
+                            start: stretch::style::Dimension::Auto,
+                            end: stretch::style::Dimension::Auto,
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -222,42 +237,45 @@ mod generated {
 
     #[test]
     fn rounding_flex_basis_overrides_main_size() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(113.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Points(50.0000),
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(20.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(113.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Points(50.0000),
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(20.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 113.0000);
@@ -282,26 +300,29 @@ mod generated {
 
     #[test]
     fn percentage_flex_basis() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.5000),
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.2500),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-            ],
-            ..Default::default()
-        });
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Percent(0.5000),
+                        ..Default::default()
+                    },
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Percent(0.2500),
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -321,42 +342,45 @@ mod generated {
 
     #[test]
     fn rounding_fractial_input_3() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(113.4000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Points(50.0000),
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(20.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(113.4000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Points(50.0000),
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(20.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 113.0000);
@@ -381,24 +405,27 @@ mod generated {
 
     #[test]
     fn margin_and_stretch_column() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                flex_grow: 1.0000,
-                margin: stretch::geometry::Rect {
-                    start: stretch::style::Dimension::Points(10.0000),
-                    end: stretch::style::Dimension::Points(10.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    flex_grow: 1.0000,
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(10.0000),
+                        end: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -413,62 +440,65 @@ mod generated {
 
     #[test]
     fn wrapped_column_max_height_flex() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            flex_wrap: stretch::style::FlexWrap::Wrap,
-            align_items: stretch::style::AlignItems::Center,
-            align_content: stretch::style::AlignContent::Center,
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(700.0000),
-                height: stretch::style::Dimension::Points(500.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_shrink: 1.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.0000),
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(100.0000),
-                        height: stretch::style::Dimension::Points(500.0000),
-                        ..Default::default()
-                    },
-                    max_size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(200.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                flex_wrap: stretch::style::FlexWrap::Wrap,
+                align_items: stretch::style::AlignItems::Center,
+                align_content: stretch::style::AlignContent::Center,
+                justify_content: stretch::style::JustifyContent::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(700.0000),
+                    height: stretch::style::Dimension::Points(500.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_shrink: 1.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.0000),
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(200.0000),
-                        height: stretch::style::Dimension::Points(200.0000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_shrink: 1.0000,
+                        flex_basis: stretch::style::Dimension::Percent(0.0000),
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(100.0000),
+                            height: stretch::style::Dimension::Points(500.0000),
+                            ..Default::default()
+                        },
+                        max_size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(200.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    margin: stretch::geometry::Rect {
-                        start: stretch::style::Dimension::Points(20.0000),
-                        end: stretch::style::Dimension::Points(20.0000),
-                        top: stretch::style::Dimension::Points(20.0000),
-                        bottom: stretch::style::Dimension::Points(20.0000),
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_shrink: 1.0000,
+                        flex_basis: stretch::style::Dimension::Percent(0.0000),
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(200.0000),
+                            height: stretch::style::Dimension::Points(200.0000),
+                            ..Default::default()
+                        },
+                        margin: stretch::geometry::Rect {
+                            start: stretch::style::Dimension::Points(20.0000),
+                            end: stretch::style::Dimension::Points(20.0000),
+                            top: stretch::style::Dimension::Points(20.0000),
+                            bottom: stretch::style::Dimension::Points(20.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(100.0000),
-                        height: stretch::style::Dimension::Points(100.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(100.0000),
+                            height: stretch::style::Dimension::Points(100.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 700.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -493,42 +523,45 @@ mod generated {
 
     #[test]
     fn align_baseline_nested_child() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Baseline,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::Baseline,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_direction: stretch::style::FlexDirection::Column,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(20.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    children: vec![stretch::style::Node {
+                    stretch::style::Node {
+                        flex_direction: stretch::style::FlexDirection::Column,
                         size: stretch::geometry::Size {
                             width: stretch::style::Dimension::Points(50.0000),
-                            height: stretch::style::Dimension::Points(10.0000),
+                            height: stretch::style::Dimension::Points(20.0000),
                             ..Default::default()
                         },
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(50.0000),
+                                height: stretch::style::Dimension::Points(10.0000),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        }],
                         ..Default::default()
-                    }],
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -553,14 +586,20 @@ mod generated {
 
     #[test]
     fn max_height_overrides_height_on_root() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size { height: stretch::style::Dimension::Points(200.0000), ..Default::default() },
-            max_size: stretch::geometry::Size {
-                height: stretch::style::Dimension::Points(100.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(200.0000),
+                    ..Default::default()
+                },
+                max_size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
                 ..Default::default()
             },
-            ..Default::default()
-        });
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 0.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -570,31 +609,34 @@ mod generated {
 
     #[test]
     fn padding_center_child() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Center,
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            padding: stretch::geometry::Rect {
-                start: stretch::style::Dimension::Points(10.0000),
-                end: stretch::style::Dimension::Points(20.0000),
-                top: stretch::style::Dimension::Points(10.0000),
-                bottom: stretch::style::Dimension::Points(20.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::Center,
+                justify_content: stretch::style::JustifyContent::Center,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(10.0000),
-                    height: stretch::style::Dimension::Points(10.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                padding: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10.0000),
+                    end: stretch::style::Dimension::Points(20.0000),
+                    top: stretch::style::Dimension::Points(10.0000),
+                    bottom: stretch::style::Dimension::Points(20.0000),
+                    ..Default::default()
+                },
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10.0000),
+                        height: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -609,27 +651,30 @@ mod generated {
 
     #[test]
     fn align_flex_start_with_stretching_children() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(500.0000),
-                height: stretch::style::Dimension::Points(500.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(500.0000),
+                    height: stretch::style::Dimension::Points(500.0000),
+                    ..Default::default()
+                },
                 children: vec![stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_shrink: 1.0000,
                     children: vec![stretch::style::Node {
                         flex_grow: 1.0000,
                         flex_shrink: 1.0000,
+                        children: vec![stretch::style::Node {
+                            flex_grow: 1.0000,
+                            flex_shrink: 1.0000,
+                            ..Default::default()
+                        }],
                         ..Default::default()
                     }],
                     ..Default::default()
                 }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 500.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -654,20 +699,23 @@ mod generated {
 
     #[test]
     fn min_width_overrides_width() {
-        let layout = stretch::compute(&stretch::style::Node {
-            children: vec![stretch::style::Node {
-                size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(50.0000),
-                    ..Default::default()
-                },
-                min_size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(100.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50.0000),
+                        ..Default::default()
+                    },
+                    min_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100.0000),
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 0.0000);
@@ -682,31 +730,34 @@ mod generated {
 
     #[test]
     fn flex_wrap_align_stretch_fits_one_row() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_wrap: stretch::style::FlexWrap::Wrap,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(150.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_wrap: stretch::style::FlexWrap::Wrap,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(150.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 150.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -726,38 +777,41 @@ mod generated {
 
     #[test]
     fn justify_content_row_space_evenly() {
-        let layout = stretch::compute(&stretch::style::Node {
-            justify_content: stretch::style::JustifyContent::SpaceEvenly,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                justify_content: stretch::style::JustifyContent::SpaceEvenly,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -782,43 +836,46 @@ mod generated {
 
     #[test]
     fn absolute_layout_child_order() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Center,
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(110.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(60.0000),
-                        height: stretch::style::Dimension::Points(40.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::Center,
+                justify_content: stretch::style::JustifyContent::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(110.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    position_type: stretch::style::PositionType::Absolute,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(60.0000),
-                        height: stretch::style::Dimension::Points(40.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(60.0000),
+                            height: stretch::style::Dimension::Points(40.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(60.0000),
-                        height: stretch::style::Dimension::Points(40.0000),
+                    stretch::style::Node {
+                        position_type: stretch::style::PositionType::Absolute,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(60.0000),
+                            height: stretch::style::Dimension::Points(40.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(60.0000),
+                            height: stretch::style::Dimension::Points(40.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 110.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -843,55 +900,58 @@ mod generated {
 
     #[test]
     fn absolute_layout_percentage_bottom_based_on_parent_height() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    position_type: stretch::style::PositionType::Absolute,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
-                        height: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
-                    position: stretch::geometry::Rect {
-                        top: stretch::style::Dimension::Percent(0.5000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    position_type: stretch::style::PositionType::Absolute,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
-                        height: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
-                    position: stretch::geometry::Rect {
-                        bottom: stretch::style::Dimension::Percent(0.5000),
+                children: vec![
+                    stretch::style::Node {
+                        position_type: stretch::style::PositionType::Absolute,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        position: stretch::geometry::Rect {
+                            top: stretch::style::Dimension::Percent(0.5000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    position_type: stretch::style::PositionType::Absolute,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        position_type: stretch::style::PositionType::Absolute,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        position: stretch::geometry::Rect {
+                            bottom: stretch::style::Dimension::Percent(0.5000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    position: stretch::geometry::Rect {
-                        top: stretch::style::Dimension::Percent(0.1000),
-                        bottom: stretch::style::Dimension::Percent(0.1000),
+                    stretch::style::Node {
+                        position_type: stretch::style::PositionType::Absolute,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        position: stretch::geometry::Rect {
+                            top: stretch::style::Dimension::Percent(0.1000),
+                            bottom: stretch::style::Dimension::Percent(0.1000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -916,25 +976,28 @@ mod generated {
 
     #[test]
     fn absolute_layout_align_items_and_justify_content_flex_end() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::FlexEnd,
-            justify_content: stretch::style::JustifyContent::FlexEnd,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(110.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                position_type: stretch::style::PositionType::Absolute,
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::FlexEnd,
+                justify_content: stretch::style::JustifyContent::FlexEnd,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(60.0000),
-                    height: stretch::style::Dimension::Points(40.0000),
+                    width: stretch::style::Dimension::Points(110.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(60.0000),
+                        height: stretch::style::Dimension::Points(40.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 110.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -949,25 +1012,28 @@ mod generated {
 
     #[test]
     fn nested_overflowing_child() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
                 children: vec![stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(200.0000),
-                        height: stretch::style::Dimension::Points(200.0000),
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(200.0000),
+                            height: stretch::style::Dimension::Points(200.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
-                    },
+                    }],
                     ..Default::default()
                 }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -987,37 +1053,40 @@ mod generated {
 
     #[test]
     fn flex_direction_row() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1042,36 +1111,39 @@ mod generated {
 
     #[test]
     fn child_min_max_width_flexing() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(120.0000),
-                height: stretch::style::Dimension::Points(50.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_shrink: 0.0000,
-                    flex_basis: stretch::style::Dimension::Points(0.0000),
-                    min_size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(60.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(120.0000),
+                    height: stretch::style::Dimension::Points(50.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_shrink: 0.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.5000),
-                    max_size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(20.0000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_shrink: 0.0000,
+                        flex_basis: stretch::style::Dimension::Points(0.0000),
+                        min_size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(60.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_shrink: 0.0000,
+                        flex_basis: stretch::style::Dimension::Percent(0.5000),
+                        max_size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(20.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 120.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -1091,25 +1163,28 @@ mod generated {
 
     #[test]
     fn absolute_layout_in_wrap_reverse_row_container_flex_end() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_wrap: stretch::style::FlexWrap::WrapReverse,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                position_type: stretch::style::PositionType::Absolute,
-                align_self: stretch::style::AlignSelf::FlexEnd,
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_wrap: stretch::style::FlexWrap::WrapReverse,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(20.0000),
-                    height: stretch::style::Dimension::Points(20.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    align_self: stretch::style::AlignSelf::FlexEnd,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(20.0000),
+                        height: stretch::style::Dimension::Points(20.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1124,24 +1199,27 @@ mod generated {
 
     #[test]
     fn margin_and_flex_column() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                flex_grow: 1.0000,
-                margin: stretch::geometry::Rect {
-                    top: stretch::style::Dimension::Points(10.0000),
-                    bottom: stretch::style::Dimension::Points(10.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    flex_grow: 1.0000,
+                    margin: stretch::geometry::Rect {
+                        top: stretch::style::Dimension::Points(10.0000),
+                        bottom: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1156,18 +1234,27 @@ mod generated {
 
     #[test]
     fn flex_basis_flex_shrink_row() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
+                children: vec![
+                    stretch::style::Node {
+                        flex_basis: stretch::style::Dimension::Points(100.0000),
+                        ..Default::default()
+                    },
+                    stretch::style::Node {
+                        flex_basis: stretch::style::Dimension::Points(50.0000),
+                        ..Default::default()
+                    },
+                ],
                 ..Default::default()
             },
-            children: vec![
-                stretch::style::Node { flex_basis: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-                stretch::style::Node { flex_basis: stretch::style::Dimension::Points(50.0000), ..Default::default() },
-            ],
-            ..Default::default()
-        });
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1187,27 +1274,30 @@ mod generated {
 
     #[test]
     fn justify_content_column_min_height_and_margin_top() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            justify_content: stretch::style::JustifyContent::Center,
-            min_size: stretch::geometry::Size {
-                height: stretch::style::Dimension::Points(50.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(20.0000),
-                    height: stretch::style::Dimension::Points(20.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                justify_content: stretch::style::JustifyContent::Center,
+                min_size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(50.0000),
                     ..Default::default()
                 },
-                margin: stretch::geometry::Rect {
-                    top: stretch::style::Dimension::Points(10.0000),
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(20.0000),
+                        height: stretch::style::Dimension::Points(20.0000),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        top: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 20.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -1222,48 +1312,51 @@ mod generated {
 
     #[test]
     fn justify_content_overflow_min_max() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            justify_content: stretch::style::JustifyContent::Center,
-            min_size: stretch::geometry::Size {
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            max_size: stretch::geometry::Size {
-                height: stretch::style::Dimension::Points(110.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_shrink: 0.0000,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                justify_content: stretch::style::JustifyContent::Center,
+                min_size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_shrink: 0.0000,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
+                max_size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(110.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_shrink: 0.0000,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_shrink: 0.0000,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        flex_shrink: 0.0000,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                    stretch::style::Node {
+                        flex_shrink: 0.0000,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 50.0000);
         assert_eq!(layout.size.height, 110.0000);
@@ -1288,59 +1381,62 @@ mod generated {
 
     #[test]
     fn wrap_reverse_column_fixed_size() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            flex_wrap: stretch::style::FlexWrap::WrapReverse,
-            align_items: stretch::style::AlignItems::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                flex_wrap: stretch::style::FlexWrap::WrapReverse,
+                align_items: stretch::style::AlignItems::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(20.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(30.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(20.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(40.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(30.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(40.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1375,26 +1471,29 @@ mod generated {
 
     #[test]
     fn max_width() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
                 size: stretch::geometry::Size {
-                    height: stretch::style::Dimension::Points(10.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                max_size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(50.0000),
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    max_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50.0000),
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1409,38 +1508,41 @@ mod generated {
 
     #[test]
     fn justify_content_row_center() {
-        let layout = stretch::compute(&stretch::style::Node {
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                justify_content: stretch::style::JustifyContent::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1465,20 +1567,13 @@ mod generated {
 
     #[test]
     fn flex_grow_root_minimized() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            min_size: stretch::geometry::Size {
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            max_size: stretch::geometry::Size {
-                height: stretch::style::Dimension::Points(500.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 flex_direction: stretch::style::FlexDirection::Column,
-                flex_grow: 1.0000,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
                 min_size: stretch::geometry::Size {
                     height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
@@ -1487,24 +1582,37 @@ mod generated {
                     height: stretch::style::Dimension::Points(500.0000),
                     ..Default::default()
                 },
-                children: vec![
-                    stretch::style::Node {
-                        flex_grow: 1.0000,
-                        flex_basis: stretch::style::Dimension::Points(200.0000),
+                children: vec![stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1.0000,
+                    min_size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(100.0000),
                         ..Default::default()
                     },
-                    stretch::style::Node {
-                        size: stretch::geometry::Size {
-                            height: stretch::style::Dimension::Points(100.0000),
-                            ..Default::default()
-                        },
+                    max_size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(500.0000),
                         ..Default::default()
                     },
-                ],
+                    children: vec![
+                        stretch::style::Node {
+                            flex_grow: 1.0000,
+                            flex_basis: stretch::style::Dimension::Points(200.0000),
+                            ..Default::default()
+                        },
+                        stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                height: stretch::style::Dimension::Points(100.0000),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        },
+                    ],
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 300.0000);
@@ -1529,15 +1637,18 @@ mod generated {
 
     #[test]
     fn container_with_unsized_child() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
+                children: vec![stretch::style::Node { ..Default::default() }],
                 ..Default::default()
             },
-            children: vec![stretch::style::Node { ..Default::default() }],
-            ..Default::default()
-        });
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1552,24 +1663,30 @@ mod generated {
 
     #[test]
     fn flex_grow_within_constrained_min_row() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size { height: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            min_size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node { flex_grow: 1.0000, ..Default::default() },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
+                min_size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-            ],
-            ..Default::default()
-        });
+                children: vec![
+                    stretch::style::Node { flex_grow: 1.0000, ..Default::default() },
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1589,27 +1706,33 @@ mod generated {
 
     #[test]
     fn flex_shrink_by_outer_margin_with_max_size() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size { height: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            max_size: stretch::geometry::Size {
-                height: stretch::style::Dimension::Points(80.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(20.0000),
-                    height: stretch::style::Dimension::Points(20.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                margin: stretch::geometry::Rect {
-                    top: stretch::style::Dimension::Points(100.0000),
+                max_size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(80.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(20.0000),
+                        height: stretch::style::Dimension::Points(20.0000),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        top: stretch::style::Dimension::Points(100.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 20.0000);
         assert_eq!(layout.size.height, 80.0000);
@@ -1624,30 +1747,33 @@ mod generated {
 
     #[test]
     fn absolute_layout_width_height_start_top_end_bottom() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                position_type: stretch::style::PositionType::Absolute,
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(10.0000),
-                    height: stretch::style::Dimension::Points(10.0000),
-                    ..Default::default()
-                },
-                position: stretch::geometry::Rect {
-                    start: stretch::style::Dimension::Points(10.0000),
-                    end: stretch::style::Dimension::Points(10.0000),
-                    top: stretch::style::Dimension::Points(10.0000),
-                    bottom: stretch::style::Dimension::Points(10.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                ..Default::default()
-            }],
-            ..Default::default()
-        });
+                children: vec![stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10.0000),
+                        height: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    position: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(10.0000),
+                        end: stretch::style::Dimension::Points(10.0000),
+                        top: stretch::style::Dimension::Points(10.0000),
+                        bottom: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1662,22 +1788,25 @@ mod generated {
 
     #[test]
     fn overflow_main_axis() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                flex_shrink: 0.0000,
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(200.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    flex_shrink: 0.0000,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(200.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1692,29 +1821,35 @@ mod generated {
 
     #[test]
     fn flex_grow_to_min() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            min_size: stretch::geometry::Size {
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            max_size: stretch::geometry::Size {
-                height: stretch::style::Dimension::Points(500.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node { flex_grow: 1.0000, flex_shrink: 1.0000, ..Default::default() },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
+                min_size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
+                max_size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(500.0000),
                     ..Default::default()
                 },
-            ],
-            ..Default::default()
-        });
+                children: vec![
+                    stretch::style::Node { flex_grow: 1.0000, flex_shrink: 1.0000, ..Default::default() },
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1734,29 +1869,32 @@ mod generated {
 
     #[test]
     fn absolute_layout_align_items_and_justify_content_center_and_top_position() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Center,
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(110.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                position_type: stretch::style::PositionType::Absolute,
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::Center,
+                justify_content: stretch::style::JustifyContent::Center,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(60.0000),
-                    height: stretch::style::Dimension::Points(40.0000),
+                    width: stretch::style::Dimension::Points(110.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                position: stretch::geometry::Rect {
-                    top: stretch::style::Dimension::Points(10.0000),
+                children: vec![stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(60.0000),
+                        height: stretch::style::Dimension::Points(40.0000),
+                        ..Default::default()
+                    },
+                    position: stretch::geometry::Rect {
+                        top: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 110.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1771,26 +1909,29 @@ mod generated {
 
     #[test]
     fn min_height() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    min_size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(60.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node { flex_grow: 1.0000, ..Default::default() },
-            ],
-            ..Default::default()
-        });
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        min_size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(60.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                    stretch::style::Node { flex_grow: 1.0000, ..Default::default() },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1810,38 +1951,41 @@ mod generated {
 
     #[test]
     fn justify_content_column_flex_start() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1866,25 +2010,28 @@ mod generated {
 
     #[test]
     fn absolute_layout_in_wrap_reverse_column_container() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            flex_wrap: stretch::style::FlexWrap::WrapReverse,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                position_type: stretch::style::PositionType::Absolute,
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                flex_wrap: stretch::style::FlexWrap::WrapReverse,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(20.0000),
-                    height: stretch::style::Dimension::Points(20.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(20.0000),
+                        height: stretch::style::Dimension::Points(20.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1899,30 +2046,33 @@ mod generated {
 
     #[test]
     fn margin_should_not_be_part_of_max_width() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(250.0000),
-                height: stretch::style::Dimension::Points(250.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(100.0000),
-                    height: stretch::style::Dimension::Points(100.0000),
-                    ..Default::default()
-                },
-                max_size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(100.0000),
+                    width: stretch::style::Dimension::Points(250.0000),
+                    height: stretch::style::Dimension::Points(250.0000),
                     ..Default::default()
                 },
-                margin: stretch::geometry::Rect {
-                    start: stretch::style::Dimension::Points(20.0000),
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100.0000),
+                        height: stretch::style::Dimension::Points(100.0000),
+                        ..Default::default()
+                    },
+                    max_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100.0000),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(20.0000),
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 250.0000);
         assert_eq!(layout.size.height, 250.0000);
@@ -1937,18 +2087,21 @@ mod generated {
 
     #[test]
     fn absolute_layout_no_size() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
+                children: vec![stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    ..Default::default()
+                }],
                 ..Default::default()
             },
-            children: vec![stretch::style::Node {
-                position_type: stretch::style::PositionType::Absolute,
-                ..Default::default()
-            }],
-            ..Default::default()
-        });
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1963,29 +2116,32 @@ mod generated {
 
     #[test]
     fn border_flex_child() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            border: stretch::geometry::Rect {
-                start: stretch::style::Dimension::Points(10.0000),
-                end: stretch::style::Dimension::Points(10.0000),
-                top: stretch::style::Dimension::Points(10.0000),
-                bottom: stretch::style::Dimension::Points(10.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                flex_grow: 1.0000,
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(10.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                border: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10.0000),
+                    end: stretch::style::Dimension::Points(10.0000),
+                    top: stretch::style::Dimension::Points(10.0000),
+                    bottom: stretch::style::Dimension::Points(10.0000),
+                    ..Default::default()
+                },
+                children: vec![stretch::style::Node {
+                    flex_grow: 1.0000,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2000,45 +2156,51 @@ mod generated {
 
     #[test]
     fn wrap_reverse_row() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_wrap: stretch::style::FlexWrap::WrapReverse,
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(31.0000),
-                        height: stretch::style::Dimension::Points(30.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_wrap: stretch::style::FlexWrap::WrapReverse,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(32.0000),
-                        height: stretch::style::Dimension::Points(30.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(31.0000),
+                            height: stretch::style::Dimension::Points(30.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(33.0000),
-                        height: stretch::style::Dimension::Points(30.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(32.0000),
+                            height: stretch::style::Dimension::Points(30.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(34.0000),
-                        height: stretch::style::Dimension::Points(30.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(33.0000),
+                            height: stretch::style::Dimension::Points(30.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(34.0000),
+                            height: stretch::style::Dimension::Points(30.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 60.0000);
@@ -2068,26 +2230,29 @@ mod generated {
 
     #[test]
     fn margin_right() {
-        let layout = stretch::compute(&stretch::style::Node {
-            justify_content: stretch::style::JustifyContent::FlexEnd,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                justify_content: stretch::style::JustifyContent::FlexEnd,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(10.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                margin: stretch::geometry::Rect {
-                    end: stretch::style::Dimension::Points(10.0000),
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        end: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2102,46 +2267,49 @@ mod generated {
 
     #[test]
     fn display_none_with_child() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_shrink: 1.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    display: stretch::style::Display::None,
-                    flex_direction: stretch::style::FlexDirection::Column,
-                    flex_grow: 1.0000,
-                    flex_shrink: 1.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.0000),
-                    children: vec![stretch::style::Node {
+                children: vec![
+                    stretch::style::Node {
                         flex_grow: 1.0000,
                         flex_shrink: 1.0000,
                         flex_basis: stretch::style::Dimension::Percent(0.0000),
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(20.0000),
+                        ..Default::default()
+                    },
+                    stretch::style::Node {
+                        display: stretch::style::Display::None,
+                        flex_direction: stretch::style::FlexDirection::Column,
+                        flex_grow: 1.0000,
+                        flex_shrink: 1.0000,
+                        flex_basis: stretch::style::Dimension::Percent(0.0000),
+                        children: vec![stretch::style::Node {
+                            flex_grow: 1.0000,
+                            flex_shrink: 1.0000,
+                            flex_basis: stretch::style::Dimension::Percent(0.0000),
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(20.0000),
+                                ..Default::default()
+                            },
                             ..Default::default()
-                        },
+                        }],
                         ..Default::default()
-                    }],
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_shrink: 1.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.0000),
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    },
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_shrink: 1.0000,
+                        flex_basis: stretch::style::Dimension::Percent(0.0000),
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2171,28 +2339,31 @@ mod generated {
 
     #[test]
     fn align_flex_start_with_shrinking_children_with_stretch() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(500.0000),
-                height: stretch::style::Dimension::Points(500.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                align_items: stretch::style::AlignItems::FlexStart,
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(500.0000),
+                    height: stretch::style::Dimension::Points(500.0000),
+                    ..Default::default()
+                },
                 children: vec![stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_shrink: 1.0000,
+                    align_items: stretch::style::AlignItems::FlexStart,
                     children: vec![stretch::style::Node {
                         flex_grow: 1.0000,
                         flex_shrink: 1.0000,
+                        children: vec![stretch::style::Node {
+                            flex_grow: 1.0000,
+                            flex_shrink: 1.0000,
+                            ..Default::default()
+                        }],
                         ..Default::default()
                     }],
                     ..Default::default()
                 }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 500.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -2217,40 +2388,46 @@ mod generated {
 
     #[test]
     fn flex_basis_smaller_then_content_with_flex_grow_large_size() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            children: vec![
-                stretch::style::Node {
-                    flex_direction: stretch::style::FlexDirection::Column,
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Points(0.0000),
-                    children: vec![stretch::style::Node {
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(70.0000),
-                            height: stretch::style::Dimension::Points(100.0000),
-                            ..Default::default()
-                        },
-                        ..Default::default()
-                    }],
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_direction: stretch::style::FlexDirection::Column,
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Points(0.0000),
-                    children: vec![stretch::style::Node {
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(20.0000),
-                            height: stretch::style::Dimension::Points(100.0000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_direction: stretch::style::FlexDirection::Column,
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Points(0.0000),
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(70.0000),
+                                height: stretch::style::Dimension::Points(100.0000),
+                                ..Default::default()
+                            },
                             ..Default::default()
-                        },
+                        }],
                         ..Default::default()
-                    }],
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    },
+                    stretch::style::Node {
+                        flex_direction: stretch::style::FlexDirection::Column,
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Points(0.0000),
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(20.0000),
+                                height: stretch::style::Dimension::Points(100.0000),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        }],
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2280,21 +2457,24 @@ mod generated {
 
     #[test]
     fn align_items_stretch() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(10.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2309,29 +2489,32 @@ mod generated {
 
     #[test]
     fn parent_wrap_child_size_overflowing_parent() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
                     width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
                 children: vec![stretch::style::Node {
                     size: stretch::geometry::Size {
                         width: stretch::style::Dimension::Points(100.0000),
-                        height: stretch::style::Dimension::Points(200.0000),
                         ..Default::default()
                     },
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(100.0000),
+                            height: stretch::style::Dimension::Points(200.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
                     ..Default::default()
                 }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2351,28 +2534,31 @@ mod generated {
 
     #[test]
     fn padding_stretch_child() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            padding: stretch::geometry::Rect {
-                start: stretch::style::Dimension::Points(10.0000),
-                end: stretch::style::Dimension::Points(10.0000),
-                top: stretch::style::Dimension::Points(10.0000),
-                bottom: stretch::style::Dimension::Points(10.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
-                    height: stretch::style::Dimension::Points(10.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
+                padding: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10.0000),
+                    end: stretch::style::Dimension::Points(10.0000),
+                    top: stretch::style::Dimension::Points(10.0000),
+                    bottom: stretch::style::Dimension::Points(10.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2387,53 +2573,56 @@ mod generated {
 
     #[test]
     fn wrap_nodes_with_content_sizing_overflowing_margin() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(500.0000),
-                height: stretch::style::Dimension::Points(500.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                flex_wrap: stretch::style::FlexWrap::Wrap,
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(85.0000),
+                    width: stretch::style::Dimension::Points(500.0000),
+                    height: stretch::style::Dimension::Points(500.0000),
                     ..Default::default()
                 },
-                children: vec![
-                    stretch::style::Node {
-                        flex_direction: stretch::style::FlexDirection::Column,
-                        children: vec![stretch::style::Node {
-                            size: stretch::geometry::Size {
-                                width: stretch::style::Dimension::Points(40.0000),
-                                height: stretch::style::Dimension::Points(40.0000),
-                                ..Default::default()
-                            },
-                            ..Default::default()
-                        }],
+                children: vec![stretch::style::Node {
+                    flex_wrap: stretch::style::FlexWrap::Wrap,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(85.0000),
                         ..Default::default()
                     },
-                    stretch::style::Node {
-                        flex_direction: stretch::style::FlexDirection::Column,
-                        margin: stretch::geometry::Rect {
-                            end: stretch::style::Dimension::Points(10.0000),
+                    children: vec![
+                        stretch::style::Node {
+                            flex_direction: stretch::style::FlexDirection::Column,
+                            children: vec![stretch::style::Node {
+                                size: stretch::geometry::Size {
+                                    width: stretch::style::Dimension::Points(40.0000),
+                                    height: stretch::style::Dimension::Points(40.0000),
+                                    ..Default::default()
+                                },
+                                ..Default::default()
+                            }],
                             ..Default::default()
                         },
-                        children: vec![stretch::style::Node {
-                            size: stretch::geometry::Size {
-                                width: stretch::style::Dimension::Points(40.0000),
-                                height: stretch::style::Dimension::Points(40.0000),
+                        stretch::style::Node {
+                            flex_direction: stretch::style::FlexDirection::Column,
+                            margin: stretch::geometry::Rect {
+                                end: stretch::style::Dimension::Points(10.0000),
                                 ..Default::default()
                             },
+                            children: vec![stretch::style::Node {
+                                size: stretch::geometry::Size {
+                                    width: stretch::style::Dimension::Points(40.0000),
+                                    height: stretch::style::Dimension::Points(40.0000),
+                                    ..Default::default()
+                                },
+                                ..Default::default()
+                            }],
                             ..Default::default()
-                        }],
-                        ..Default::default()
-                    },
-                ],
+                        },
+                    ],
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 500.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -2468,36 +2657,39 @@ mod generated {
 
     #[test]
     fn flex_shrink_flex_grow_row() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(500.0000),
-                height: stretch::style::Dimension::Points(500.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 0.0000,
-                    flex_shrink: 1.0000,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(500.0000),
-                        height: stretch::style::Dimension::Points(100.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(500.0000),
+                    height: stretch::style::Dimension::Points(500.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_grow: 0.0000,
-                    flex_shrink: 1.0000,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(500.0000),
-                        height: stretch::style::Dimension::Points(100.0000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 0.0000,
+                        flex_shrink: 1.0000,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(500.0000),
+                            height: stretch::style::Dimension::Points(100.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        flex_grow: 0.0000,
+                        flex_shrink: 1.0000,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(500.0000),
+                            height: stretch::style::Dimension::Points(100.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 500.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -2517,31 +2709,40 @@ mod generated {
 
     #[test]
     fn flex_basis_flex_shrink_column() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node { flex_basis: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-                stretch::style::Node { flex_basis: stretch::style::Dimension::Points(50.0000), ..Default::default() },
-            ],
-            ..Default::default()
-        });
-
-        assert_eq!(layout.size.width, 100.0000);
-        assert_eq!(layout.size.height, 100.0000);
-        assert_eq!(layout.location.x, 0.0000);
-        assert_eq!(layout.location.y, 0.0000);
-
-        assert_eq!(layout.children[0].size.width, 100.0000);
-        assert_eq!(layout.children[0].size.height, 67.0000);
-        assert_eq!(layout.children[0].location.x, 0.0000);
-        assert_eq!(layout.children[0].location.y, 0.0000);
-
-        assert_eq!(layout.children[1].size.width, 100.0000);
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
+                children: vec![
+                    stretch::style::Node {
+                        flex_basis: stretch::style::Dimension::Points(100.0000),
+                        ..Default::default()
+                    },
+                    stretch::style::Node {
+                        flex_basis: stretch::style::Dimension::Points(50.0000),
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
+
+        assert_eq!(layout.size.width, 100.0000);
+        assert_eq!(layout.size.height, 100.0000);
+        assert_eq!(layout.location.x, 0.0000);
+        assert_eq!(layout.location.y, 0.0000);
+
+        assert_eq!(layout.children[0].size.width, 100.0000);
+        assert_eq!(layout.children[0].size.height, 67.0000);
+        assert_eq!(layout.children[0].location.x, 0.0000);
+        assert_eq!(layout.children[0].location.y, 0.0000);
+
+        assert_eq!(layout.children[1].size.width, 100.0000);
         assert_eq!(layout.children[1].size.height, 33.0000);
         assert_eq!(layout.children[1].location.x, 0.0000);
         assert_eq!(layout.children[1].location.y, 67.0000);
@@ -2549,28 +2750,34 @@ mod generated {
 
     #[test]
     fn align_items_min_max() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            align_items: stretch::style::AlignItems::Center,
-            size: stretch::geometry::Size { height: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            min_size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            max_size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                align_items: stretch::style::AlignItems::Center,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(60.0000),
-                    height: stretch::style::Dimension::Points(60.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
+                min_size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
+                max_size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(60.0000),
+                        height: stretch::style::Dimension::Points(60.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2585,39 +2792,42 @@ mod generated {
 
     #[test]
     fn flex_basis_smaller_then_content_with_flex_grow_unconstraint_size() {
-        let layout = stretch::compute(&stretch::style::Node {
-            children: vec![
-                stretch::style::Node {
-                    flex_direction: stretch::style::FlexDirection::Column,
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Points(0.0000),
-                    children: vec![stretch::style::Node {
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(70.0000),
-                            height: stretch::style::Dimension::Points(100.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                children: vec![
+                    stretch::style::Node {
+                        flex_direction: stretch::style::FlexDirection::Column,
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Points(0.0000),
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(70.0000),
+                                height: stretch::style::Dimension::Points(100.0000),
+                                ..Default::default()
+                            },
                             ..Default::default()
-                        },
+                        }],
                         ..Default::default()
-                    }],
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    flex_direction: stretch::style::FlexDirection::Column,
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Points(0.0000),
-                    children: vec![stretch::style::Node {
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(20.0000),
-                            height: stretch::style::Dimension::Points(100.0000),
+                    },
+                    stretch::style::Node {
+                        flex_direction: stretch::style::FlexDirection::Column,
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Points(0.0000),
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(20.0000),
+                                height: stretch::style::Dimension::Points(100.0000),
+                                ..Default::default()
+                            },
                             ..Default::default()
-                        },
+                        }],
                         ..Default::default()
-                    }],
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 90.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2647,26 +2857,29 @@ mod generated {
 
     #[test]
     fn justify_content_row_min_width_and_margin() {
-        let layout = stretch::compute(&stretch::style::Node {
-            justify_content: stretch::style::JustifyContent::Center,
-            min_size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(50.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(20.0000),
-                    height: stretch::style::Dimension::Points(20.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                justify_content: stretch::style::JustifyContent::Center,
+                min_size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(50.0000),
                     ..Default::default()
                 },
-                margin: stretch::geometry::Rect {
-                    start: stretch::style::Dimension::Points(10.0000),
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(20.0000),
+                        height: stretch::style::Dimension::Points(20.0000),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 50.0000);
         assert_eq!(layout.size.height, 20.0000);
@@ -2681,23 +2894,26 @@ mod generated {
 
     #[test]
     fn align_self_flex_start() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                align_self: stretch::style::AlignSelf::FlexStart,
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(10.0000),
-                    height: stretch::style::Dimension::Points(10.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    align_self: stretch::style::AlignSelf::FlexStart,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10.0000),
+                        height: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2712,27 +2928,30 @@ mod generated {
 
     #[test]
     fn percentage_position_left_top() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(400.0000),
-                height: stretch::style::Dimension::Points(400.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Percent(0.4500),
-                    height: stretch::style::Dimension::Percent(0.5500),
+                    width: stretch::style::Dimension::Points(400.0000),
+                    height: stretch::style::Dimension::Points(400.0000),
                     ..Default::default()
                 },
-                position: stretch::geometry::Rect {
-                    start: stretch::style::Dimension::Percent(0.1000),
-                    top: stretch::style::Dimension::Percent(0.2000),
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Percent(0.4500),
+                        height: stretch::style::Dimension::Percent(0.5500),
+                        ..Default::default()
+                    },
+                    position: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Percent(0.1000),
+                        top: stretch::style::Dimension::Percent(0.2000),
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 400.0000);
         assert_eq!(layout.size.height, 400.0000);
@@ -2747,28 +2966,31 @@ mod generated {
 
     #[test]
     fn border_stretch_child() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            border: stretch::geometry::Rect {
-                start: stretch::style::Dimension::Points(10.0000),
-                end: stretch::style::Dimension::Points(10.0000),
-                top: stretch::style::Dimension::Points(10.0000),
-                bottom: stretch::style::Dimension::Points(10.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(10.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
+                border: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10.0000),
+                    end: stretch::style::Dimension::Points(10.0000),
+                    top: stretch::style::Dimension::Points(10.0000),
+                    bottom: stretch::style::Dimension::Points(10.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2783,42 +3005,45 @@ mod generated {
 
     #[test]
     fn rounding_fractial_input_2() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(113.6000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Points(50.0000),
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(20.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(113.6000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Points(50.0000),
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(20.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 114.0000);
@@ -2843,34 +3068,37 @@ mod generated {
 
     #[test]
     fn percentage_flex_basis_main_max_width() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.1500),
-                    max_size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Percent(0.6000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_grow: 4.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.1000),
-                    max_size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Percent(0.2000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Percent(0.1500),
+                        max_size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Percent(0.6000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        flex_grow: 4.0000,
+                        flex_basis: stretch::style::Dimension::Percent(0.1000),
+                        max_size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Percent(0.2000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -2890,38 +3118,41 @@ mod generated {
 
     #[test]
     fn margin_auto_top_and_bottom_strech() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
-                    margin: stretch::geometry::Rect {
-                        top: stretch::style::Dimension::Auto,
-                        bottom: stretch::style::Dimension::Auto,
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        margin: stretch::geometry::Rect {
+                            top: stretch::style::Dimension::Auto,
+                            bottom: stretch::style::Dimension::Auto,
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -2941,40 +3172,21 @@ mod generated {
 
     #[test]
     fn percentage_multiple_nested_with_padding_margin_and_percentage_values() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_direction: stretch::style::FlexDirection::Column,
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.1000),
-                    min_size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Percent(0.6000),
-                        ..Default::default()
-                    },
-                    margin: stretch::geometry::Rect {
-                        start: stretch::style::Dimension::Points(5.0000),
-                        end: stretch::style::Dimension::Points(5.0000),
-                        top: stretch::style::Dimension::Points(5.0000),
-                        bottom: stretch::style::Dimension::Points(5.0000),
-                        ..Default::default()
-                    },
-                    padding: stretch::geometry::Rect {
-                        start: stretch::style::Dimension::Points(3.0000),
-                        end: stretch::style::Dimension::Points(3.0000),
-                        top: stretch::style::Dimension::Points(3.0000),
-                        bottom: stretch::style::Dimension::Points(3.0000),
-                        ..Default::default()
-                    },
-                    children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
+                    ..Default::default()
+                },
+                children: vec![
+                    stretch::style::Node {
                         flex_direction: stretch::style::FlexDirection::Column,
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Percent(0.5000),
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Percent(0.1000),
+                        min_size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Percent(0.6000),
                             ..Default::default()
                         },
                         margin: stretch::geometry::Rect {
@@ -2985,49 +3197,71 @@ mod generated {
                             ..Default::default()
                         },
                         padding: stretch::geometry::Rect {
-                            start: stretch::style::Dimension::Percent(0.0300),
-                            end: stretch::style::Dimension::Percent(0.0300),
-                            top: stretch::style::Dimension::Percent(0.0300),
-                            bottom: stretch::style::Dimension::Percent(0.0300),
+                            start: stretch::style::Dimension::Points(3.0000),
+                            end: stretch::style::Dimension::Points(3.0000),
+                            top: stretch::style::Dimension::Points(3.0000),
+                            bottom: stretch::style::Dimension::Points(3.0000),
                             ..Default::default()
                         },
                         children: vec![stretch::style::Node {
+                            flex_direction: stretch::style::FlexDirection::Column,
                             size: stretch::geometry::Size {
-                                width: stretch::style::Dimension::Percent(0.4500),
+                                width: stretch::style::Dimension::Percent(0.5000),
                                 ..Default::default()
                             },
                             margin: stretch::geometry::Rect {
-                                start: stretch::style::Dimension::Percent(0.0500),
-                                end: stretch::style::Dimension::Percent(0.0500),
-                                top: stretch::style::Dimension::Percent(0.0500),
-                                bottom: stretch::style::Dimension::Percent(0.0500),
+                                start: stretch::style::Dimension::Points(5.0000),
+                                end: stretch::style::Dimension::Points(5.0000),
+                                top: stretch::style::Dimension::Points(5.0000),
+                                bottom: stretch::style::Dimension::Points(5.0000),
                                 ..Default::default()
                             },
                             padding: stretch::geometry::Rect {
-                                start: stretch::style::Dimension::Points(3.0000),
-                                end: stretch::style::Dimension::Points(3.0000),
-                                top: stretch::style::Dimension::Points(3.0000),
-                                bottom: stretch::style::Dimension::Points(3.0000),
+                                start: stretch::style::Dimension::Percent(0.0300),
+                                end: stretch::style::Dimension::Percent(0.0300),
+                                top: stretch::style::Dimension::Percent(0.0300),
+                                bottom: stretch::style::Dimension::Percent(0.0300),
                                 ..Default::default()
                             },
+                            children: vec![stretch::style::Node {
+                                size: stretch::geometry::Size {
+                                    width: stretch::style::Dimension::Percent(0.4500),
+                                    ..Default::default()
+                                },
+                                margin: stretch::geometry::Rect {
+                                    start: stretch::style::Dimension::Percent(0.0500),
+                                    end: stretch::style::Dimension::Percent(0.0500),
+                                    top: stretch::style::Dimension::Percent(0.0500),
+                                    bottom: stretch::style::Dimension::Percent(0.0500),
+                                    ..Default::default()
+                                },
+                                padding: stretch::geometry::Rect {
+                                    start: stretch::style::Dimension::Points(3.0000),
+                                    end: stretch::style::Dimension::Points(3.0000),
+                                    top: stretch::style::Dimension::Points(3.0000),
+                                    bottom: stretch::style::Dimension::Points(3.0000),
+                                    ..Default::default()
+                                },
+                                ..Default::default()
+                            }],
                             ..Default::default()
                         }],
                         ..Default::default()
-                    }],
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    flex_grow: 4.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.1500),
-                    min_size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Percent(0.2000),
+                    },
+                    stretch::style::Node {
+                        flex_grow: 4.0000,
+                        flex_basis: stretch::style::Dimension::Percent(0.1500),
+                        min_size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Percent(0.2000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -3057,24 +3291,27 @@ mod generated {
 
     #[test]
     fn flex_grow_within_constrained_min_column() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            min_size: stretch::geometry::Size {
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node { flex_grow: 1.0000, ..Default::default() },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                min_size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-            ],
-            ..Default::default()
-        });
+                children: vec![
+                    stretch::style::Node { flex_grow: 1.0000, ..Default::default() },
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 0.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3094,23 +3331,26 @@ mod generated {
 
     #[test]
     fn flex_grow_in_at_most_container() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::FlexStart,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::FlexStart,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
                 children: vec![stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Points(0.0000),
+                    children: vec![stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Points(0.0000),
+                        ..Default::default()
+                    }],
                     ..Default::default()
                 }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3130,34 +3370,40 @@ mod generated {
 
     #[test]
     fn margin_auto_left() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
-                    margin: stretch::geometry::Rect { start: stretch::style::Dimension::Auto, ..Default::default() },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        margin: stretch::geometry::Rect {
+                            start: stretch::style::Dimension::Auto,
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -3177,27 +3423,30 @@ mod generated {
 
     #[test]
     fn percentage_flex_basis_cross() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.5000),
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.2500),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-            ],
-            ..Default::default()
-        });
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Percent(0.5000),
+                        ..Default::default()
+                    },
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Percent(0.2500),
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -3217,29 +3466,32 @@ mod generated {
 
     #[test]
     fn percentage_absolute_position() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                position_type: stretch::style::PositionType::Absolute,
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(10.0000),
-                    height: stretch::style::Dimension::Points(10.0000),
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                position: stretch::geometry::Rect {
-                    start: stretch::style::Dimension::Percent(0.3000),
-                    top: stretch::style::Dimension::Percent(0.1000),
+                children: vec![stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10.0000),
+                        height: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    position: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Percent(0.3000),
+                        top: stretch::style::Dimension::Percent(0.1000),
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3254,22 +3506,25 @@ mod generated {
 
     #[test]
     fn flex_basis_flex_grow_row() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Points(50.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node { flex_grow: 1.0000, ..Default::default() },
-            ],
-            ..Default::default()
-        });
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Points(50.0000),
+                        ..Default::default()
+                    },
+                    stretch::style::Node { flex_grow: 1.0000, ..Default::default() },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3289,26 +3544,29 @@ mod generated {
 
     #[test]
     fn absolute_layout_in_wrap_reverse_column_container_flex_end() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            flex_wrap: stretch::style::FlexWrap::WrapReverse,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                position_type: stretch::style::PositionType::Absolute,
-                align_self: stretch::style::AlignSelf::FlexEnd,
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                flex_wrap: stretch::style::FlexWrap::WrapReverse,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(20.0000),
-                    height: stretch::style::Dimension::Points(20.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    align_self: stretch::style::AlignSelf::FlexEnd,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(20.0000),
+                        height: stretch::style::Dimension::Points(20.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3323,37 +3581,40 @@ mod generated {
 
     #[test]
     fn justify_content_row_flex_start() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3378,28 +3639,31 @@ mod generated {
 
     #[test]
     fn margin_auto_left_right_child_bigger_than_parent() {
-        let layout = stretch::compute(&stretch::style::Node {
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(52.0000),
-                height: stretch::style::Dimension::Points(52.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                justify_content: stretch::style::JustifyContent::Center,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(72.0000),
-                    height: stretch::style::Dimension::Points(72.0000),
+                    width: stretch::style::Dimension::Points(52.0000),
+                    height: stretch::style::Dimension::Points(52.0000),
                     ..Default::default()
                 },
-                margin: stretch::geometry::Rect {
-                    start: stretch::style::Dimension::Auto,
-                    end: stretch::style::Dimension::Auto,
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(72.0000),
+                        height: stretch::style::Dimension::Points(72.0000),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Auto,
+                        end: stretch::style::Dimension::Auto,
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 52.0000);
         assert_eq!(layout.size.height, 52.0000);
@@ -3414,24 +3678,30 @@ mod generated {
 
     #[test]
     fn flex_basis_larger_than_content_column() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size { height: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 flex_direction: stretch::style::FlexDirection::Column,
-                flex_basis: stretch::style::Dimension::Points(50.0000),
-                children: vec![stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(100.0000),
-                        height: stretch::style::Dimension::Points(10.0000),
+                size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
+                children: vec![stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_basis: stretch::style::Dimension::Points(50.0000),
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(100.0000),
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
-                    },
+                    }],
                     ..Default::default()
                 }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3451,28 +3721,31 @@ mod generated {
 
     #[test]
     fn margin_fix_left_auto_right_child_bigger_than_parent() {
-        let layout = stretch::compute(&stretch::style::Node {
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(52.0000),
-                height: stretch::style::Dimension::Points(52.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                justify_content: stretch::style::JustifyContent::Center,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(72.0000),
-                    height: stretch::style::Dimension::Points(72.0000),
+                    width: stretch::style::Dimension::Points(52.0000),
+                    height: stretch::style::Dimension::Points(52.0000),
                     ..Default::default()
                 },
-                margin: stretch::geometry::Rect {
-                    start: stretch::style::Dimension::Points(10.0000),
-                    end: stretch::style::Dimension::Auto,
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(72.0000),
+                        height: stretch::style::Dimension::Points(72.0000),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(10.0000),
+                        end: stretch::style::Dimension::Auto,
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 52.0000);
         assert_eq!(layout.size.height, 52.0000);
@@ -3487,47 +3760,50 @@ mod generated {
 
     #[test]
     fn percentage_container_in_wrapping_container() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            align_items: stretch::style::AlignItems::Center,
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 flex_direction: stretch::style::FlexDirection::Column,
+                align_items: stretch::style::AlignItems::Center,
+                justify_content: stretch::style::JustifyContent::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
+                    ..Default::default()
+                },
                 children: vec![stretch::style::Node {
-                    justify_content: stretch::style::JustifyContent::Center,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Percent(1.0000),
-                        ..Default::default()
-                    },
-                    children: vec![
-                        stretch::style::Node {
-                            size: stretch::geometry::Size {
-                                width: stretch::style::Dimension::Points(50.0000),
-                                height: stretch::style::Dimension::Points(50.0000),
-                                ..Default::default()
-                            },
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    children: vec![stretch::style::Node {
+                        justify_content: stretch::style::JustifyContent::Center,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Percent(1.0000),
                             ..Default::default()
                         },
-                        stretch::style::Node {
-                            size: stretch::geometry::Size {
-                                width: stretch::style::Dimension::Points(50.0000),
-                                height: stretch::style::Dimension::Points(50.0000),
+                        children: vec![
+                            stretch::style::Node {
+                                size: stretch::geometry::Size {
+                                    width: stretch::style::Dimension::Points(50.0000),
+                                    height: stretch::style::Dimension::Points(50.0000),
+                                    ..Default::default()
+                                },
                                 ..Default::default()
                             },
-                            ..Default::default()
-                        },
-                    ],
+                            stretch::style::Node {
+                                size: stretch::geometry::Size {
+                                    width: stretch::style::Dimension::Points(50.0000),
+                                    height: stretch::style::Dimension::Points(50.0000),
+                                    ..Default::default()
+                                },
+                                ..Default::default()
+                            },
+                        ],
+                        ..Default::default()
+                    }],
                     ..Default::default()
                 }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -3557,32 +3833,38 @@ mod generated {
 
     #[test]
     fn margin_auto_left_stretching_child() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_shrink: 1.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.0000),
-                    margin: stretch::geometry::Rect { start: stretch::style::Dimension::Auto, ..Default::default() },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_shrink: 1.0000,
+                        flex_basis: stretch::style::Dimension::Percent(0.0000),
+                        margin: stretch::geometry::Rect {
+                            start: stretch::style::Dimension::Auto,
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -3602,40 +3884,46 @@ mod generated {
 
     #[test]
     fn flex_basis_smaller_then_content_with_flex_grow_small_size() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(10.0000), ..Default::default() },
-            children: vec![
-                stretch::style::Node {
-                    flex_direction: stretch::style::FlexDirection::Column,
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Points(0.0000),
-                    children: vec![stretch::style::Node {
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(70.0000),
-                            height: stretch::style::Dimension::Points(100.0000),
-                            ..Default::default()
-                        },
-                        ..Default::default()
-                    }],
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_direction: stretch::style::FlexDirection::Column,
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Points(0.0000),
-                    children: vec![stretch::style::Node {
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(20.0000),
-                            height: stretch::style::Dimension::Points(100.0000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_direction: stretch::style::FlexDirection::Column,
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Points(0.0000),
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(70.0000),
+                                height: stretch::style::Dimension::Points(100.0000),
+                                ..Default::default()
+                            },
                             ..Default::default()
-                        },
+                        }],
                         ..Default::default()
-                    }],
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    },
+                    stretch::style::Node {
+                        flex_direction: stretch::style::FlexDirection::Column,
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Points(0.0000),
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(20.0000),
+                                height: stretch::style::Dimension::Points(100.0000),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        }],
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 10.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3665,35 +3953,38 @@ mod generated {
 
     #[test]
     fn percentage_flex_basis_cross_max_width() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.1000),
-                    max_size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Percent(0.6000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_grow: 4.0000,
-                    flex_basis: stretch::style::Dimension::Percent(0.1500),
-                    max_size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Percent(0.2000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Percent(0.1000),
+                        max_size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Percent(0.6000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        flex_grow: 4.0000,
+                        flex_basis: stretch::style::Dimension::Percent(0.1500),
+                        max_size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Percent(0.2000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -3713,28 +4004,31 @@ mod generated {
 
     #[test]
     fn align_items_flex_end_child_without_margin_bigger_than_parent() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Center,
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(50.0000),
-                height: stretch::style::Dimension::Points(50.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                align_items: stretch::style::AlignItems::FlexEnd,
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::Center,
+                justify_content: stretch::style::JustifyContent::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(50.0000),
+                    height: stretch::style::Dimension::Points(50.0000),
+                    ..Default::default()
+                },
                 children: vec![stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(70.0000),
-                        height: stretch::style::Dimension::Points(70.0000),
+                    align_items: stretch::style::AlignItems::FlexEnd,
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(70.0000),
+                            height: stretch::style::Dimension::Points(70.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
-                    },
+                    }],
                     ..Default::default()
                 }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 50.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -3754,46 +4048,52 @@ mod generated {
 
     #[test]
     fn width_smaller_then_content_with_flex_grow_very_large_size() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(200.0000), ..Default::default() },
-            children: vec![
-                stretch::style::Node {
-                    flex_direction: stretch::style::FlexDirection::Column,
-                    flex_grow: 1.0000,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(0.0000),
-                        ..Default::default()
-                    },
-                    children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    ..Default::default()
+                },
+                children: vec![
+                    stretch::style::Node {
+                        flex_direction: stretch::style::FlexDirection::Column,
+                        flex_grow: 1.0000,
                         size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(70.0000),
-                            height: stretch::style::Dimension::Points(100.0000),
+                            width: stretch::style::Dimension::Points(0.0000),
                             ..Default::default()
                         },
-                        ..Default::default()
-                    }],
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    flex_direction: stretch::style::FlexDirection::Column,
-                    flex_grow: 1.0000,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(0.0000),
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(70.0000),
+                                height: stretch::style::Dimension::Points(100.0000),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        }],
                         ..Default::default()
                     },
-                    children: vec![stretch::style::Node {
+                    stretch::style::Node {
+                        flex_direction: stretch::style::FlexDirection::Column,
+                        flex_grow: 1.0000,
                         size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(20.0000),
-                            height: stretch::style::Dimension::Points(100.0000),
+                            width: stretch::style::Dimension::Points(0.0000),
                             ..Default::default()
                         },
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(20.0000),
+                                height: stretch::style::Dimension::Points(100.0000),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        }],
                         ..Default::default()
-                    }],
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3823,24 +4123,27 @@ mod generated {
 
     #[test]
     fn size_defined_by_child_with_padding() {
-        let layout = stretch::compute(&stretch::style::Node {
-            padding: stretch::geometry::Rect {
-                start: stretch::style::Dimension::Points(10.0000),
-                end: stretch::style::Dimension::Points(10.0000),
-                top: stretch::style::Dimension::Points(10.0000),
-                bottom: stretch::style::Dimension::Points(10.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(10.0000),
-                    height: stretch::style::Dimension::Points(10.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                padding: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10.0000),
+                    end: stretch::style::Dimension::Points(10.0000),
+                    top: stretch::style::Dimension::Points(10.0000),
+                    bottom: stretch::style::Dimension::Points(10.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10.0000),
+                        height: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 30.0000);
         assert_eq!(layout.size.height, 30.0000);
@@ -3855,100 +4158,103 @@ mod generated {
 
     #[test]
     fn absolute_layout_within_border() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            padding: stretch::geometry::Rect {
-                start: stretch::style::Dimension::Points(10.0000),
-                end: stretch::style::Dimension::Points(10.0000),
-                top: stretch::style::Dimension::Points(10.0000),
-                bottom: stretch::style::Dimension::Points(10.0000),
-                ..Default::default()
-            },
-            border: stretch::geometry::Rect {
-                start: stretch::style::Dimension::Points(10.0000),
-                end: stretch::style::Dimension::Points(10.0000),
-                top: stretch::style::Dimension::Points(10.0000),
-                bottom: stretch::style::Dimension::Points(10.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    position_type: stretch::style::PositionType::Absolute,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
-                    position: stretch::geometry::Rect {
-                        start: stretch::style::Dimension::Points(0.0000),
-                        top: stretch::style::Dimension::Points(0.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    position_type: stretch::style::PositionType::Absolute,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
-                    position: stretch::geometry::Rect {
-                        end: stretch::style::Dimension::Points(0.0000),
-                        bottom: stretch::style::Dimension::Points(0.0000),
-                        ..Default::default()
-                    },
+                padding: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10.0000),
+                    end: stretch::style::Dimension::Points(10.0000),
+                    top: stretch::style::Dimension::Points(10.0000),
+                    bottom: stretch::style::Dimension::Points(10.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    position_type: stretch::style::PositionType::Absolute,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
-                    margin: stretch::geometry::Rect {
-                        start: stretch::style::Dimension::Points(10.0000),
-                        end: stretch::style::Dimension::Points(10.0000),
-                        top: stretch::style::Dimension::Points(10.0000),
-                        bottom: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
-                    position: stretch::geometry::Rect {
-                        start: stretch::style::Dimension::Points(0.0000),
-                        top: stretch::style::Dimension::Points(0.0000),
-                        ..Default::default()
-                    },
+                border: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10.0000),
+                    end: stretch::style::Dimension::Points(10.0000),
+                    top: stretch::style::Dimension::Points(10.0000),
+                    bottom: stretch::style::Dimension::Points(10.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    position_type: stretch::style::PositionType::Absolute,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                children: vec![
+                    stretch::style::Node {
+                        position_type: stretch::style::PositionType::Absolute,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        position: stretch::geometry::Rect {
+                            start: stretch::style::Dimension::Points(0.0000),
+                            top: stretch::style::Dimension::Points(0.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    margin: stretch::geometry::Rect {
-                        start: stretch::style::Dimension::Points(10.0000),
-                        end: stretch::style::Dimension::Points(10.0000),
-                        top: stretch::style::Dimension::Points(10.0000),
-                        bottom: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        position_type: stretch::style::PositionType::Absolute,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        position: stretch::geometry::Rect {
+                            end: stretch::style::Dimension::Points(0.0000),
+                            bottom: stretch::style::Dimension::Points(0.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    position: stretch::geometry::Rect {
-                        end: stretch::style::Dimension::Points(0.0000),
-                        bottom: stretch::style::Dimension::Points(0.0000),
+                    stretch::style::Node {
+                        position_type: stretch::style::PositionType::Absolute,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        margin: stretch::geometry::Rect {
+                            start: stretch::style::Dimension::Points(10.0000),
+                            end: stretch::style::Dimension::Points(10.0000),
+                            top: stretch::style::Dimension::Points(10.0000),
+                            bottom: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        position: stretch::geometry::Rect {
+                            start: stretch::style::Dimension::Points(0.0000),
+                            top: stretch::style::Dimension::Points(0.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        position_type: stretch::style::PositionType::Absolute,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        margin: stretch::geometry::Rect {
+                            start: stretch::style::Dimension::Points(10.0000),
+                            end: stretch::style::Dimension::Points(10.0000),
+                            top: stretch::style::Dimension::Points(10.0000),
+                            bottom: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        position: stretch::geometry::Rect {
+                            end: stretch::style::Dimension::Points(0.0000),
+                            bottom: stretch::style::Dimension::Points(0.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3978,28 +4284,31 @@ mod generated {
 
     #[test]
     fn margin_auto_left_fix_right_child_bigger_than_parent() {
-        let layout = stretch::compute(&stretch::style::Node {
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(52.0000),
-                height: stretch::style::Dimension::Points(52.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                justify_content: stretch::style::JustifyContent::Center,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(72.0000),
-                    height: stretch::style::Dimension::Points(72.0000),
+                    width: stretch::style::Dimension::Points(52.0000),
+                    height: stretch::style::Dimension::Points(52.0000),
                     ..Default::default()
                 },
-                margin: stretch::geometry::Rect {
-                    start: stretch::style::Dimension::Auto,
-                    end: stretch::style::Dimension::Points(10.0000),
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(72.0000),
+                        height: stretch::style::Dimension::Points(72.0000),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Auto,
+                        end: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 52.0000);
         assert_eq!(layout.size.height, 52.0000);
@@ -4014,38 +4323,41 @@ mod generated {
 
     #[test]
     fn justify_content_row_flex_end() {
-        let layout = stretch::compute(&stretch::style::Node {
-            justify_content: stretch::style::JustifyContent::FlexEnd,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                justify_content: stretch::style::JustifyContent::FlexEnd,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -4070,27 +4382,30 @@ mod generated {
 
     #[test]
     fn margin_bottom() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            justify_content: stretch::style::JustifyContent::FlexEnd,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                justify_content: stretch::style::JustifyContent::FlexEnd,
                 size: stretch::geometry::Size {
-                    height: stretch::style::Dimension::Points(10.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                margin: stretch::geometry::Rect {
-                    bottom: stretch::style::Dimension::Points(10.0000),
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        bottom: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -4105,30 +4420,33 @@ mod generated {
 
     #[test]
     fn margin_should_not_be_part_of_max_height() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(250.0000),
-                height: stretch::style::Dimension::Points(250.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(100.0000),
-                    height: stretch::style::Dimension::Points(100.0000),
+                    width: stretch::style::Dimension::Points(250.0000),
+                    height: stretch::style::Dimension::Points(250.0000),
                     ..Default::default()
                 },
-                max_size: stretch::geometry::Size {
-                    height: stretch::style::Dimension::Points(100.0000),
-                    ..Default::default()
-                },
-                margin: stretch::geometry::Rect {
-                    top: stretch::style::Dimension::Points(20.0000),
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100.0000),
+                        height: stretch::style::Dimension::Points(100.0000),
+                        ..Default::default()
+                    },
+                    max_size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(100.0000),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        top: stretch::style::Dimension::Points(20.0000),
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 250.0000);
         assert_eq!(layout.size.height, 250.0000);
@@ -4143,19 +4461,25 @@ mod generated {
 
     #[test]
     fn flex_basis_smaller_than_main_dimen_row() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            children: vec![stretch::style::Node {
-                flex_basis: stretch::style::Dimension::Points(10.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(50.0000),
-                    height: stretch::style::Dimension::Points(50.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    flex_basis: stretch::style::Dimension::Points(10.0000),
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50.0000),
+                        height: stretch::style::Dimension::Points(50.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -4170,33 +4494,36 @@ mod generated {
 
     #[test]
     fn percentage_flex_basis_cross_min_height() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    min_size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Percent(0.6000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_grow: 2.0000,
-                    min_size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Percent(0.1000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        min_size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Percent(0.6000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        flex_grow: 2.0000,
+                        min_size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Percent(0.1000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -4216,13 +4543,8 @@ mod generated {
 
     #[test]
     fn nested_overflowing_child_in_constraint_parent() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
                     width: stretch::style::Dimension::Points(100.0000),
                     height: stretch::style::Dimension::Points(100.0000),
@@ -4230,16 +4552,24 @@ mod generated {
                 },
                 children: vec![stretch::style::Node {
                     size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(200.0000),
-                        height: stretch::style::Dimension::Points(200.0000),
+                        width: stretch::style::Dimension::Points(100.0000),
+                        height: stretch::style::Dimension::Points(100.0000),
                         ..Default::default()
                     },
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(200.0000),
+                            height: stretch::style::Dimension::Points(200.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
                     ..Default::default()
                 }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -4259,38 +4589,41 @@ mod generated {
 
     #[test]
     fn wrapped_row_within_align_items_center() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            align_items: stretch::style::AlignItems::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                flex_wrap: stretch::style::FlexWrap::Wrap,
-                children: vec![
-                    stretch::style::Node {
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(150.0000),
-                            height: stretch::style::Dimension::Points(80.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                align_items: stretch::style::AlignItems::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
+                    ..Default::default()
+                },
+                children: vec![stretch::style::Node {
+                    flex_wrap: stretch::style::FlexWrap::Wrap,
+                    children: vec![
+                        stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(150.0000),
+                                height: stretch::style::Dimension::Points(80.0000),
+                                ..Default::default()
+                            },
                             ..Default::default()
                         },
-                        ..Default::default()
-                    },
-                    stretch::style::Node {
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(80.0000),
-                            height: stretch::style::Dimension::Points(80.0000),
+                        stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(80.0000),
+                                height: stretch::style::Dimension::Points(80.0000),
+                                ..Default::default()
+                            },
                             ..Default::default()
                         },
-                        ..Default::default()
-                    },
-                ],
+                    ],
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -4315,39 +4648,42 @@ mod generated {
 
     #[test]
     fn justify_content_column_center() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                justify_content: stretch::style::JustifyContent::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -4372,33 +4708,36 @@ mod generated {
 
     #[test]
     fn align_items_center_child_with_margin_bigger_than_parent() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Center,
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(50.0000),
-                height: stretch::style::Dimension::Points(50.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 align_items: stretch::style::AlignItems::Center,
+                justify_content: stretch::style::JustifyContent::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(50.0000),
+                    height: stretch::style::Dimension::Points(50.0000),
+                    ..Default::default()
+                },
                 children: vec![stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
-                    margin: stretch::geometry::Rect {
-                        start: stretch::style::Dimension::Points(10.0000),
-                        end: stretch::style::Dimension::Points(10.0000),
+                    align_items: stretch::style::AlignItems::Center,
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        margin: stretch::geometry::Rect {
+                            start: stretch::style::Dimension::Points(10.0000),
+                            end: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
-                    },
+                    }],
                     ..Default::default()
                 }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 50.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -4418,22 +4757,25 @@ mod generated {
 
     #[test]
     fn percentage_width_height() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Percent(0.3000),
-                    height: stretch::style::Dimension::Percent(0.3000),
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Percent(0.3000),
+                        height: stretch::style::Dimension::Percent(0.3000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -4448,44 +4790,47 @@ mod generated {
 
     #[test]
     fn margin_auto_mutiple_children_column() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            align_items: stretch::style::AlignItems::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
-                    margin: stretch::geometry::Rect { top: stretch::style::Dimension::Auto, ..Default::default() },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                align_items: stretch::style::AlignItems::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        margin: stretch::geometry::Rect { top: stretch::style::Dimension::Auto, ..Default::default() },
                         ..Default::default()
                     },
-                    margin: stretch::geometry::Rect { top: stretch::style::Dimension::Auto, ..Default::default() },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        margin: stretch::geometry::Rect { top: stretch::style::Dimension::Auto, ..Default::default() },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -4510,14 +4855,20 @@ mod generated {
 
     #[test]
     fn min_width_overrides_width_on_root() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(50.0000), ..Default::default() },
-            min_size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(50.0000),
+                    ..Default::default()
+                },
+                min_size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
                 ..Default::default()
             },
-            ..Default::default()
-        });
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 0.0000);
@@ -4527,41 +4878,44 @@ mod generated {
 
     #[test]
     fn flex_wrap_wrap_to_child_height() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            children: vec![
-                stretch::style::Node {
-                    flex_wrap: stretch::style::FlexWrap::Wrap,
-                    align_items: stretch::style::AlignItems::FlexStart,
-                    children: vec![stretch::style::Node {
-                        flex_direction: stretch::style::FlexDirection::Column,
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(100.0000),
-                            ..Default::default()
-                        },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                children: vec![
+                    stretch::style::Node {
+                        flex_wrap: stretch::style::FlexWrap::Wrap,
+                        align_items: stretch::style::AlignItems::FlexStart,
                         children: vec![stretch::style::Node {
+                            flex_direction: stretch::style::FlexDirection::Column,
                             size: stretch::geometry::Size {
                                 width: stretch::style::Dimension::Points(100.0000),
-                                height: stretch::style::Dimension::Points(100.0000),
                                 ..Default::default()
                             },
+                            children: vec![stretch::style::Node {
+                                size: stretch::geometry::Size {
+                                    width: stretch::style::Dimension::Points(100.0000),
+                                    height: stretch::style::Dimension::Points(100.0000),
+                                    ..Default::default()
+                                },
+                                ..Default::default()
+                            }],
                             ..Default::default()
                         }],
                         ..Default::default()
-                    }],
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(100.0000),
-                        height: stretch::style::Dimension::Points(100.0000),
+                    },
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(100.0000),
+                            height: stretch::style::Dimension::Points(100.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -4589,55 +4943,58 @@ mod generated {
         assert_eq!(layout.children[1].location.y, 100.0000);
     }
 
-    #[test]
-    fn wrap_nodes_with_content_sizing_margin_cross() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(500.0000),
-                height: stretch::style::Dimension::Points(500.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                flex_wrap: stretch::style::FlexWrap::Wrap,
+    #[test]
+    fn wrap_nodes_with_content_sizing_margin_cross() {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(70.0000),
+                    width: stretch::style::Dimension::Points(500.0000),
+                    height: stretch::style::Dimension::Points(500.0000),
                     ..Default::default()
                 },
-                children: vec![
-                    stretch::style::Node {
-                        flex_direction: stretch::style::FlexDirection::Column,
-                        children: vec![stretch::style::Node {
-                            size: stretch::geometry::Size {
-                                width: stretch::style::Dimension::Points(40.0000),
-                                height: stretch::style::Dimension::Points(40.0000),
-                                ..Default::default()
-                            },
-                            ..Default::default()
-                        }],
+                children: vec![stretch::style::Node {
+                    flex_wrap: stretch::style::FlexWrap::Wrap,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(70.0000),
                         ..Default::default()
                     },
-                    stretch::style::Node {
-                        flex_direction: stretch::style::FlexDirection::Column,
-                        margin: stretch::geometry::Rect {
-                            top: stretch::style::Dimension::Points(10.0000),
+                    children: vec![
+                        stretch::style::Node {
+                            flex_direction: stretch::style::FlexDirection::Column,
+                            children: vec![stretch::style::Node {
+                                size: stretch::geometry::Size {
+                                    width: stretch::style::Dimension::Points(40.0000),
+                                    height: stretch::style::Dimension::Points(40.0000),
+                                    ..Default::default()
+                                },
+                                ..Default::default()
+                            }],
                             ..Default::default()
                         },
-                        children: vec![stretch::style::Node {
-                            size: stretch::geometry::Size {
-                                width: stretch::style::Dimension::Points(40.0000),
-                                height: stretch::style::Dimension::Points(40.0000),
+                        stretch::style::Node {
+                            flex_direction: stretch::style::FlexDirection::Column,
+                            margin: stretch::geometry::Rect {
+                                top: stretch::style::Dimension::Points(10.0000),
                                 ..Default::default()
                             },
+                            children: vec![stretch::style::Node {
+                                size: stretch::geometry::Size {
+                                    width: stretch::style::Dimension::Points(40.0000),
+                                    height: stretch::style::Dimension::Points(40.0000),
+                                    ..Default::default()
+                                },
+                                ..Default::default()
+                            }],
                             ..Default::default()
-                        }],
-                        ..Default::default()
-                    },
-                ],
+                        },
+                    ],
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 500.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -4672,33 +5029,36 @@ mod generated {
 
     #[test]
     fn align_baseline() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Baseline,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::Baseline,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(20.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(20.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -4718,25 +5078,28 @@ mod generated {
 
     #[test]
     fn margin_with_sibling_row() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    margin: stretch::geometry::Rect {
-                        end: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node { flex_grow: 1.0000, ..Default::default() },
-            ],
-            ..Default::default()
-        });
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        margin: stretch::geometry::Rect {
+                            end: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                    stretch::style::Node { flex_grow: 1.0000, ..Default::default() },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -4756,54 +5119,60 @@ mod generated {
 
     #[test]
     fn wrap_reverse_row_align_content_space_around() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_wrap: stretch::style::FlexWrap::WrapReverse,
-            align_content: stretch::style::AlignContent::SpaceAround,
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_wrap: stretch::style::FlexWrap::WrapReverse,
+                align_content: stretch::style::AlignContent::SpaceAround,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(20.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(30.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(20.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(40.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(30.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(40.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 80.0000);
@@ -4838,50 +5207,53 @@ mod generated {
 
     #[test]
     fn wrap_reverse_column() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            flex_wrap: stretch::style::FlexWrap::WrapReverse,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(31.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                flex_wrap: stretch::style::FlexWrap::WrapReverse,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(32.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(31.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(33.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(32.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(34.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(33.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(34.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -4911,27 +5283,30 @@ mod generated {
 
     #[test]
     fn align_items_center_with_child_margin() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::Center,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(10.0000),
-                    height: stretch::style::Dimension::Points(10.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                margin: stretch::geometry::Rect {
-                    top: stretch::style::Dimension::Points(10.0000),
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10.0000),
+                        height: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        top: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -4946,38 +5321,41 @@ mod generated {
 
     #[test]
     fn flex_direction_column_reverse() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::ColumnReverse,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::ColumnReverse,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5002,38 +5380,41 @@ mod generated {
 
     #[test]
     fn flex_direction_column() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5058,28 +5439,31 @@ mod generated {
 
     #[test]
     fn align_items_center_child_without_margin_bigger_than_parent() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Center,
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(50.0000),
-                height: stretch::style::Dimension::Points(50.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 align_items: stretch::style::AlignItems::Center,
+                justify_content: stretch::style::JustifyContent::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(50.0000),
+                    height: stretch::style::Dimension::Points(50.0000),
+                    ..Default::default()
+                },
                 children: vec![stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(70.0000),
-                        height: stretch::style::Dimension::Points(70.0000),
+                    align_items: stretch::style::AlignItems::Center,
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(70.0000),
+                            height: stretch::style::Dimension::Points(70.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
-                    },
+                    }],
                     ..Default::default()
                 }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 50.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -5099,24 +5483,27 @@ mod generated {
 
     #[test]
     fn align_self_flex_end_override_flex_start() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::FlexStart,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                align_self: stretch::style::AlignSelf::FlexEnd,
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::FlexStart,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(10.0000),
-                    height: stretch::style::Dimension::Points(10.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    align_self: stretch::style::AlignSelf::FlexEnd,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10.0000),
+                        height: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5131,42 +5518,45 @@ mod generated {
 
     #[test]
     fn rounding_total_fractial() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(87.4000),
-                height: stretch::style::Dimension::Points(113.4000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 0.7000,
-                    flex_basis: stretch::style::Dimension::Points(50.3000),
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(20.3000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(87.4000),
+                    height: stretch::style::Dimension::Points(113.4000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_grow: 1.6000,
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 0.7000,
+                        flex_basis: stretch::style::Dimension::Points(50.3000),
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(20.3000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    flex_grow: 1.1000,
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.7000),
+                    stretch::style::Node {
+                        flex_grow: 1.6000,
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        flex_grow: 1.1000,
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.7000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 87.0000);
         assert_eq!(layout.size.height, 113.0000);
@@ -5191,63 +5581,69 @@ mod generated {
 
     #[test]
     fn align_baseline_child_multiline() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Baseline,
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(60.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::Baseline,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_wrap: stretch::style::FlexWrap::Wrap,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(60.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    children: vec![
-                        stretch::style::Node {
-                            size: stretch::geometry::Size {
-                                width: stretch::style::Dimension::Points(25.0000),
-                                height: stretch::style::Dimension::Points(20.0000),
-                                ..Default::default()
-                            },
+                    stretch::style::Node {
+                        flex_wrap: stretch::style::FlexWrap::Wrap,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
                             ..Default::default()
                         },
-                        stretch::style::Node {
-                            size: stretch::geometry::Size {
-                                width: stretch::style::Dimension::Points(25.0000),
-                                height: stretch::style::Dimension::Points(10.0000),
+                        children: vec![
+                            stretch::style::Node {
+                                size: stretch::geometry::Size {
+                                    width: stretch::style::Dimension::Points(25.0000),
+                                    height: stretch::style::Dimension::Points(20.0000),
+                                    ..Default::default()
+                                },
                                 ..Default::default()
                             },
-                            ..Default::default()
-                        },
-                        stretch::style::Node {
-                            size: stretch::geometry::Size {
-                                width: stretch::style::Dimension::Points(25.0000),
-                                height: stretch::style::Dimension::Points(20.0000),
+                            stretch::style::Node {
+                                size: stretch::geometry::Size {
+                                    width: stretch::style::Dimension::Points(25.0000),
+                                    height: stretch::style::Dimension::Points(10.0000),
+                                    ..Default::default()
+                                },
                                 ..Default::default()
                             },
-                            ..Default::default()
-                        },
-                        stretch::style::Node {
-                            size: stretch::geometry::Size {
-                                width: stretch::style::Dimension::Points(25.0000),
-                                height: stretch::style::Dimension::Points(10.0000),
+                            stretch::style::Node {
+                                size: stretch::geometry::Size {
+                                    width: stretch::style::Dimension::Points(25.0000),
+                                    height: stretch::style::Dimension::Points(20.0000),
+                                    ..Default::default()
+                                },
                                 ..Default::default()
                             },
-                            ..Default::default()
-                        },
-                    ],
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                            stretch::style::Node {
+                                size: stretch::geometry::Size {
+                                    width: stretch::style::Dimension::Points(25.0000),
+                                    height: stretch::style::Dimension::Points(10.0000),
+                                    ..Default::default()
+                                },
+                                ..Default::default()
+                            },
+                        ],
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 80.0000);
@@ -5287,24 +5683,27 @@ mod generated {
 
     #[test]
     fn absolute_layout_align_items_center_on_child_only() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(110.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                position_type: stretch::style::PositionType::Absolute,
-                align_self: stretch::style::AlignSelf::Center,
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(60.0000),
-                    height: stretch::style::Dimension::Points(40.0000),
+                    width: stretch::style::Dimension::Points(110.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    align_self: stretch::style::AlignSelf::Center,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(60.0000),
+                        height: stretch::style::Dimension::Points(40.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 110.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5319,54 +5718,60 @@ mod generated {
 
     #[test]
     fn wrap_reverse_row_single_line_different_size() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_wrap: stretch::style::FlexWrap::WrapReverse,
-            align_content: stretch::style::AlignContent::FlexStart,
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(300.0000), ..Default::default() },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_wrap: stretch::style::FlexWrap::WrapReverse,
+                align_content: stretch::style::AlignContent::FlexStart,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(300.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(20.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(30.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(20.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(40.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(30.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(40.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 300.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -5401,42 +5806,45 @@ mod generated {
 
     #[test]
     fn rounding_fractial_input_4() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(113.4000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Points(50.0000),
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(20.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(113.4000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Points(50.0000),
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(20.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 113.0000);
@@ -5457,49 +5865,52 @@ mod generated {
         assert_eq!(layout.children[2].size.height, 24.0000);
         assert_eq!(layout.children[2].location.x, 0.0000);
         assert_eq!(layout.children[2].location.y, 89.0000);
-    }
-
-    #[test]
-    fn width_smaller_then_content_with_flex_grow_unconstraint_size() {
-        let layout = stretch::compute(&stretch::style::Node {
-            children: vec![
-                stretch::style::Node {
-                    flex_direction: stretch::style::FlexDirection::Column,
-                    flex_grow: 1.0000,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(0.0000),
-                        ..Default::default()
-                    },
-                    children: vec![stretch::style::Node {
+    }
+
+    #[test]
+    fn width_smaller_then_content_with_flex_grow_unconstraint_size() {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                children: vec![
+                    stretch::style::Node {
+                        flex_direction: stretch::style::FlexDirection::Column,
+                        flex_grow: 1.0000,
                         size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(70.0000),
-                            height: stretch::style::Dimension::Points(100.0000),
+                            width: stretch::style::Dimension::Points(0.0000),
                             ..Default::default()
                         },
-                        ..Default::default()
-                    }],
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    flex_direction: stretch::style::FlexDirection::Column,
-                    flex_grow: 1.0000,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(0.0000),
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(70.0000),
+                                height: stretch::style::Dimension::Points(100.0000),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        }],
                         ..Default::default()
                     },
-                    children: vec![stretch::style::Node {
+                    stretch::style::Node {
+                        flex_direction: stretch::style::FlexDirection::Column,
+                        flex_grow: 1.0000,
                         size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(20.0000),
-                            height: stretch::style::Dimension::Points(100.0000),
+                            width: stretch::style::Dimension::Points(0.0000),
                             ..Default::default()
                         },
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(20.0000),
+                                height: stretch::style::Dimension::Points(100.0000),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        }],
                         ..Default::default()
-                    }],
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 0.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5529,29 +5940,32 @@ mod generated {
 
     #[test]
     fn padding_flex_child() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            padding: stretch::geometry::Rect {
-                start: stretch::style::Dimension::Points(10.0000),
-                end: stretch::style::Dimension::Points(10.0000),
-                top: stretch::style::Dimension::Points(10.0000),
-                bottom: stretch::style::Dimension::Points(10.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                flex_grow: 1.0000,
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(10.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
+                padding: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10.0000),
+                    end: stretch::style::Dimension::Points(10.0000),
+                    top: stretch::style::Dimension::Points(10.0000),
+                    bottom: stretch::style::Dimension::Points(10.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    flex_grow: 1.0000,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5566,38 +5980,41 @@ mod generated {
 
     #[test]
     fn flex_direction_row_reverse() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::RowReverse,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::RowReverse,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5622,30 +6039,33 @@ mod generated {
 
     #[test]
     fn percentage_size_based_on_parent_inner_size() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            padding: stretch::geometry::Rect {
-                start: stretch::style::Dimension::Points(20.0000),
-                end: stretch::style::Dimension::Points(20.0000),
-                top: stretch::style::Dimension::Points(20.0000),
-                bottom: stretch::style::Dimension::Points(20.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Percent(0.5000),
-                    height: stretch::style::Dimension::Percent(0.5000),
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
+                    ..Default::default()
+                },
+                padding: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(20.0000),
+                    end: stretch::style::Dimension::Points(20.0000),
+                    top: stretch::style::Dimension::Points(20.0000),
+                    bottom: stretch::style::Dimension::Points(20.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Percent(0.5000),
+                        height: stretch::style::Dimension::Percent(0.5000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -5660,53 +6080,59 @@ mod generated {
 
     #[test]
     fn wrap_reverse_row_align_content_stretch() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_wrap: stretch::style::FlexWrap::WrapReverse,
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_wrap: stretch::style::FlexWrap::WrapReverse,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(20.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(30.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(20.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(40.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(30.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(40.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 80.0000);
@@ -5741,34 +6167,37 @@ mod generated {
 
     #[test]
     fn margin_auto_top() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
-                    margin: stretch::geometry::Rect { top: stretch::style::Dimension::Auto, ..Default::default() },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        margin: stretch::geometry::Rect { top: stretch::style::Dimension::Auto, ..Default::default() },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -5788,36 +6217,42 @@ mod generated {
 
     #[test]
     fn flex_grow_within_constrained_max_row() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(200.0000), ..Default::default() },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
                 size: stretch::geometry::Size {
-                    height: stretch::style::Dimension::Points(100.0000),
-                    ..Default::default()
-                },
-                max_size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(100.0000),
+                    width: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-                children: vec![
-                    stretch::style::Node {
-                        flex_shrink: 1.0000,
-                        flex_basis: stretch::style::Dimension::Points(100.0000),
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(100.0000),
                         ..Default::default()
                     },
-                    stretch::style::Node {
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(50.0000),
-                            ..Default::default()
-                        },
+                    max_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100.0000),
                         ..Default::default()
                     },
-                ],
+                    children: vec![
+                        stretch::style::Node {
+                            flex_shrink: 1.0000,
+                            flex_basis: stretch::style::Dimension::Points(100.0000),
+                            ..Default::default()
+                        },
+                        stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(50.0000),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        },
+                    ],
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5842,25 +6277,28 @@ mod generated {
 
     #[test]
     fn absolute_layout_align_items_and_justify_content_center() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Center,
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(110.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                position_type: stretch::style::PositionType::Absolute,
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::Center,
+                justify_content: stretch::style::JustifyContent::Center,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(60.0000),
-                    height: stretch::style::Dimension::Points(40.0000),
+                    width: stretch::style::Dimension::Points(110.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
+                children: vec![stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(60.0000),
+                        height: stretch::style::Dimension::Points(40.0000),
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 110.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5875,23 +6313,26 @@ mod generated {
 
     #[test]
     fn align_self_flex_end() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                align_self: stretch::style::AlignSelf::FlexEnd,
+        let layout = stretch::compute(
+            &stretch::style::Node {
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(10.0000),
-                    height: stretch::style::Dimension::Points(10.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    align_self: stretch::style::AlignSelf::FlexEnd,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10.0000),
+                        height: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5906,24 +6347,27 @@ mod generated {
 
     #[test]
     fn margin_auto_left_child_bigger_than_parent() {
-        let layout = stretch::compute(&stretch::style::Node {
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(52.0000),
-                height: stretch::style::Dimension::Points(52.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                justify_content: stretch::style::JustifyContent::Center,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(72.0000),
-                    height: stretch::style::Dimension::Points(72.0000),
+                    width: stretch::style::Dimension::Points(52.0000),
+                    height: stretch::style::Dimension::Points(52.0000),
                     ..Default::default()
                 },
-                margin: stretch::geometry::Rect { start: stretch::style::Dimension::Auto, ..Default::default() },
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(72.0000),
+                        height: stretch::style::Dimension::Points(72.0000),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect { start: stretch::style::Dimension::Auto, ..Default::default() },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 52.0000);
         assert_eq!(layout.size.height, 52.0000);
@@ -5938,38 +6382,41 @@ mod generated {
 
     #[test]
     fn wrapped_row_within_align_items_flex_end() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            align_items: stretch::style::AlignItems::FlexEnd,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                flex_wrap: stretch::style::FlexWrap::Wrap,
-                children: vec![
-                    stretch::style::Node {
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(150.0000),
-                            height: stretch::style::Dimension::Points(80.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                align_items: stretch::style::AlignItems::FlexEnd,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
+                    ..Default::default()
+                },
+                children: vec![stretch::style::Node {
+                    flex_wrap: stretch::style::FlexWrap::Wrap,
+                    children: vec![
+                        stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(150.0000),
+                                height: stretch::style::Dimension::Points(80.0000),
+                                ..Default::default()
+                            },
                             ..Default::default()
                         },
-                        ..Default::default()
-                    },
-                    stretch::style::Node {
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(80.0000),
-                            height: stretch::style::Dimension::Points(80.0000),
+                        stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(80.0000),
+                                height: stretch::style::Dimension::Points(80.0000),
+                                ..Default::default()
+                            },
                             ..Default::default()
                         },
-                        ..Default::default()
-                    },
-                ],
+                    ],
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -5994,20 +6441,23 @@ mod generated {
 
     #[test]
     fn min_height_overrides_height() {
-        let layout = stretch::compute(&stretch::style::Node {
-            children: vec![stretch::style::Node {
-                size: stretch::geometry::Size {
-                    height: stretch::style::Dimension::Points(50.0000),
-                    ..Default::default()
-                },
-                min_size: stretch::geometry::Size {
-                    height: stretch::style::Dimension::Points(100.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(50.0000),
+                        ..Default::default()
+                    },
+                    min_size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(100.0000),
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 0.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6022,33 +6472,36 @@ mod generated {
 
     #[test]
     fn align_strech_should_size_based_on_parent() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                justify_content: stretch::style::JustifyContent::Center,
-                flex_grow: 0.0000,
-                flex_shrink: 1.0000,
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
                 children: vec![stretch::style::Node {
-                    flex_grow: 1.0000,
+                    justify_content: stretch::style::JustifyContent::Center,
+                    flex_grow: 0.0000,
                     flex_shrink: 1.0000,
                     children: vec![stretch::style::Node {
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(20.0000),
-                            height: stretch::style::Dimension::Points(20.0000),
+                        flex_grow: 1.0000,
+                        flex_shrink: 1.0000,
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(20.0000),
+                                height: stretch::style::Dimension::Points(20.0000),
+                                ..Default::default()
+                            },
                             ..Default::default()
-                        },
+                        }],
                         ..Default::default()
                     }],
                     ..Default::default()
                 }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6073,46 +6526,52 @@ mod generated {
 
     #[test]
     fn wrap_row_align_items_flex_end() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_wrap: stretch::style::FlexWrap::Wrap,
-            align_items: stretch::style::AlignItems::FlexEnd,
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_wrap: stretch::style::FlexWrap::Wrap,
+                align_items: stretch::style::AlignItems::FlexEnd,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(20.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(30.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(20.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(30.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(30.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(30.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 60.0000);
@@ -6142,24 +6601,27 @@ mod generated {
 
     #[test]
     fn size_defined_by_child_with_border() {
-        let layout = stretch::compute(&stretch::style::Node {
-            border: stretch::geometry::Rect {
-                start: stretch::style::Dimension::Points(10.0000),
-                end: stretch::style::Dimension::Points(10.0000),
-                top: stretch::style::Dimension::Points(10.0000),
-                bottom: stretch::style::Dimension::Points(10.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(10.0000),
-                    height: stretch::style::Dimension::Points(10.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                border: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10.0000),
+                    end: stretch::style::Dimension::Points(10.0000),
+                    top: stretch::style::Dimension::Points(10.0000),
+                    bottom: stretch::style::Dimension::Points(10.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10.0000),
+                        height: stretch::style::Dimension::Points(10.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 30.0000);
         assert_eq!(layout.size.height, 30.0000);
@@ -6174,38 +6636,41 @@ mod generated {
 
     #[test]
     fn margin_auto_bottom_and_top_justify_center() {
-        let layout = stretch::compute(&stretch::style::Node {
-            justify_content: stretch::style::JustifyContent::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
-                    margin: stretch::geometry::Rect {
-                        top: stretch::style::Dimension::Auto,
-                        bottom: stretch::style::Dimension::Auto,
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                justify_content: stretch::style::JustifyContent::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        margin: stretch::geometry::Rect {
+                            top: stretch::style::Dimension::Auto,
+                            bottom: stretch::style::Dimension::Auto,
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -6225,41 +6690,44 @@ mod generated {
 
     #[test]
     fn flex_basis_overrides_main_size() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Points(50.0000),
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(20.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Points(50.0000),
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(20.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6279,43 +6747,46 @@ mod generated {
         assert_eq!(layout.children[2].size.width, 20.0000);
         assert_eq!(layout.children[2].size.height, 100.0000);
         assert_eq!(layout.children[2].location.x, 80.0000);
-        assert_eq!(layout.children[2].location.y, 0.0000);
-    }
-
-    #[test]
-    fn wrapped_row_within_align_items_flex_start() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            align_items: stretch::style::AlignItems::FlexStart,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                flex_wrap: stretch::style::FlexWrap::Wrap,
-                children: vec![
-                    stretch::style::Node {
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(150.0000),
-                            height: stretch::style::Dimension::Points(80.0000),
+        assert_eq!(layout.children[2].location.y, 0.0000);
+    }
+
+    #[test]
+    fn wrapped_row_within_align_items_flex_start() {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                align_items: stretch::style::AlignItems::FlexStart,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
+                    ..Default::default()
+                },
+                children: vec![stretch::style::Node {
+                    flex_wrap: stretch::style::FlexWrap::Wrap,
+                    children: vec![
+                        stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(150.0000),
+                                height: stretch::style::Dimension::Points(80.0000),
+                                ..Default::default()
+                            },
                             ..Default::default()
                         },
-                        ..Default::default()
-                    },
-                    stretch::style::Node {
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(80.0000),
-                            height: stretch::style::Dimension::Points(80.0000),
+                        stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(80.0000),
+                                height: stretch::style::Dimension::Points(80.0000),
+                                ..Default::default()
+                            },
                             ..Default::default()
                         },
-                        ..Default::default()
-                    },
-                ],
+                    ],
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -6340,34 +6811,37 @@ mod generated {
 
     #[test]
     fn align_center_should_size_based_on_content() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                justify_content: stretch::style::JustifyContent::Center,
-                flex_grow: 0.0000,
-                flex_shrink: 1.0000,
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
                 children: vec![stretch::style::Node {
-                    flex_grow: 1.0000,
+                    justify_content: stretch::style::JustifyContent::Center,
+                    flex_grow: 0.0000,
                     flex_shrink: 1.0000,
                     children: vec![stretch::style::Node {
-                        size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(20.0000),
-                            height: stretch::style::Dimension::Points(20.0000),
+                        flex_grow: 1.0000,
+                        flex_shrink: 1.0000,
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(20.0000),
+                                height: stretch::style::Dimension::Points(20.0000),
+                                ..Default::default()
+                            },
                             ..Default::default()
-                        },
+                        }],
                         ..Default::default()
                     }],
                     ..Default::default()
                 }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6392,34 +6866,37 @@ mod generated {
 
     #[test]
     fn margin_auto_right() {
-        let layout = stretch::compute(&stretch::style::Node {
-            align_items: stretch::style::AlignItems::Center,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
-                    margin: stretch::geometry::Rect { end: stretch::style::Dimension::Auto, ..Default::default() },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                align_items: stretch::style::AlignItems::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        margin: stretch::geometry::Rect { end: stretch::style::Dimension::Auto, ..Default::default() },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -6439,54 +6916,60 @@ mod generated {
 
     #[test]
     fn wrap_reverse_row_align_content_center() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_wrap: stretch::style::FlexWrap::WrapReverse,
-            align_content: stretch::style::AlignContent::Center,
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_wrap: stretch::style::FlexWrap::WrapReverse,
+                align_content: stretch::style::AlignContent::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(20.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(30.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(20.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(40.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(30.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(30.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(40.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(30.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 80.0000);
@@ -6521,16 +7004,19 @@ mod generated {
 
     #[test]
     fn padding_no_child() {
-        let layout = stretch::compute(&stretch::style::Node {
-            padding: stretch::geometry::Rect {
-                start: stretch::style::Dimension::Points(10.0000),
-                end: stretch::style::Dimension::Points(10.0000),
-                top: stretch::style::Dimension::Points(10.0000),
-                bottom: stretch::style::Dimension::Points(10.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                padding: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10.0000),
+                    end: stretch::style::Dimension::Points(10.0000),
+                    top: stretch::style::Dimension::Points(10.0000),
+                    bottom: stretch::style::Dimension::Points(10.0000),
+                    ..Default::default()
+                },
                 ..Default::default()
             },
-            ..Default::default()
-        });
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 20.0000);
         assert_eq!(layout.size.height, 20.0000);
@@ -6540,26 +7026,29 @@ mod generated {
 
     #[test]
     fn margin_with_sibling_column() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    margin: stretch::geometry::Rect {
-                        bottom: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node { flex_grow: 1.0000, ..Default::default() },
-            ],
-            ..Default::default()
-        });
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        margin: stretch::geometry::Rect {
+                            bottom: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                    stretch::style::Node { flex_grow: 1.0000, ..Default::default() },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6579,33 +7068,39 @@ mod generated {
 
     #[test]
     fn flex_direction_row_no_width() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size { height: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 30.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6630,14 +7125,20 @@ mod generated {
 
     #[test]
     fn max_width_overrides_width_on_root() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(200.0000), ..Default::default() },
-            max_size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    ..Default::default()
+                },
+                max_size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
                 ..Default::default()
             },
-            ..Default::default()
-        });
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 0.0000);
@@ -6647,37 +7148,40 @@ mod generated {
 
     #[test]
     fn margin_auto_left_and_right() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(200.0000),
-                height: stretch::style::Dimension::Points(200.0000),
-                ..Default::default()
-            },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
-                    margin: stretch::geometry::Rect {
-                        start: stretch::style::Dimension::Auto,
-                        end: stretch::style::Dimension::Auto,
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200.0000),
+                    height: stretch::style::Dimension::Points(200.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        margin: stretch::geometry::Rect {
+                            start: stretch::style::Dimension::Auto,
+                            end: stretch::style::Dimension::Auto,
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -6697,34 +7201,40 @@ mod generated {
 
     #[test]
     fn flex_direction_column_no_height() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            children: vec![
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
+                    ..Default::default()
+                },
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    size: stretch::geometry::Size {
-                        height: stretch::style::Dimension::Points(10.0000),
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(10.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 30.0000);
@@ -6749,18 +7259,21 @@ mod generated {
 
     #[test]
     fn flex_basis_unconstraint_column() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            children: vec![stretch::style::Node {
-                flex_basis: stretch::style::Dimension::Points(50.0000),
-                size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(100.0000),
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                children: vec![stretch::style::Node {
+                    flex_basis: stretch::style::Dimension::Points(50.0000),
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100.0000),
+                        ..Default::default()
+                    },
                     ..Default::default()
-                },
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -6775,46 +7288,52 @@ mod generated {
 
     #[test]
     fn width_smaller_then_content_with_flex_grow_small_size() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(10.0000), ..Default::default() },
-            children: vec![
-                stretch::style::Node {
-                    flex_direction: stretch::style::FlexDirection::Column,
-                    flex_grow: 1.0000,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(0.0000),
-                        ..Default::default()
-                    },
-                    children: vec![stretch::style::Node {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10.0000),
+                    ..Default::default()
+                },
+                children: vec![
+                    stretch::style::Node {
+                        flex_direction: stretch::style::FlexDirection::Column,
+                        flex_grow: 1.0000,
                         size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(70.0000),
-                            height: stretch::style::Dimension::Points(100.0000),
+                            width: stretch::style::Dimension::Points(0.0000),
                             ..Default::default()
                         },
-                        ..Default::default()
-                    }],
-                    ..Default::default()
-                },
-                stretch::style::Node {
-                    flex_direction: stretch::style::FlexDirection::Column,
-                    flex_grow: 1.0000,
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(0.0000),
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(70.0000),
+                                height: stretch::style::Dimension::Points(100.0000),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        }],
                         ..Default::default()
                     },
-                    children: vec![stretch::style::Node {
+                    stretch::style::Node {
+                        flex_direction: stretch::style::FlexDirection::Column,
+                        flex_grow: 1.0000,
                         size: stretch::geometry::Size {
-                            width: stretch::style::Dimension::Points(20.0000),
-                            height: stretch::style::Dimension::Points(100.0000),
+                            width: stretch::style::Dimension::Points(0.0000),
                             ..Default::default()
                         },
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(20.0000),
+                                height: stretch::style::Dimension::Points(100.0000),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        }],
                         ..Default::default()
-                    }],
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 10.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6844,24 +7363,27 @@ mod generated {
 
     #[test]
     fn absolute_layout_in_wrap_reverse_row_container() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_wrap: stretch::style::FlexWrap::WrapReverse,
-            size: stretch::geometry::Size {
-                width: stretch::style::Dimension::Points(100.0000),
-                height: stretch::style::Dimension::Points(100.0000),
-                ..Default::default()
-            },
-            children: vec![stretch::style::Node {
-                position_type: stretch::style::PositionType::Absolute,
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                flex_wrap: stretch::style::FlexWrap::WrapReverse,
                 size: stretch::geometry::Size {
-                    width: stretch::style::Dimension::Points(20.0000),
-                    height: stretch::style::Dimension::Points(20.0000),
+                    width: stretch::style::Dimension::Points(100.0000),
+                    height: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
+                children: vec![stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(20.0000),
+                        height: stretch::style::Dimension::Points(20.0000),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
                 ..Default::default()
-            }],
-            ..Default::default()
-        });
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6876,32 +7398,38 @@ mod generated {
 
     #[test]
     fn flex_basis_and_main_dimen_set_when_flexing() {
-        let layout = stretch::compute(&stretch::style::Node {
-            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100.0000), ..Default::default() },
-            children: vec![
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Points(10.0000),
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(50.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
-                        ..Default::default()
-                    },
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0000),
                     ..Default::default()
                 },
-                stretch::style::Node {
-                    flex_grow: 1.0000,
-                    flex_basis: stretch::style::Dimension::Points(10.0000),
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(0.0000),
-                        height: stretch::style::Dimension::Points(50.0000),
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Points(10.0000),
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
                         ..Default::default()
                     },
-                    ..Default::default()
-                },
-            ],
-            ..Default::default()
-        });
+                    stretch::style::Node {
+                        flex_grow: 1.0000,
+                        flex_basis: stretch::style::Dimension::Points(10.0000),
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(0.0000),
+                            height: stretch::style::Dimension::Points(50.0000),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -6921,20 +7449,26 @@ mod generated {
 
     #[test]
     fn flex_basis_smaller_than_main_dimen_column() {
-        let layout = stretch::compute(&stretch::style::Node {
-            flex_direction: stretch::style::FlexDirection::Column,
-            size: stretch::geometry::Size { height: stretch::style::Dimension::Points(10

Parcheqa qatikun, ichaqa kaypi kuchusqa: gitwan committa mañakuy llapanta rikunaykipaq.