use crate::Uuid;
#[must_use]
pub fn new_v4() -> Uuid {
Uuid::from_inner(uuid::Uuid::new_v4())
}
#[must_use]
pub fn new_v4_string() -> String {
uuid::Uuid::new_v4().to_string()
}
#[cfg(test)]
mod tests {
use super::*;
#[test_log::test]
fn test_uuid_v4_format_compliance() {
let uuid = new_v4();
let bytes = uuid.as_bytes();
let version_byte = bytes[6];
assert_eq!(
version_byte & 0xf0,
0x40,
"UUID version bits should be 0100 (v4)"
);
let variant_byte = bytes[8];
assert_eq!(
variant_byte & 0xc0,
0x80,
"UUID variant bits should be 10 (RFC 4122)"
);
}
#[test_log::test]
fn test_string_format() {
let uuid_string = new_v4_string();
assert_eq!(uuid_string.len(), 36);
assert_eq!(uuid_string.chars().nth(8).unwrap(), '-');
assert_eq!(uuid_string.chars().nth(13).unwrap(), '-');
assert_eq!(uuid_string.chars().nth(18).unwrap(), '-');
assert_eq!(uuid_string.chars().nth(23).unwrap(), '-');
let parsed = Uuid::parse_str(&uuid_string);
assert!(
parsed.is_ok(),
"new_v4_string should produce valid UUID string"
);
}
#[test_log::test]
fn test_randomness() {
let mut uuids = std::collections::BTreeSet::new();
for _ in 0..100 {
let uuid = new_v4();
assert!(
uuids.insert(uuid),
"Generated duplicate UUID (extremely unlikely with random generation): {uuid}"
);
}
assert_eq!(uuids.len(), 100);
}
#[test_log::test]
fn test_consistency_between_methods() {
let uuid = new_v4();
let direct_string = uuid.to_string();
let helper_string = new_v4_string();
assert_eq!(direct_string.len(), helper_string.len());
assert_eq!(direct_string.len(), 36);
}
}