pub(crate) mod opt { /// Get an [Option] with the maximum value, compared between the passed in value and the inner /// value of the [Option]. If the [Option] is `None`, then an option containing the passed in /// value will be returned. pub(crate) fn max(a: Option, b: T) -> Option { a.map_or(Some(b), |v| Some(std::cmp::max(v, b))) } /// Get an [Option] with the minimum value, compared between the passed in value and the inner /// value of the [Option]. If the [Option] is `None`, then an option containing the passed in /// value will be returned. pub(crate) fn min(a: Option, b: T) -> Option { a.map_or(Some(b), |v| Some(std::cmp::min(v, b))) } #[cfg(test)] mod tests { use super::*; #[test] fn opt_max() { assert_eq!(max(None, 5), Some(5)); assert_eq!(max(Some(1), 5), Some(5)); assert_eq!(max(Some(10), 5), Some(10)); } #[test] fn opt_min() { assert_eq!(min(None, 5), Some(5)); assert_eq!(min(Some(1), 5), Some(1)); assert_eq!(min(Some(10), 5), Some(5)); } } }