Skip to main content

faker_rust/default/
string.rs

1//! String generator
2
3
4/// Generate a random string
5pub fn random(length: usize) -> String {
6    let chars: Vec<char> = (0..length)
7        .map(|_| {
8            let alphabet = "abcdefghijklmnopqrstuvwxyz";
9            let idx = (rand::random::<u8>() as usize) % alphabet.len();
10            alphabet.chars().nth(idx).unwrap()
11        })
12        .collect();
13    chars.into_iter().collect()
14}
15
16/// Generate a random uppercase string
17pub fn uppercase(length: usize) -> String {
18    random(length).to_uppercase()
19}
20
21/// Generate a random lowercase string
22pub fn lowercase(length: usize) -> String {
23    random(length).to_lowercase()
24}
25
26/// Generate a random alphanumeric string
27pub fn alphanumeric(length: usize) -> String {
28    let chars: Vec<char> = (0..length)
29        .map(|_| {
30            let alphabet = "abcdefghijklmnopqrstuvwxyz0123456789";
31            let idx = (rand::random::<u8>() as usize) % alphabet.len();
32            alphabet.chars().nth(idx).unwrap()
33        })
34        .collect();
35    chars.into_iter().collect()
36}
37
38#[cfg(test)]
39mod tests {
40    use super::*;
41
42    #[test]
43    fn test_random() {
44        let s = random(10);
45        assert_eq!(s.len(), 10);
46    }
47
48    #[test]
49    fn test_uppercase() {
50        let s = uppercase(10);
51        assert_eq!(s.len(), 10);
52        assert!(s.chars().all(|c| c.is_uppercase()));
53    }
54
55    #[test]
56    fn test_lowercase() {
57        let s = lowercase(10);
58        assert_eq!(s.len(), 10);
59        assert!(s.chars().all(|c| c.is_lowercase()));
60    }
61
62    #[test]
63    fn test_alphanumeric() {
64        let s = alphanumeric(10);
65        assert_eq!(s.len(), 10);
66        assert!(s.chars().all(|c| c.is_alphanumeric()));
67    }
68}