rs_teststand/expression/function/
string.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
7pub enum StringFunction {
8 CheckStrLimit,
10 Chr,
12 DelocalizeExpression,
14 Find,
16 FindPattern,
18 Left,
20 Len,
22 LocalizedDecimalPoint,
24 LocalizeExpression,
26 MatchPattern,
28 Mid,
30 Replace,
32 ResStr,
34 Right,
36 SearchAndReplace,
38 SearchPatternAndReplace,
40 Split,
42 Str,
44 StrComp,
46 ToLower,
48 ToUpper,
50 Trim,
52 TrimEnd,
54 TrimStart,
56}
57
58impl StringFunction {
59 pub const ALL: [Self; 24] = [
61 Self::CheckStrLimit,
62 Self::Chr,
63 Self::DelocalizeExpression,
64 Self::Find,
65 Self::FindPattern,
66 Self::Left,
67 Self::Len,
68 Self::LocalizedDecimalPoint,
69 Self::LocalizeExpression,
70 Self::MatchPattern,
71 Self::Mid,
72 Self::Replace,
73 Self::ResStr,
74 Self::Right,
75 Self::SearchAndReplace,
76 Self::SearchPatternAndReplace,
77 Self::Split,
78 Self::Str,
79 Self::StrComp,
80 Self::ToLower,
81 Self::ToUpper,
82 Self::Trim,
83 Self::TrimEnd,
84 Self::TrimStart,
85 ];
86
87 #[must_use]
89 pub const fn name(self) -> &'static str {
90 match self {
91 Self::CheckStrLimit => "CheckStrLimit",
92 Self::Chr => "Chr",
93 Self::DelocalizeExpression => "DelocalizeExpression",
94 Self::Find => "Find",
95 Self::FindPattern => "FindPattern",
96 Self::Left => "Left",
97 Self::Len => "Len",
98 Self::LocalizedDecimalPoint => "LocalizedDecimalPoint",
99 Self::LocalizeExpression => "LocalizeExpression",
100 Self::MatchPattern => "MatchPattern",
101 Self::Mid => "Mid",
102 Self::Replace => "Replace",
103 Self::ResStr => "ResStr",
104 Self::Right => "Right",
105 Self::SearchAndReplace => "SearchAndReplace",
106 Self::SearchPatternAndReplace => "SearchPatternAndReplace",
107 Self::Split => "Split",
108 Self::Str => "Str",
109 Self::StrComp => "StrComp",
110 Self::ToLower => "ToLower",
111 Self::ToUpper => "ToUpper",
112 Self::Trim => "Trim",
113 Self::TrimEnd => "TrimEnd",
114 Self::TrimStart => "TrimStart",
115 }
116 }
117}
118
119#[cfg(test)]
120mod tests {
121 use super::StringFunction;
122
123 #[test]
124 fn every_name_is_distinct() {
125 let mut names: Vec<&str> = StringFunction::ALL.iter().map(|f| f.name()).collect();
126 names.sort_unstable();
127 let count = names.len();
128 names.dedup();
129 assert_eq!(names.len(), count);
130 }
131}