Skip to content

Commit b55230a

Browse files
authored
Merge pull request #1 from Jxtopher/check-out-of-bound
feat: check out-of-bounds in the arrary
2 parents de86b80 + 239b7e0 commit b55230a

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

src/lib.rs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,13 @@ where
151151
///
152152
/// This operation is *O*(*1*).
153153
pub fn set(&mut self, toggle_id: usize, value: bool) {
154+
if toggle_id >= self.toggles_value.len() {
155+
panic!(
156+
"Out-of-bounds access. The provided toggle_id is {}, but the array size is {}. Please use the default enum value.",
157+
toggle_id,
158+
self.toggles_value.len()
159+
);
160+
}
154161
self.toggles_value.set(toggle_id, value);
155162
}
156163

@@ -171,7 +178,7 @@ where
171178
for toggle in T::iter() {
172179
if let Some(toggle_id) = T::iter().position(|x| x == toggle) {
173180
let name = toggle.as_ref();
174-
writeln!(f, "{} {} ", self.toggles_value[toggle_id] as u8, name)?;
181+
writeln!(f, "{} {} ", self.get(toggle_id) as u8, name)?;
175182
}
176183
}
177184
Ok(())
@@ -245,4 +252,19 @@ mod tests {
245252
assert_eq!(toggles.get(TestToggles::Toggle1 as usize), true);
246253
assert_eq!(toggles.get(TestToggles::Toggle2 as usize), false);
247254
}
255+
256+
#[derive(AsRefStr, EnumIter, PartialEq)]
257+
pub enum DeviantToggles {
258+
Toggle1 = 5,
259+
Toggle2 = 10,
260+
}
261+
262+
#[test]
263+
#[should_panic(
264+
expected = "Out-of-bounds access. The provided toggle_id is 5, but the array size is 2. Please use the default enum value."
265+
)]
266+
fn deviant_toggles() {
267+
let mut toggles: EnumToggles<DeviantToggles> = EnumToggles::new();
268+
toggles.set(DeviantToggles::Toggle1 as usize, true);
269+
}
248270
}

0 commit comments

Comments
 (0)