use super::CharCodes;
pub fn is_whitespace(byte: u8) -> bool {
matches!(
byte,
CharCodes::Null
| CharCodes::Tab
| CharCodes::Newline
| CharCodes::FormFeed
| CharCodes::CarriageReturn
| CharCodes::Space
)
}
pub fn is_delimiter(byte: u8) -> bool {
matches!(
byte,
CharCodes::LeftParen
| CharCodes::RightParen
| CharCodes::LessThan
| CharCodes::GreaterThan
| CharCodes::LeftSquareBracket
| CharCodes::RightSquareBracket
| CharCodes::LeftCurly
| CharCodes::RightCurly
| CharCodes::ForwardSlash
| CharCodes::Percent
)
}
pub fn is_irregular(byte: u8) -> bool {
is_whitespace(byte) || is_delimiter(byte) || byte == CharCodes::Hash
}
pub fn is_digit(byte: u8) -> bool {
(CharCodes::Zero..=CharCodes::Nine).contains(&byte)
}
pub fn is_numeric_prefix(byte: u8) -> bool {
matches!(byte, CharCodes::Period | CharCodes::Plus | CharCodes::Minus)
}
pub fn is_numeric(byte: u8) -> bool {
is_digit(byte) || is_numeric_prefix(byte)
}
pub fn is_regular_char(code: u8) -> bool {
(CharCodes::ExclamationPoint..=CharCodes::Tilde).contains(&code) && !is_irregular(code)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_whitespace() {
assert!(is_whitespace(0)); assert!(is_whitespace(9)); assert!(is_whitespace(10)); assert!(is_whitespace(12)); assert!(is_whitespace(13)); assert!(is_whitespace(32)); assert!(!is_whitespace(65)); }
#[test]
fn test_delimiter() {
assert!(is_delimiter(b'('));
assert!(is_delimiter(b')'));
assert!(is_delimiter(b'<'));
assert!(is_delimiter(b'>'));
assert!(is_delimiter(b'['));
assert!(is_delimiter(b']'));
assert!(is_delimiter(b'{'));
assert!(is_delimiter(b'}'));
assert!(is_delimiter(b'/'));
assert!(is_delimiter(b'%'));
assert!(!is_delimiter(b'A'));
}
#[test]
fn test_is_digit() {
for d in b'0'..=b'9' {
assert!(is_digit(d));
}
assert!(!is_digit(b'A'));
assert!(!is_digit(b' '));
}
}