#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ArrayFunction {
Contains,
FindIndex,
FindOffset,
GetArrayBounds,
GetNumElements,
IndexToOffset,
InsertElements,
OffsetToIndex,
RemoveElements,
SetArrayBounds,
SetElements,
SetNumElements,
Sort,
}
impl ArrayFunction {
pub const ALL: [Self; 13] = [
Self::Contains,
Self::FindIndex,
Self::FindOffset,
Self::GetArrayBounds,
Self::GetNumElements,
Self::IndexToOffset,
Self::InsertElements,
Self::OffsetToIndex,
Self::RemoveElements,
Self::SetArrayBounds,
Self::SetElements,
Self::SetNumElements,
Self::Sort,
];
#[must_use]
pub const fn name(self) -> &'static str {
match self {
Self::Contains => "Contains",
Self::FindIndex => "FindIndex",
Self::FindOffset => "FindOffset",
Self::GetArrayBounds => "GetArrayBounds",
Self::GetNumElements => "GetNumElements",
Self::IndexToOffset => "IndexToOffset",
Self::InsertElements => "InsertElements",
Self::OffsetToIndex => "OffsetToIndex",
Self::RemoveElements => "RemoveElements",
Self::SetArrayBounds => "SetArrayBounds",
Self::SetElements => "SetElements",
Self::SetNumElements => "SetNumElements",
Self::Sort => "Sort",
}
}
}
#[cfg(test)]
mod tests {
use super::ArrayFunction;
#[test]
fn every_name_is_distinct() {
let mut names: Vec<&str> = ArrayFunction::ALL.iter().map(|f| f.name()).collect();
names.sort_unstable();
let count = names.len();
names.dedup();
assert_eq!(names.len(), count);
}
}