Skip to main content

steel_core/player/
container_counter.rs

1/// Generates vanilla container IDs in the inclusive range 1..=100.
2#[derive(Debug, Clone, Copy, Default)]
3pub(super) struct ContainerCounter {
4    current: u8,
5}
6
7impl ContainerCounter {
8    #[must_use]
9    pub(super) const fn new() -> Self {
10        Self { current: 0 }
11    }
12
13    pub(super) const fn next(&mut self) -> u8 {
14        self.current = (self.current % 100) + 1;
15        self.current
16    }
17}
18
19#[cfg(test)]
20mod tests {
21    use super::ContainerCounter;
22
23    #[test]
24    fn starts_at_one() {
25        let mut counter = ContainerCounter::new();
26
27        assert_eq!(counter.next(), 1);
28    }
29
30    #[test]
31    fn wraps_after_one_hundred() {
32        let mut counter = ContainerCounter::new();
33
34        for expected in 1..=100 {
35            assert_eq!(counter.next(), expected);
36        }
37        assert_eq!(counter.next(), 1);
38    }
39}