competitive/tools/
id_generator.rs1use 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}