pub fn operator_name(gl: char) -> &'static str {
match gl {
'a' => "add",
'b' => "subtract",
'c' => "clock",
'd' => "delay",
'e' => "east",
'f' => "if",
'g' => "generator",
'h' => "halt",
'i' => "increment",
'j' => "jumper",
'k' => "konkat",
'l' => "lesser",
'm' => "multiply",
'n' => "north",
'o' => "read",
'p' => "push",
'q' => "query",
'r' => "random",
's' => "south",
't' => "track",
'u' => "uclid",
'v' => "variable",
'w' => "west",
'x' => "write",
'y' => "jymper",
'z' => "lerp",
'*' => "bang",
'#' => "comment",
':' => "midi",
'%' => "mono",
'!' => "cc",
'?' => "pb",
'=' => "osc",
';' => "udp",
'$' => "self",
_ => "unknown",
}
}
#[cfg(test)]
mod tests {
use super::*;
use proptest::prelude::*;
#[test]
fn test_operator_name_edge_cases() {
assert_eq!(operator_name('\0'), "unknown");
assert_eq!(operator_name(' '), "unknown");
assert_eq!(operator_name('A'), "unknown");
assert_eq!(operator_name('5'), "unknown");
assert_eq!(operator_name('ё'), "unknown");
assert_eq!(operator_name('🍁'), "unknown");
}
proptest! {
#[test]
fn prop_operator_name_never_panics(c in any::<char>()) {
let _ = operator_name(c);
}
}
}