#[must_use]
pub fn default_max(codes: &[i32]) -> i32 {
codes.iter().copied().max().unwrap_or(0)
}
#[must_use]
pub fn strict_or(codes: &[i32]) -> i32 {
codes.iter().copied().fold(0i32, |acc, c| acc | c)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_max_empty_is_zero() {
assert_eq!(default_max(&[]), 0);
}
#[test]
fn default_max_single_passes_through() {
assert_eq!(default_max(&[0]), 0);
assert_eq!(default_max(&[1]), 1);
assert_eq!(default_max(&[42]), 42);
assert_eq!(default_max(&[255]), 255);
}
#[test]
fn default_max_matrix() {
assert_eq!(default_max(&[0, 0]), 0);
assert_eq!(default_max(&[0, 1]), 1);
assert_eq!(default_max(&[1, 0]), 1);
assert_eq!(default_max(&[2, 1]), 2);
assert_eq!(default_max(&[1, 2]), 2);
assert_eq!(default_max(&[255, 1]), 255);
}
#[test]
fn strict_or_empty_is_zero() {
assert_eq!(strict_or(&[]), 0);
}
#[test]
fn strict_or_single_passes_through() {
assert_eq!(strict_or(&[0]), 0);
assert_eq!(strict_or(&[1]), 1);
assert_eq!(strict_or(&[42]), 42);
assert_eq!(strict_or(&[255]), 255);
}
#[test]
fn strict_or_matrix_matches_moreutils() {
assert_eq!(strict_or(&[0, 0]), 0);
assert_eq!(strict_or(&[0, 1]), 1);
assert_eq!(strict_or(&[1, 0]), 1);
assert_eq!(strict_or(&[2, 1]), 3);
assert_eq!(strict_or(&[1, 2]), 3);
assert_eq!(strict_or(&[255, 1]), 255);
}
#[test]
fn modes_diverge_on_distinct_nonzero_codes() {
let codes = &[1, 2];
assert_eq!(default_max(codes), 2, "Default mode: max");
assert_eq!(strict_or(codes), 3, "Strict mode: bitwise OR");
}
}