rust_distributed_id/
lib.rs1pub mod rid_generator;
2pub mod bits_allocator;
3pub mod worker;
4pub mod config;
5
6#[macro_use]
7extern crate rbatis;
8
9#[cfg(test)]
10mod tests {
11 use crate::rid_generator;
12 use crate::config::rid_config;
13 use rbatis::rbatis::Rbatis;
14 use async_std;
15 use chrono::Local;
16 use std::thread;
17 use lazy_static::lazy_static;
18
19 lazy_static! {
22 pub static ref RB: Rbatis=Rbatis::new();
23 }
24
25 #[test]
26 fn it_works() {
27 let result = 2 + 2;
28 assert_eq!(result, 4);
29 }
30
31 #[test]
32 fn gid_with_default_config() {
33 async_std::task::block_on(async {
34 let config = rid_config::UidConfig::new("5000".to_string());
35 RB.link("mysql://root:root@127.0.0.1:3306/test")
36 .await
37 .expect("Couldn't open database");
38 let mut idg = rid_generator::UidGenerator::new(&config, &RB).await;
39
40 let start = Local::now().timestamp_millis();
41 for _ in 0..10000 {
42 let _ = idg.get_uid();
44 }
45
46 let end = Local::now().timestamp_millis();
47 println!("{}", end-start);
48 });
49 }
50
51 #[test]
52 fn pid_with_default_config() {
53 async_std::task::block_on(async {
54 let config = rid_config::UidConfig::new("5000".to_string());
55 RB.link("mysql://root:root@127.0.0.1:3306/test")
56 .await
57 .expect("Couldn't open database");
58 let mut idg = rid_generator::UidGenerator::new(&config, &RB).await;
59
60 let rid = idg.get_uid();
61 println!("{}", rid);
62 let pid = idg.parse_uid(rid);
63 println!("{}", pid);
64 });
65 }
66
67 #[test]
68 fn pid_with_custom_config() {
69 async_std::task::block_on(async {
70 let mut config = rid_config::UidConfig::new("5000".to_string());
71 config.worker_bits = 10;
72 config.seq_bits = 23;
73 RB.link("mysql://root:root@127.0.0.1:3306/test")
74 .await
75 .expect("Couldn't open database");
76 let mut idg = rid_generator::UidGenerator::new(&config, &RB).await;
77
78 let rid = idg.get_uid();
79 println!("{}", rid);
80 let pid = idg.parse_uid(rid);
81 println!("{}", pid);
82 });
83 }
84
85 #[test]
86 fn gid_with_custom_config() {
87 async_std::task::block_on(async {
88 let mut config = rid_config::UidConfig::new("5000".to_string());
89 config.worker_bits = 10;
90 config.seq_bits = 23;
91
92 RB.link("mysql://root:root@127.0.0.1:3306/test")
93 .await
94 .expect("Couldn't open database");
95 let mut idg = rid_generator::UidGenerator::new(&config, &RB).await;
96
97 let start = Local::now().timestamp_millis();
98 for _ in 0..10000000 {
99 let _ = idg.get_uid();
101 }
102
103 let end = Local::now().timestamp_millis();
104 println!("{}", end-start);
105 });
106 }
107
108 #[test]
109 fn gid_with_custom_config_multi_thread() {
110 async_std::task::block_on(async {
111 let mut config = rid_config::UidConfig::new("5000".to_string());
112 config.worker_bits = 10;
113 config.seq_bits = 23;
114
115 let start = Local::now().timestamp_millis();
116 RB.link("mysql://root:root@127.0.0.1:3306/test")
117 .await
118 .expect("Couldn't open database");
119
120 for _ in 1 .. 10 {
121 let mut idg = rid_generator::UidGenerator::new(&config, &RB).await;
122 thread::spawn(move || {
123 for _ in 0..1000000 {
124 let _ = idg.get_uid();
126 }
127 });
128 }
129
130 let end = Local::now().timestamp_millis();
131 println!("{}", end-start);
132 });
133 }
134
135}