mod cases;
#[cfg(feature = "check")]
use assert_matches::assert_matches;
#[test]
fn test_decode() {
for &(val, s) in cases::TEST_CASES.iter() {
assert_eq!(val.to_vec(), bs58::decode(s).into_vec().unwrap());
const PREFIX: &[u8] = &[0, 1, 2];
{
let mut vec = PREFIX.to_vec();
assert_eq!(Ok(val.len()), bs58::decode(s).onto(&mut vec));
assert_eq!((PREFIX, val), vec.split_at(3));
}
{
let vec = bs58::decode(s.as_bytes()).into_array_const_unwrap::<128>();
let mut check = [0; 128];
check[..val.len()].copy_from_slice(val);
assert_eq!(vec, check);
}
#[cfg(feature = "smallvec")]
{
let mut vec = smallvec::SmallVec::<[u8; 36]>::from(PREFIX);
assert_eq!(Ok(val.len()), bs58::decode(s).onto(&mut vec));
assert_eq!((PREFIX, val), vec.split_at(3));
}
#[cfg(feature = "tinyvec")]
{
{
let mut vec = tinyvec::ArrayVec::<[u8; 36]>::from_iter(PREFIX.iter().copied());
let res = bs58::decode(s).onto(&mut vec);
if PREFIX.len() + val.len() <= vec.capacity() {
assert_eq!(Ok(val.len()), res);
assert_eq!((PREFIX, val), vec.split_at(3));
} else {
assert_eq!(Err(bs58::decode::Error::BufferTooSmall), res);
}
}
{
let mut array = [0; 36];
array[..PREFIX.len()].copy_from_slice(PREFIX);
let mut vec = tinyvec::SliceVec::from_slice_len(&mut array, PREFIX.len());
let res = bs58::decode(s).onto(&mut vec);
if PREFIX.len() + val.len() <= vec.capacity() {
assert_eq!(Ok(val.len()), res);
assert_eq!((PREFIX, val), vec.split_at(3));
} else {
assert_eq!(Err(bs58::decode::Error::BufferTooSmall), res);
}
}
{
let mut vec = tinyvec::TinyVec::<[u8; 36]>::from(PREFIX);
assert_eq!(Ok(val.len()), bs58::decode(s).onto(&mut vec));
assert_eq!((PREFIX, val), vec.split_at(3));
}
}
}
}
#[test]
fn test_decode_small_buffer_err() {
let mut output = [0; 2];
assert_eq!(
bs58::decode("a3gV").onto(&mut output),
Err(bs58::decode::Error::BufferTooSmall)
);
}
#[test]
#[should_panic]
fn test_decode_const_small_buffer_panic() {
bs58::decode(&b"a3gV"[..]).into_array_const_unwrap::<2>();
}
#[test]
#[should_panic]
fn test_decode_const_invalid_char_panic() {
let sample = "123456789abcd!efghij";
let _ = bs58::decode(sample.as_bytes()).into_array_const_unwrap::<32>();
}
#[test]
fn test_decode_invalid_char() {
let sample = "123456789abcd!efghij";
assert_eq!(
bs58::decode(sample).into_vec().unwrap_err(),
bs58::decode::Error::InvalidCharacter {
character: '!',
index: 13
}
);
}
#[test]
#[cfg(feature = "check")]
fn test_decode_check() {
for &(val, s) in cases::CHECK_TEST_CASES.iter() {
assert_eq!(
val.to_vec(),
bs58::decode(s).with_check(None).into_vec().unwrap()
);
}
for &(val, s) in cases::CHECK_TEST_CASES[1..].iter() {
assert_eq!(
val.to_vec(),
bs58::decode(s).with_check(Some(val[0])).into_vec().unwrap()
);
}
}
#[test]
#[cfg(feature = "check")]
fn test_check_ver_failed() {
let d = bs58::decode("K5zqBMZZTzUbAZQgrt4")
.with_check(Some(0x01))
.into_vec();
assert!(d.is_err());
assert_matches!(d.unwrap_err(), bs58::decode::Error::InvalidVersion { .. });
}
#[test]
fn append() {
let mut buf = b"hello world".to_vec();
bs58::decode("a").onto(&mut buf).unwrap();
assert_eq!(b"hello world!", buf.as_slice());
}
#[test]
fn no_append() {
let mut buf = b"hello world".to_owned();
bs58::decode("a").onto(buf.as_mut()).unwrap();
assert_eq!(b"!ello world", buf.as_ref());
}