tawasuyu

tawasuyu/taffy

A high performance rust-powered UI layout library

Rust 583HTML 275Markdown 8TOML 41586 Definiciones

Generate benchmarks for all test fixtures

8024120f87fc30308be94abc65ab3b55dccfc4c1 · por Emil Sjölander · (hace 7 años) · padre 51b6d7216 · ver el árbol en este commit

Delta semántico · 482

benches/complex.rs

benches/generated.rs

benches/generated/absolute_layout_align_items_and_justify_content_center.rs

benches/generated/absolute_layout_align_items_and_justify_content_center_and_bottom_position.rs

benches/generated/absolute_layout_align_items_and_justify_content_center_and_left_position.rs

benches/generated/absolute_layout_align_items_and_justify_content_center_and_right_position.rs

benches/generated/absolute_layout_align_items_and_justify_content_center_and_top_position.rs

benches/generated/absolute_layout_align_items_and_justify_content_flex_end.rs

benches/generated/absolute_layout_align_items_center.rs

benches/generated/absolute_layout_align_items_center_on_child_only.rs

benches/generated/absolute_layout_child_order.rs

benches/generated/absolute_layout_in_wrap_reverse_column_container.rs

benches/generated/absolute_layout_in_wrap_reverse_column_container_flex_end.rs

benches/generated/absolute_layout_in_wrap_reverse_row_container.rs

benches/generated/absolute_layout_in_wrap_reverse_row_container_flex_end.rs

benches/generated/absolute_layout_justify_content_center.rs

benches/generated/absolute_layout_no_size.rs

benches/generated/absolute_layout_percentage_bottom_based_on_parent_height.rs

benches/generated/absolute_layout_start_top_end_bottom.rs

benches/generated/absolute_layout_width_height_end_bottom.rs

benches/generated/absolute_layout_width_height_start_top.rs

benches/generated/absolute_layout_width_height_start_top_end_bottom.rs

benches/generated/absolute_layout_within_border.rs

benches/generated/align_baseline.rs

benches/generated/align_baseline_child_multiline.rs

benches/generated/align_baseline_nested_child.rs

benches/generated/align_center_should_size_based_on_content.rs

benches/generated/align_flex_start_with_shrinking_children.rs

benches/generated/align_flex_start_with_shrinking_children_with_stretch.rs

benches/generated/align_flex_start_with_stretching_children.rs

benches/generated/align_items_center.rs

benches/generated/align_items_center_child_with_margin_bigger_than_parent.rs

benches/generated/align_items_center_child_without_margin_bigger_than_parent.rs

benches/generated/align_items_center_with_child_margin.rs

benches/generated/align_items_center_with_child_top.rs

benches/generated/align_items_flex_end.rs

benches/generated/align_items_flex_end_child_with_margin_bigger_than_parent.rs

benches/generated/align_items_flex_end_child_without_margin_bigger_than_parent.rs

benches/generated/align_items_flex_start.rs

benches/generated/align_items_min_max.rs

benches/generated/align_items_stretch.rs

benches/generated/align_self_baseline.rs

benches/generated/align_self_center.rs

benches/generated/align_self_flex_end.rs

benches/generated/align_self_flex_end_override_flex_start.rs

benches/generated/align_self_flex_start.rs

benches/generated/align_strech_should_size_based_on_parent.rs

benches/generated/border_center_child.rs

benches/generated/border_flex_child.rs

benches/generated/border_no_child.rs

benches/generated/border_stretch_child.rs

benches/generated/child_min_max_width_flexing.rs

benches/generated/container_with_unsized_child.rs

benches/generated/display_none.rs

benches/generated/display_none_fixed_size.rs

benches/generated/display_none_with_child.rs

benches/generated/display_none_with_margin.rs

benches/generated/display_none_with_position.rs

benches/generated/flex_basis_and_main_dimen_set_when_flexing.rs

benches/generated/flex_basis_flex_grow_column.rs

benches/generated/flex_basis_flex_grow_row.rs

benches/generated/flex_basis_flex_shrink_column.rs

benches/generated/flex_basis_flex_shrink_row.rs

benches/generated/flex_basis_larger_than_content_column.rs

benches/generated/flex_basis_larger_than_content_row.rs

benches/generated/flex_basis_overrides_main_size.rs

benches/generated/flex_basis_slightly_smaller_then_content_with_flex_grow_large_size.rs

benches/generated/flex_basis_smaller_than_content_column.rs

benches/generated/flex_basis_smaller_than_content_row.rs

benches/generated/flex_basis_smaller_than_main_dimen_column.rs

benches/generated/flex_basis_smaller_than_main_dimen_row.rs

benches/generated/flex_basis_smaller_then_content_with_flex_grow_large_size.rs

benches/generated/flex_basis_smaller_then_content_with_flex_grow_small_size.rs

benches/generated/flex_basis_smaller_then_content_with_flex_grow_unconstraint_size.rs

benches/generated/flex_basis_smaller_then_content_with_flex_grow_very_large_size.rs

benches/generated/flex_basis_unconstraint_column.rs

benches/generated/flex_basis_unconstraint_row.rs

benches/generated/flex_direction_column.rs

benches/generated/flex_direction_column_no_height.rs

benches/generated/flex_direction_column_reverse.rs

benches/generated/flex_direction_row.rs

benches/generated/flex_direction_row_no_width.rs

benches/generated/flex_direction_row_reverse.rs

benches/generated/flex_grow_child.rs

benches/generated/flex_grow_flex_basis_percent_min_max.rs

benches/generated/flex_grow_height_maximized.rs

benches/generated/flex_grow_in_at_most_container.rs

benches/generated/flex_grow_less_than_factor_one.rs

benches/generated/flex_grow_root_minimized.rs

benches/generated/flex_grow_shrink_at_most.rs

benches/generated/flex_grow_to_min.rs

benches/generated/flex_grow_within_constrained_max_column.rs

benches/generated/flex_grow_within_constrained_max_row.rs

benches/generated/flex_grow_within_constrained_max_width.rs

benches/generated/flex_grow_within_constrained_min_column.rs

benches/generated/flex_grow_within_constrained_min_max_column.rs

benches/generated/flex_grow_within_constrained_min_row.rs

benches/generated/flex_grow_within_max_width.rs

benches/generated/flex_root_ignored.rs

benches/generated/flex_shrink_by_outer_margin_with_max_size.rs

benches/generated/flex_shrink_flex_grow_child_flex_shrink_other_child.rs

benches/generated/flex_shrink_flex_grow_row.rs

benches/generated/flex_shrink_to_zero.rs

benches/generated/flex_wrap_align_stretch_fits_one_row.rs

benches/generated/flex_wrap_children_with_min_main_overriding_flex_basis.rs

benches/generated/flex_wrap_wrap_to_child_height.rs

benches/generated/justify_content_column_center.rs

benches/generated/justify_content_column_flex_end.rs

benches/generated/justify_content_column_flex_start.rs

benches/generated/justify_content_column_min_height_and_margin_bottom.rs

benches/generated/justify_content_column_min_height_and_margin_top.rs

benches/generated/justify_content_column_space_around.rs

benches/generated/justify_content_column_space_between.rs

benches/generated/justify_content_column_space_evenly.rs

benches/generated/justify_content_min_max.rs

benches/generated/justify_content_min_width_with_padding_child_width_greater_than_parent.rs

benches/generated/justify_content_min_width_with_padding_child_width_lower_than_parent.rs

benches/generated/justify_content_overflow_min_max.rs

benches/generated/justify_content_row_center.rs

benches/generated/justify_content_row_flex_end.rs

benches/generated/justify_content_row_flex_start.rs

benches/generated/justify_content_row_max_width_and_margin.rs

benches/generated/justify_content_row_min_width_and_margin.rs

benches/generated/justify_content_row_space_around.rs

benches/generated/justify_content_row_space_between.rs

benches/generated/justify_content_row_space_evenly.rs

benches/generated/margin_and_flex_column.rs

benches/generated/margin_and_flex_row.rs

benches/generated/margin_and_stretch_column.rs

benches/generated/margin_and_stretch_row.rs

benches/generated/margin_auto_bottom.rs

benches/generated/margin_auto_bottom_and_top.rs

benches/generated/margin_auto_bottom_and_top_justify_center.rs

benches/generated/margin_auto_left.rs

benches/generated/margin_auto_left_and_right.rs

benches/generated/margin_auto_left_and_right_column.rs

benches/generated/margin_auto_left_and_right_column_and_center.rs

benches/generated/margin_auto_left_and_right_strech.rs

benches/generated/margin_auto_left_child_bigger_than_parent.rs

benches/generated/margin_auto_left_fix_right_child_bigger_than_parent.rs

benches/generated/margin_auto_left_right_child_bigger_than_parent.rs

benches/generated/margin_auto_left_stretching_child.rs

benches/generated/margin_auto_mutiple_children_column.rs

benches/generated/margin_auto_mutiple_children_row.rs

benches/generated/margin_auto_right.rs

benches/generated/margin_auto_top.rs

benches/generated/margin_auto_top_and_bottom_strech.rs

benches/generated/margin_auto_top_stretching_child.rs

benches/generated/margin_bottom.rs

benches/generated/margin_fix_left_auto_right_child_bigger_than_parent.rs

benches/generated/margin_left.rs

benches/generated/margin_right.rs

benches/generated/margin_should_not_be_part_of_max_height.rs

benches/generated/margin_should_not_be_part_of_max_width.rs

benches/generated/margin_top.rs

benches/generated/margin_with_sibling_column.rs

benches/generated/margin_with_sibling_row.rs

benches/generated/max_height.rs

benches/generated/max_height_overrides_height.rs

benches/generated/max_height_overrides_height_on_root.rs

benches/generated/max_width.rs

benches/generated/max_width_overrides_width.rs

benches/generated/max_width_overrides_width_on_root.rs

benches/generated/min_height.rs

benches/generated/min_height_overrides_height.rs

benches/generated/min_height_overrides_height_on_root.rs

benches/generated/min_max_percent_no_width_height.rs

benches/generated/min_width.rs

benches/generated/min_width_overrides_width.rs

benches/generated/min_width_overrides_width_on_root.rs

benches/generated/mod.rs

benches/generated/nested_overflowing_child.rs

benches/generated/nested_overflowing_child_in_constraint_parent.rs

benches/generated/overflow_cross_axis.rs

benches/generated/overflow_main_axis.rs

benches/generated/padding_align_end_child.rs

benches/generated/padding_center_child.rs

benches/generated/padding_flex_child.rs

benches/generated/padding_no_child.rs

benches/generated/padding_stretch_child.rs

benches/generated/parent_wrap_child_size_overflowing_parent.rs

benches/generated/percent_absolute_position.rs

benches/generated/percent_within_flex_grow.rs

benches/generated/percentage_absolute_position.rs

benches/generated/percentage_container_in_wrapping_container.rs

benches/generated/percentage_flex_basis.rs

benches/generated/percentage_flex_basis_cross.rs

benches/generated/percentage_flex_basis_cross_max_height.rs

benches/generated/percentage_flex_basis_cross_max_width.rs

benches/generated/percentage_flex_basis_cross_min_height.rs

benches/generated/percentage_flex_basis_cross_min_width.rs

benches/generated/percentage_flex_basis_main_max_height.rs

benches/generated/percentage_flex_basis_main_max_width.rs

benches/generated/percentage_flex_basis_main_min_width.rs

benches/generated/percentage_margin_should_calculate_based_only_on_width.rs

benches/generated/percentage_multiple_nested_with_padding_margin_and_percentage_values.rs

benches/generated/percentage_padding_should_calculate_based_only_on_width.rs

benches/generated/percentage_position_bottom_right.rs

benches/generated/percentage_position_left_top.rs

benches/generated/percentage_size_based_on_parent_inner_size.rs

benches/generated/percentage_size_of_flex_basis.rs

benches/generated/percentage_width_height.rs

benches/generated/percentage_width_height_undefined_parent_size.rs

benches/generated/relative_position_should_not_nudge_siblings.rs

benches/generated/rounding_flex_basis_flex_grow_row_prime_number_width.rs

benches/generated/rounding_flex_basis_flex_grow_row_width_of_100.rs

benches/generated/rounding_flex_basis_flex_shrink_row.rs

benches/generated/rounding_flex_basis_overrides_main_size.rs

benches/generated/rounding_fractial_input_1.rs

benches/generated/rounding_fractial_input_2.rs

benches/generated/rounding_fractial_input_3.rs

benches/generated/rounding_fractial_input_4.rs

benches/generated/rounding_total_fractial.rs

benches/generated/rounding_total_fractial_nested.rs

benches/generated/size_defined_by_child.rs

benches/generated/size_defined_by_child_with_border.rs

benches/generated/size_defined_by_child_with_padding.rs

benches/generated/size_defined_by_grand_child.rs

benches/generated/width_smaller_then_content_with_flex_grow_large_size.rs

benches/generated/width_smaller_then_content_with_flex_grow_small_size.rs

benches/generated/width_smaller_then_content_with_flex_grow_unconstraint_size.rs

benches/generated/width_smaller_then_content_with_flex_grow_very_large_size.rs

benches/generated/wrap_column.rs

benches/generated/wrap_nodes_with_content_sizing_margin_cross.rs

benches/generated/wrap_nodes_with_content_sizing_overflowing_margin.rs

benches/generated/wrap_reverse_column.rs

benches/generated/wrap_reverse_column_fixed_size.rs

benches/generated/wrap_reverse_row.rs

benches/generated/wrap_reverse_row_align_content_center.rs

benches/generated/wrap_reverse_row_align_content_flex_start.rs

benches/generated/wrap_reverse_row_align_content_space_around.rs

benches/generated/wrap_reverse_row_align_content_stretch.rs

benches/generated/wrap_reverse_row_single_line_different_size.rs

benches/generated/wrap_row.rs

benches/generated/wrap_row_align_items_center.rs

benches/generated/wrap_row_align_items_flex_end.rs

benches/generated/wrapped_column_max_height.rs

benches/generated/wrapped_column_max_height_flex.rs

benches/generated/wrapped_row_within_align_items_center.rs

benches/generated/wrapped_row_within_align_items_flex_end.rs

benches/generated/wrapped_row_within_align_items_flex_start.rs

scripts/gentest/src/main.rs

244 archivos · +8351 −114

diff --git a/Cargo.toml b/Cargo.toml
index b26aba789..e14a1848e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -31,6 +31,11 @@ panic = 'abort'
 
 [[bench]]
 name = "generated"
+path = "benches/generated/mod.rs"
+harness = false
+
+[[bench]]
+name = "complex"
 harness = false
 
 [workspace]
diff --git a/benches/generated.rs b/benches/complex.rs
similarity index 100%
rename from benches/generated.rs
rename to benches/complex.rs
diff --git a/benches/generated/absolute_layout_align_items_and_justify_content_center.rs b/benches/generated/absolute_layout_align_items_and_justify_content_center.rs
new file mode 100644
index 000000000..abdcfb8e2
--- /dev/null
+++ b/benches/generated/absolute_layout_align_items_and_justify_content_center.rs
@@ -0,0 +1,25 @@
+pub fn compute() -> stretch::layout::Node {
+    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(110f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(60f32),
+                    height: stretch::style::Dimension::Points(40f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_align_items_and_justify_content_center_and_bottom_position.rs b/benches/generated/absolute_layout_align_items_and_justify_content_center_and_bottom_position.rs
new file mode 100644
index 000000000..5f80ae758
--- /dev/null
+++ b/benches/generated/absolute_layout_align_items_and_justify_content_center_and_bottom_position.rs
@@ -0,0 +1,29 @@
+pub fn compute() -> stretch::layout::Node {
+    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(110f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(60f32),
+                    height: stretch::style::Dimension::Points(40f32),
+                    ..Default::default()
+                },
+                position: stretch::geometry::Rect {
+                    bottom: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_align_items_and_justify_content_center_and_left_position.rs b/benches/generated/absolute_layout_align_items_and_justify_content_center_and_left_position.rs
new file mode 100644
index 000000000..b6b697f2d
--- /dev/null
+++ b/benches/generated/absolute_layout_align_items_and_justify_content_center_and_left_position.rs
@@ -0,0 +1,29 @@
+pub fn compute() -> stretch::layout::Node {
+    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(110f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(60f32),
+                    height: stretch::style::Dimension::Points(40f32),
+                    ..Default::default()
+                },
+                position: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(5f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_align_items_and_justify_content_center_and_right_position.rs b/benches/generated/absolute_layout_align_items_and_justify_content_center_and_right_position.rs
new file mode 100644
index 000000000..fd11f81ec
--- /dev/null
+++ b/benches/generated/absolute_layout_align_items_and_justify_content_center_and_right_position.rs
@@ -0,0 +1,29 @@
+pub fn compute() -> stretch::layout::Node {
+    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(110f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(60f32),
+                    height: stretch::style::Dimension::Points(40f32),
+                    ..Default::default()
+                },
+                position: stretch::geometry::Rect {
+                    end: stretch::style::Dimension::Points(5f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_align_items_and_justify_content_center_and_top_position.rs b/benches/generated/absolute_layout_align_items_and_justify_content_center_and_top_position.rs
new file mode 100644
index 000000000..09d76c68f
--- /dev/null
+++ b/benches/generated/absolute_layout_align_items_and_justify_content_center_and_top_position.rs
@@ -0,0 +1,29 @@
+pub fn compute() -> stretch::layout::Node {
+    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(110f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(60f32),
+                    height: stretch::style::Dimension::Points(40f32),
+                    ..Default::default()
+                },
+                position: stretch::geometry::Rect {
+                    top: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_align_items_and_justify_content_flex_end.rs b/benches/generated/absolute_layout_align_items_and_justify_content_flex_end.rs
new file mode 100644
index 000000000..5153f0909
--- /dev/null
+++ b/benches/generated/absolute_layout_align_items_and_justify_content_flex_end.rs
@@ -0,0 +1,25 @@
+pub fn compute() -> stretch::layout::Node {
+    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(110f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(60f32),
+                    height: stretch::style::Dimension::Points(40f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_align_items_center.rs b/benches/generated/absolute_layout_align_items_center.rs
new file mode 100644
index 000000000..e98ca6106
--- /dev/null
+++ b/benches/generated/absolute_layout_align_items_center.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(110f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(60f32),
+                    height: stretch::style::Dimension::Points(40f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_align_items_center_on_child_only.rs b/benches/generated/absolute_layout_align_items_center_on_child_only.rs
new file mode 100644
index 000000000..ef82d2adb
--- /dev/null
+++ b/benches/generated/absolute_layout_align_items_center_on_child_only.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(110f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..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(60f32),
+                    height: stretch::style::Dimension::Points(40f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_child_order.rs b/benches/generated/absolute_layout_child_order.rs
new file mode 100644
index 000000000..07a422c3d
--- /dev/null
+++ b/benches/generated/absolute_layout_child_order.rs
@@ -0,0 +1,43 @@
+pub fn compute() -> stretch::layout::Node {
+    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(110f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(60f32),
+                        height: stretch::style::Dimension::Points(40f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(60f32),
+                        height: stretch::style::Dimension::Points(40f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(60f32),
+                        height: stretch::style::Dimension::Points(40f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_in_wrap_reverse_column_container.rs b/benches/generated/absolute_layout_in_wrap_reverse_column_container.rs
new file mode 100644
index 000000000..2b23f65c3
--- /dev/null
+++ b/benches/generated/absolute_layout_in_wrap_reverse_column_container.rs
@@ -0,0 +1,25 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(20f32),
+                    height: stretch::style::Dimension::Points(20f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_in_wrap_reverse_column_container_flex_end.rs b/benches/generated/absolute_layout_in_wrap_reverse_column_container_flex_end.rs
new file mode 100644
index 000000000..623e91a1e
--- /dev/null
+++ b/benches/generated/absolute_layout_in_wrap_reverse_column_container_flex_end.rs
@@ -0,0 +1,26 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..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(20f32),
+                    height: stretch::style::Dimension::Points(20f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_in_wrap_reverse_row_container.rs b/benches/generated/absolute_layout_in_wrap_reverse_row_container.rs
new file mode 100644
index 000000000..0c9c77c58
--- /dev/null
+++ b/benches/generated/absolute_layout_in_wrap_reverse_row_container.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_wrap: stretch::style::FlexWrap::WrapReverse,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(20f32),
+                    height: stretch::style::Dimension::Points(20f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_in_wrap_reverse_row_container_flex_end.rs b/benches/generated/absolute_layout_in_wrap_reverse_row_container_flex_end.rs
new file mode 100644
index 000000000..08aa8e8ea
--- /dev/null
+++ b/benches/generated/absolute_layout_in_wrap_reverse_row_container_flex_end.rs
@@ -0,0 +1,25 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_wrap: stretch::style::FlexWrap::WrapReverse,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..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(20f32),
+                    height: stretch::style::Dimension::Points(20f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_justify_content_center.rs b/benches/generated/absolute_layout_justify_content_center.rs
new file mode 100644
index 000000000..5d1b13f9c
--- /dev/null
+++ b/benches/generated/absolute_layout_justify_content_center.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            justify_content: stretch::style::JustifyContent::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(110f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(60f32),
+                    height: stretch::style::Dimension::Points(40f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_no_size.rs b/benches/generated/absolute_layout_no_size.rs
new file mode 100644
index 000000000..0a578d73b
--- /dev/null
+++ b/benches/generated/absolute_layout_no_size.rs
@@ -0,0 +1,18 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_percentage_bottom_based_on_parent_height.rs b/benches/generated/absolute_layout_percentage_bottom_based_on_parent_height.rs
new file mode 100644
index 000000000..76d8a8444
--- /dev/null
+++ b/benches/generated/absolute_layout_percentage_bottom_based_on_parent_height.rs
@@ -0,0 +1,55 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    position: stretch::geometry::Rect {
+                        top: stretch::style::Dimension::Percent(0.5f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    position: stretch::geometry::Rect {
+                        bottom: stretch::style::Dimension::Percent(0.5f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    position: stretch::geometry::Rect {
+                        top: stretch::style::Dimension::Percent(0.1f32),
+                        bottom: stretch::style::Dimension::Percent(0.1f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_start_top_end_bottom.rs b/benches/generated/absolute_layout_start_top_end_bottom.rs
new file mode 100644
index 000000000..e0df1369d
--- /dev/null
+++ b/benches/generated/absolute_layout_start_top_end_bottom.rs
@@ -0,0 +1,25 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                position: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10f32),
+                    end: stretch::style::Dimension::Points(10f32),
+                    top: stretch::style::Dimension::Points(10f32),
+                    bottom: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_width_height_end_bottom.rs b/benches/generated/absolute_layout_width_height_end_bottom.rs
new file mode 100644
index 000000000..d6e232fad
--- /dev/null
+++ b/benches/generated/absolute_layout_width_height_end_bottom.rs
@@ -0,0 +1,28 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                position: stretch::geometry::Rect {
+                    end: stretch::style::Dimension::Points(10f32),
+                    bottom: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_width_height_start_top.rs b/benches/generated/absolute_layout_width_height_start_top.rs
new file mode 100644
index 000000000..435e3e8d3
--- /dev/null
+++ b/benches/generated/absolute_layout_width_height_start_top.rs
@@ -0,0 +1,28 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                position: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10f32),
+                    top: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_width_height_start_top_end_bottom.rs b/benches/generated/absolute_layout_width_height_start_top_end_bottom.rs
new file mode 100644
index 000000000..2f4dd894c
--- /dev/null
+++ b/benches/generated/absolute_layout_width_height_start_top_end_bottom.rs
@@ -0,0 +1,30 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                position: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10f32),
+                    end: stretch::style::Dimension::Points(10f32),
+                    top: stretch::style::Dimension::Points(10f32),
+                    bottom: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/absolute_layout_within_border.rs b/benches/generated/absolute_layout_within_border.rs
new file mode 100644
index 000000000..8570c34b8
--- /dev/null
+++ b/benches/generated/absolute_layout_within_border.rs
@@ -0,0 +1,100 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    position: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(0f32),
+                        top: stretch::style::Dimension::Points(0f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    position: stretch::geometry::Rect {
+                        end: stretch::style::Dimension::Points(0f32),
+                        bottom: stretch::style::Dimension::Points(0f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(10f32),
+                        end: stretch::style::Dimension::Points(10f32),
+                        top: stretch::style::Dimension::Points(10f32),
+                        bottom: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    position: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(0f32),
+                        top: stretch::style::Dimension::Points(0f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    position_type: stretch::style::PositionType::Absolute,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(10f32),
+                        end: stretch::style::Dimension::Points(10f32),
+                        top: stretch::style::Dimension::Points(10f32),
+                        bottom: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    position: stretch::geometry::Rect {
+                        end: stretch::style::Dimension::Points(0f32),
+                        bottom: stretch::style::Dimension::Points(0f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            padding: stretch::geometry::Rect {
+                start: stretch::style::Dimension::Points(10f32),
+                end: stretch::style::Dimension::Points(10f32),
+                top: stretch::style::Dimension::Points(10f32),
+                bottom: stretch::style::Dimension::Points(10f32),
+                ..Default::default()
+            },
+            border: stretch::geometry::Rect {
+                start: stretch::style::Dimension::Points(10f32),
+                end: stretch::style::Dimension::Points(10f32),
+                top: stretch::style::Dimension::Points(10f32),
+                bottom: stretch::style::Dimension::Points(10f32),
+                ..Default::default()
+            },
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_baseline.rs b/benches/generated/align_baseline.rs
new file mode 100644
index 000000000..340f67491
--- /dev/null
+++ b/benches/generated/align_baseline.rs
@@ -0,0 +1,33 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Baseline,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_baseline_child_multiline.rs b/benches/generated/align_baseline_child_multiline.rs
new file mode 100644
index 000000000..c9327e7db
--- /dev/null
+++ b/benches/generated/align_baseline_child_multiline.rs
@@ -0,0 +1,63 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Baseline,
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(60f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_wrap: stretch::style::FlexWrap::Wrap,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    children: vec![
+                        stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(25f32),
+                                height: stretch::style::Dimension::Points(20f32),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        },
+                        stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(25f32),
+                                height: stretch::style::Dimension::Points(10f32),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        },
+                        stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(25f32),
+                                height: stretch::style::Dimension::Points(20f32),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        },
+                        stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(25f32),
+                                height: stretch::style::Dimension::Points(10f32),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        },
+                    ],
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_baseline_nested_child.rs b/benches/generated/align_baseline_nested_child.rs
new file mode 100644
index 000000000..48de8d892
--- /dev/null
+++ b/benches/generated/align_baseline_nested_child.rs
@@ -0,0 +1,42 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Baseline,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50f32),
+                            height: stretch::style::Dimension::Points(10f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_center_should_size_based_on_content.rs b/benches/generated/align_center_should_size_based_on_content.rs
new file mode 100644
index 000000000..a705fdfba
--- /dev/null
+++ b/benches/generated/align_center_should_size_based_on_content.rs
@@ -0,0 +1,34 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                justify_content: stretch::style::JustifyContent::Center,
+                flex_grow: 0f32,
+                flex_shrink: 1f32,
+                children: vec![stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_shrink: 1f32,
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(20f32),
+                            height: stretch::style::Dimension::Points(20f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_flex_start_with_shrinking_children.rs b/benches/generated/align_flex_start_with_shrinking_children.rs
new file mode 100644
index 000000000..7e9f26b1a
--- /dev/null
+++ b/benches/generated/align_flex_start_with_shrinking_children.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(500f32),
+                height: stretch::style::Dimension::Points(500f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                align_items: stretch::style::AlignItems::FlexStart,
+                children: vec![stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_shrink: 1f32,
+                    children: vec![stretch::style::Node { flex_grow: 1f32, flex_shrink: 1f32, ..Default::default() }],
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_flex_start_with_shrinking_children_with_stretch.rs b/benches/generated/align_flex_start_with_shrinking_children_with_stretch.rs
new file mode 100644
index 000000000..7e9f26b1a
--- /dev/null
+++ b/benches/generated/align_flex_start_with_shrinking_children_with_stretch.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(500f32),
+                height: stretch::style::Dimension::Points(500f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                align_items: stretch::style::AlignItems::FlexStart,
+                children: vec![stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_shrink: 1f32,
+                    children: vec![stretch::style::Node { flex_grow: 1f32, flex_shrink: 1f32, ..Default::default() }],
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_flex_start_with_stretching_children.rs b/benches/generated/align_flex_start_with_stretching_children.rs
new file mode 100644
index 000000000..fddeb7397
--- /dev/null
+++ b/benches/generated/align_flex_start_with_stretching_children.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(500f32),
+                height: stretch::style::Dimension::Points(500f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                children: vec![stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_shrink: 1f32,
+                    children: vec![stretch::style::Node { flex_grow: 1f32, flex_shrink: 1f32, ..Default::default() }],
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_items_center.rs b/benches/generated/align_items_center.rs
new file mode 100644
index 000000000..a17cf6bdd
--- /dev/null
+++ b/benches/generated/align_items_center.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_items_center_child_with_margin_bigger_than_parent.rs b/benches/generated/align_items_center_child_with_margin_bigger_than_parent.rs
new file mode 100644
index 000000000..4d1e7932a
--- /dev/null
+++ b/benches/generated/align_items_center_child_with_margin_bigger_than_parent.rs
@@ -0,0 +1,33 @@
+pub fn compute() -> stretch::layout::Node {
+    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(50f32),
+                height: stretch::style::Dimension::Points(50f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                align_items: stretch::style::AlignItems::Center,
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(10f32),
+                        end: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_items_center_child_without_margin_bigger_than_parent.rs b/benches/generated/align_items_center_child_without_margin_bigger_than_parent.rs
new file mode 100644
index 000000000..ff5262cb4
--- /dev/null
+++ b/benches/generated/align_items_center_child_without_margin_bigger_than_parent.rs
@@ -0,0 +1,28 @@
+pub fn compute() -> stretch::layout::Node {
+    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(50f32),
+                height: stretch::style::Dimension::Points(50f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                align_items: stretch::style::AlignItems::Center,
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(70f32),
+                        height: stretch::style::Dimension::Points(70f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_items_center_with_child_margin.rs b/benches/generated/align_items_center_with_child_margin.rs
new file mode 100644
index 000000000..d23748a1b
--- /dev/null
+++ b/benches/generated/align_items_center_with_child_margin.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                margin: stretch::geometry::Rect { top: stretch::style::Dimension::Points(10f32), ..Default::default() },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_items_center_with_child_top.rs b/benches/generated/align_items_center_with_child_top.rs
new file mode 100644
index 000000000..39af96743
--- /dev/null
+++ b/benches/generated/align_items_center_with_child_top.rs
@@ -0,0 +1,27 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                position: stretch::geometry::Rect {
+                    top: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_items_flex_end.rs b/benches/generated/align_items_flex_end.rs
new file mode 100644
index 000000000..c8dfffed4
--- /dev/null
+++ b/benches/generated/align_items_flex_end.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::FlexEnd,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_items_flex_end_child_with_margin_bigger_than_parent.rs b/benches/generated/align_items_flex_end_child_with_margin_bigger_than_parent.rs
new file mode 100644
index 000000000..603e64143
--- /dev/null
+++ b/benches/generated/align_items_flex_end_child_with_margin_bigger_than_parent.rs
@@ -0,0 +1,33 @@
+pub fn compute() -> stretch::layout::Node {
+    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(50f32),
+                height: stretch::style::Dimension::Points(50f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                align_items: stretch::style::AlignItems::FlexEnd,
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(10f32),
+                        end: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_items_flex_end_child_without_margin_bigger_than_parent.rs b/benches/generated/align_items_flex_end_child_without_margin_bigger_than_parent.rs
new file mode 100644
index 000000000..387819e5a
--- /dev/null
+++ b/benches/generated/align_items_flex_end_child_without_margin_bigger_than_parent.rs
@@ -0,0 +1,28 @@
+pub fn compute() -> stretch::layout::Node {
+    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(50f32),
+                height: stretch::style::Dimension::Points(50f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                align_items: stretch::style::AlignItems::FlexEnd,
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(70f32),
+                        height: stretch::style::Dimension::Points(70f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_items_flex_start.rs b/benches/generated/align_items_flex_start.rs
new file mode 100644
index 000000000..cdd29792b
--- /dev/null
+++ b/benches/generated/align_items_flex_start.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::FlexStart,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_items_min_max.rs b/benches/generated/align_items_min_max.rs
new file mode 100644
index 000000000..e4f258b06
--- /dev/null
+++ b/benches/generated/align_items_min_max.rs
@@ -0,0 +1,28 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32), ..Default::default() },
+            min_size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            max_size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(60f32),
+                    height: stretch::style::Dimension::Points(60f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_items_stretch.rs b/benches/generated/align_items_stretch.rs
new file mode 100644
index 000000000..b68f0471a
--- /dev/null
+++ b/benches/generated/align_items_stretch.rs
@@ -0,0 +1,18 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size { width: stretch::style::Dimension::Points(10f32), ..Default::default() },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_self_baseline.rs b/benches/generated/align_self_baseline.rs
new file mode 100644
index 000000000..a86faab52
--- /dev/null
+++ b/benches/generated/align_self_baseline.rs
@@ -0,0 +1,42 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    align_self: stretch::style::AlignSelf::Baseline,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    align_self: stretch::style::AlignSelf::Baseline,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50f32),
+                            height: stretch::style::Dimension::Points(10f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_self_center.rs b/benches/generated/align_self_center.rs
new file mode 100644
index 000000000..0676f4d57
--- /dev/null
+++ b/benches/generated/align_self_center.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                align_self: stretch::style::AlignSelf::Center,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_self_flex_end.rs b/benches/generated/align_self_flex_end.rs
new file mode 100644
index 000000000..dd3cb0b1c
--- /dev/null
+++ b/benches/generated/align_self_flex_end.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                align_self: stretch::style::AlignSelf::FlexEnd,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_self_flex_end_override_flex_start.rs b/benches/generated/align_self_flex_end_override_flex_start.rs
new file mode 100644
index 000000000..8c3fe8168
--- /dev/null
+++ b/benches/generated/align_self_flex_end_override_flex_start.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::FlexStart,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                align_self: stretch::style::AlignSelf::FlexEnd,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_self_flex_start.rs b/benches/generated/align_self_flex_start.rs
new file mode 100644
index 000000000..e4ab69fd0
--- /dev/null
+++ b/benches/generated/align_self_flex_start.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                align_self: stretch::style::AlignSelf::FlexStart,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/align_strech_should_size_based_on_parent.rs b/benches/generated/align_strech_should_size_based_on_parent.rs
new file mode 100644
index 000000000..e3284fb51
--- /dev/null
+++ b/benches/generated/align_strech_should_size_based_on_parent.rs
@@ -0,0 +1,33 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                justify_content: stretch::style::JustifyContent::Center,
+                flex_grow: 0f32,
+                flex_shrink: 1f32,
+                children: vec![stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_shrink: 1f32,
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(20f32),
+                            height: stretch::style::Dimension::Points(20f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/border_center_child.rs b/benches/generated/border_center_child.rs
new file mode 100644
index 000000000..da006a60e
--- /dev/null
+++ b/benches/generated/border_center_child.rs
@@ -0,0 +1,29 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            border: stretch::geometry::Rect {
+                top: stretch::style::Dimension::Points(10f32),
+                bottom: stretch::style::Dimension::Points(20f32),
+                ..Default::default()
+            },
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/border_flex_child.rs b/benches/generated/border_flex_child.rs
new file mode 100644
index 000000000..12eb0ccad
--- /dev/null
+++ b/benches/generated/border_flex_child.rs
@@ -0,0 +1,26 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                flex_grow: 1f32,
+                size: stretch::geometry::Size { width: stretch::style::Dimension::Points(10f32), ..Default::default() },
+                ..Default::default()
+            }],
+            border: stretch::geometry::Rect {
+                start: stretch::style::Dimension::Points(10f32),
+                end: stretch::style::Dimension::Points(10f32),
+                top: stretch::style::Dimension::Points(10f32),
+                bottom: stretch::style::Dimension::Points(10f32),
+                ..Default::default()
+            },
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/border_no_child.rs b/benches/generated/border_no_child.rs
new file mode 100644
index 000000000..e3dae5993
--- /dev/null
+++ b/benches/generated/border_no_child.rs
@@ -0,0 +1,16 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            border: stretch::geometry::Rect {
+                start: stretch::style::Dimension::Points(10f32),
+                end: stretch::style::Dimension::Points(10f32),
+                top: stretch::style::Dimension::Points(10f32),
+                bottom: stretch::style::Dimension::Points(10f32),
+                ..Default::default()
+            },
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/border_stretch_child.rs b/benches/generated/border_stretch_child.rs
new file mode 100644
index 000000000..557056719
--- /dev/null
+++ b/benches/generated/border_stretch_child.rs
@@ -0,0 +1,25 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size { width: stretch::style::Dimension::Points(10f32), ..Default::default() },
+                ..Default::default()
+            }],
+            border: stretch::geometry::Rect {
+                start: stretch::style::Dimension::Points(10f32),
+                end: stretch::style::Dimension::Points(10f32),
+                top: stretch::style::Dimension::Points(10f32),
+                bottom: stretch::style::Dimension::Points(10f32),
+                ..Default::default()
+            },
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/child_min_max_width_flexing.rs b/benches/generated/child_min_max_width_flexing.rs
new file mode 100644
index 000000000..dde03f2c9
--- /dev/null
+++ b/benches/generated/child_min_max_width_flexing.rs
@@ -0,0 +1,36 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(120f32),
+                height: stretch::style::Dimension::Points(50f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_shrink: 0f32,
+                    flex_basis: stretch::style::Dimension::Points(0f32),
+                    min_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(60f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_shrink: 0f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.5f32),
+                    max_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/container_with_unsized_child.rs b/benches/generated/container_with_unsized_child.rs
new file mode 100644
index 000000000..7e935e6ef
--- /dev/null
+++ b/benches/generated/container_with_unsized_child.rs
@@ -0,0 +1,15 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node { ..Default::default() }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/display_none.rs b/benches/generated/display_none.rs
new file mode 100644
index 000000000..b2dcd1d32
--- /dev/null
+++ b/benches/generated/display_none.rs
@@ -0,0 +1,18 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+                stretch::style::Node { display: stretch::style::Display::None, flex_grow: 1f32, ..Default::default() },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/display_none_fixed_size.rs b/benches/generated/display_none_fixed_size.rs
new file mode 100644
index 000000000..512ac34ce
--- /dev/null
+++ b/benches/generated/display_none_fixed_size.rs
@@ -0,0 +1,26 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+                stretch::style::Node {
+                    display: stretch::style::Display::None,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(20f32),
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/display_none_with_child.rs b/benches/generated/display_none_with_child.rs
new file mode 100644
index 000000000..bceb7f72a
--- /dev/null
+++ b/benches/generated/display_none_with_child.rs
@@ -0,0 +1,46 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_shrink: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0f32),
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    display: stretch::style::Display::None,
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    flex_shrink: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0f32),
+                    children: vec![stretch::style::Node {
+                        flex_grow: 1f32,
+                        flex_shrink: 1f32,
+                        flex_basis: stretch::style::Dimension::Percent(0f32),
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(20f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_shrink: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0f32),
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/display_none_with_margin.rs b/benches/generated/display_none_with_margin.rs
new file mode 100644
index 000000000..924a51175
--- /dev/null
+++ b/benches/generated/display_none_with_margin.rs
@@ -0,0 +1,33 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    display: stretch::style::Display::None,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(20f32),
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(10f32),
+                        end: stretch::style::Dimension::Points(10f32),
+                        top: stretch::style::Dimension::Points(10f32),
+                        bottom: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/display_none_with_position.rs b/benches/generated/display_none_with_position.rs
new file mode 100644
index 000000000..342a77a3e
--- /dev/null
+++ b/benches/generated/display_none_with_position.rs
@@ -0,0 +1,26 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+                stretch::style::Node {
+                    display: stretch::style::Display::None,
+                    flex_grow: 1f32,
+                    position: stretch::geometry::Rect {
+                        top: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_and_main_dimen_set_when_flexing.rs b/benches/generated/flex_basis_and_main_dimen_set_when_flexing.rs
new file mode 100644
index 000000000..4d96aed99
--- /dev/null
+++ b/benches/generated/flex_basis_and_main_dimen_set_when_flexing.rs
@@ -0,0 +1,32 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(10f32),
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(10f32),
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(0f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_flex_grow_column.rs b/benches/generated/flex_basis_flex_grow_column.rs
new file mode 100644
index 000000000..c73ddd60a
--- /dev/null
+++ b/benches/generated/flex_basis_flex_grow_column.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(50f32),
+                    ..Default::default()
+                },
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_flex_grow_row.rs b/benches/generated/flex_basis_flex_grow_row.rs
new file mode 100644
index 000000000..c791dfbab
--- /dev/null
+++ b/benches/generated/flex_basis_flex_grow_row.rs
@@ -0,0 +1,22 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(50f32),
+                    ..Default::default()
+                },
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_flex_shrink_column.rs b/benches/generated/flex_basis_flex_shrink_column.rs
new file mode 100644
index 000000000..84d335af1
--- /dev/null
+++ b/benches/generated/flex_basis_flex_shrink_column.rs
@@ -0,0 +1,19 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node { flex_basis: stretch::style::Dimension::Points(100f32), ..Default::default() },
+                stretch::style::Node { flex_basis: stretch::style::Dimension::Points(50f32), ..Default::default() },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_flex_shrink_row.rs b/benches/generated/flex_basis_flex_shrink_row.rs
new file mode 100644
index 000000000..8ceb5d1ef
--- /dev/null
+++ b/benches/generated/flex_basis_flex_shrink_row.rs
@@ -0,0 +1,18 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node { flex_basis: stretch::style::Dimension::Points(100f32), ..Default::default() },
+                stretch::style::Node { flex_basis: stretch::style::Dimension::Points(50f32), ..Default::default() },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_larger_than_content_column.rs b/benches/generated/flex_basis_larger_than_content_column.rs
new file mode 100644
index 000000000..cdfde7fc4
--- /dev/null
+++ b/benches/generated/flex_basis_larger_than_content_column.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size { height: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                flex_basis: stretch::style::Dimension::Points(50f32),
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100f32),
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_larger_than_content_row.rs b/benches/generated/flex_basis_larger_than_content_row.rs
new file mode 100644
index 000000000..979134ab1
--- /dev/null
+++ b/benches/generated/flex_basis_larger_than_content_row.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                flex_basis: stretch::style::Dimension::Points(50f32),
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        height: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_overrides_main_size.rs b/benches/generated/flex_basis_overrides_main_size.rs
new file mode 100644
index 000000000..e6262123d
--- /dev/null
+++ b/benches/generated/flex_basis_overrides_main_size.rs
@@ -0,0 +1,41 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(50f32),
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_slightly_smaller_then_content_with_flex_grow_large_size.rs b/benches/generated/flex_basis_slightly_smaller_then_content_with_flex_grow_large_size.rs
new file mode 100644
index 000000000..a36efbde3
--- /dev/null
+++ b/benches/generated/flex_basis_slightly_smaller_then_content_with_flex_grow_large_size.rs
@@ -0,0 +1,40 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(60f32),
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(70f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(0f32),
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(20f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_smaller_than_content_column.rs b/benches/generated/flex_basis_smaller_than_content_column.rs
new file mode 100644
index 000000000..e195bfa7c
--- /dev/null
+++ b/benches/generated/flex_basis_smaller_than_content_column.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size { height: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                flex_basis: stretch::style::Dimension::Points(50f32),
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100f32),
+                        height: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_smaller_than_content_row.rs b/benches/generated/flex_basis_smaller_than_content_row.rs
new file mode 100644
index 000000000..a82d1d6bf
--- /dev/null
+++ b/benches/generated/flex_basis_smaller_than_content_row.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                flex_basis: stretch::style::Dimension::Points(50f32),
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100f32),
+                        height: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_smaller_than_main_dimen_column.rs b/benches/generated/flex_basis_smaller_than_main_dimen_column.rs
new file mode 100644
index 000000000..ed59ab8be
--- /dev/null
+++ b/benches/generated/flex_basis_smaller_than_main_dimen_column.rs
@@ -0,0 +1,20 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size { height: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![stretch::style::Node {
+                flex_basis: stretch::style::Dimension::Points(10f32),
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(50f32),
+                    height: stretch::style::Dimension::Points(50f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_smaller_than_main_dimen_row.rs b/benches/generated/flex_basis_smaller_than_main_dimen_row.rs
new file mode 100644
index 000000000..daf682cf4
--- /dev/null
+++ b/benches/generated/flex_basis_smaller_than_main_dimen_row.rs
@@ -0,0 +1,19 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![stretch::style::Node {
+                flex_basis: stretch::style::Dimension::Points(10f32),
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(50f32),
+                    height: stretch::style::Dimension::Points(50f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_smaller_then_content_with_flex_grow_large_size.rs b/benches/generated/flex_basis_smaller_then_content_with_flex_grow_large_size.rs
new file mode 100644
index 000000000..542229616
--- /dev/null
+++ b/benches/generated/flex_basis_smaller_then_content_with_flex_grow_large_size.rs
@@ -0,0 +1,40 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(0f32),
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(70f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(0f32),
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(20f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_smaller_then_content_with_flex_grow_small_size.rs b/benches/generated/flex_basis_smaller_then_content_with_flex_grow_small_size.rs
new file mode 100644
index 000000000..705ea8bbf
--- /dev/null
+++ b/benches/generated/flex_basis_smaller_then_content_with_flex_grow_small_size.rs
@@ -0,0 +1,40 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(10f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(0f32),
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(70f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(0f32),
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(20f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_smaller_then_content_with_flex_grow_unconstraint_size.rs b/benches/generated/flex_basis_smaller_then_content_with_flex_grow_unconstraint_size.rs
new file mode 100644
index 000000000..025cafa38
--- /dev/null
+++ b/benches/generated/flex_basis_smaller_then_content_with_flex_grow_unconstraint_size.rs
@@ -0,0 +1,39 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            children: vec![
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(0f32),
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(70f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(0f32),
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(20f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_smaller_then_content_with_flex_grow_very_large_size.rs b/benches/generated/flex_basis_smaller_then_content_with_flex_grow_very_large_size.rs
new file mode 100644
index 000000000..a09ba705e
--- /dev/null
+++ b/benches/generated/flex_basis_smaller_then_content_with_flex_grow_very_large_size.rs
@@ -0,0 +1,40 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(200f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(0f32),
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(70f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(0f32),
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(20f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_unconstraint_column.rs b/benches/generated/flex_basis_unconstraint_column.rs
new file mode 100644
index 000000000..67f9632d2
--- /dev/null
+++ b/benches/generated/flex_basis_unconstraint_column.rs
@@ -0,0 +1,18 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            children: vec![stretch::style::Node {
+                flex_basis: stretch::style::Dimension::Points(50f32),
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_basis_unconstraint_row.rs b/benches/generated/flex_basis_unconstraint_row.rs
new file mode 100644
index 000000000..722ee4121
--- /dev/null
+++ b/benches/generated/flex_basis_unconstraint_row.rs
@@ -0,0 +1,17 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            children: vec![stretch::style::Node {
+                flex_basis: stretch::style::Dimension::Points(50f32),
+                size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_direction_column.rs b/benches/generated/flex_direction_column.rs
new file mode 100644
index 000000000..65092d1d9
--- /dev/null
+++ b/benches/generated/flex_direction_column.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_direction_column_no_height.rs b/benches/generated/flex_direction_column_no_height.rs
new file mode 100644
index 000000000..28c72fa5f
--- /dev/null
+++ b/benches/generated/flex_direction_column_no_height.rs
@@ -0,0 +1,34 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_direction_column_reverse.rs b/benches/generated/flex_direction_column_reverse.rs
new file mode 100644
index 000000000..a4dd73822
--- /dev/null
+++ b/benches/generated/flex_direction_column_reverse.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::ColumnReverse,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_direction_row.rs b/benches/generated/flex_direction_row.rs
new file mode 100644
index 000000000..e59334303
--- /dev/null
+++ b/benches/generated/flex_direction_row.rs
@@ -0,0 +1,37 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_direction_row_no_width.rs b/benches/generated/flex_direction_row_no_width.rs
new file mode 100644
index 000000000..42230dfe3
--- /dev/null
+++ b/benches/generated/flex_direction_row_no_width.rs
@@ -0,0 +1,33 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { height: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_direction_row_reverse.rs b/benches/generated/flex_direction_row_reverse.rs
new file mode 100644
index 000000000..afd06990b
--- /dev/null
+++ b/benches/generated/flex_direction_row_reverse.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::RowReverse,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_grow_child.rs b/benches/generated/flex_grow_child.rs
new file mode 100644
index 000000000..8df040e84
--- /dev/null
+++ b/benches/generated/flex_grow_child.rs
@@ -0,0 +1,18 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            children: vec![stretch::style::Node {
+                flex_grow: 1f32,
+                flex_basis: stretch::style::Dimension::Points(0f32),
+                size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_grow_flex_basis_percent_min_max.rs b/benches/generated/flex_grow_flex_basis_percent_min_max.rs
new file mode 100644
index 000000000..597c3b2cb
--- /dev/null
+++ b/benches/generated/flex_grow_flex_basis_percent_min_max.rs
@@ -0,0 +1,41 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(120f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_shrink: 0f32,
+                    flex_basis: stretch::style::Dimension::Points(0f32),
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    min_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(60f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_shrink: 0f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.5f32),
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(20f32),
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    max_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_grow_height_maximized.rs b/benches/generated/flex_grow_height_maximized.rs
new file mode 100644
index 000000000..aa12b667a
--- /dev/null
+++ b/benches/generated/flex_grow_height_maximized.rs
@@ -0,0 +1,42 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(500f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                flex_grow: 1f32,
+                min_size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                max_size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(500f32),
+                    ..Default::default()
+                },
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1f32,
+                        flex_basis: stretch::style::Dimension::Points(200f32),
+                        ..Default::default()
+                    },
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_grow_in_at_most_container.rs b/benches/generated/flex_grow_in_at_most_container.rs
new file mode 100644
index 000000000..a49caf880
--- /dev/null
+++ b/benches/generated/flex_grow_in_at_most_container.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::FlexStart,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                children: vec![stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(0f32),
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_grow_less_than_factor_one.rs b/benches/generated/flex_grow_less_than_factor_one.rs
new file mode 100644
index 000000000..4c29bda58
--- /dev/null
+++ b/benches/generated/flex_grow_less_than_factor_one.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(500f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 0.2f32,
+                    flex_shrink: 0f32,
+                    flex_basis: stretch::style::Dimension::Points(40f32),
+                    ..Default::default()
+                },
+                stretch::style::Node { flex_grow: 0.2f32, flex_shrink: 0f32, ..Default::default() },
+                stretch::style::Node { flex_grow: 0.4f32, flex_shrink: 0f32, ..Default::default() },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_grow_root_minimized.rs b/benches/generated/flex_grow_root_minimized.rs
new file mode 100644
index 000000000..74268e84c
--- /dev/null
+++ b/benches/generated/flex_grow_root_minimized.rs
@@ -0,0 +1,46 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            min_size: stretch::geometry::Size {
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            max_size: stretch::geometry::Size {
+                height: stretch::style::Dimension::Points(500f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                flex_grow: 1f32,
+                min_size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                max_size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(500f32),
+                    ..Default::default()
+                },
+                children: vec![
+                    stretch::style::Node {
+                        flex_grow: 1f32,
+                        flex_basis: stretch::style::Dimension::Points(200f32),
+                        ..Default::default()
+                    },
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_grow_shrink_at_most.rs b/benches/generated/flex_grow_shrink_at_most.rs
new file mode 100644
index 000000000..6c5532699
--- /dev/null
+++ b/benches/generated/flex_grow_shrink_at_most.rs
@@ -0,0 +1,18 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                children: vec![stretch::style::Node { flex_grow: 1f32, flex_shrink: 1f32, ..Default::default() }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_grow_to_min.rs b/benches/generated/flex_grow_to_min.rs
new file mode 100644
index 000000000..bcd1a83a4
--- /dev/null
+++ b/benches/generated/flex_grow_to_min.rs
@@ -0,0 +1,29 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            min_size: stretch::geometry::Size {
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            max_size: stretch::geometry::Size {
+                height: stretch::style::Dimension::Points(500f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node { flex_grow: 1f32, flex_shrink: 1f32, ..Default::default() },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_grow_within_constrained_max_column.rs b/benches/generated/flex_grow_within_constrained_max_column.rs
new file mode 100644
index 000000000..07c15c6cd
--- /dev/null
+++ b/benches/generated/flex_grow_within_constrained_max_column.rs
@@ -0,0 +1,29 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            max_size: stretch::geometry::Size {
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_shrink: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_grow_within_constrained_max_row.rs b/benches/generated/flex_grow_within_constrained_max_row.rs
new file mode 100644
index 000000000..9c6203b3d
--- /dev/null
+++ b/benches/generated/flex_grow_within_constrained_max_row.rs
@@ -0,0 +1,36 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(200f32), ..Default::default() },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                max_size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                children: vec![
+                    stretch::style::Node {
+                        flex_shrink: 1f32,
+                        flex_basis: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(50f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_grow_within_constrained_max_width.rs b/benches/generated/flex_grow_within_constrained_max_width.rs
new file mode 100644
index 000000000..2a481e501
--- /dev/null
+++ b/benches/generated/flex_grow_within_constrained_max_width.rs
@@ -0,0 +1,30 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                max_size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(300f32),
+                    ..Default::default()
+                },
+                children: vec![stretch::style::Node {
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_grow_within_constrained_min_column.rs b/benches/generated/flex_grow_within_constrained_min_column.rs
new file mode 100644
index 000000000..42b8c920c
--- /dev/null
+++ b/benches/generated/flex_grow_within_constrained_min_column.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            min_size: stretch::geometry::Size {
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_grow_within_constrained_min_max_column.rs b/benches/generated/flex_grow_within_constrained_min_max_column.rs
new file mode 100644
index 000000000..79fba405d
--- /dev/null
+++ b/benches/generated/flex_grow_within_constrained_min_max_column.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            min_size: stretch::geometry::Size {
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_grow_within_constrained_min_row.rs b/benches/generated/flex_grow_within_constrained_min_row.rs
new file mode 100644
index 000000000..ab7781764
--- /dev/null
+++ b/benches/generated/flex_grow_within_constrained_min_row.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { height: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            min_size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_grow_within_max_width.rs b/benches/generated/flex_grow_within_max_width.rs
new file mode 100644
index 000000000..76d745007
--- /dev/null
+++ b/benches/generated/flex_grow_within_max_width.rs
@@ -0,0 +1,30 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                max_size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                children: vec![stretch::style::Node {
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_root_ignored.rs b/benches/generated/flex_root_ignored.rs
new file mode 100644
index 000000000..a0ed0e6ca
--- /dev/null
+++ b/benches/generated/flex_root_ignored.rs
@@ -0,0 +1,33 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            min_size: stretch::geometry::Size {
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            max_size: stretch::geometry::Size {
+                height: stretch::style::Dimension::Points(500f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(200f32),
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_shrink_by_outer_margin_with_max_size.rs b/benches/generated/flex_shrink_by_outer_margin_with_max_size.rs
new file mode 100644
index 000000000..04049953b
--- /dev/null
+++ b/benches/generated/flex_shrink_by_outer_margin_with_max_size.rs
@@ -0,0 +1,27 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size { height: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            max_size: stretch::geometry::Size {
+                height: stretch::style::Dimension::Points(80f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(20f32),
+                    height: stretch::style::Dimension::Points(20f32),
+                    ..Default::default()
+                },
+                margin: stretch::geometry::Rect {
+                    top: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_shrink_flex_grow_child_flex_shrink_other_child.rs b/benches/generated/flex_shrink_flex_grow_child_flex_shrink_other_child.rs
new file mode 100644
index 000000000..8dc0192ee
--- /dev/null
+++ b/benches/generated/flex_shrink_flex_grow_child_flex_shrink_other_child.rs
@@ -0,0 +1,36 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(500f32),
+                height: stretch::style::Dimension::Points(500f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 0f32,
+                    flex_shrink: 1f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(500f32),
+                        height: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_shrink: 1f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(500f32),
+                        height: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_shrink_flex_grow_row.rs b/benches/generated/flex_shrink_flex_grow_row.rs
new file mode 100644
index 000000000..f4ad3df13
--- /dev/null
+++ b/benches/generated/flex_shrink_flex_grow_row.rs
@@ -0,0 +1,36 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(500f32),
+                height: stretch::style::Dimension::Points(500f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 0f32,
+                    flex_shrink: 1f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(500f32),
+                        height: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 0f32,
+                    flex_shrink: 1f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(500f32),
+                        height: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_shrink_to_zero.rs b/benches/generated/flex_shrink_to_zero.rs
new file mode 100644
index 000000000..8c3c4ab23
--- /dev/null
+++ b/benches/generated/flex_shrink_to_zero.rs
@@ -0,0 +1,39 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(75f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    flex_shrink: 0f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_shrink: 1f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_shrink: 0f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_wrap_align_stretch_fits_one_row.rs b/benches/generated/flex_wrap_align_stretch_fits_one_row.rs
new file mode 100644
index 000000000..98ef178d0
--- /dev/null
+++ b/benches/generated/flex_wrap_align_stretch_fits_one_row.rs
@@ -0,0 +1,31 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_wrap: stretch::style::FlexWrap::Wrap,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(150f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_wrap_children_with_min_main_overriding_flex_basis.rs b/benches/generated/flex_wrap_children_with_min_main_overriding_flex_basis.rs
new file mode 100644
index 000000000..bc9a415ce
--- /dev/null
+++ b/benches/generated/flex_wrap_children_with_min_main_overriding_flex_basis.rs
@@ -0,0 +1,37 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_wrap: stretch::style::FlexWrap::Wrap,
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    flex_basis: stretch::style::Dimension::Points(50f32),
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    min_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(55f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_basis: stretch::style::Dimension::Points(50f32),
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    min_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(55f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/flex_wrap_wrap_to_child_height.rs b/benches/generated/flex_wrap_wrap_to_child_height.rs
new file mode 100644
index 000000000..cc0ed36c9
--- /dev/null
+++ b/benches/generated/flex_wrap_wrap_to_child_height.rs
@@ -0,0 +1,41 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32),
+                            ..Default::default()
+                        },
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(100f32),
+                                height: stretch::style::Dimension::Points(100f32),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        }],
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100f32),
+                        height: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_column_center.rs b/benches/generated/justify_content_column_center.rs
new file mode 100644
index 000000000..1391caf63
--- /dev/null
+++ b/benches/generated/justify_content_column_center.rs
@@ -0,0 +1,39 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_column_flex_end.rs b/benches/generated/justify_content_column_flex_end.rs
new file mode 100644
index 000000000..fa1a7b1e3
--- /dev/null
+++ b/benches/generated/justify_content_column_flex_end.rs
@@ -0,0 +1,39 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_column_flex_start.rs b/benches/generated/justify_content_column_flex_start.rs
new file mode 100644
index 000000000..65092d1d9
--- /dev/null
+++ b/benches/generated/justify_content_column_flex_start.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_column_min_height_and_margin_bottom.rs b/benches/generated/justify_content_column_min_height_and_margin_bottom.rs
new file mode 100644
index 000000000..0734c6e98
--- /dev/null
+++ b/benches/generated/justify_content_column_min_height_and_margin_bottom.rs
@@ -0,0 +1,27 @@
+pub fn compute() -> stretch::layout::Node {
+    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(50f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(20f32),
+                    height: stretch::style::Dimension::Points(20f32),
+                    ..Default::default()
+                },
+                margin: stretch::geometry::Rect {
+                    bottom: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_column_min_height_and_margin_top.rs b/benches/generated/justify_content_column_min_height_and_margin_top.rs
new file mode 100644
index 000000000..42740d308
--- /dev/null
+++ b/benches/generated/justify_content_column_min_height_and_margin_top.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    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(50f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(20f32),
+                    height: stretch::style::Dimension::Points(20f32),
+                    ..Default::default()
+                },
+                margin: stretch::geometry::Rect { top: stretch::style::Dimension::Points(10f32), ..Default::default() },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_column_space_around.rs b/benches/generated/justify_content_column_space_around.rs
new file mode 100644
index 000000000..092e9ee7a
--- /dev/null
+++ b/benches/generated/justify_content_column_space_around.rs
@@ -0,0 +1,39 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            justify_content: stretch::style::JustifyContent::SpaceAround,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_column_space_between.rs b/benches/generated/justify_content_column_space_between.rs
new file mode 100644
index 000000000..e02bf9f7b
--- /dev/null
+++ b/benches/generated/justify_content_column_space_between.rs
@@ -0,0 +1,39 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            justify_content: stretch::style::JustifyContent::SpaceBetween,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_column_space_evenly.rs b/benches/generated/justify_content_column_space_evenly.rs
new file mode 100644
index 000000000..ee1c71d31
--- /dev/null
+++ b/benches/generated/justify_content_column_space_evenly.rs
@@ -0,0 +1,39 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            justify_content: stretch::style::JustifyContent::SpaceEvenly,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_min_max.rs b/benches/generated/justify_content_min_max.rs
new file mode 100644
index 000000000..60346c353
--- /dev/null
+++ b/benches/generated/justify_content_min_max.rs
@@ -0,0 +1,28 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32), ..Default::default() },
+            min_size: stretch::geometry::Size {
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            max_size: stretch::geometry::Size {
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(60f32),
+                    height: stretch::style::Dimension::Points(60f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_min_width_with_padding_child_width_greater_than_parent.rs b/benches/generated/justify_content_min_width_with_padding_child_width_greater_than_parent.rs
new file mode 100644
index 000000000..0c28236ae
--- /dev/null
+++ b/benches/generated/justify_content_min_width_with_padding_child_width_greater_than_parent.rs
@@ -0,0 +1,39 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(1000f32),
+                height: stretch::style::Dimension::Points(1584f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                children: vec![stretch::style::Node {
+                    justify_content: stretch::style::JustifyContent::Center,
+                    min_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(400f32),
+                        ..Default::default()
+                    },
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(300f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    padding: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(100f32),
+                        end: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_min_width_with_padding_child_width_lower_than_parent.rs b/benches/generated/justify_content_min_width_with_padding_child_width_lower_than_parent.rs
new file mode 100644
index 000000000..c413648bf
--- /dev/null
+++ b/benches/generated/justify_content_min_width_with_padding_child_width_lower_than_parent.rs
@@ -0,0 +1,39 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(1080f32),
+                height: stretch::style::Dimension::Points(1584f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                children: vec![stretch::style::Node {
+                    justify_content: stretch::style::JustifyContent::Center,
+                    min_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(400f32),
+                        ..Default::default()
+                    },
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(199f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    padding: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(100f32),
+                        end: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_overflow_min_max.rs b/benches/generated/justify_content_overflow_min_max.rs
new file mode 100644
index 000000000..b7d69d532
--- /dev/null
+++ b/benches/generated/justify_content_overflow_min_max.rs
@@ -0,0 +1,48 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32),
+                ..Default::default()
+            },
+            max_size: stretch::geometry::Size {
+                height: stretch::style::Dimension::Points(110f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_shrink: 0f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_shrink: 0f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_shrink: 0f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_row_center.rs b/benches/generated/justify_content_row_center.rs
new file mode 100644
index 000000000..9d5445610
--- /dev/null
+++ b/benches/generated/justify_content_row_center.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            justify_content: stretch::style::JustifyContent::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_row_flex_end.rs b/benches/generated/justify_content_row_flex_end.rs
new file mode 100644
index 000000000..0d3806e82
--- /dev/null
+++ b/benches/generated/justify_content_row_flex_end.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            justify_content: stretch::style::JustifyContent::FlexEnd,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_row_flex_start.rs b/benches/generated/justify_content_row_flex_start.rs
new file mode 100644
index 000000000..e59334303
--- /dev/null
+++ b/benches/generated/justify_content_row_flex_start.rs
@@ -0,0 +1,37 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_row_max_width_and_margin.rs b/benches/generated/justify_content_row_max_width_and_margin.rs
new file mode 100644
index 000000000..de6ca0d9b
--- /dev/null
+++ b/benches/generated/justify_content_row_max_width_and_margin.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            justify_content: stretch::style::JustifyContent::Center,
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            max_size: stretch::geometry::Size { width: stretch::style::Dimension::Points(80f32), ..Default::default() },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(20f32),
+                    height: stretch::style::Dimension::Points(20f32),
+                    ..Default::default()
+                },
+                margin: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_row_min_width_and_margin.rs b/benches/generated/justify_content_row_min_width_and_margin.rs
new file mode 100644
index 000000000..679cc63c2
--- /dev/null
+++ b/benches/generated/justify_content_row_min_width_and_margin.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            justify_content: stretch::style::JustifyContent::Center,
+            min_size: stretch::geometry::Size { width: stretch::style::Dimension::Points(50f32), ..Default::default() },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(20f32),
+                    height: stretch::style::Dimension::Points(20f32),
+                    ..Default::default()
+                },
+                margin: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_row_space_around.rs b/benches/generated/justify_content_row_space_around.rs
new file mode 100644
index 000000000..f36b2be0c
--- /dev/null
+++ b/benches/generated/justify_content_row_space_around.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            justify_content: stretch::style::JustifyContent::SpaceAround,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_row_space_between.rs b/benches/generated/justify_content_row_space_between.rs
new file mode 100644
index 000000000..0a1bde846
--- /dev/null
+++ b/benches/generated/justify_content_row_space_between.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            justify_content: stretch::style::JustifyContent::SpaceBetween,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/justify_content_row_space_evenly.rs b/benches/generated/justify_content_row_space_evenly.rs
new file mode 100644
index 000000000..f6fd45d54
--- /dev/null
+++ b/benches/generated/justify_content_row_space_evenly.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            justify_content: stretch::style::JustifyContent::SpaceEvenly,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_and_flex_column.rs b/benches/generated/margin_and_flex_column.rs
new file mode 100644
index 000000000..9481a4bf2
--- /dev/null
+++ b/benches/generated/margin_and_flex_column.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                flex_grow: 1f32,
+                margin: stretch::geometry::Rect {
+                    top: stretch::style::Dimension::Points(10f32),
+                    bottom: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_and_flex_row.rs b/benches/generated/margin_and_flex_row.rs
new file mode 100644
index 000000000..36febf1be
--- /dev/null
+++ b/benches/generated/margin_and_flex_row.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                flex_grow: 1f32,
+                margin: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10f32),
+                    end: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_and_stretch_column.rs b/benches/generated/margin_and_stretch_column.rs
new file mode 100644
index 000000000..481c5a47f
--- /dev/null
+++ b/benches/generated/margin_and_stretch_column.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                flex_grow: 1f32,
+                margin: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10f32),
+                    end: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_and_stretch_row.rs b/benches/generated/margin_and_stretch_row.rs
new file mode 100644
index 000000000..94406ec4d
--- /dev/null
+++ b/benches/generated/margin_and_stretch_row.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                flex_grow: 1f32,
+                margin: stretch::geometry::Rect {
+                    top: stretch::style::Dimension::Points(10f32),
+                    bottom: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_bottom.rs b/benches/generated/margin_auto_bottom.rs
new file mode 100644
index 000000000..05947697b
--- /dev/null
+++ b/benches/generated/margin_auto_bottom.rs
@@ -0,0 +1,34 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect { bottom: stretch::style::Dimension::Auto, ..Default::default() },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_bottom_and_top.rs b/benches/generated/margin_auto_bottom_and_top.rs
new file mode 100644
index 000000000..8faf2e192
--- /dev/null
+++ b/benches/generated/margin_auto_bottom_and_top.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..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(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_bottom_and_top_justify_center.rs b/benches/generated/margin_auto_bottom_and_top_justify_center.rs
new file mode 100644
index 000000000..36f0dc6cb
--- /dev/null
+++ b/benches/generated/margin_auto_bottom_and_top_justify_center.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            justify_content: stretch::style::JustifyContent::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..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(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_left.rs b/benches/generated/margin_auto_left.rs
new file mode 100644
index 000000000..bc9a8f0f6
--- /dev/null
+++ b/benches/generated/margin_auto_left.rs
@@ -0,0 +1,34 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect { start: stretch::style::Dimension::Auto, ..Default::default() },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_left_and_right.rs b/benches/generated/margin_auto_left_and_right.rs
new file mode 100644
index 000000000..4a48a2c57
--- /dev/null
+++ b/benches/generated/margin_auto_left_and_right.rs
@@ -0,0 +1,37 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Auto,
+                        end: stretch::style::Dimension::Auto,
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_left_and_right_column.rs b/benches/generated/margin_auto_left_and_right_column.rs
new file mode 100644
index 000000000..76e4dba87
--- /dev/null
+++ b/benches/generated/margin_auto_left_and_right_column.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Auto,
+                        end: stretch::style::Dimension::Auto,
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_left_and_right_column_and_center.rs b/benches/generated/margin_auto_left_and_right_column_and_center.rs
new file mode 100644
index 000000000..76e4dba87
--- /dev/null
+++ b/benches/generated/margin_auto_left_and_right_column_and_center.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Auto,
+                        end: stretch::style::Dimension::Auto,
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_left_and_right_strech.rs b/benches/generated/margin_auto_left_and_right_strech.rs
new file mode 100644
index 000000000..4a48a2c57
--- /dev/null
+++ b/benches/generated/margin_auto_left_and_right_strech.rs
@@ -0,0 +1,37 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Auto,
+                        end: stretch::style::Dimension::Auto,
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_left_child_bigger_than_parent.rs b/benches/generated/margin_auto_left_child_bigger_than_parent.rs
new file mode 100644
index 000000000..ca6ba56c4
--- /dev/null
+++ b/benches/generated/margin_auto_left_child_bigger_than_parent.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            justify_content: stretch::style::JustifyContent::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(52f32),
+                height: stretch::style::Dimension::Points(52f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(72f32),
+                    height: stretch::style::Dimension::Points(72f32),
+                    ..Default::default()
+                },
+                margin: stretch::geometry::Rect { start: stretch::style::Dimension::Auto, ..Default::default() },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_left_fix_right_child_bigger_than_parent.rs b/benches/generated/margin_auto_left_fix_right_child_bigger_than_parent.rs
new file mode 100644
index 000000000..a9d8a5be6
--- /dev/null
+++ b/benches/generated/margin_auto_left_fix_right_child_bigger_than_parent.rs
@@ -0,0 +1,28 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            justify_content: stretch::style::JustifyContent::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(52f32),
+                height: stretch::style::Dimension::Points(52f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(72f32),
+                    height: stretch::style::Dimension::Points(72f32),
+                    ..Default::default()
+                },
+                margin: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Auto,
+                    end: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_left_right_child_bigger_than_parent.rs b/benches/generated/margin_auto_left_right_child_bigger_than_parent.rs
new file mode 100644
index 000000000..7aecb94a7
--- /dev/null
+++ b/benches/generated/margin_auto_left_right_child_bigger_than_parent.rs
@@ -0,0 +1,28 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            justify_content: stretch::style::JustifyContent::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(52f32),
+                height: stretch::style::Dimension::Points(52f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(72f32),
+                    height: stretch::style::Dimension::Points(72f32),
+                    ..Default::default()
+                },
+                margin: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Auto,
+                    end: stretch::style::Dimension::Auto,
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_left_stretching_child.rs b/benches/generated/margin_auto_left_stretching_child.rs
new file mode 100644
index 000000000..beb523bec
--- /dev/null
+++ b/benches/generated/margin_auto_left_stretching_child.rs
@@ -0,0 +1,32 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_shrink: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0f32),
+                    margin: stretch::geometry::Rect { start: stretch::style::Dimension::Auto, ..Default::default() },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_mutiple_children_column.rs b/benches/generated/margin_auto_mutiple_children_column.rs
new file mode 100644
index 000000000..febe2e7a6
--- /dev/null
+++ b/benches/generated/margin_auto_mutiple_children_column.rs
@@ -0,0 +1,44 @@
+pub fn compute() -> stretch::layout::Node {
+    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(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..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(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..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(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_mutiple_children_row.rs b/benches/generated/margin_auto_mutiple_children_row.rs
new file mode 100644
index 000000000..f231255c2
--- /dev/null
+++ b/benches/generated/margin_auto_mutiple_children_row.rs
@@ -0,0 +1,43 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect { end: stretch::style::Dimension::Auto, ..Default::default() },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect { end: stretch::style::Dimension::Auto, ..Default::default() },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_right.rs b/benches/generated/margin_auto_right.rs
new file mode 100644
index 000000000..a12f5bef0
--- /dev/null
+++ b/benches/generated/margin_auto_right.rs
@@ -0,0 +1,34 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect { end: stretch::style::Dimension::Auto, ..Default::default() },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_top.rs b/benches/generated/margin_auto_top.rs
new file mode 100644
index 000000000..f34ba4023
--- /dev/null
+++ b/benches/generated/margin_auto_top.rs
@@ -0,0 +1,34 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..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(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_top_and_bottom_strech.rs b/benches/generated/margin_auto_top_and_bottom_strech.rs
new file mode 100644
index 000000000..db8b032df
--- /dev/null
+++ b/benches/generated/margin_auto_top_and_bottom_strech.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..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(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_auto_top_stretching_child.rs b/benches/generated/margin_auto_top_stretching_child.rs
new file mode 100644
index 000000000..ca1888725
--- /dev/null
+++ b/benches/generated/margin_auto_top_stretching_child.rs
@@ -0,0 +1,32 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            align_items: stretch::style::AlignItems::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_shrink: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0f32),
+                    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(50f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_bottom.rs b/benches/generated/margin_bottom.rs
new file mode 100644
index 000000000..29d63c761
--- /dev/null
+++ b/benches/generated/margin_bottom.rs
@@ -0,0 +1,27 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                margin: stretch::geometry::Rect {
+                    bottom: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_fix_left_auto_right_child_bigger_than_parent.rs b/benches/generated/margin_fix_left_auto_right_child_bigger_than_parent.rs
new file mode 100644
index 000000000..f9a29a89c
--- /dev/null
+++ b/benches/generated/margin_fix_left_auto_right_child_bigger_than_parent.rs
@@ -0,0 +1,28 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            justify_content: stretch::style::JustifyContent::Center,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(52f32),
+                height: stretch::style::Dimension::Points(52f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(72f32),
+                    height: stretch::style::Dimension::Points(72f32),
+                    ..Default::default()
+                },
+                margin: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10f32),
+                    end: stretch::style::Dimension::Auto,
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_left.rs b/benches/generated/margin_left.rs
new file mode 100644
index 000000000..d01860dba
--- /dev/null
+++ b/benches/generated/margin_left.rs
@@ -0,0 +1,22 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size { width: stretch::style::Dimension::Points(10f32), ..Default::default() },
+                margin: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_right.rs b/benches/generated/margin_right.rs
new file mode 100644
index 000000000..a823b72c0
--- /dev/null
+++ b/benches/generated/margin_right.rs
@@ -0,0 +1,20 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            justify_content: stretch::style::JustifyContent::FlexEnd,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size { width: stretch::style::Dimension::Points(10f32), ..Default::default() },
+                margin: stretch::geometry::Rect { end: stretch::style::Dimension::Points(10f32), ..Default::default() },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_should_not_be_part_of_max_height.rs b/benches/generated/margin_should_not_be_part_of_max_height.rs
new file mode 100644
index 000000000..be6acb6d5
--- /dev/null
+++ b/benches/generated/margin_should_not_be_part_of_max_height.rs
@@ -0,0 +1,27 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(250f32),
+                height: stretch::style::Dimension::Points(250f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100f32),
+                    height: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                max_size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                margin: stretch::geometry::Rect { top: stretch::style::Dimension::Points(20f32), ..Default::default() },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_should_not_be_part_of_max_width.rs b/benches/generated/margin_should_not_be_part_of_max_width.rs
new file mode 100644
index 000000000..9b307004c
--- /dev/null
+++ b/benches/generated/margin_should_not_be_part_of_max_width.rs
@@ -0,0 +1,30 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(250f32),
+                height: stretch::style::Dimension::Points(250f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100f32),
+                    height: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                max_size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                margin: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(20f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_top.rs b/benches/generated/margin_top.rs
new file mode 100644
index 000000000..c350e36b2
--- /dev/null
+++ b/benches/generated/margin_top.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                margin: stretch::geometry::Rect { top: stretch::style::Dimension::Points(10f32), ..Default::default() },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_with_sibling_column.rs b/benches/generated/margin_with_sibling_column.rs
new file mode 100644
index 000000000..73aa2722f
--- /dev/null
+++ b/benches/generated/margin_with_sibling_column.rs
@@ -0,0 +1,26 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    margin: stretch::geometry::Rect {
+                        bottom: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/margin_with_sibling_row.rs b/benches/generated/margin_with_sibling_row.rs
new file mode 100644
index 000000000..12d159243
--- /dev/null
+++ b/benches/generated/margin_with_sibling_row.rs
@@ -0,0 +1,25 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    margin: stretch::geometry::Rect {
+                        end: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/max_height.rs b/benches/generated/max_height.rs
new file mode 100644
index 000000000..345ae5439
--- /dev/null
+++ b/benches/generated/max_height.rs
@@ -0,0 +1,22 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size { width: stretch::style::Dimension::Points(10f32), ..Default::default() },
+                max_size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(50f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/max_height_overrides_height.rs b/benches/generated/max_height_overrides_height.rs
new file mode 100644
index 000000000..b107be7df
--- /dev/null
+++ b/benches/generated/max_height_overrides_height.rs
@@ -0,0 +1,20 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(200f32),
+                    ..Default::default()
+                },
+                max_size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/max_height_overrides_height_on_root.rs b/benches/generated/max_height_overrides_height_on_root.rs
new file mode 100644
index 000000000..d2a7792a2
--- /dev/null
+++ b/benches/generated/max_height_overrides_height_on_root.rs
@@ -0,0 +1,14 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { height: stretch::style::Dimension::Points(200f32), ..Default::default() },
+            max_size: stretch::geometry::Size {
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/max_width.rs b/benches/generated/max_width.rs
new file mode 100644
index 000000000..cff094748
--- /dev/null
+++ b/benches/generated/max_width.rs
@@ -0,0 +1,26 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                max_size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(50f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/max_width_overrides_width.rs b/benches/generated/max_width_overrides_width.rs
new file mode 100644
index 000000000..88ecdbe94
--- /dev/null
+++ b/benches/generated/max_width_overrides_width.rs
@@ -0,0 +1,20 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200f32),
+                    ..Default::default()
+                },
+                max_size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/max_width_overrides_width_on_root.rs b/benches/generated/max_width_overrides_width_on_root.rs
new file mode 100644
index 000000000..6b7049726
--- /dev/null
+++ b/benches/generated/max_width_overrides_width_on_root.rs
@@ -0,0 +1,14 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(200f32), ..Default::default() },
+            max_size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/min_height.rs b/benches/generated/min_height.rs
new file mode 100644
index 000000000..0a9bcf0ee
--- /dev/null
+++ b/benches/generated/min_height.rs
@@ -0,0 +1,26 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    min_size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(60f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/min_height_overrides_height.rs b/benches/generated/min_height_overrides_height.rs
new file mode 100644
index 000000000..15a90b7f8
--- /dev/null
+++ b/benches/generated/min_height_overrides_height.rs
@@ -0,0 +1,20 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(50f32),
+                    ..Default::default()
+                },
+                min_size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/min_height_overrides_height_on_root.rs b/benches/generated/min_height_overrides_height_on_root.rs
new file mode 100644
index 000000000..ba7ec455e
--- /dev/null
+++ b/benches/generated/min_height_overrides_height_on_root.rs
@@ -0,0 +1,14 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { height: stretch::style::Dimension::Points(50f32), ..Default::default() },
+            min_size: stretch::geometry::Size {
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/min_max_percent_no_width_height.rs b/benches/generated/min_max_percent_no_width_height.rs
new file mode 100644
index 000000000..277868168
--- /dev/null
+++ b/benches/generated/min_max_percent_no_width_height.rs
@@ -0,0 +1,29 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                min_size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Percent(0.1f32),
+                    height: stretch::style::Dimension::Percent(0.1f32),
+                    ..Default::default()
+                },
+                max_size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Percent(0.1f32),
+                    height: stretch::style::Dimension::Percent(0.1f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/min_width.rs b/benches/generated/min_width.rs
new file mode 100644
index 000000000..3682e8c22
--- /dev/null
+++ b/benches/generated/min_width.rs
@@ -0,0 +1,25 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    min_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(60f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/min_width_overrides_width.rs b/benches/generated/min_width_overrides_width.rs
new file mode 100644
index 000000000..6e437cc7e
--- /dev/null
+++ b/benches/generated/min_width_overrides_width.rs
@@ -0,0 +1,17 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size { width: stretch::style::Dimension::Points(50f32), ..Default::default() },
+                min_size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/min_width_overrides_width_on_root.rs b/benches/generated/min_width_overrides_width_on_root.rs
new file mode 100644
index 000000000..4d4d5014e
--- /dev/null
+++ b/benches/generated/min_width_overrides_width_on_root.rs
@@ -0,0 +1,14 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(50f32), ..Default::default() },
+            min_size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/mod.rs b/benches/generated/mod.rs
new file mode 100644
index 000000000..62062ffc5
--- /dev/null
+++ b/benches/generated/mod.rs
@@ -0,0 +1,485 @@
+use criterion::{criterion_group, criterion_main, Criterion};
+mod absolute_layout_align_items_and_justify_content_center;
+mod absolute_layout_align_items_and_justify_content_center_and_bottom_position;
+mod absolute_layout_align_items_and_justify_content_center_and_left_position;
+mod absolute_layout_align_items_and_justify_content_center_and_right_position;
+mod absolute_layout_align_items_and_justify_content_center_and_top_position;
+mod absolute_layout_align_items_and_justify_content_flex_end;
+mod absolute_layout_align_items_center;
+mod absolute_layout_align_items_center_on_child_only;
+mod absolute_layout_child_order;
+mod absolute_layout_in_wrap_reverse_column_container;
+mod absolute_layout_in_wrap_reverse_column_container_flex_end;
+mod absolute_layout_in_wrap_reverse_row_container;
+mod absolute_layout_in_wrap_reverse_row_container_flex_end;
+mod absolute_layout_justify_content_center;
+mod absolute_layout_no_size;
+mod absolute_layout_percentage_bottom_based_on_parent_height;
+mod absolute_layout_start_top_end_bottom;
+mod absolute_layout_width_height_end_bottom;
+mod absolute_layout_width_height_start_top;
+mod absolute_layout_width_height_start_top_end_bottom;
+mod absolute_layout_within_border;
+mod align_baseline;
+mod align_baseline_child_multiline;
+mod align_baseline_nested_child;
+mod align_center_should_size_based_on_content;
+mod align_flex_start_with_shrinking_children;
+mod align_flex_start_with_shrinking_children_with_stretch;
+mod align_flex_start_with_stretching_children;
+mod align_items_center;
+mod align_items_center_child_with_margin_bigger_than_parent;
+mod align_items_center_child_without_margin_bigger_than_parent;
+mod align_items_center_with_child_margin;
+mod align_items_center_with_child_top;
+mod align_items_flex_end;
+mod align_items_flex_end_child_with_margin_bigger_than_parent;
+mod align_items_flex_end_child_without_margin_bigger_than_parent;
+mod align_items_flex_start;
+mod align_items_min_max;
+mod align_items_stretch;
+mod align_self_baseline;
+mod align_self_center;
+mod align_self_flex_end;
+mod align_self_flex_end_override_flex_start;
+mod align_self_flex_start;
+mod align_strech_should_size_based_on_parent;
+mod border_center_child;
+mod border_flex_child;
+mod border_no_child;
+mod border_stretch_child;
+mod child_min_max_width_flexing;
+mod container_with_unsized_child;
+mod display_none;
+mod display_none_fixed_size;
+mod display_none_with_child;
+mod display_none_with_margin;
+mod display_none_with_position;
+mod flex_basis_and_main_dimen_set_when_flexing;
+mod flex_basis_flex_grow_column;
+mod flex_basis_flex_grow_row;
+mod flex_basis_flex_shrink_column;
+mod flex_basis_flex_shrink_row;
+mod flex_basis_larger_than_content_column;
+mod flex_basis_larger_than_content_row;
+mod flex_basis_overrides_main_size;
+mod flex_basis_slightly_smaller_then_content_with_flex_grow_large_size;
+mod flex_basis_smaller_than_content_column;
+mod flex_basis_smaller_than_content_row;
+mod flex_basis_smaller_than_main_dimen_column;
+mod flex_basis_smaller_than_main_dimen_row;
+mod flex_basis_smaller_then_content_with_flex_grow_large_size;
+mod flex_basis_smaller_then_content_with_flex_grow_small_size;
+mod flex_basis_smaller_then_content_with_flex_grow_unconstraint_size;
+mod flex_basis_smaller_then_content_with_flex_grow_very_large_size;
+mod flex_basis_unconstraint_column;
+mod flex_basis_unconstraint_row;
+mod flex_direction_column;
+mod flex_direction_column_no_height;
+mod flex_direction_column_reverse;
+mod flex_direction_row;
+mod flex_direction_row_no_width;
+mod flex_direction_row_reverse;
+mod flex_grow_child;
+mod flex_grow_flex_basis_percent_min_max;
+mod flex_grow_height_maximized;
+mod flex_grow_in_at_most_container;
+mod flex_grow_less_than_factor_one;
+mod flex_grow_root_minimized;
+mod flex_grow_shrink_at_most;
+mod flex_grow_to_min;
+mod flex_grow_within_constrained_max_column;
+mod flex_grow_within_constrained_max_row;
+mod flex_grow_within_constrained_max_width;
+mod flex_grow_within_constrained_min_column;
+mod flex_grow_within_constrained_min_max_column;
+mod flex_grow_within_constrained_min_row;
+mod flex_grow_within_max_width;
+mod flex_root_ignored;
+mod flex_shrink_by_outer_margin_with_max_size;
+mod flex_shrink_flex_grow_child_flex_shrink_other_child;
+mod flex_shrink_flex_grow_row;
+mod flex_shrink_to_zero;
+mod flex_wrap_align_stretch_fits_one_row;
+mod flex_wrap_children_with_min_main_overriding_flex_basis;
+mod flex_wrap_wrap_to_child_height;
+mod justify_content_column_center;
+mod justify_content_column_flex_end;
+mod justify_content_column_flex_start;
+mod justify_content_column_min_height_and_margin_bottom;
+mod justify_content_column_min_height_and_margin_top;
+mod justify_content_column_space_around;
+mod justify_content_column_space_between;
+mod justify_content_column_space_evenly;
+mod justify_content_min_max;
+mod justify_content_min_width_with_padding_child_width_greater_than_parent;
+mod justify_content_min_width_with_padding_child_width_lower_than_parent;
+mod justify_content_overflow_min_max;
+mod justify_content_row_center;
+mod justify_content_row_flex_end;
+mod justify_content_row_flex_start;
+mod justify_content_row_max_width_and_margin;
+mod justify_content_row_min_width_and_margin;
+mod justify_content_row_space_around;
+mod justify_content_row_space_between;
+mod justify_content_row_space_evenly;
+mod margin_and_flex_column;
+mod margin_and_flex_row;
+mod margin_and_stretch_column;
+mod margin_and_stretch_row;
+mod margin_auto_bottom;
+mod margin_auto_bottom_and_top;
+mod margin_auto_bottom_and_top_justify_center;
+mod margin_auto_left;
+mod margin_auto_left_and_right;
+mod margin_auto_left_and_right_column;
+mod margin_auto_left_and_right_column_and_center;
+mod margin_auto_left_and_right_strech;
+mod margin_auto_left_child_bigger_than_parent;
+mod margin_auto_left_fix_right_child_bigger_than_parent;
+mod margin_auto_left_right_child_bigger_than_parent;
+mod margin_auto_left_stretching_child;
+mod margin_auto_mutiple_children_column;
+mod margin_auto_mutiple_children_row;
+mod margin_auto_right;
+mod margin_auto_top;
+mod margin_auto_top_and_bottom_strech;
+mod margin_auto_top_stretching_child;
+mod margin_bottom;
+mod margin_fix_left_auto_right_child_bigger_than_parent;
+mod margin_left;
+mod margin_right;
+mod margin_should_not_be_part_of_max_height;
+mod margin_should_not_be_part_of_max_width;
+mod margin_top;
+mod margin_with_sibling_column;
+mod margin_with_sibling_row;
+mod max_height;
+mod max_height_overrides_height;
+mod max_height_overrides_height_on_root;
+mod max_width;
+mod max_width_overrides_width;
+mod max_width_overrides_width_on_root;
+mod min_height;
+mod min_height_overrides_height;
+mod min_height_overrides_height_on_root;
+mod min_max_percent_no_width_height;
+mod min_width;
+mod min_width_overrides_width;
+mod min_width_overrides_width_on_root;
+mod nested_overflowing_child;
+mod nested_overflowing_child_in_constraint_parent;
+mod overflow_cross_axis;
+mod overflow_main_axis;
+mod padding_align_end_child;
+mod padding_center_child;
+mod padding_flex_child;
+mod padding_no_child;
+mod padding_stretch_child;
+mod parent_wrap_child_size_overflowing_parent;
+mod percent_absolute_position;
+mod percent_within_flex_grow;
+mod percentage_absolute_position;
+mod percentage_container_in_wrapping_container;
+mod percentage_flex_basis;
+mod percentage_flex_basis_cross;
+mod percentage_flex_basis_cross_max_height;
+mod percentage_flex_basis_cross_max_width;
+mod percentage_flex_basis_cross_min_height;
+mod percentage_flex_basis_cross_min_width;
+mod percentage_flex_basis_main_max_height;
+mod percentage_flex_basis_main_max_width;
+mod percentage_flex_basis_main_min_width;
+mod percentage_margin_should_calculate_based_only_on_width;
+mod percentage_multiple_nested_with_padding_margin_and_percentage_values;
+mod percentage_padding_should_calculate_based_only_on_width;
+mod percentage_position_bottom_right;
+mod percentage_position_left_top;
+mod percentage_size_based_on_parent_inner_size;
+mod percentage_size_of_flex_basis;
+mod percentage_width_height;
+mod percentage_width_height_undefined_parent_size;
+mod relative_position_should_not_nudge_siblings;
+mod rounding_flex_basis_flex_grow_row_prime_number_width;
+mod rounding_flex_basis_flex_grow_row_width_of_100;
+mod rounding_flex_basis_flex_shrink_row;
+mod rounding_flex_basis_overrides_main_size;
+mod rounding_fractial_input_1;
+mod rounding_fractial_input_2;
+mod rounding_fractial_input_3;
+mod rounding_fractial_input_4;
+mod rounding_total_fractial;
+mod rounding_total_fractial_nested;
+mod size_defined_by_child;
+mod size_defined_by_child_with_border;
+mod size_defined_by_child_with_padding;
+mod size_defined_by_grand_child;
+mod width_smaller_then_content_with_flex_grow_large_size;
+mod width_smaller_then_content_with_flex_grow_small_size;
+mod width_smaller_then_content_with_flex_grow_unconstraint_size;
+mod width_smaller_then_content_with_flex_grow_very_large_size;
+mod wrap_column;
+mod wrap_nodes_with_content_sizing_margin_cross;
+mod wrap_nodes_with_content_sizing_overflowing_margin;
+mod wrap_reverse_column;
+mod wrap_reverse_column_fixed_size;
+mod wrap_reverse_row;
+mod wrap_reverse_row_align_content_center;
+mod wrap_reverse_row_align_content_flex_start;
+mod wrap_reverse_row_align_content_space_around;
+mod wrap_reverse_row_align_content_stretch;
+mod wrap_reverse_row_single_line_different_size;
+mod wrap_row;
+mod wrap_row_align_items_center;
+mod wrap_row_align_items_flex_end;
+mod wrapped_column_max_height;
+mod wrapped_column_max_height_flex;
+mod wrapped_row_within_align_items_center;
+mod wrapped_row_within_align_items_flex_end;
+mod wrapped_row_within_align_items_flex_start;
+fn benchmark(c: &mut Criterion) {
+    c.bench_function("generated benchmarks", |b| {
+        b.iter(|| {
+            absolute_layout_align_items_and_justify_content_center::compute();
+            absolute_layout_align_items_and_justify_content_center_and_bottom_position::compute();
+            absolute_layout_align_items_and_justify_content_center_and_left_position::compute();
+            absolute_layout_align_items_and_justify_content_center_and_right_position::compute();
+            absolute_layout_align_items_and_justify_content_center_and_top_position::compute();
+            absolute_layout_align_items_and_justify_content_flex_end::compute();
+            absolute_layout_align_items_center::compute();
+            absolute_layout_align_items_center_on_child_only::compute();
+            absolute_layout_child_order::compute();
+            absolute_layout_in_wrap_reverse_column_container::compute();
+            absolute_layout_in_wrap_reverse_column_container_flex_end::compute();
+            absolute_layout_in_wrap_reverse_row_container::compute();
+            absolute_layout_in_wrap_reverse_row_container_flex_end::compute();
+            absolute_layout_justify_content_center::compute();
+            absolute_layout_no_size::compute();
+            absolute_layout_percentage_bottom_based_on_parent_height::compute();
+            absolute_layout_start_top_end_bottom::compute();
+            absolute_layout_width_height_end_bottom::compute();
+            absolute_layout_width_height_start_top::compute();
+            absolute_layout_width_height_start_top_end_bottom::compute();
+            absolute_layout_within_border::compute();
+            align_baseline::compute();
+            align_baseline_child_multiline::compute();
+            align_baseline_nested_child::compute();
+            align_center_should_size_based_on_content::compute();
+            align_flex_start_with_shrinking_children::compute();
+            align_flex_start_with_shrinking_children_with_stretch::compute();
+            align_flex_start_with_stretching_children::compute();
+            align_items_center::compute();
+            align_items_center_child_with_margin_bigger_than_parent::compute();
+            align_items_center_child_without_margin_bigger_than_parent::compute();
+            align_items_center_with_child_margin::compute();
+            align_items_center_with_child_top::compute();
+            align_items_flex_end::compute();
+            align_items_flex_end_child_with_margin_bigger_than_parent::compute();
+            align_items_flex_end_child_without_margin_bigger_than_parent::compute();
+            align_items_flex_start::compute();
+            align_items_min_max::compute();
+            align_items_stretch::compute();
+            align_self_baseline::compute();
+            align_self_center::compute();
+            align_self_flex_end::compute();
+            align_self_flex_end_override_flex_start::compute();
+            align_self_flex_start::compute();
+            align_strech_should_size_based_on_parent::compute();
+            border_center_child::compute();
+            border_flex_child::compute();
+            border_no_child::compute();
+            border_stretch_child::compute();
+            child_min_max_width_flexing::compute();
+            container_with_unsized_child::compute();
+            display_none::compute();
+            display_none_fixed_size::compute();
+            display_none_with_child::compute();
+            display_none_with_margin::compute();
+            display_none_with_position::compute();
+            flex_basis_and_main_dimen_set_when_flexing::compute();
+            flex_basis_flex_grow_column::compute();
+            flex_basis_flex_grow_row::compute();
+            flex_basis_flex_shrink_column::compute();
+            flex_basis_flex_shrink_row::compute();
+            flex_basis_larger_than_content_column::compute();
+            flex_basis_larger_than_content_row::compute();
+            flex_basis_overrides_main_size::compute();
+            flex_basis_slightly_smaller_then_content_with_flex_grow_large_size::compute();
+            flex_basis_smaller_than_content_column::compute();
+            flex_basis_smaller_than_content_row::compute();
+            flex_basis_smaller_than_main_dimen_column::compute();
+            flex_basis_smaller_than_main_dimen_row::compute();
+            flex_basis_smaller_then_content_with_flex_grow_large_size::compute();
+            flex_basis_smaller_then_content_with_flex_grow_small_size::compute();
+            flex_basis_smaller_then_content_with_flex_grow_unconstraint_size::compute();
+            flex_basis_smaller_then_content_with_flex_grow_very_large_size::compute();
+            flex_basis_unconstraint_column::compute();
+            flex_basis_unconstraint_row::compute();
+            flex_direction_column::compute();
+            flex_direction_column_no_height::compute();
+            flex_direction_column_reverse::compute();
+            flex_direction_row::compute();
+            flex_direction_row_no_width::compute();
+            flex_direction_row_reverse::compute();
+            flex_grow_child::compute();
+            flex_grow_flex_basis_percent_min_max::compute();
+            flex_grow_height_maximized::compute();
+            flex_grow_in_at_most_container::compute();
+            flex_grow_less_than_factor_one::compute();
+            flex_grow_root_minimized::compute();
+            flex_grow_shrink_at_most::compute();
+            flex_grow_to_min::compute();
+            flex_grow_within_constrained_max_column::compute();
+            flex_grow_within_constrained_max_row::compute();
+            flex_grow_within_constrained_max_width::compute();
+            flex_grow_within_constrained_min_column::compute();
+            flex_grow_within_constrained_min_max_column::compute();
+            flex_grow_within_constrained_min_row::compute();
+            flex_grow_within_max_width::compute();
+            flex_root_ignored::compute();
+            flex_shrink_by_outer_margin_with_max_size::compute();
+            flex_shrink_flex_grow_child_flex_shrink_other_child::compute();
+            flex_shrink_flex_grow_row::compute();
+            flex_shrink_to_zero::compute();
+            flex_wrap_align_stretch_fits_one_row::compute();
+            flex_wrap_children_with_min_main_overriding_flex_basis::compute();
+            flex_wrap_wrap_to_child_height::compute();
+            justify_content_column_center::compute();
+            justify_content_column_flex_end::compute();
+            justify_content_column_flex_start::compute();
+            justify_content_column_min_height_and_margin_bottom::compute();
+            justify_content_column_min_height_and_margin_top::compute();
+            justify_content_column_space_around::compute();
+            justify_content_column_space_between::compute();
+            justify_content_column_space_evenly::compute();
+            justify_content_min_max::compute();
+            justify_content_min_width_with_padding_child_width_greater_than_parent::compute();
+            justify_content_min_width_with_padding_child_width_lower_than_parent::compute();
+            justify_content_overflow_min_max::compute();
+            justify_content_row_center::compute();
+            justify_content_row_flex_end::compute();
+            justify_content_row_flex_start::compute();
+            justify_content_row_max_width_and_margin::compute();
+            justify_content_row_min_width_and_margin::compute();
+            justify_content_row_space_around::compute();
+            justify_content_row_space_between::compute();
+            justify_content_row_space_evenly::compute();
+            margin_and_flex_column::compute();
+            margin_and_flex_row::compute();
+            margin_and_stretch_column::compute();
+            margin_and_stretch_row::compute();
+            margin_auto_bottom::compute();
+            margin_auto_bottom_and_top::compute();
+            margin_auto_bottom_and_top_justify_center::compute();
+            margin_auto_left::compute();
+            margin_auto_left_and_right::compute();
+            margin_auto_left_and_right_column::compute();
+            margin_auto_left_and_right_column_and_center::compute();
+            margin_auto_left_and_right_strech::compute();
+            margin_auto_left_child_bigger_than_parent::compute();
+            margin_auto_left_fix_right_child_bigger_than_parent::compute();
+            margin_auto_left_right_child_bigger_than_parent::compute();
+            margin_auto_left_stretching_child::compute();
+            margin_auto_mutiple_children_column::compute();
+            margin_auto_mutiple_children_row::compute();
+            margin_auto_right::compute();
+            margin_auto_top::compute();
+            margin_auto_top_and_bottom_strech::compute();
+            margin_auto_top_stretching_child::compute();
+            margin_bottom::compute();
+            margin_fix_left_auto_right_child_bigger_than_parent::compute();
+            margin_left::compute();
+            margin_right::compute();
+            margin_should_not_be_part_of_max_height::compute();
+            margin_should_not_be_part_of_max_width::compute();
+            margin_top::compute();
+            margin_with_sibling_column::compute();
+            margin_with_sibling_row::compute();
+            max_height::compute();
+            max_height_overrides_height::compute();
+            max_height_overrides_height_on_root::compute();
+            max_width::compute();
+            max_width_overrides_width::compute();
+            max_width_overrides_width_on_root::compute();
+            min_height::compute();
+            min_height_overrides_height::compute();
+            min_height_overrides_height_on_root::compute();
+            min_max_percent_no_width_height::compute();
+            min_width::compute();
+            min_width_overrides_width::compute();
+            min_width_overrides_width_on_root::compute();
+            nested_overflowing_child::compute();
+            nested_overflowing_child_in_constraint_parent::compute();
+            overflow_cross_axis::compute();
+            overflow_main_axis::compute();
+            padding_align_end_child::compute();
+            padding_center_child::compute();
+            padding_flex_child::compute();
+            padding_no_child::compute();
+            padding_stretch_child::compute();
+            parent_wrap_child_size_overflowing_parent::compute();
+            percent_absolute_position::compute();
+            percent_within_flex_grow::compute();
+            percentage_absolute_position::compute();
+            percentage_container_in_wrapping_container::compute();
+            percentage_flex_basis::compute();
+            percentage_flex_basis_cross::compute();
+            percentage_flex_basis_cross_max_height::compute();
+            percentage_flex_basis_cross_max_width::compute();
+            percentage_flex_basis_cross_min_height::compute();
+            percentage_flex_basis_cross_min_width::compute();
+            percentage_flex_basis_main_max_height::compute();
+            percentage_flex_basis_main_max_width::compute();
+            percentage_flex_basis_main_min_width::compute();
+            percentage_margin_should_calculate_based_only_on_width::compute();
+            percentage_multiple_nested_with_padding_margin_and_percentage_values::compute();
+            percentage_padding_should_calculate_based_only_on_width::compute();
+            percentage_position_bottom_right::compute();
+            percentage_position_left_top::compute();
+            percentage_size_based_on_parent_inner_size::compute();
+            percentage_size_of_flex_basis::compute();
+            percentage_width_height::compute();
+            percentage_width_height_undefined_parent_size::compute();
+            relative_position_should_not_nudge_siblings::compute();
+            rounding_flex_basis_flex_grow_row_prime_number_width::compute();
+            rounding_flex_basis_flex_grow_row_width_of_100::compute();
+            rounding_flex_basis_flex_shrink_row::compute();
+            rounding_flex_basis_overrides_main_size::compute();
+            rounding_fractial_input_1::compute();
+            rounding_fractial_input_2::compute();
+            rounding_fractial_input_3::compute();
+            rounding_fractial_input_4::compute();
+            rounding_total_fractial::compute();
+            rounding_total_fractial_nested::compute();
+            size_defined_by_child::compute();
+            size_defined_by_child_with_border::compute();
+            size_defined_by_child_with_padding::compute();
+            size_defined_by_grand_child::compute();
+            width_smaller_then_content_with_flex_grow_large_size::compute();
+            width_smaller_then_content_with_flex_grow_small_size::compute();
+            width_smaller_then_content_with_flex_grow_unconstraint_size::compute();
+            width_smaller_then_content_with_flex_grow_very_large_size::compute();
+            wrap_column::compute();
+            wrap_nodes_with_content_sizing_margin_cross::compute();
+            wrap_nodes_with_content_sizing_overflowing_margin::compute();
+            wrap_reverse_column::compute();
+            wrap_reverse_column_fixed_size::compute();
+            wrap_reverse_row::compute();
+            wrap_reverse_row_align_content_center::compute();
+            wrap_reverse_row_align_content_flex_start::compute();
+            wrap_reverse_row_align_content_space_around::compute();
+            wrap_reverse_row_align_content_stretch::compute();
+            wrap_reverse_row_single_line_different_size::compute();
+            wrap_row::compute();
+            wrap_row_align_items_center::compute();
+            wrap_row_align_items_flex_end::compute();
+            wrapped_column_max_height::compute();
+            wrapped_column_max_height_flex::compute();
+            wrapped_row_within_align_items_center::compute();
+            wrapped_row_within_align_items_flex_end::compute();
+            wrapped_row_within_align_items_flex_start::compute();
+        })
+    });
+}
+criterion_group!(benches, benchmark);
+criterion_main!(benches);
diff --git a/benches/generated/nested_overflowing_child.rs b/benches/generated/nested_overflowing_child.rs
new file mode 100644
index 000000000..831a24e0a
--- /dev/null
+++ b/benches/generated/nested_overflowing_child.rs
@@ -0,0 +1,25 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(200f32),
+                        height: stretch::style::Dimension::Points(200f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/nested_overflowing_child_in_constraint_parent.rs b/benches/generated/nested_overflowing_child_in_constraint_parent.rs
new file mode 100644
index 000000000..ae8f4e829
--- /dev/null
+++ b/benches/generated/nested_overflowing_child_in_constraint_parent.rs
@@ -0,0 +1,30 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100f32),
+                    height: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(200f32),
+                        height: stretch::style::Dimension::Points(200f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/overflow_cross_axis.rs b/benches/generated/overflow_cross_axis.rs
new file mode 100644
index 000000000..4b16df78a
--- /dev/null
+++ b/benches/generated/overflow_cross_axis.rs
@@ -0,0 +1,22 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100f32),
+                    height: stretch::style::Dimension::Points(200f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/overflow_main_axis.rs b/benches/generated/overflow_main_axis.rs
new file mode 100644
index 000000000..20b7b27b9
--- /dev/null
+++ b/benches/generated/overflow_main_axis.rs
@@ -0,0 +1,22 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                flex_shrink: 0f32,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(200f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/padding_align_end_child.rs b/benches/generated/padding_align_end_child.rs
new file mode 100644
index 000000000..eb0336b08
--- /dev/null
+++ b/benches/generated/padding_align_end_child.rs
@@ -0,0 +1,31 @@
+pub fn compute() -> stretch::layout::Node {
+    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(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100f32),
+                    height: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                padding: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Points(20f32),
+                    end: stretch::style::Dimension::Points(20f32),
+                    top: stretch::style::Dimension::Points(20f32),
+                    bottom: stretch::style::Dimension::Points(20f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/padding_center_child.rs b/benches/generated/padding_center_child.rs
new file mode 100644
index 000000000..9f9b98780
--- /dev/null
+++ b/benches/generated/padding_center_child.rs
@@ -0,0 +1,31 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            padding: stretch::geometry::Rect {
+                start: stretch::style::Dimension::Points(10f32),
+                end: stretch::style::Dimension::Points(20f32),
+                top: stretch::style::Dimension::Points(10f32),
+                bottom: stretch::style::Dimension::Points(20f32),
+                ..Default::default()
+            },
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/padding_flex_child.rs b/benches/generated/padding_flex_child.rs
new file mode 100644
index 000000000..144e37e26
--- /dev/null
+++ b/benches/generated/padding_flex_child.rs
@@ -0,0 +1,26 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                flex_grow: 1f32,
+                size: stretch::geometry::Size { width: stretch::style::Dimension::Points(10f32), ..Default::default() },
+                ..Default::default()
+            }],
+            padding: stretch::geometry::Rect {
+                start: stretch::style::Dimension::Points(10f32),
+                end: stretch::style::Dimension::Points(10f32),
+                top: stretch::style::Dimension::Points(10f32),
+                bottom: stretch::style::Dimension::Points(10f32),
+                ..Default::default()
+            },
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/padding_no_child.rs b/benches/generated/padding_no_child.rs
new file mode 100644
index 000000000..7fd0938da
--- /dev/null
+++ b/benches/generated/padding_no_child.rs
@@ -0,0 +1,16 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            padding: stretch::geometry::Rect {
+                start: stretch::style::Dimension::Points(10f32),
+                end: stretch::style::Dimension::Points(10f32),
+                top: stretch::style::Dimension::Points(10f32),
+                bottom: stretch::style::Dimension::Points(10f32),
+                ..Default::default()
+            },
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/padding_stretch_child.rs b/benches/generated/padding_stretch_child.rs
new file mode 100644
index 000000000..c1842c3da
--- /dev/null
+++ b/benches/generated/padding_stretch_child.rs
@@ -0,0 +1,28 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            padding: stretch::geometry::Rect {
+                start: stretch::style::Dimension::Points(10f32),
+                end: stretch::style::Dimension::Points(10f32),
+                top: stretch::style::Dimension::Points(10f32),
+                bottom: stretch::style::Dimension::Points(10f32),
+                ..Default::default()
+            },
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/parent_wrap_child_size_overflowing_parent.rs b/benches/generated/parent_wrap_child_size_overflowing_parent.rs
new file mode 100644
index 000000000..66ed16cbb
--- /dev/null
+++ b/benches/generated/parent_wrap_child_size_overflowing_parent.rs
@@ -0,0 +1,29 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100f32),
+                        height: stretch::style::Dimension::Points(200f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percent_absolute_position.rs b/benches/generated/percent_absolute_position.rs
new file mode 100644
index 000000000..a3aa59587
--- /dev/null
+++ b/benches/generated/percent_absolute_position.rs
@@ -0,0 +1,44 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(60f32),
+                height: stretch::style::Dimension::Points(50f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Percent(1f32),
+                    height: stretch::style::Dimension::Points(50f32),
+                    ..Default::default()
+                },
+                children: vec![
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Percent(1f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Percent(1f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                position: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Percent(0.5f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percent_within_flex_grow.rs b/benches/generated/percent_within_flex_grow.rs
new file mode 100644
index 000000000..d24141bff
--- /dev/null
+++ b/benches/generated/percent_within_flex_grow.rs
@@ -0,0 +1,42 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(350f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Percent(1f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_absolute_position.rs b/benches/generated/percentage_absolute_position.rs
new file mode 100644
index 000000000..6d461a926
--- /dev/null
+++ b/benches/generated/percentage_absolute_position.rs
@@ -0,0 +1,29 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                position_type: stretch::style::PositionType::Absolute,
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                position: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Percent(0.3f32),
+                    top: stretch::style::Dimension::Percent(0.1f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_container_in_wrapping_container.rs b/benches/generated/percentage_container_in_wrapping_container.rs
new file mode 100644
index 000000000..c7041d944
--- /dev/null
+++ b/benches/generated/percentage_container_in_wrapping_container.rs
@@ -0,0 +1,47 @@
+pub fn compute() -> stretch::layout::Node {
+    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(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                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(1f32),
+                        ..Default::default()
+                    },
+                    children: vec![
+                        stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(50f32),
+                                height: stretch::style::Dimension::Points(50f32),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        },
+                        stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(50f32),
+                                height: stretch::style::Dimension::Points(50f32),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        },
+                    ],
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_flex_basis.rs b/benches/generated/percentage_flex_basis.rs
new file mode 100644
index 000000000..0623423dd
--- /dev/null
+++ b/benches/generated/percentage_flex_basis.rs
@@ -0,0 +1,26 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.5f32),
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.25f32),
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_flex_basis_cross.rs b/benches/generated/percentage_flex_basis_cross.rs
new file mode 100644
index 000000000..f10e08827
--- /dev/null
+++ b/benches/generated/percentage_flex_basis_cross.rs
@@ -0,0 +1,27 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(400f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.5f32),
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.25f32),
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_flex_basis_cross_max_height.rs b/benches/generated/percentage_flex_basis_cross_max_height.rs
new file mode 100644
index 000000000..ab3ad3cd8
--- /dev/null
+++ b/benches/generated/percentage_flex_basis_cross_max_height.rs
@@ -0,0 +1,35 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(400f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.1f32),
+                    max_size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Percent(0.6f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 4f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.1f32),
+                    max_size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Percent(0.2f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_flex_basis_cross_max_width.rs b/benches/generated/percentage_flex_basis_cross_max_width.rs
new file mode 100644
index 000000000..e8a0c7788
--- /dev/null
+++ b/benches/generated/percentage_flex_basis_cross_max_width.rs
@@ -0,0 +1,35 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(400f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.1f32),
+                    max_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Percent(0.6f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 4f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.15f32),
+                    max_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Percent(0.2f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_flex_basis_cross_min_height.rs b/benches/generated/percentage_flex_basis_cross_min_height.rs
new file mode 100644
index 000000000..9ba3912cd
--- /dev/null
+++ b/benches/generated/percentage_flex_basis_cross_min_height.rs
@@ -0,0 +1,33 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(400f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    min_size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Percent(0.6f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 2f32,
+                    min_size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Percent(0.1f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_flex_basis_cross_min_width.rs b/benches/generated/percentage_flex_basis_cross_min_width.rs
new file mode 100644
index 000000000..71c6676d0
--- /dev/null
+++ b/benches/generated/percentage_flex_basis_cross_min_width.rs
@@ -0,0 +1,35 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(400f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.1f32),
+                    min_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Percent(0.6f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 4f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.15f32),
+                    min_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Percent(0.2f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_flex_basis_main_max_height.rs b/benches/generated/percentage_flex_basis_main_max_height.rs
new file mode 100644
index 000000000..69495e2a6
--- /dev/null
+++ b/benches/generated/percentage_flex_basis_main_max_height.rs
@@ -0,0 +1,34 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(400f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.1f32),
+                    max_size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Percent(0.6f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 4f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.1f32),
+                    max_size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Percent(0.2f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_flex_basis_main_max_width.rs b/benches/generated/percentage_flex_basis_main_max_width.rs
new file mode 100644
index 000000000..c54036fce
--- /dev/null
+++ b/benches/generated/percentage_flex_basis_main_max_width.rs
@@ -0,0 +1,34 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(400f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.15f32),
+                    max_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Percent(0.6f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 4f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.1f32),
+                    max_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Percent(0.2f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_flex_basis_main_min_width.rs b/benches/generated/percentage_flex_basis_main_min_width.rs
new file mode 100644
index 000000000..fe7daab9b
--- /dev/null
+++ b/benches/generated/percentage_flex_basis_main_min_width.rs
@@ -0,0 +1,34 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(400f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.15f32),
+                    min_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Percent(0.6f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 4f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.1f32),
+                    min_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Percent(0.2f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_margin_should_calculate_based_only_on_width.rs b/benches/generated/percentage_margin_should_calculate_based_only_on_width.rs
new file mode 100644
index 000000000..fbcfd9d45
--- /dev/null
+++ b/benches/generated/percentage_margin_should_calculate_based_only_on_width.rs
@@ -0,0 +1,35 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                flex_grow: 1f32,
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                margin: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Percent(0.1f32),
+                    end: stretch::style::Dimension::Percent(0.1f32),
+                    top: stretch::style::Dimension::Percent(0.1f32),
+                    bottom: stretch::style::Dimension::Percent(0.1f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_multiple_nested_with_padding_margin_and_percentage_values.rs b/benches/generated/percentage_multiple_nested_with_padding_margin_and_percentage_values.rs
new file mode 100644
index 000000000..66d9c1bda
--- /dev/null
+++ b/benches/generated/percentage_multiple_nested_with_padding_margin_and_percentage_values.rs
@@ -0,0 +1,93 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.1f32),
+                    min_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Percent(0.6f32),
+                        ..Default::default()
+                    },
+                    children: vec![stretch::style::Node {
+                        flex_direction: stretch::style::FlexDirection::Column,
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Percent(0.5f32),
+                            ..Default::default()
+                        },
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Percent(0.45f32),
+                                ..Default::default()
+                            },
+                            margin: stretch::geometry::Rect {
+                                start: stretch::style::Dimension::Percent(0.05f32),
+                                end: stretch::style::Dimension::Percent(0.05f32),
+                                top: stretch::style::Dimension::Percent(0.05f32),
+                                bottom: stretch::style::Dimension::Percent(0.05f32),
+                                ..Default::default()
+                            },
+                            padding: stretch::geometry::Rect {
+                                start: stretch::style::Dimension::Points(3f32),
+                                end: stretch::style::Dimension::Points(3f32),
+                                top: stretch::style::Dimension::Points(3f32),
+                                bottom: stretch::style::Dimension::Points(3f32),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        }],
+                        margin: stretch::geometry::Rect {
+                            start: stretch::style::Dimension::Points(5f32),
+                            end: stretch::style::Dimension::Points(5f32),
+                            top: stretch::style::Dimension::Points(5f32),
+                            bottom: stretch::style::Dimension::Points(5f32),
+                            ..Default::default()
+                        },
+                        padding: stretch::geometry::Rect {
+                            start: stretch::style::Dimension::Percent(0.03f32),
+                            end: stretch::style::Dimension::Percent(0.03f32),
+                            top: stretch::style::Dimension::Percent(0.03f32),
+                            bottom: stretch::style::Dimension::Percent(0.03f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(5f32),
+                        end: stretch::style::Dimension::Points(5f32),
+                        top: stretch::style::Dimension::Points(5f32),
+                        bottom: stretch::style::Dimension::Points(5f32),
+                        ..Default::default()
+                    },
+                    padding: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(3f32),
+                        end: stretch::style::Dimension::Points(3f32),
+                        top: stretch::style::Dimension::Points(3f32),
+                        bottom: stretch::style::Dimension::Points(3f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 4f32,
+                    flex_basis: stretch::style::Dimension::Percent(0.15f32),
+                    min_size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Percent(0.2f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_padding_should_calculate_based_only_on_width.rs b/benches/generated/percentage_padding_should_calculate_based_only_on_width.rs
new file mode 100644
index 000000000..c08f5642f
--- /dev/null
+++ b/benches/generated/percentage_padding_should_calculate_based_only_on_width.rs
@@ -0,0 +1,35 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                flex_direction: stretch::style::FlexDirection::Column,
+                flex_grow: 1f32,
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(10f32),
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                padding: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Percent(0.1f32),
+                    end: stretch::style::Dimension::Percent(0.1f32),
+                    top: stretch::style::Dimension::Percent(0.1f32),
+                    bottom: stretch::style::Dimension::Percent(0.1f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_position_bottom_right.rs b/benches/generated/percentage_position_bottom_right.rs
new file mode 100644
index 000000000..b0549a842
--- /dev/null
+++ b/benches/generated/percentage_position_bottom_right.rs
@@ -0,0 +1,27 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(500f32),
+                height: stretch::style::Dimension::Points(500f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Percent(0.55f32),
+                    height: stretch::style::Dimension::Percent(0.15f32),
+                    ..Default::default()
+                },
+                position: stretch::geometry::Rect {
+                    end: stretch::style::Dimension::Percent(0.2f32),
+                    bottom: stretch::style::Dimension::Percent(0.1f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_position_left_top.rs b/benches/generated/percentage_position_left_top.rs
new file mode 100644
index 000000000..77121ba50
--- /dev/null
+++ b/benches/generated/percentage_position_left_top.rs
@@ -0,0 +1,27 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(400f32),
+                height: stretch::style::Dimension::Points(400f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Percent(0.45f32),
+                    height: stretch::style::Dimension::Percent(0.55f32),
+                    ..Default::default()
+                },
+                position: stretch::geometry::Rect {
+                    start: stretch::style::Dimension::Percent(0.1f32),
+                    top: stretch::style::Dimension::Percent(0.2f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_size_based_on_parent_inner_size.rs b/benches/generated/percentage_size_based_on_parent_inner_size.rs
new file mode 100644
index 000000000..69884f050
--- /dev/null
+++ b/benches/generated/percentage_size_based_on_parent_inner_size.rs
@@ -0,0 +1,30 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(400f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Percent(0.5f32),
+                    height: stretch::style::Dimension::Percent(0.5f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            padding: stretch::geometry::Rect {
+                start: stretch::style::Dimension::Points(20f32),
+                end: stretch::style::Dimension::Points(20f32),
+                top: stretch::style::Dimension::Points(20f32),
+                bottom: stretch::style::Dimension::Points(20f32),
+                ..Default::default()
+            },
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_size_of_flex_basis.rs b/benches/generated/percentage_size_of_flex_basis.rs
new file mode 100644
index 000000000..35aa449c2
--- /dev/null
+++ b/benches/generated/percentage_size_of_flex_basis.rs
@@ -0,0 +1,22 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![stretch::style::Node {
+                flex_basis: stretch::style::Dimension::Points(50f32),
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Percent(1f32),
+                        height: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_width_height.rs b/benches/generated/percentage_width_height.rs
new file mode 100644
index 000000000..9fcf0e990
--- /dev/null
+++ b/benches/generated/percentage_width_height.rs
@@ -0,0 +1,22 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(200f32),
+                height: stretch::style::Dimension::Points(400f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Percent(0.3f32),
+                    height: stretch::style::Dimension::Percent(0.3f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/percentage_width_height_undefined_parent_size.rs b/benches/generated/percentage_width_height_undefined_parent_size.rs
new file mode 100644
index 000000000..0d25a930e
--- /dev/null
+++ b/benches/generated/percentage_width_height_undefined_parent_size.rs
@@ -0,0 +1,18 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Percent(0.5f32),
+                    height: stretch::style::Dimension::Percent(0.5f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/relative_position_should_not_nudge_siblings.rs b/benches/generated/relative_position_should_not_nudge_siblings.rs
new file mode 100644
index 000000000..76285d033
--- /dev/null
+++ b/benches/generated/relative_position_should_not_nudge_siblings.rs
@@ -0,0 +1,39 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    position: stretch::geometry::Rect {
+                        top: stretch::style::Dimension::Points(15f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    position: stretch::geometry::Rect {
+                        top: stretch::style::Dimension::Points(15f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/rounding_flex_basis_flex_grow_row_prime_number_width.rs b/benches/generated/rounding_flex_basis_flex_grow_row_prime_number_width.rs
new file mode 100644
index 000000000..16d8766d5
--- /dev/null
+++ b/benches/generated/rounding_flex_basis_flex_grow_row_prime_number_width.rs
@@ -0,0 +1,21 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(113f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/rounding_flex_basis_flex_grow_row_width_of_100.rs b/benches/generated/rounding_flex_basis_flex_grow_row_width_of_100.rs
new file mode 100644
index 000000000..b134b138e
--- /dev/null
+++ b/benches/generated/rounding_flex_basis_flex_grow_row_width_of_100.rs
@@ -0,0 +1,19 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+                stretch::style::Node { flex_grow: 1f32, ..Default::default() },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/rounding_flex_basis_flex_shrink_row.rs b/benches/generated/rounding_flex_basis_flex_shrink_row.rs
new file mode 100644
index 000000000..82fa03ee0
--- /dev/null
+++ b/benches/generated/rounding_flex_basis_flex_shrink_row.rs
@@ -0,0 +1,23 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(101f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_shrink: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                stretch::style::Node { flex_basis: stretch::style::Dimension::Points(25f32), ..Default::default() },
+                stretch::style::Node { flex_basis: stretch::style::Dimension::Points(25f32), ..Default::default() },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/rounding_flex_basis_overrides_main_size.rs b/benches/generated/rounding_flex_basis_overrides_main_size.rs
new file mode 100644
index 000000000..4b7d557d0
--- /dev/null
+++ b/benches/generated/rounding_flex_basis_overrides_main_size.rs
@@ -0,0 +1,42 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(113f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(50f32),
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/rounding_fractial_input_1.rs b/benches/generated/rounding_fractial_input_1.rs
new file mode 100644
index 000000000..c303aecca
--- /dev/null
+++ b/benches/generated/rounding_fractial_input_1.rs
@@ -0,0 +1,42 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(113.4f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(50f32),
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/rounding_fractial_input_2.rs b/benches/generated/rounding_fractial_input_2.rs
new file mode 100644
index 000000000..f4f35ebde
--- /dev/null
+++ b/benches/generated/rounding_fractial_input_2.rs
@@ -0,0 +1,42 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(113.6f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(50f32),
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/rounding_fractial_input_3.rs b/benches/generated/rounding_fractial_input_3.rs
new file mode 100644
index 000000000..c303aecca
--- /dev/null
+++ b/benches/generated/rounding_fractial_input_3.rs
@@ -0,0 +1,42 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(113.4f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(50f32),
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/rounding_fractial_input_4.rs b/benches/generated/rounding_fractial_input_4.rs
new file mode 100644
index 000000000..c303aecca
--- /dev/null
+++ b/benches/generated/rounding_fractial_input_4.rs
@@ -0,0 +1,42 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(113.4f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_basis: stretch::style::Dimension::Points(50f32),
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/rounding_total_fractial.rs b/benches/generated/rounding_total_fractial.rs
new file mode 100644
index 000000000..3b97807dc
--- /dev/null
+++ b/benches/generated/rounding_total_fractial.rs
@@ -0,0 +1,42 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(87.4f32),
+                height: stretch::style::Dimension::Points(113.4f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 0.7f32,
+                    flex_basis: stretch::style::Dimension::Points(50.3f32),
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(20.3f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1.6f32,
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1.1f32,
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10.7f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/rounding_total_fractial_nested.rs b/benches/generated/rounding_total_fractial_nested.rs
new file mode 100644
index 000000000..75fbad08a
--- /dev/null
+++ b/benches/generated/rounding_total_fractial_nested.rs
@@ -0,0 +1,71 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(87.4f32),
+                height: stretch::style::Dimension::Points(113.4f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 0.7f32,
+                    flex_basis: stretch::style::Dimension::Points(50.3f32),
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(20.3f32),
+                        ..Default::default()
+                    },
+                    children: vec![
+                        stretch::style::Node {
+                            flex_grow: 1f32,
+                            flex_basis: stretch::style::Dimension::Points(0.3f32),
+                            size: stretch::geometry::Size {
+                                height: stretch::style::Dimension::Points(9.9f32),
+                                ..Default::default()
+                            },
+                            position: stretch::geometry::Rect {
+                                bottom: stretch::style::Dimension::Points(13.3f32),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        },
+                        stretch::style::Node {
+                            flex_grow: 4f32,
+                            flex_basis: stretch::style::Dimension::Points(0.3f32),
+                            size: stretch::geometry::Size {
+                                height: stretch::style::Dimension::Points(1.1f32),
+                                ..Default::default()
+                            },
+                            position: stretch::geometry::Rect {
+                                top: stretch::style::Dimension::Points(13.3f32),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        },
+                    ],
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1.6f32,
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1.1f32,
+                    size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(10.7f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/size_defined_by_child.rs b/benches/generated/size_defined_by_child.rs
new file mode 100644
index 000000000..7120b74ab
--- /dev/null
+++ b/benches/generated/size_defined_by_child.rs
@@ -0,0 +1,17 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100f32),
+                    height: stretch::style::Dimension::Points(100f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/size_defined_by_child_with_border.rs b/benches/generated/size_defined_by_child_with_border.rs
new file mode 100644
index 000000000..af0eab290
--- /dev/null
+++ b/benches/generated/size_defined_by_child_with_border.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            border: stretch::geometry::Rect {
+                start: stretch::style::Dimension::Points(10f32),
+                end: stretch::style::Dimension::Points(10f32),
+                top: stretch::style::Dimension::Points(10f32),
+                bottom: stretch::style::Dimension::Points(10f32),
+                ..Default::default()
+            },
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/size_defined_by_child_with_padding.rs b/benches/generated/size_defined_by_child_with_padding.rs
new file mode 100644
index 000000000..8c544fbcf
--- /dev/null
+++ b/benches/generated/size_defined_by_child_with_padding.rs
@@ -0,0 +1,24 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            children: vec![stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(10f32),
+                    height: stretch::style::Dimension::Points(10f32),
+                    ..Default::default()
+                },
+                ..Default::default()
+            }],
+            padding: stretch::geometry::Rect {
+                start: stretch::style::Dimension::Points(10f32),
+                end: stretch::style::Dimension::Points(10f32),
+                top: stretch::style::Dimension::Points(10f32),
+                bottom: stretch::style::Dimension::Points(10f32),
+                ..Default::default()
+            },
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/size_defined_by_grand_child.rs b/benches/generated/size_defined_by_grand_child.rs
new file mode 100644
index 000000000..7ef4ef9b9
--- /dev/null
+++ b/benches/generated/size_defined_by_grand_child.rs
@@ -0,0 +1,20 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            children: vec![stretch::style::Node {
+                children: vec![stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100f32),
+                        height: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                }],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/width_smaller_then_content_with_flex_grow_large_size.rs b/benches/generated/width_smaller_then_content_with_flex_grow_large_size.rs
new file mode 100644
index 000000000..c306258a7
--- /dev/null
+++ b/benches/generated/width_smaller_then_content_with_flex_grow_large_size.rs
@@ -0,0 +1,46 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(0f32),
+                        ..Default::default()
+                    },
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(70f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(0f32),
+                        ..Default::default()
+                    },
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(20f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/width_smaller_then_content_with_flex_grow_small_size.rs b/benches/generated/width_smaller_then_content_with_flex_grow_small_size.rs
new file mode 100644
index 000000000..49ac90fac
--- /dev/null
+++ b/benches/generated/width_smaller_then_content_with_flex_grow_small_size.rs
@@ -0,0 +1,46 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(10f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(0f32),
+                        ..Default::default()
+                    },
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(70f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(0f32),
+                        ..Default::default()
+                    },
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(20f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/width_smaller_then_content_with_flex_grow_unconstraint_size.rs b/benches/generated/width_smaller_then_content_with_flex_grow_unconstraint_size.rs
new file mode 100644
index 000000000..d77c7373f
--- /dev/null
+++ b/benches/generated/width_smaller_then_content_with_flex_grow_unconstraint_size.rs
@@ -0,0 +1,45 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            children: vec![
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(0f32),
+                        ..Default::default()
+                    },
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(70f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(0f32),
+                        ..Default::default()
+                    },
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(20f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/width_smaller_then_content_with_flex_grow_very_large_size.rs b/benches/generated/width_smaller_then_content_with_flex_grow_very_large_size.rs
new file mode 100644
index 000000000..0ddca5201
--- /dev/null
+++ b/benches/generated/width_smaller_then_content_with_flex_grow_very_large_size.rs
@@ -0,0 +1,46 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(200f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(0f32),
+                        ..Default::default()
+                    },
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(70f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_direction: stretch::style::FlexDirection::Column,
+                    flex_grow: 1f32,
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(0f32),
+                        ..Default::default()
+                    },
+                    children: vec![stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(20f32),
+                            height: stretch::style::Dimension::Points(100f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }],
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrap_column.rs b/benches/generated/wrap_column.rs
new file mode 100644
index 000000000..bec53fb8b
--- /dev/null
+++ b/benches/generated/wrap_column.rs
@@ -0,0 +1,50 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            flex_wrap: stretch::style::FlexWrap::Wrap,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(31f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(32f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(33f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(34f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrap_nodes_with_content_sizing_margin_cross.rs b/benches/generated/wrap_nodes_with_content_sizing_margin_cross.rs
new file mode 100644
index 000000000..15a093804
--- /dev/null
+++ b/benches/generated/wrap_nodes_with_content_sizing_margin_cross.rs
@@ -0,0 +1,50 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(500f32),
+                height: stretch::style::Dimension::Points(500f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                flex_wrap: stretch::style::FlexWrap::Wrap,
+                size: stretch::geometry::Size { width: stretch::style::Dimension::Points(70f32), ..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(40f32),
+                                height: stretch::style::Dimension::Points(40f32),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        }],
+                        ..Default::default()
+                    },
+                    stretch::style::Node {
+                        flex_direction: stretch::style::FlexDirection::Column,
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(40f32),
+                                height: stretch::style::Dimension::Points(40f32),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        }],
+                        margin: stretch::geometry::Rect {
+                            top: stretch::style::Dimension::Points(10f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrap_nodes_with_content_sizing_overflowing_margin.rs b/benches/generated/wrap_nodes_with_content_sizing_overflowing_margin.rs
new file mode 100644
index 000000000..8fc2e5852
--- /dev/null
+++ b/benches/generated/wrap_nodes_with_content_sizing_overflowing_margin.rs
@@ -0,0 +1,50 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_direction: stretch::style::FlexDirection::Column,
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(500f32),
+                height: stretch::style::Dimension::Points(500f32),
+                ..Default::default()
+            },
+            children: vec![stretch::style::Node {
+                flex_wrap: stretch::style::FlexWrap::Wrap,
+                size: stretch::geometry::Size { width: stretch::style::Dimension::Points(85f32), ..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(40f32),
+                                height: stretch::style::Dimension::Points(40f32),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        }],
+                        ..Default::default()
+                    },
+                    stretch::style::Node {
+                        flex_direction: stretch::style::FlexDirection::Column,
+                        children: vec![stretch::style::Node {
+                            size: stretch::geometry::Size {
+                                width: stretch::style::Dimension::Points(40f32),
+                                height: stretch::style::Dimension::Points(40f32),
+                                ..Default::default()
+                            },
+                            ..Default::default()
+                        }],
+                        margin: stretch::geometry::Rect {
+                            end: stretch::style::Dimension::Points(10f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrap_reverse_column.rs b/benches/generated/wrap_reverse_column.rs
new file mode 100644
index 000000000..c7394b650
--- /dev/null
+++ b/benches/generated/wrap_reverse_column.rs
@@ -0,0 +1,50 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(31f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(32f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(33f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(34f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrap_reverse_column_fixed_size.rs b/benches/generated/wrap_reverse_column_fixed_size.rs
new file mode 100644
index 000000000..ddcede52c
--- /dev/null
+++ b/benches/generated/wrap_reverse_column_fixed_size.rs
@@ -0,0 +1,59 @@
+pub fn compute() -> stretch::layout::Node {
+    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(200f32),
+                height: stretch::style::Dimension::Points(100f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(40f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrap_reverse_row.rs b/benches/generated/wrap_reverse_row.rs
new file mode 100644
index 000000000..1bd4f1d74
--- /dev/null
+++ b/benches/generated/wrap_reverse_row.rs
@@ -0,0 +1,45 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_wrap: stretch::style::FlexWrap::WrapReverse,
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(31f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(32f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(33f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(34f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrap_reverse_row_align_content_center.rs b/benches/generated/wrap_reverse_row_align_content_center.rs
new file mode 100644
index 000000000..88d67e726
--- /dev/null
+++ b/benches/generated/wrap_reverse_row_align_content_center.rs
@@ -0,0 +1,54 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(40f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrap_reverse_row_align_content_flex_start.rs b/benches/generated/wrap_reverse_row_align_content_flex_start.rs
new file mode 100644
index 000000000..243e93893
--- /dev/null
+++ b/benches/generated/wrap_reverse_row_align_content_flex_start.rs
@@ -0,0 +1,54 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(40f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrap_reverse_row_align_content_space_around.rs b/benches/generated/wrap_reverse_row_align_content_space_around.rs
new file mode 100644
index 000000000..af2a4e2eb
--- /dev/null
+++ b/benches/generated/wrap_reverse_row_align_content_space_around.rs
@@ -0,0 +1,54 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(40f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrap_reverse_row_align_content_stretch.rs b/benches/generated/wrap_reverse_row_align_content_stretch.rs
new file mode 100644
index 000000000..7c88ad5d7
--- /dev/null
+++ b/benches/generated/wrap_reverse_row_align_content_stretch.rs
@@ -0,0 +1,53 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_wrap: stretch::style::FlexWrap::WrapReverse,
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(40f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrap_reverse_row_single_line_different_size.rs b/benches/generated/wrap_reverse_row_single_line_different_size.rs
new file mode 100644
index 000000000..49bce7143
--- /dev/null
+++ b/benches/generated/wrap_reverse_row_single_line_different_size.rs
@@ -0,0 +1,54 @@
+pub fn compute() -> stretch::layout::Node {
+    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(300f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(40f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(50f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrap_row.rs b/benches/generated/wrap_row.rs
new file mode 100644
index 000000000..7df237cbb
--- /dev/null
+++ b/benches/generated/wrap_row.rs
@@ -0,0 +1,45 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_wrap: stretch::style::FlexWrap::Wrap,
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(31f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(32f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(33f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(34f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrap_row_align_items_center.rs b/benches/generated/wrap_row_align_items_center.rs
new file mode 100644
index 000000000..943717222
--- /dev/null
+++ b/benches/generated/wrap_row_align_items_center.rs
@@ -0,0 +1,46 @@
+pub fn compute() -> stretch::layout::Node {
+    stretch::compute(
+        &stretch::style::Node {
+            flex_wrap: stretch::style::FlexWrap::Wrap,
+            align_items: stretch::style::AlignItems::Center,
+            size: stretch::geometry::Size { width: stretch::style::Dimension::Points(100f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrap_row_align_items_flex_end.rs b/benches/generated/wrap_row_align_items_flex_end.rs
new file mode 100644
index 000000000..d23aa8979
--- /dev/null
+++ b/benches/generated/wrap_row_align_items_flex_end.rs
@@ -0,0 +1,46 @@
+pub fn compute() -> stretch::layout::Node {
+    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(100f32), ..Default::default() },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(10f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(30f32),
+                        height: stretch::style::Dimension::Points(30f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrapped_column_max_height.rs b/benches/generated/wrapped_column_max_height.rs
new file mode 100644
index 000000000..dfe1592f3
--- /dev/null
+++ b/benches/generated/wrapped_column_max_height.rs
@@ -0,0 +1,56 @@
+pub fn compute() -> stretch::layout::Node {
+    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(700f32),
+                height: stretch::style::Dimension::Points(500f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100f32),
+                        height: stretch::style::Dimension::Points(500f32),
+                        ..Default::default()
+                    },
+                    max_size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(200f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(200f32),
+                        height: stretch::style::Dimension::Points(200f32),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(20f32),
+                        end: stretch::style::Dimension::Points(20f32),
+                        top: stretch::style::Dimension::Points(20f32),
+                        bottom: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100f32),
+                        height: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrapped_column_max_height_flex.rs b/benches/generated/wrapped_column_max_height_flex.rs
new file mode 100644
index 000000000..fce4d7c0d
--- /dev/null
+++ b/benches/generated/wrapped_column_max_height_flex.rs
@@ -0,0 +1,62 @@
+pub fn compute() -> stretch::layout::Node {
+    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(700f32),
+                height: stretch::style::Dimension::Points(500f32),
+                ..Default::default()
+            },
+            children: vec![
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_shrink: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0f32),
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100f32),
+                        height: stretch::style::Dimension::Points(500f32),
+                        ..Default::default()
+                    },
+                    max_size: stretch::geometry::Size {
+                        height: stretch::style::Dimension::Points(200f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    flex_grow: 1f32,
+                    flex_shrink: 1f32,
+                    flex_basis: stretch::style::Dimension::Percent(0f32),
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(200f32),
+                        height: stretch::style::Dimension::Points(200f32),
+                        ..Default::default()
+                    },
+                    margin: stretch::geometry::Rect {
+                        start: stretch::style::Dimension::Points(20f32),
+                        end: stretch::style::Dimension::Points(20f32),
+                        top: stretch::style::Dimension::Points(20f32),
+                        bottom: stretch::style::Dimension::Points(20f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+                stretch::style::Node {
+                    size: stretch::geometry::Size {
+                        width: stretch::style::Dimension::Points(100f32),
+                        height: stretch::style::Dimension::Points(100f32),
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                },
+            ],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrapped_row_within_align_items_center.rs b/benches/generated/wrapped_row_within_align_items_center.rs
new file mode 100644
index 000000000..5faf6cd02
--- /dev/null
+++ b/benches/generated/wrapped_row_within_align_items_center.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    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(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..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(150f32),
+                            height: stretch::style::Dimension::Points(80f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(80f32),
+                            height: stretch::style::Dimension::Points(80f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrapped_row_within_align_items_flex_end.rs b/benches/generated/wrapped_row_within_align_items_flex_end.rs
new file mode 100644
index 000000000..d7c87eceb
--- /dev/null
+++ b/benches/generated/wrapped_row_within_align_items_flex_end.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    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(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..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(150f32),
+                            height: stretch::style::Dimension::Points(80f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(80f32),
+                            height: stretch::style::Dimension::Points(80f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/benches/generated/wrapped_row_within_align_items_flex_start.rs b/benches/generated/wrapped_row_within_align_items_flex_start.rs
new file mode 100644
index 000000000..e327d6e9e
--- /dev/null
+++ b/benches/generated/wrapped_row_within_align_items_flex_start.rs
@@ -0,0 +1,38 @@
+pub fn compute() -> stretch::layout::Node {
+    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(200f32),
+                height: stretch::style::Dimension::Points(200f32),
+                ..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(150f32),
+                            height: stretch::style::Dimension::Points(80f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                    stretch::style::Node {
+                        size: stretch::geometry::Size {
+                            width: stretch::style::Dimension::Points(80f32),
+                            height: stretch::style::Dimension::Points(80f32),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    },
+                ],
+                ..Default::default()
+            }],
+            ..Default::default()
+        },
+        stretch::geometry::Size::undefined(),
+    )
+    .unwrap()
+}
diff --git a/scripts/gentest/src/main.rs b/scripts/gentest/src/main.rs
index cbe71ee36..140b837d5 100644
--- a/scripts/gentest/src/main.rs
+++ b/scripts/gentest/src/main.rs
@@ -81,14 +81,30 @@ fn main() {
 
     info!("generating test sources and concatenating...");
 
+    let bench_descs: Vec<_> = test_descs
+        .iter()
+        .map(|(name, description)| {
+            debug!("generating bench contents for {}", &name);
+            (name.clone(), generate_bench(description))
+        })
+        .collect();
+
     let test_descs: Vec<_> = test_descs
-        .into_iter()
+        .iter()
         .map(|(name, description)| {
             debug!("generating test contents for {}", &name);
             (name.clone(), generate_test(name, description))
         })
         .collect();
 
+    let benchmarks: Vec<_> = test_descs
+        .iter()
+        .map(|(name, _)| {
+            let bench_mod = Ident::new(name, Span::call_site());
+            quote!(#bench_mod::compute())
+        })
+        .collect();
+
     let test_mods = test_descs
         .iter()
         .map(|(name, _)| {
@@ -97,6 +113,13 @@ fn main() {
         })
         .fold(quote!(), |a, b| quote!(#a #b));
 
+    for (name, bench_body) in bench_descs {
+        let mut bench_filename = repo_root.join("benches").join("generated").join(&name);
+        bench_filename.set_extension("rs");
+        debug!("writing {} to disk...", &name);
+        fs::write(bench_filename, bench_body.to_string()).unwrap();
+    }
+
     for (name, test_body) in test_descs {
         let mut test_filename = repo_root.join("tests").join("generated").join(&name);
         test_filename.set_extension("rs");
@@ -104,8 +127,25 @@ fn main() {
         fs::write(test_filename, test_body.to_string()).unwrap();
     }
 
+    let bench_mods = quote!(
+        use criterion::{criterion_group, criterion_main, Criterion};
+
+        #test_mods
+
+        fn benchmark(c: &mut Criterion) {
+            c.bench_function("generated benchmarks", |b| {
+                b.iter(|| { #(#benchmarks;)* })
+            });
+        }
+
+        criterion_group!(benches, benchmark);
+        criterion_main!(benches);
+    );
+
     info!("writing generated test file to disk...");
+    fs::write(repo_root.join("benches").join("generated").join("mod.rs"), bench_mods.to_string()).unwrap();
     fs::write(repo_root.join("tests").join("generated").join("mod.rs"), test_mods.to_string()).unwrap();
+
     info!("formatting the source directory");
     Command::new("cargo").arg("fmt").current_dir(repo_root).status().unwrap();
 }
@@ -140,18 +180,24 @@ fn test_root_element(
         .map_err(|c| c.into())
 }
 
-fn generate_test(name: impl AsRef<str>, description: json::JsonValue) -> TokenStream {
-    let ignorelist = &["flex_basis_smaller_than_content_column"];
+fn generate_bench(description: &json::JsonValue) -> TokenStream {
+    let node_description = generate_node(&description);
+
+    quote!(
+        pub fn compute() -> stretch::layout::Node {
+            stretch::compute(&#node_description, stretch::geometry::Size::undefined()).unwrap()
+        }
+    )
+}
 
+fn generate_test(name: impl AsRef<str>, description: &json::JsonValue) -> TokenStream {
     let name = name.as_ref();
-    let maybe_ignore = if ignorelist.contains(&name) { quote!(#[ignore]) } else { quote!() };
     let name = Ident::new(name, Span::call_site());
     let node_description = generate_node(&description);
     let assertions = generate_assertions(quote!(layout), &description);
 
     quote!(
         #[test]
-        #maybe_ignore
         fn #name() {
             let layout = stretch::compute(&#node_description, stretch::geometry::Size::undefined()).unwrap();
             #assertions
diff --git a/tests/generated/flex_basis_smaller_than_content_column.rs b/tests/generated/flex_basis_smaller_than_conte

El parche sigue, pero se cortó acá: pedí el commit por git para verlo entero.