tawasuyu

tawasuyu/taffy

A high performance rust-powered UI layout library

Rust 583HTML 275Markdown 8TOML 41586 Definiciones

Add error handling to custom measure functions

c3eff87967f17e831fe09488d3206b363e4e9efa · por Emil Sjölander · (hace 7 años) · padre e050ab220 · ver el árbol en este commit

Delta semántico · 264

benches/generated.rs

examples/basic.rs

  • cambió por dentro fn main

scripts/gentest/src/main.rs

src/algo.rs

src/style.rs

tests/generated.rs

tests/measure.rs

tests/root_constraints.rs

9 archivos · +677 −351

diff --git a/Cargo.toml b/Cargo.toml
index 6cb02b860..c42025a33 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -17,6 +17,7 @@ maintenance = { status = "experimental" }
 
 [dependencies]
 libm = "0.1.2"
+simple-error = "0.1"
 
 [features]
 default = ["std"]
diff --git a/benches/generated.rs b/benches/generated.rs
index 3859104bd..92fea1d20 100644
--- a/benches/generated.rs
+++ b/benches/generated.rs
@@ -99,6 +99,7 @@ fn stretch_benchmarks(c: &mut Criterion) {
                 },
                 stretch::geometry::Size::undefined(),
             )
+            .unwrap()
         })
     });
 }
diff --git a/examples/basic.rs b/examples/basic.rs
index 59c8ecdba..a06cbef34 100644
--- a/examples/basic.rs
+++ b/examples/basic.rs
@@ -14,7 +14,7 @@ fn main() {
         ..Default::default()
     };
 
-    let layout = stretch::compute(&node, Size::undefined());
+    let layout = stretch::compute(&node, Size::undefined()).unwrap();
 
     println!("{:#?}", layout);
 }
diff --git a/scripts/gentest/src/main.rs b/scripts/gentest/src/main.rs
index 54bd74e2f..18f5e83a4 100644
--- a/scripts/gentest/src/main.rs
+++ b/scripts/gentest/src/main.rs
@@ -73,7 +73,7 @@ fn generate_test(name: &str, root: Element) -> String {
     
     src.push_str("let layout = stretch::compute(\n");
     src.push_str(&format!("&{}", &generate_node(&description)));
-    src.push_str(", stretch::geometry::Size::undefined());\n\n");
+    src.push_str(", stretch::geometry::Size::undefined()).unwrap();\n\n");
 
     src.push_str(&generate_assertions("layout".to_string(), &description));
     src.push_str("}\n");
diff --git a/src/algo.rs b/src/algo.rs
index 63f572a7f..8b402c904 100644
--- a/src/algo.rs
+++ b/src/algo.rs
@@ -3,6 +3,8 @@ use alloc::{vec, vec::Vec};
 #[cfg(not(feature = "std"))]
 use libm::F32Ext;
 
+use simple_error::SimpleError;
+
 use core::f32;
 
 use crate::layout;
@@ -59,7 +61,7 @@ struct FlexLine<'a> {
     offset_cross: f32,
 }
 
-pub fn compute(root: &style::Node, size: Size<Number>) -> layout::Node {
+pub fn compute(root: &style::Node, size: Size<Number>) -> Result<layout::Node, SimpleError> {
     let has_root_min_max = root.min_size.width.is_defined()
         || root.min_size.height.is_defined()
         || root.max_size.width.is_defined()
@@ -71,7 +73,7 @@ pub fn compute(root: &style::Node, size: Size<Number>) -> layout::Node {
             Size { width: root.size.width.resolve(size.width), height: root.size.height.resolve(size.height) },
             size,
             false,
-        );
+        )?;
 
         compute_internal(
             root,
@@ -91,14 +93,14 @@ pub fn compute(root: &style::Node, size: Size<Number>) -> layout::Node {
             },
             size,
             true,
-        )
+        )?
     } else {
         compute_internal(
             root,
             Size { width: root.size.width.resolve(size.width), height: root.size.height.resolve(size.height) },
             size,
             true,
-        )
+        )?
     };
 
     let mut layout = layout::Node {
@@ -109,7 +111,7 @@ pub fn compute(root: &style::Node, size: Size<Number>) -> layout::Node {
     };
 
     round_layout(&mut layout, 0.0, 0.0);
-    layout
+    Ok(layout)
 }
 
 fn round_layout(layout: &mut layout::Node, abs_x: f32, abs_y: f32) {
@@ -128,7 +130,7 @@ fn compute_internal(
     node_size: Size<Number>,
     parent_size: Size<Number>,
     perform_layout: bool,
-) -> ComputeResult {
+) -> Result<ComputeResult, SimpleError> {
     // First we check if we have a result for the given input
     {
         let layout_cache = node.layout_cache.borrow();
@@ -147,11 +149,11 @@ fn compute_internal(
                 };
 
                 if width_compatible && height_compatible {
-                    return cache.result.clone();
+                    return Ok(cache.result.clone());
                 }
 
                 if cache.node_size == node_size && cache.parent_size == parent_size {
-                    return cache.result.clone();
+                    return Ok(cache.result.clone());
                 }
             }
         }
@@ -160,18 +162,18 @@ fn compute_internal(
     // If this is a leaf node we can skip a lot of this function in some cases
     if node.children.is_empty() {
         if node_size.width.is_defined() && node_size.height.is_defined() {
-            return ComputeResult { size: node_size.map(|s| s.or_else(0.0)), children: vec![] };
+            return Ok(ComputeResult { size: node_size.map(|s| s.or_else(0.0)), children: vec![] });
         }
 
         if let Some(ref measure) = node.measure {
-            let result = ComputeResult { size: measure(node_size), children: vec![] };
+            let result = ComputeResult { size: measure(node_size)?, children: vec![] };
             node.layout_cache.replace(Some(LayoutCache {
                 node_size,
                 parent_size,
                 perform_layout,
                 result: result.clone(),
             }));
-            return result;
+            return Ok(result);
         }
     }
 
@@ -266,13 +268,13 @@ fn compute_internal(
 
     // TODO - this does not follow spec. See commented out code below
     // 3. Determine the flex base size and hypothetical main size of each item:
-    flex_items.iter_mut().for_each(|child| {
+    flex_items.iter_mut().try_for_each(|child| -> Result<(), SimpleError> {
         // A. If the item has a definite used flex basis, that’s the flex base size.
 
         let flex_basis = child.node.flex_basis.resolve(node_inner_size.main(dir));
         if flex_basis.is_defined() {
             child.flex_basis = flex_basis.or_else(0.0);
-            return;
+            return Ok(());
         };
 
         // B. If the flex item has an intrinsic aspect ratio,
@@ -284,7 +286,7 @@ fn compute_internal(
             if let Defined(cross) = node_size.cross(dir) {
                 if child.node.flex_basis == Dimension::Auto {
                     child.flex_basis = cross * ratio;
-                    return;
+                    return Ok(());
                 }
             }
         }
@@ -336,17 +338,19 @@ fn compute_internal(
             },
             available_space,
             false,
-        )
+        )?
         .size
         .main(dir)
         .maybe_max(child.min_size.main(dir))
         .maybe_min(child.max_size.main(dir));
-    });
+
+        Ok(())
+    })?;
 
     // The hypothetical main size is the item’s flex base size clamped according to its
     // used min and max main sizes (and flooring the content box size at zero).
 
-    flex_items.iter_mut().for_each(|child| {
+    flex_items.iter_mut().try_for_each(|child| -> Result<(), SimpleError> {
         child.inner_flex_basis = child.flex_basis - child.padding.main(dir) - child.border.main(dir);
 
         // TODO - not really spec abiding but needs to be done somewhere. probably somewhere else though.
@@ -354,7 +358,7 @@ fn compute_internal(
         // webkit handled various scenarios. Can probably be solved better by passing in
         // min-content max-content constraints from the top
         let min_main = if is_row {
-            compute_internal(child.node, Size { width: Undefined, height: Undefined }, available_space, false)
+            compute_internal(child.node, Size { width: Undefined, height: Undefined }, available_space, false)?
                 .size
                 .width
                 .maybe_max(child.min_size.width)
@@ -369,7 +373,9 @@ fn compute_internal(
             .set_main(dir, child.flex_basis.maybe_max(min_main).maybe_min(child.max_size.main(dir)));
 
         child.hypothetical_outer_size.set_main(dir, child.hypothetical_inner_size.main(dir) + child.margin.main(dir));
-    });
+
+        Ok(())
+    })?;
 
     // 9.3. Main Size Determination
 
@@ -422,7 +428,7 @@ fn compute_internal(
     //
     // 9.7. Resolving Flexible Lengths
 
-    flex_lines.iter_mut().for_each(|line| {
+    flex_lines.iter_mut().try_for_each(|line| -> Result<(), SimpleError> {
         // 1. Determine the used flex factor. Sum the outer hypothetical main sizes of all
         //    items on the line. If the sum is less than the flex container’s inner main size,
         //    use the flex grow factor for the rest of this algorithm; otherwise, use the
@@ -439,7 +445,7 @@ fn compute_internal(
         //    - If using the flex shrink factor: any item that has a flex base size
         //      smaller than its hypothetical main size
 
-        line.items.iter_mut().for_each(|child| {
+        line.items.iter_mut().try_for_each(|child| -> Result<(), SimpleError> {
             // TODO - This is not found by reading the spec. Maybe this can be done in some other place
             // instead. This was found by trail and error fixing tests to align with webkit output.
             if node_inner_size.main(dir).is_undefined() && is_row {
@@ -453,7 +459,7 @@ fn compute_internal(
                         },
                         available_space,
                         false,
-                    )
+                    )?
                     .size
                     .main(dir)
                     .maybe_max(child.min_size.main(dir))
@@ -474,7 +480,9 @@ fn compute_internal(
             {
                 child.frozen = true;
             }
-        });
+
+            Ok(())
+        })?;
 
         // 3. Calculate initial free space. Sum the outer sizes of all items on the line,
         //    and subtract this from the flex container’s inner main size. For frozen items,
@@ -581,14 +589,14 @@ fn compute_internal(
             //    item’s target main size was made smaller by this, it’s a max violation.
             //    If the item’s target main size was made larger by this, it’s a min violation.
 
-            let total_violation = unfrozen.iter_mut().fold(0.0, |acc, child| {
+            let total_violation = unfrozen.iter_mut().try_fold(0.0, |acc, child| -> Result<f32, SimpleError> {
                 // TODO - not really spec abiding but needs to be done somewhere. probably somewhere else though.
                 // The following logic was developed not from the spec but by trail and error looking into how
                 // webkit handled various scenarios. Can probably be solved better by passing in
                 // min-content max-content constraints from the top. Need to figure out correct thing to do here as
                 // just piling on more conditionals.
                 let min_main = if is_row && child.node.measure.is_none() {
-                    compute_internal(child.node, Size { width: Undefined, height: Undefined }, available_space, false)
+                    compute_internal(child.node, Size { width: Undefined, height: Undefined }, available_space, false)?
                         .size
                         .width
                         .maybe_min(child.size.width)
@@ -604,8 +612,8 @@ fn compute_internal(
                 child.target_size.set_main(dir, clamped);
                 child.outer_target_size.set_main(dir, child.target_size.main(dir) + child.margin.main(dir));
 
-                acc + child.violation
-            });
+                Ok(acc + child.violation)
+            })?;
 
             // e. Freeze over-flexed items. The total violation is the sum of the adjustments
             //    from the previous step ∑(clamped size - unclamped size). If the total violation is:
@@ -624,7 +632,9 @@ fn compute_internal(
 
             // f. Return to the start of this loop.
         }
-    });
+
+        Ok(())
+    })?;
 
     // Not part of the spec from what i can see but seems correct
     container_size.set_main(
@@ -650,8 +660,8 @@ fn compute_internal(
     // 7. Determine the hypothetical cross size of each item by performing layout with the
     //    used main size and the available space, treating auto as fit-content.
 
-    flex_lines.iter_mut().for_each(|line| {
-        line.items.iter_mut().for_each(|child| {
+    flex_lines.iter_mut().try_for_each(|line| {
+        line.items.iter_mut().try_for_each(|child| -> Result<(), SimpleError> {
             let child_cross =
                 child.size.cross(dir).maybe_max(child.min_size.cross(dir)).maybe_min(child.max_size.cross(dir));
 
@@ -668,7 +678,7 @@ fn compute_internal(
                         height: if is_row { available_space.height } else { container_size.main(dir).to_number() },
                     },
                     false,
-                )
+                )?
                 .size
                 .cross(dir)
                 .maybe_max(child.min_size.cross(dir))
@@ -678,8 +688,10 @@ fn compute_internal(
             child
                 .hypothetical_outer_size
                 .set_cross(dir, child.hypothetical_inner_size.cross(dir) + child.margin.cross(dir));
-        });
-    });
+
+            Ok(())
+        })
+    })?;
 
     // TODO - probably should move this somewhere else as it doesn't make a ton of sense here but we need it below
     // TODO - This is expensive and should only be done if we really require a baseline. aka, make it lazy
@@ -692,8 +704,8 @@ fn compute_internal(
         }
     };
 
-    flex_lines.iter_mut().for_each(|line| {
-        line.items.iter_mut().for_each(|child| {
+    flex_lines.iter_mut().try_for_each(|line| {
+        line.items.iter_mut().try_for_each(|child| -> Result<(), SimpleError> {
             let result = compute_internal(
                 child.node,
                 Size {
@@ -713,15 +725,18 @@ fn compute_internal(
                     height: if is_row { node_size.height } else { container_size.height.to_number() },
                 },
                 true,
-            );
+            )?;
+
             child.baseline = calc_baseline(&layout::Node {
                 order: node.children.iter().position(|n| ref_eq(n, child.node)).unwrap() as u32,
                 size: result.size,
                 location: Point { x: 0.0, y: 0.0 },
                 children: result.children,
             });
-        });
-    });
+
+            Ok(())
+        })
+    })?;
 
     // 8. Calculate the cross size of each flex line.
     //    If the flex container is single-line and has a definite cross size, the cross size
@@ -1029,7 +1044,7 @@ fn compute_internal(
     if !perform_layout {
         let result = ComputeResult { size: container_size, children: vec![] };
         node.layout_cache.replace(Some(LayoutCache { node_size, parent_size, perform_layout, result: result.clone() }));
-        return result;
+        return Ok(result);
     }
 
     // 16. Align all flex lines per align-content.
@@ -1091,18 +1106,18 @@ fn compute_internal(
         let mut lines: Vec<Vec<layout::Node>> = vec![];
         let mut total_offset_cross = padding_border.cross_start(dir);
 
-        let layout_line = |line: &mut FlexLine| {
+        let layout_line = |line: &mut FlexLine| -> Result<(), SimpleError> {
             let mut children: Vec<layout::Node> = vec![];
             let mut total_offset_main = padding_border.main_start(dir);
             let line_offset_cross = line.offset_cross;
 
-            let layout_item = |child: &mut FlexItem| {
+            let layout_item = |child: &mut FlexItem| -> Result<(), SimpleError> {
                 let result = compute_internal(
                     child.node,
                     child.target_size.map(|s| s.to_number()),
                     container_size.map(|s| s.to_number()),
                     true,
-                );
+                )?;
 
                 let offset_main = total_offset_main
                     + child.offset_main
@@ -1126,12 +1141,14 @@ fn compute_internal(
                 });
 
                 total_offset_main += child.offset_main + child.margin.main(dir) + result.size.main(dir);
+
+                Ok(())
             };
 
             if dir.is_reverse() {
-                line.items.iter_mut().rev().for_each(layout_item);
+                line.items.iter_mut().rev().try_for_each(layout_item)?;
             } else {
-                line.items.iter_mut().for_each(layout_item);
+                line.items.iter_mut().try_for_each(layout_item)?;
             }
 
             total_offset_cross += line_offset_cross + line.cross_size;
@@ -1141,12 +1158,14 @@ fn compute_internal(
             }
 
             lines.push(children);
+
+            Ok(())
         };
 
         if is_wrap_reverse {
-            flex_lines.iter_mut().rev().for_each(layout_line);
+            flex_lines.iter_mut().rev().try_for_each(layout_line)?;
         } else {
-            flex_lines.iter_mut().for_each(layout_line);
+            flex_lines.iter_mut().try_for_each(layout_line)?;
         }
 
         if is_wrap_reverse {
@@ -1157,7 +1176,7 @@ fn compute_internal(
     };
 
     // Before returning we perform absolute layout on all absolutely positioned children
-    let mut absolute_children: Vec<layout::Node> = node
+    let absolute_children: Vec<Result<layout::Node, SimpleError>> = node
         .children
         .iter()
         .enumerate()
@@ -1204,7 +1223,7 @@ fn compute_internal(
                 Size { width, height },
                 Size { width: container_width, height: container_height },
                 true,
-            );
+            )?;
 
             let free_main_space = container_size.main(dir)
                 - result
@@ -1267,7 +1286,7 @@ fn compute_internal(
                 }
             };
 
-            layout::Node {
+            Ok(layout::Node {
                 order: order as u32,
                 size: result.size,
                 location: Point {
@@ -1275,11 +1294,13 @@ fn compute_internal(
                     y: if is_column { offset_main } else { offset_cross },
                 },
                 children: result.children,
-            }
+            })
         })
         .collect();
 
-    children.append(&mut absolute_children);
+    for abs_child in absolute_children {
+        children.push(abs_child?);
+    }
 
     fn hidden_layout(node: &style::Node, order: u32) -> layout::Node {
         layout::Node {
@@ -1304,5 +1325,5 @@ fn compute_internal(
 
     let result = ComputeResult { size: container_size, children };
     node.layout_cache.replace(Some(LayoutCache { node_size, parent_size, perform_layout, result: result.clone() }));
-    result
+    Ok(result)
 }
diff --git a/src/style.rs b/src/style.rs
index 7bcbf0433..d917074e9 100644
--- a/src/style.rs
+++ b/src/style.rs
@@ -3,6 +3,8 @@ use alloc::boxed::Box;
 #[cfg(not(feature = "std"))]
 use alloc::{vec, vec::Vec};
 
+use simple_error::SimpleError;
+
 use crate::algo;
 use crate::geometry::{Rect, Size};
 use crate::number::Number;
@@ -205,7 +207,7 @@ impl Default for Size<Dimension> {
     }
 }
 
-type MeasureFunc = Box<Fn(Size<Number>) -> Size<f32>>;
+type MeasureFunc = Box<Fn(Size<Number>) -> Result<Size<f32>, SimpleError>>;
 
 #[derive(Debug, Clone)]
 pub struct LayoutCache {
diff --git a/tests/generated.rs b/tests/generated.rs
index 05cb78909..df89457fc 100644
--- a/tests/generated.rs
+++ b/tests/generated.rs
@@ -36,7 +36,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -80,7 +81,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -115,7 +117,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 110.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -164,7 +167,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -217,7 +221,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -275,7 +280,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 113.0000);
@@ -322,7 +328,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -380,7 +387,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 113.0000);
@@ -425,7 +433,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -498,7 +507,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 700.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -561,7 +571,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -599,7 +610,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 0.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -636,7 +648,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -674,7 +687,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 500.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -715,7 +729,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 0.0000);
@@ -757,7 +772,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 150.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -811,7 +827,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -875,7 +892,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 110.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -951,7 +969,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -997,7 +1016,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 110.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1033,7 +1053,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1086,7 +1107,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1143,7 +1165,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 120.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -1184,7 +1207,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1219,7 +1243,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1254,7 +1279,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1297,7 +1323,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 20.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -1356,7 +1383,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 50.0000);
         assert_eq!(layout.size.height, 110.0000);
@@ -1436,7 +1464,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1493,7 +1522,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1542,7 +1572,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1612,7 +1643,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 300.0000);
@@ -1648,7 +1680,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1686,7 +1719,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1732,7 +1766,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 20.0000);
         assert_eq!(layout.size.height, 80.0000);
@@ -1773,7 +1808,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1806,7 +1842,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1849,7 +1886,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1894,7 +1932,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 110.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1931,7 +1970,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -1985,7 +2025,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2031,7 +2072,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2072,7 +2114,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 250.0000);
         assert_eq!(layout.size.height, 250.0000);
@@ -2101,7 +2144,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2141,7 +2185,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2200,7 +2245,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 60.0000);
@@ -2252,7 +2298,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2309,7 +2356,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2363,7 +2411,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 500.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -2427,7 +2476,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2474,7 +2524,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2514,7 +2565,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2558,7 +2610,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2622,7 +2675,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 500.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -2689,7 +2743,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 500.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -2730,7 +2785,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2777,7 +2833,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2827,7 +2884,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 90.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2879,7 +2937,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 50.0000);
         assert_eq!(layout.size.height, 20.0000);
@@ -2913,7 +2972,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -2951,7 +3011,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 400.0000);
         assert_eq!(layout.size.height, 400.0000);
@@ -2990,7 +3051,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3043,7 +3105,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 114.0000);
@@ -3098,7 +3161,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 400.0000);
@@ -3152,7 +3216,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -3261,7 +3326,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -3311,7 +3377,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 0.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3350,7 +3417,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3403,7 +3471,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -3446,7 +3515,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 400.0000);
@@ -3491,7 +3561,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3524,7 +3595,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3566,7 +3638,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3614,7 +3687,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3663,7 +3737,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 52.0000);
         assert_eq!(layout.size.height, 52.0000);
@@ -3701,7 +3776,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3745,7 +3821,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 52.0000);
         assert_eq!(layout.size.height, 52.0000);
@@ -3803,7 +3880,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -3864,7 +3942,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -3923,7 +4002,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 10.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -3984,7 +4064,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 400.0000);
@@ -4028,7 +4109,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 50.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -4093,7 +4175,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -4143,7 +4226,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 30.0000);
         assert_eq!(layout.size.height, 30.0000);
@@ -4254,7 +4338,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -4308,7 +4393,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 52.0000);
         assert_eq!(layout.size.height, 52.0000);
@@ -4357,7 +4443,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -4405,7 +4492,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -4446,7 +4534,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 250.0000);
         assert_eq!(layout.size.height, 250.0000);
@@ -4479,7 +4568,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -4523,7 +4613,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 400.0000);
@@ -4569,7 +4660,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -4623,7 +4715,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -4683,7 +4776,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -4737,7 +4831,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 50.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -4775,7 +4870,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 400.0000);
@@ -4830,7 +4926,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -4868,7 +4965,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 0.0000);
@@ -4915,7 +5013,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -4994,7 +5093,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 500.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -5058,7 +5158,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5099,7 +5200,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5172,7 +5274,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 80.0000);
@@ -5253,7 +5356,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5306,7 +5410,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5355,7 +5460,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5414,7 +5520,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5463,7 +5570,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 50.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -5503,7 +5611,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5556,7 +5665,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 87.0000);
         assert_eq!(layout.size.height, 113.0000);
@@ -5643,7 +5753,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 80.0000);
@@ -5703,7 +5814,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 110.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5771,7 +5883,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 300.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -5844,7 +5957,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 113.0000);
@@ -5910,7 +6024,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 0.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -5965,7 +6080,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6014,7 +6130,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6065,7 +6182,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 400.0000);
@@ -6132,7 +6250,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 80.0000);
@@ -6197,7 +6316,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -6252,7 +6372,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6298,7 +6419,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 110.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6332,7 +6454,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6367,7 +6490,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 52.0000);
         assert_eq!(layout.size.height, 52.0000);
@@ -6416,7 +6540,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -6457,7 +6582,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 0.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6501,7 +6627,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6571,7 +6698,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 60.0000);
@@ -6621,7 +6749,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 30.0000);
         assert_eq!(layout.size.height, 30.0000);
@@ -6670,7 +6799,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -6727,7 +6857,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6786,7 +6917,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -6841,7 +6973,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -6896,7 +7029,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -6969,7 +7103,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 80.0000);
@@ -7016,7 +7151,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 20.0000);
         assert_eq!(layout.size.height, 20.0000);
@@ -7048,7 +7184,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -7100,7 +7237,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 30.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -7138,7 +7276,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 0.0000);
@@ -7181,7 +7320,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -7234,7 +7374,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 30.0000);
@@ -7273,7 +7414,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -7333,7 +7475,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 10.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -7383,7 +7526,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -7429,7 +7573,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -7468,7 +7613,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 50.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -7514,7 +7660,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -7555,7 +7702,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -7591,7 +7739,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -7624,7 +7773,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 0.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -7658,7 +7808,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -7692,7 +7843,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -7759,7 +7911,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 700.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -7828,7 +7981,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 60.0000);
@@ -7879,7 +8033,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -7908,7 +8063,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 0.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -7944,7 +8100,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -7993,7 +8150,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 50.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -8039,7 +8197,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 80.0000);
         assert_eq!(layout.size.height, 20.0000);
@@ -8075,7 +8234,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -8103,7 +8263,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -8185,7 +8346,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 87.0000);
         assert_eq!(layout.size.height, 113.0000);
@@ -8245,7 +8407,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -8299,7 +8462,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -8367,7 +8531,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 350.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -8416,7 +8581,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -8453,7 +8619,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -8498,7 +8665,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 400.0000);
@@ -8552,7 +8720,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -8591,7 +8760,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -8642,7 +8812,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -8707,7 +8878,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 60.0000);
@@ -8766,7 +8938,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -8805,7 +8978,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -8850,7 +9024,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 110.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -8883,7 +9058,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -8920,7 +9096,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -8986,7 +9163,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -9051,7 +9229,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -9104,7 +9283,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -9159,7 +9339,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -9206,7 +9387,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -9251,7 +9433,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 110.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -9296,7 +9479,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 400.0000);
@@ -9349,7 +9533,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -9387,7 +9572,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -9438,7 +9624,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -9496,7 +9683,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 75.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -9560,7 +9748,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -9620,7 +9809,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 1080.0000);
         assert_eq!(layout.size.height, 1584.0000);
@@ -9661,7 +9851,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -9706,7 +9897,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 110.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -9748,7 +9940,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -9790,7 +9983,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -9839,7 +10033,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -9902,7 +10097,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -9965,7 +10161,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 113.0000);
@@ -10010,7 +10207,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 110.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -10064,7 +10262,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -10125,7 +10324,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 400.0000);
@@ -10179,7 +10379,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -10219,7 +10420,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 500.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -10263,7 +10465,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 0.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -10314,7 +10517,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 400.0000);
@@ -10369,7 +10573,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -10409,7 +10614,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -10456,7 +10662,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -10529,7 +10736,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 80.0000);
@@ -10596,7 +10804,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 500.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -10629,7 +10838,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 0.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -10663,7 +10873,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -10702,7 +10913,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -10742,7 +10954,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 101.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -10792,7 +11005,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -10826,7 +11040,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -10853,7 +11068,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 20.0000);
         assert_eq!(layout.size.height, 20.0000);
@@ -10880,7 +11096,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 113.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -10938,7 +11155,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -10998,7 +11216,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -11046,7 +11265,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -11089,7 +11309,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -11123,7 +11344,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 0.0000);
         assert_eq!(layout.size.height, 0.0000);
@@ -11164,7 +11386,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -11222,7 +11445,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -11263,7 +11487,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 0.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -11313,7 +11538,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -11368,7 +11594,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 1000.0000);
         assert_eq!(layout.size.height, 1584.0000);
@@ -11433,7 +11660,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 120.0000);
         assert_eq!(layout.size.height, 20.0000);
@@ -11493,7 +11721,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 60.0000);
         assert_eq!(layout.size.height, 50.0000);
@@ -11550,7 +11779,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 300.0000);
@@ -11605,7 +11835,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -11656,7 +11887,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -11698,7 +11930,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 100.0000);
@@ -11734,7 +11967,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0000);
         assert_eq!(layout.size.height, 0.0000);
@@ -11772,7 +12006,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 500.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -11815,7 +12050,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0000);
         assert_eq!(layout.size.height, 200.0000);
@@ -11859,7 +12095,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 500.0000);
         assert_eq!(layout.size.height, 500.0000);
@@ -11907,7 +12144,8 @@ mod generated {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 20.0000);
         assert_eq!(layout.size.height, 50.0000);
diff --git a/tests/measure.rs b/tests/measure.rs
index a174ade73..33d2ee78f 100644
--- a/tests/measure.rs
+++ b/tests/measure.rs
@@ -1,19 +1,23 @@
 #[cfg(test)]
 mod measure {
+    use simple_error::SimpleError;
     use stretch::number::OrElse;
 
     #[test]
     fn measure_root() {
         let layout = stretch::compute(
             &stretch::style::Node {
-                measure: Some(Box::new(|constraint| stretch::geometry::Size {
-                    width: constraint.width.or_else(100.0),
-                    height: constraint.height.or_else(100.0),
+                measure: Some(Box::new(|constraint| {
+                    Ok(stretch::geometry::Size {
+                        width: constraint.width.or_else(100.0),
+                        height: constraint.height.or_else(100.0),
+                    })
                 })),
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0);
         assert_eq!(layout.size.height, 100.0);
@@ -24,16 +28,19 @@ mod measure {
         let layout = stretch::compute(
             &stretch::style::Node {
                 children: vec![stretch::style::Node {
-                    measure: Some(Box::new(|constraint| stretch::geometry::Size {
-                        width: constraint.width.or_else(100.0),
-                        height: constraint.height.or_else(100.0),
+                    measure: Some(Box::new(|constraint| {
+                        Ok(stretch::geometry::Size {
+                            width: constraint.width.or_else(100.0),
+                            height: constraint.height.or_else(100.0),
+                        })
                     })),
                     ..Default::default()
                 }],
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0);
         assert_eq!(layout.size.height, 100.0);
@@ -48,16 +55,19 @@ mod measure {
             &stretch::style::Node {
                 size: stretch::geometry::Size { width: stretch::style::Dimension::Points(50.0), ..Default::default() },
                 children: vec![stretch::style::Node {
-                    measure: Some(Box::new(|constraint| stretch::geometry::Size {
-                        width: constraint.width.or_else(100.0),
-                        height: constraint.height.or_else(100.0),
+                    measure: Some(Box::new(|constraint| {
+                        Ok(stretch::geometry::Size {
+                            width: constraint.width.or_else(100.0),
+                            height: constraint.height.or_else(100.0),
+                        })
                     })),
                     ..Default::default()
                 }],
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 50.0);
         assert_eq!(layout.size.height, 100.0);
@@ -78,16 +88,19 @@ mod measure {
                     bottom: stretch::style::Dimension::Points(10.0),
                 },
                 children: vec![stretch::style::Node {
-                    measure: Some(Box::new(|constraint| stretch::geometry::Size {
-                        width: constraint.width.or_else(100.0),
-                        height: constraint.height.or_else(100.0),
+                    measure: Some(Box::new(|constraint| {
+                        Ok(stretch::geometry::Size {
+                            width: constraint.width.or_else(100.0),
+                            height: constraint.height.or_else(100.0),
+                        })
                     })),
                     ..Default::default()
                 }],
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 50.0);
         assert_eq!(layout.size.height, 120.0);
@@ -110,9 +123,11 @@ mod measure {
                         ..Default::default()
                     },
                     stretch::style::Node {
-                        measure: Some(Box::new(|constraint| stretch::geometry::Size {
-                            width: constraint.width.or_else(10.0),
-                            height: constraint.height.or_else(50.0),
+                        measure: Some(Box::new(|constraint| {
+                            Ok(stretch::geometry::Size {
+                                width: constraint.width.or_else(10.0),
+                                height: constraint.height.or_else(50.0),
+                            })
                         })),
                         flex_grow: 1.0,
                         ..Default::default()
@@ -121,7 +136,8 @@ mod measure {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.children[1].size.width, 50.0);
         assert_eq!(layout.children[1].size.height, 50.0);
@@ -142,9 +158,11 @@ mod measure {
                         ..Default::default()
                     },
                     stretch::style::Node {
-                        measure: Some(Box::new(|constraint| stretch::geometry::Size {
-                            width: constraint.width.or_else(100.0),
-                            height: constraint.height.or_else(50.0),
+                        measure: Some(Box::new(|constraint| {
+                            Ok(stretch::geometry::Size {
+                                width: constraint.width.or_else(100.0),
+                                height: constraint.height.or_else(50.0),
+                            })
                         })),
                         ..Default::default()
                     },
@@ -152,7 +170,8 @@ mod measure {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.children[1].size.width, 50.0);
         assert_eq!(layout.children[1].size.height, 50.0);
@@ -176,7 +195,7 @@ mod measure {
                         measure: Some(Box::new(|constraint| {
                             let width = constraint.width.or_else(10.0);
                             let height = constraint.height.or_else(width * 2.0);
-                            stretch::geometry::Size { width, height }
+                            Ok(stretch::geometry::Size { width, height })
                         })),
                         flex_grow: 1.0,
                         ..Default::default()
@@ -185,7 +204,8 @@ mod measure {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.children[1].size.width, 50.0);
         assert_eq!(layout.children[1].size.height, 100.0);
@@ -210,7 +230,7 @@ mod measure {
                         measure: Some(Box::new(|constraint| {
                             let width = constraint.width.or_else(100.0);
                             let height = constraint.height.or_else(width * 2.0);
-                            stretch::geometry::Size { width, height }
+                            Ok(stretch::geometry::Size { width, height })
                         })),
                         ..Default::default()
                     },
@@ -218,7 +238,8 @@ mod measure {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.children[1].size.width, 50.0);
         assert_eq!(layout.children[1].size.height, 100.0);
@@ -236,14 +257,15 @@ mod measure {
                     measure: Some(Box::new(|constraint| {
                         let height = constraint.height.or_else(50.0);
                         let width = constraint.width.or_else(height);
-                        stretch::geometry::Size { width, height }
+                        Ok(stretch::geometry::Size { width, height })
                     })),
                     ..Default::default()
                 }],
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.children[0].size.width, 100.0);
         assert_eq!(layout.children[0].size.height, 100.0);
@@ -258,16 +280,19 @@ mod measure {
                         width: stretch::style::Dimension::Points(50.0),
                         ..Default::default()
                     },
-                    measure: Some(Box::new(|constraint| stretch::geometry::Size {
-                        width: constraint.width.or_else(100.0),
-                        height: constraint.height.or_else(100.0),
+                    measure: Some(Box::new(|constraint| {
+                        Ok(stretch::geometry::Size {
+                            width: constraint.width.or_else(100.0),
+                            height: constraint.height.or_else(100.0),
+                        })
                     })),
                     ..Default::default()
                 }],
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.children[0].size.width, 50.0);
         assert_eq!(layout.children[0].size.height, 100.0);
@@ -282,16 +307,19 @@ mod measure {
                         height: stretch::style::Dimension::Points(50.0),
                         ..Default::default()
                     },
-                    measure: Some(Box::new(|constraint| stretch::geometry::Size {
-                        width: constraint.width.or_else(100.0),
-                        height: constraint.height.or_else(100.0),
+                    measure: Some(Box::new(|constraint| {
+                        Ok(stretch::geometry::Size {
+                            width: constraint.width.or_else(100.0),
+                            height: constraint.height.or_else(100.0),
+                        })
                     })),
                     ..Default::default()
                 }],
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.children[0].size.width, 100.0);
         assert_eq!(layout.children[0].size.height, 50.0);
@@ -314,9 +342,11 @@ mod measure {
                     stretch::style::Node {
                         flex_basis: stretch::style::Dimension::Points(50.0),
                         flex_grow: 1.0,
-                        measure: Some(Box::new(|constraint| stretch::geometry::Size {
-                            width: constraint.width.or_else(100.0),
-                            height: constraint.height.or_else(100.0),
+                        measure: Some(Box::new(|constraint| {
+                            Ok(stretch::geometry::Size {
+                                width: constraint.width.or_else(100.0),
+                                height: constraint.height.or_else(100.0),
+                            })
                         })),
                         ..Default::default()
                     },
@@ -324,7 +354,8 @@ mod measure {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.children[0].size.width, 100.0);
         assert_eq!(layout.children[0].size.height, 100.0);
@@ -341,16 +372,19 @@ mod measure {
                     height: stretch::style::Dimension::Points(100.0),
                 },
                 children: vec![stretch::style::Node {
-                    measure: Some(Box::new(|constraint| stretch::geometry::Size {
-                        width: constraint.width.or_else(50.0),
-                        height: constraint.height.or_else(50.0),
+                    measure: Some(Box::new(|constraint| {
+                        Ok(stretch::geometry::Size {
+                            width: constraint.width.or_else(50.0),
+                            height: constraint.height.or_else(50.0),
+                        })
                     })),
                     ..Default::default()
                 }],
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.children[0].size.width, 50.0);
         assert_eq!(layout.children[0].size.height, 100.0);
@@ -366,16 +400,19 @@ mod measure {
                 },
                 children: vec![stretch::style::Node {
                     position_type: stretch::style::PositionType::Absolute,
-                    measure: Some(Box::new(|constraint| stretch::geometry::Size {
-                        width: constraint.width.or_else(50.0),
-                        height: constraint.height.or_else(50.0),
+                    measure: Some(Box::new(|constraint| {
+                        Ok(stretch::geometry::Size {
+                            width: constraint.width.or_else(50.0),
+                            height: constraint.height.or_else(50.0),
+                        })
                     })),
                     ..Default::default()
                 }],
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.children[0].size.width, 50.0);
         assert_eq!(layout.children[0].size.height, 50.0);
@@ -391,13 +428,14 @@ mod measure {
                 },
                 children: vec![stretch::style::Node {
                     flex_grow: 1.0,
-                    measure: Some(Box::new(|_| stretch::geometry::Size { width: 200.0, height: 200.0 })),
+                    measure: Some(Box::new(|_| Ok(stretch::geometry::Size { width: 200.0, height: 200.0 }))),
                     ..Default::default()
                 }],
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.children[0].size.width, 100.0);
         assert_eq!(layout.children[0].size.height, 100.0);
@@ -414,10 +452,10 @@ mod measure {
                     children: vec![stretch::style::Node {
                         measure: Some(Box::new(move |constraint| {
                             unsafe { (*num_measure_ptr) += 1 };
-                            stretch::geometry::Size {
+                            Ok(stretch::geometry::Size {
                                 width: constraint.width.or_else(50.0),
                                 height: constraint.height.or_else(50.0),
-                            }
+                            })
                         })),
                         ..Default::default()
                     }],
@@ -426,8 +464,30 @@ mod measure {
                 ..Default::default()
             },
             stretch::geometry::Size::undefined(),
-        );
+        )
+        .unwrap();
 
         assert_eq!(num_measure, 1);
     }
+
+    #[test]
+    fn propagate_measure_error() {
+        let layout = stretch::compute(
+            &stretch::style::Node {
+                size: stretch::geometry::Size {
+                    width: stretch::style::Dimension::Points(100.0),
+                    height: stretch::style::Dimension::Points(100.0),
+                },
+                children: vec![stretch::style::Node {
+                    flex_grow: 1.0,
+                    measure: Some(Box::new(|_| Err(SimpleError::new("")))),
+                    ..Default::default()
+                }],
+                ..Default::default()
+            },
+            stretch::geometry::Size::undefined(),
+        );
+
+        assert_eq!(layout.is_err(), true);
+    }
 }
diff --git a/tests/root_constraints.rs b/tests/root_constraints.rs
index ab12421d0..6ae6aabd5 100644
--- a/tests/root_constraints.rs
+++ b/tests/root_constraints.rs
@@ -13,7 +13,8 @@ mod root_constraints {
                 ..Default::default()
             },
             stretch::geometry::Size { width: Number::Defined(100.0), height: Number::Defined(200.0) },
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 100.0);
         assert_eq!(layout.size.height, 200.0);
@@ -24,7 +25,8 @@ mod root_constraints {
         let layout = stretch::compute(
             &stretch::style::Node { ..Default::default() },
             stretch::geometry::Size { width: Number::Defined(100.0), height: Number::Defined(100.0) },
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 0.0);
         assert_eq!(layout.size.height, 0.0);
@@ -41,7 +43,8 @@ mod root_constraints {
                 ..Default::default()
             },
             stretch::geometry::Size { width: Number::Defined(100.0), height: Number::Defined(100.0) },
-        );
+        )
+        .unwrap();
 
         assert_eq!(layout.size.width, 200.0);
         assert_eq!(layout.size.height, 200.0);