From 6261380180734b2fef6ad5b2f6e60d304009f1f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20R=C3=B6ssler?= Date: Wed, 9 Feb 2022 13:54:19 +0100 Subject: [PATCH] add unit test and fix bug found with the unit test --- egui_extras/src/sizing.rs | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/egui_extras/src/sizing.rs b/egui_extras/src/sizing.rs index 93d2d2bf..e8fa7379 100644 --- a/egui_extras/src/sizing.rs +++ b/egui_extras/src/sizing.rs @@ -18,6 +18,7 @@ pub enum Size { RemainderMinimum(f32), } +#[derive(Clone)] pub struct Sizing { sizes: Vec, } @@ -64,11 +65,16 @@ impl Sizing { self.sizes.iter().for_each(|size| { if let Size::RemainderMinimum(minimum) = size { if *minimum > avg_remainder_length { - remainder_length -= minimum - avg_remainder_length; + remainder_length -= minimum; + remainders -= 1; } } }); - 0.0f32.max(remainder_length / remainders as f32) + if remainders > 0 { + 0.0f32.max(remainder_length / remainders as f32) + } else { + 0.0 + } }; self.sizes @@ -83,3 +89,32 @@ impl Sizing { .collect() } } + +impl From> for Sizing { + fn from(sizes: Vec) -> Self { + Self { sizes } + } +} + +#[test] +fn test_sizing() { + let sizing: Sizing = vec![Size::RemainderMinimum(20.0), Size::Remainder].into(); + assert_eq!(sizing.clone().into_lengths(50.0, 0.0), vec![25.0, 25.0]); + assert_eq!(sizing.clone().into_lengths(30.0, 0.0), vec![20.0, 10.0]); + assert_eq!(sizing.clone().into_lengths(20.0, 0.0), vec![20.0, 0.0]); + assert_eq!(sizing.clone().into_lengths(10.0, 0.0), vec![20.0, 0.0]); + assert_eq!(sizing.into_lengths(20.0, 10.0), vec![20.0, 0.0]); + + let sizing: Sizing = vec![ + Size::RelativeMinimum { + relative: 0.5, + minimum: 10.0, + }, + Size::Absolute(10.0), + ] + .into(); + assert_eq!(sizing.clone().into_lengths(50.0, 0.0), vec![25.0, 10.0]); + assert_eq!(sizing.clone().into_lengths(30.0, 0.0), vec![15.0, 10.0]); + assert_eq!(sizing.clone().into_lengths(20.0, 0.0), vec![10.0, 10.0]); + assert_eq!(sizing.into_lengths(10.0, 0.0), vec![10.0, 10.0]); +}