competitive/tools/
id_generator.rs

1use std::ops::Range;
2
3#[derive(Debug, Default)]
4pub struct IdGenerator {
5    next_id: usize,
6}
7
8impl IdGenerator {
9    pub fn new() -> Self {
10        Default::default()
11    }
12
13    pub fn create(&mut self) -> usize {
14        let id = self.next_id;
15        self.next_id += 1;
16        id
17    }
18
19    pub fn create_n(&mut self, n: usize) -> Range<usize> {
20        let start = self.next_id;
21        self.next_id += n;
22        start..self.next_id
23    }
24
25    pub fn create_vec(&mut self, n: usize) -> Vec<usize> {
26        self.create_n(n).collect()
27    }
28}
29
30#[cfg(test)]
31mod tests {
32    use super::IdGenerator;
33
34    #[test]
35    fn test_id_generator() {
36        let mut g = IdGenerator::new();
37        assert_eq!(g.create(), 0);
38        assert_eq!(g.create(), 1);
39        assert_eq!(g.create_n(3), 2..5);
40        assert_eq!(g.create_vec(4), vec![5, 6, 7, 8]);
41        assert_eq!(g.create(), 9);
42    }
43}