#[must_use]
pub const fn sixbit_to_ascii(v: u8) -> u8 {
match v {
1..=26 => b'A' + (v - 1),
48..=57 => b'0' + (v - 48),
32 => b' ',
_ => b'#',
}
}
#[must_use]
pub const fn ascii_to_sixbit(c: u8) -> u8 {
match c {
b'A'..=b'Z' => c - b'A' + 1,
b'0'..=b'9' => c - b'0' + 48,
_ => 32,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn roundtrips_letters_and_digits_and_space() {
for c in b'A'..=b'Z' {
assert_eq!(sixbit_to_ascii(ascii_to_sixbit(c)), c);
}
for c in b'0'..=b'9' {
assert_eq!(sixbit_to_ascii(ascii_to_sixbit(c)), c);
}
assert_eq!(sixbit_to_ascii(ascii_to_sixbit(b' ')), b' ');
}
#[test]
fn known_values() {
assert_eq!(sixbit_to_ascii(1), b'A');
assert_eq!(sixbit_to_ascii(26), b'Z');
assert_eq!(sixbit_to_ascii(48), b'0');
assert_eq!(sixbit_to_ascii(57), b'9');
assert_eq!(sixbit_to_ascii(32), b' ');
}
}