animatar 1.0.0

A blazingly fast, deterministic animal avatar generator.
Documentation
use rand::SeedableRng;
use rand_chacha::ChaCha8Rng;
use std::hash::{Hash, Hasher};

pub fn seed_random(seed: &str) -> ChaCha8Rng {
    let mut hasher = std::collections::hash_map::DefaultHasher::new();
    seed.hash(&mut hasher);
    let hash = hasher.finish();

    let mut seed_bytes = [0u8; 32];
    seed_bytes[..8].copy_from_slice(&hash.to_le_bytes());

    ChaCha8Rng::from_seed(seed_bytes)
}

#[cfg(test)]
mod tests {
    use rand::Rng;

    use super::*;

    #[test]
    fn test_seed_random_is_deterministic() {
        let mut rng1 = seed_random("test-seed");
        let mut rng2 = seed_random("test-seed");

        // Generate a sequence of numbers from both RNGs and assert they are identical
        for _ in 0..100 {
            assert_eq!(rng1.random::<u32>(), rng2.random::<u32>());
        }
    }

    #[test]
    fn test_different_seeds_produce_different_results() {
        let mut rng1 = seed_random("test-seed-1");
        let mut rng2 = seed_random("test-seed-2");

        // The first numbers generated should not be the same
        assert_ne!(rng1.random::<u32>(), rng2.random::<u32>());
    }
}