demit 1.0.0

A flexible data generator for various domains
Documentation
use rand::Rng;

const USERNAME_PARTS: &[&str] =
    &["bongo", "demit", "charles", "hotate", "mike"];
const ADJETIVES: &[&str] = &["happy", "sad", "angry", "tired"];

pub fn gen_username(with_num: bool) -> String {
    let idx = rand::rng().random_range(0..USERNAME_PARTS.len());
    let username = USERNAME_PARTS[idx];

    let idx = rand::rng().random_range(0..ADJETIVES.len());
    let adj = ADJETIVES[idx];

    if with_num {
        let num = rand::rng().random_range(0..4);
        format!("{}_{}_{}", adj, username, num)
    } else {
        format!("{}_{}", adj, username)
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_gen_username_structure() {
        let user_with_num = gen_username(true);
        let parts: Vec<&str> = user_with_num.split("_").collect();
        assert_eq!(parts.len(), 3);

        let user_without_num = gen_username(false);
        let parts: Vec<&str> = user_without_num.split("_").collect();
        assert_eq!(parts.len(), 2);
    }

    #[test]
    fn test_username_integrity() {
        let username = gen_username(false);
        let mut parts = username.split("_");
        let adj = parts.next().unwrap();
        let name = parts.next().unwrap();
        assert!(ADJETIVES.contains(&adj));
        assert!(USERNAME_PARTS.contains(&name));
    }
}