#![cfg(feature = "id")]
use bento_kit::id;
use std::collections::HashSet;
#[test]
fn batch_of_uuid_v4_has_no_collisions() {
let n = 1000;
let set: HashSet<String> = (0..n).map(|_| id::uuid_v4()).collect();
assert_eq!(set.len(), n, "uuid v4 collision in {n} samples");
}
#[test]
fn batch_of_uuid_v7_has_no_collisions() {
let n = 1000;
let set: HashSet<String> = (0..n).map(|_| id::uuid_v7()).collect();
assert_eq!(set.len(), n, "uuid v7 collision in {n} samples");
}
#[test]
fn batch_of_nanoid_has_no_collisions() {
let n = 1000;
let set: HashSet<String> = (0..n).map(|_| id::nanoid()).collect();
assert_eq!(set.len(), n, "nanoid collision in {n} samples");
}
#[test]
fn batch_of_session_ids_has_no_collisions() {
let n = 1000;
let set: HashSet<String> = (0..n).map(|_| id::generate_session_id()).collect();
assert_eq!(set.len(), n, "session id collision in {n} samples");
}
#[test]
fn user_id_round_trip() {
let s = id::make_user_id("appA", "uidB", "cidC");
let parsed = id::parse_user_id(&s).unwrap();
assert_eq!(parsed.appid, "appA");
assert_eq!(parsed.uid, "uidB");
assert_eq!(parsed.cuid, "cidC");
assert_eq!(parsed.id, s);
}
#[test]
fn random_int_distribution_covers_range() {
let mut seen = std::collections::HashSet::new();
for _ in 0..1000 {
seen.insert(id::random_int(0, 5));
}
assert_eq!(seen.len(), 5);
}