1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
pub mod generator;
pub mod sf;
mod config;
mod utils;
use std::sync::{Arc, Mutex};
pub struct Sf(u64);
struct GeneratorState {
seq: u16,
ts: u64,
}
pub struct Generator {
epoch: u128,
worker_id: u16,
state: Arc<Mutex<GeneratorState>>,
}
#[cfg(test)]
mod tests {
use super::{Generator, Sf};
#[test]
fn test_bad_worker_id() {
let maybe_id = Sf::new(0, 1024, 0);
assert!(maybe_id.is_err(), "id generating should be failed");
}
#[test]
fn test_sf_nil() {
let id = Sf::nil();
assert_eq!(id.0, 0);
}
#[test]
fn test_generate_id() {
let gen = Generator::new(1_548_067_209_841, 0).unwrap();
let id = gen.next_id().unwrap();
assert_ne!(id.0, 0);
}
}