#[cfg(test)]
mod tests {
use crate::*;
#[test]
fn test_base62_encoding_decoding() {
let test_values = [0u64, 1, 62, 123, 1234567890, u64::MAX / 2, u64::MAX];
for &value in &test_values {
let encoded = base62_encode(value);
let decoded = base62_decode(&encoded).unwrap();
assert_eq!(decoded, value, "Failed roundtrip for {value}");
}
}
#[test]
fn test_base62_generator_consistency() {
let config = SnowIDConfig::default();
let generator = SnowID::with_config(42, config).unwrap();
let regular_id = generator.generate();
let (base62_id, raw_id) = generator.generate_base62_with_raw();
let decoded_id = base62_decode(&base62_id).unwrap();
assert_eq!(decoded_id, raw_id);
let (reg_ts, reg_node, reg_seq) = generator.extract.decompose(regular_id);
let (base_ts, base_node, base_seq) = generator.decompose_base62(&base62_id).unwrap();
assert_eq!(reg_node, 42);
assert_eq!(base_node, 42);
assert!(reg_ts > 0);
assert!(base_ts > 0);
assert!(reg_seq < config.max_sequence_id());
assert!(base_seq < config.max_sequence_id());
}
#[test]
fn test_base62_error_handling() {
let generator = SnowID::new(1).unwrap();
assert!(generator.decode_base62("abc!def").is_err());
assert!(generator.decode_base62("").is_err());
assert!(generator.decompose_base62("invalid!").is_err());
}
#[test]
fn test_base62_id_length() {
let generator = SnowID::new(1).unwrap();
for _ in 0..10 {
let id = generator.generate_base62();
assert!(id.len() <= 11, "Base62 ID length should be <= 11, got {}", id.len());
let decoded = generator.decode_base62(&id).unwrap();
assert!(decoded > 0);
}
}
}