pub fn split_from(min: usize, max: usize, x: usize) -> Vec> { if min > x || x > max { return Vec::new(); } let x_lower = x.checked_sub(1).unwrap_or(min); let x_upper = (x + 1).min(max); let lower_range = if x_lower != min { (min..=x_lower).rev().collect() } else { Vec::new() }; let upper_range = if x_upper != max { (x_upper..=max).collect() } else { Vec::new() }; vec![lower_range, upper_range] } #[cfg(test)] mod test { use super::*; #[test] fn split_test() { assert_eq!(split_from(0, 6, 2), vec![vec![1, 0], vec![3, 4, 5, 6]]); assert_eq!(split_from(0, 6, 0), vec![vec![], vec![1, 2, 3, 4, 5, 6]]); assert_eq!(split_from(0, 6, 6), vec![vec![5, 4, 3, 2, 1, 0], vec![]]); } }