rust_distributed_id/
lib.rs

1pub 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    //pub static static_rb:  Rbatis = Rbatis::new();
20
21    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                //println!("{}", &idg.get_uid());
43                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                //println!("{}", &idg.get_uid());
100                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                        //println!("{}", &idg.get_uid());
125                        let _ = idg.get_uid();
126                    }
127                });
128            }
129
130            let end = Local::now().timestamp_millis();
131            println!("{}", end-start);
132        });
133    }
134
135}