From c64e96d0d8c4b347549b3b6f08e1b6e54b680104 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Fri, 29 Dec 2023 11:42:54 +0400 Subject: Add test with i32::MAX max_size --- src/layout/mod.rs | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 81 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/layout/mod.rs b/src/layout/mod.rs index 0ef10b16..07e216e2 100644 --- a/src/layout/mod.rs +++ b/src/layout/mod.rs @@ -1421,18 +1421,27 @@ mod tests { bbox: Cell>, initial_bbox: Rectangle, requested_size: Cell>>, + min_size: Size, + max_size: Size, } #[derive(Debug, Clone)] struct TestWindow(Rc); impl TestWindow { - fn new(id: usize, bbox: Rectangle) -> Self { + fn new( + id: usize, + bbox: Rectangle, + min_size: Size, + max_size: Size, + ) -> Self { Self(Rc::new(TestWindowInner { id, bbox: Cell::new(bbox), initial_bbox: bbox, requested_size: Cell::new(None), + min_size, + max_size, })) } @@ -1494,11 +1503,11 @@ mod tests { fn request_fullscreen(&self, _size: Size) {} fn min_size(&self) -> Size { - Size::from((0, 0)) + self.0.min_size } fn max_size(&self) -> Size { - Size::from((0, 0)) + self.0.max_size } fn is_wl_surface(&self, _wl_surface: &WlSurface) -> bool { @@ -1537,6 +1546,24 @@ mod tests { ] } + fn arbitrary_min_max() -> impl Strategy { + prop_oneof![ + Just((0, 0)), + (1..65536).prop_map(|n| (n, n)), + (1..65536).prop_map(|min| (min, 0)), + (1..).prop_map(|max| (0, max)), + (1..65536, 1..).prop_map(|(min, max): (i32, i32)| (min, max.max(min))), + ] + } + + fn arbitrary_min_max_size() -> impl Strategy, Size)> { + (arbitrary_min_max(), arbitrary_min_max()).prop_map(|((min_w, max_w), (min_h, max_h))| { + let min_size = Size::from((min_w, min_h)); + let max_size = Size::from((max_w, max_h)); + (min_size, max_size) + }) + } + #[derive(Debug, Clone, Copy, Arbitrary)] enum Op { AddOutput(#[proptest(strategy = "1..=5usize")] usize), @@ -1547,6 +1574,8 @@ mod tests { id: usize, #[proptest(strategy = "arbitrary_bbox()")] bbox: Rectangle, + #[proptest(strategy = "arbitrary_min_max_size()")] + min_max_size: (Size, Size), }, CloseWindow(#[proptest(strategy = "1..=5usize")] usize), FullscreenWindow(#[proptest(strategy = "1..=5usize")] usize), @@ -1630,7 +1659,11 @@ mod tests { layout.focus_output(&output); } - Op::AddWindow { id, bbox } => { + Op::AddWindow { + id, + bbox, + min_max_size, + } => { match &mut layout.monitor_set { MonitorSet::Normal { monitors, .. } => { for mon in monitors { @@ -1654,15 +1687,17 @@ mod tests { } } - let win = TestWindow::new(id, bbox); + let win = TestWindow::new(id, bbox, min_max_size.0, min_max_size.1); layout.add_window(win, None, false); } Op::CloseWindow(id) => { - let dummy = TestWindow::new(id, Rectangle::default()); + let dummy = + TestWindow::new(id, Rectangle::default(), Size::default(), Size::default()); layout.remove_window(&dummy); } Op::FullscreenWindow(id) => { - let dummy = TestWindow::new(id, Rectangle::default()); + let dummy = + TestWindow::new(id, Rectangle::default(), Size::default(), Size::default()); layout.toggle_fullscreen(&dummy); } Op::FocusColumnLeft => layout.focus_left(), @@ -1780,14 +1815,17 @@ mod tests { Op::AddWindow { id: 0, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::AddWindow { id: 1, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::AddWindow { id: 2, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::CloseWindow(0), Op::CloseWindow(1), @@ -1851,26 +1889,31 @@ mod tests { Op::AddWindow { id: 1, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::MoveWindowToWorkspaceDown, Op::AddWindow { id: 2, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::AddWindow { id: 3, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::FocusColumnLeft, Op::ConsumeWindowIntoColumn, Op::AddWindow { id: 4, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::AddOutput(2), Op::AddWindow { id: 5, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::MoveWindowToOutput(2), Op::FocusOutput(1), @@ -1894,14 +1937,17 @@ mod tests { Op::AddWindow { id: 0, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::AddWindow { id: 1, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::AddWindow { id: 2, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::CloseWindow(0), Op::CloseWindow(1), @@ -1963,11 +2009,13 @@ mod tests { Op::AddWindow { id: 0, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::FocusOutput(2), Op::AddWindow { id: 1, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::RemoveOutput(2), Op::FocusWorkspace(3), @@ -1984,6 +2032,7 @@ mod tests { Op::AddWindow { id: 0, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::FocusWorkspaceDown, Op::CloseWindow(0), @@ -1999,6 +2048,7 @@ mod tests { Op::AddWindow { id: 0, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::AddOutput(2), Op::RemoveOutput(1), @@ -2025,6 +2075,7 @@ mod tests { Op::AddWindow { id: 0, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::MoveWindowToWorkspace(2), ]; @@ -2048,11 +2099,13 @@ mod tests { Op::AddWindow { id: 0, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::FocusWorkspaceDown, Op::AddWindow { id: 1, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::FocusWorkspaceUp, Op::CloseWindow(0), @@ -2078,11 +2131,13 @@ mod tests { Op::AddWindow { id: 1, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::FocusWorkspaceDown, Op::AddWindow { id: 2, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::AddOutput(2), Op::RemoveOutput(1), @@ -2101,6 +2156,7 @@ mod tests { Op::AddWindow { id: 1, bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: Default::default(), }, Op::SetWindowHeight(SizeChange::AdjustProportion(-1e129)), ]; @@ -2112,6 +2168,24 @@ mod tests { check_ops_with_options(options, &ops); } + #[test] + fn large_max_size() { + let ops = [ + Op::AddOutput(1), + Op::AddWindow { + id: 1, + bbox: Rectangle::from_loc_and_size((0, 0), (100, 200)), + min_max_size: (Size::from((0, 0)), Size::from((i32::MAX, i32::MAX))), + }, + ]; + + let mut options = Options::default(); + options.border.off = false; + options.border.width = 1; + + check_ops_with_options(options, &ops); + } + proptest! { #![proptest_config(ProptestConfig { cases: if std::env::var_os("RUN_SLOW_TESTS").is_none() { -- cgit