use sqids::*;
#[test]
fn simple() {
let sqids =
Sqids::new(Some(Options::new(None, Some(Options::default().alphabet.len() as u8), None)))
.unwrap();
let numbers = vec![1, 2, 3];
let id = "86Rf07xd4zBmiJXQG6otHEbew02c3PWsUOLZxADhCpKj7aVFv9I8RquYrNlSTM".to_owned();
assert_eq!(sqids.encode(&numbers).unwrap(), id);
assert_eq!(sqids.decode(&id), numbers);
}
#[test]
fn incremental() {
let numbers = [1, 2, 3];
let alphabet_length = Options::default().alphabet.len() as u8;
let map = vec![
(6 as u8, "86Rf07".to_owned()),
(7, "86Rf07x".to_owned()),
(8, "86Rf07xd".to_owned()),
(9, "86Rf07xd4".to_owned()),
(10, "86Rf07xd4z".to_owned()),
(11, "86Rf07xd4zB".to_owned()),
(12, "86Rf07xd4zBm".to_owned()),
(13, "86Rf07xd4zBmi".to_owned()),
(
alphabet_length + 0,
"86Rf07xd4zBmiJXQG6otHEbew02c3PWsUOLZxADhCpKj7aVFv9I8RquYrNlSTM".to_owned(),
),
(
alphabet_length + 1,
"86Rf07xd4zBmiJXQG6otHEbew02c3PWsUOLZxADhCpKj7aVFv9I8RquYrNlSTMy".to_owned(),
),
(
alphabet_length + 2,
"86Rf07xd4zBmiJXQG6otHEbew02c3PWsUOLZxADhCpKj7aVFv9I8RquYrNlSTMyf".to_owned(),
),
(
alphabet_length + 3,
"86Rf07xd4zBmiJXQG6otHEbew02c3PWsUOLZxADhCpKj7aVFv9I8RquYrNlSTMyf1".to_owned(),
),
];
for (min_length, id) in map {
let sqids = Sqids::new(Some(Options::new(None, Some(min_length), None))).unwrap();
assert_eq!(sqids.encode(&numbers).unwrap(), id);
assert_eq!(sqids.encode(&numbers).unwrap().len(), min_length as usize);
assert_eq!(sqids.decode(&id), numbers);
}
}
#[test]
fn incremental_numbers() {
let sqids =
Sqids::new(Some(Options::new(None, Some(Options::default().alphabet.len() as u8), None)))
.unwrap();
let ids = vec![
("SvIzsqYMyQwI3GWgJAe17URxX8V924Co0DaTZLtFjHriEn5bPhcSkfmvOslpBu".to_owned(), vec![0, 0]),
("n3qafPOLKdfHpuNw3M61r95svbeJGk7aAEgYn4WlSjXURmF8IDqZBy0CT2VxQc".to_owned(), vec![0, 1]),
("tryFJbWcFMiYPg8sASm51uIV93GXTnvRzyfLleh06CpodJD42B7OraKtkQNxUZ".to_owned(), vec![0, 2]),
("eg6ql0A3XmvPoCzMlB6DraNGcWSIy5VR8iYup2Qk4tjZFKe1hbwfgHdUTsnLqE".to_owned(), vec![0, 3]),
("rSCFlp0rB2inEljaRdxKt7FkIbODSf8wYgTsZM1HL9JzN35cyoqueUvVWCm4hX".to_owned(), vec![0, 4]),
("sR8xjC8WQkOwo74PnglH1YFdTI0eaf56RGVSitzbjuZ3shNUXBrqLxEJyAmKv2".to_owned(), vec![0, 5]),
("uY2MYFqCLpgx5XQcjdtZK286AwWV7IBGEfuS9yTmbJvkzoUPeYRHr4iDs3naN0".to_owned(), vec![0, 6]),
("74dID7X28VLQhBlnGmjZrec5wTA1fqpWtK4YkaoEIM9SRNiC3gUJH0OFvsPDdy".to_owned(), vec![0, 7]),
("30WXpesPhgKiEI5RHTY7xbB1GnytJvXOl2p0AcUjdF6waZDo9Qk8VLzMuWrqCS".to_owned(), vec![0, 8]),
("moxr3HqLAK0GsTND6jowfZz3SUx7cQ8aC54Pl1RbIvFXmEJuBMYVeW9yrdOtin".to_owned(), vec![0, 9]),
];
for (id, numbers) in ids {
assert_eq!(sqids.encode(&numbers).unwrap(), id);
assert_eq!(sqids.decode(&id), numbers);
}
}
#[test]
fn min_lengths() {
for &min_length in &[0, 1, 5, 10, Options::default().alphabet.len() as u8] {
for numbers in &[
vec![u64::MIN],
vec![0, 0, 0, 0, 0],
vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
vec![100, 200, 300],
vec![1_000, 2_000, 3_000],
vec![1_000_000],
vec![u64::MAX],
] {
let sqids = Sqids::new(Some(Options::new(None, Some(min_length), None))).unwrap();
let id = sqids.encode(&numbers).unwrap();
assert!(id.len() >= min_length as usize);
assert_eq!(sqids.decode(&id), *numbers);
}
}
}