2023-05-27 08:37:34 +02:00
|
|
|
use rand::{distributions::Alphanumeric, thread_rng, Rng};
|
|
|
|
|
2023-06-02 17:55:14 +02:00
|
|
|
/// Generate random string based on [thread_rng] and [Alphanumeric].
|
2023-05-27 08:37:34 +02:00
|
|
|
pub fn gen_string(length: u16) -> String {
|
|
|
|
thread_rng()
|
|
|
|
.sample_iter(Alphanumeric)
|
|
|
|
.take(length.into())
|
|
|
|
.map(char::from)
|
|
|
|
.collect()
|
|
|
|
}
|
|
|
|
|
2023-06-02 17:55:14 +02:00
|
|
|
#[cfg(feature = "napi")]
|
|
|
|
#[napi_derive::napi]
|
|
|
|
pub fn native_random_str(length: u16) -> String {
|
|
|
|
gen_string(length)
|
|
|
|
}
|
|
|
|
|
2023-05-27 08:37:34 +02:00
|
|
|
#[cfg(test)]
|
2023-05-27 12:52:15 +02:00
|
|
|
mod unit_test {
|
2023-06-02 13:08:58 +02:00
|
|
|
use pretty_assertions::{assert_eq, assert_ne};
|
2023-05-27 08:37:34 +02:00
|
|
|
use std::thread;
|
|
|
|
|
|
|
|
use super::gen_string;
|
|
|
|
|
|
|
|
#[test]
|
2023-05-27 12:52:15 +02:00
|
|
|
fn can_generate_unique_strings() {
|
2023-05-27 08:37:34 +02:00
|
|
|
assert_eq!(gen_string(16).len(), 16);
|
|
|
|
assert_ne!(gen_string(16), gen_string(16));
|
|
|
|
let s1 = thread::spawn(|| gen_string(16));
|
|
|
|
let s2 = thread::spawn(|| gen_string(16));
|
|
|
|
assert_ne!(s1.join().unwrap(), s2.join().unwrap());
|
|
|
|
}
|
|
|
|
}
|