#![cfg(feature = "alloc")]
use base32::Alphabet;
use base32ct::{Base32 as Base32Ct, Base32Unpadded as Base32UnpaddedCt, Encoding};
use proptest::{prelude::*, string::*};
const RFC4648_PADDED: Alphabet = Alphabet::Rfc4648 { padding: true };
const RFC4648_UNPADDED: Alphabet = Alphabet::Rfc4648 { padding: false };
proptest! {
#[test]
fn decode_equiv_padded(bytes in bytes_regex(".{0,256}").unwrap()) {
let encoded = base32::encode(RFC4648_PADDED, &bytes).to_lowercase();
let decoded = Base32Ct::decode_vec(&encoded);
prop_assert_eq!(Ok(bytes), decoded);
}
#[test]
fn decode_equiv_unpadded(bytes in bytes_regex(".{0,256}").unwrap()) {
let encoded = base32::encode(RFC4648_UNPADDED, &bytes).to_lowercase();
let decoded = Base32UnpaddedCt::decode_vec(&encoded);
prop_assert_eq!(Ok(bytes), decoded);
}
#[test]
fn encode_equiv_padded(bytes in bytes_regex(".{0,256}").unwrap()) {
let actual = Base32Ct::encode_string(&bytes);
let expected = base32::encode(RFC4648_PADDED, &bytes).to_lowercase();
prop_assert_eq!(actual, expected);
}
#[test]
fn decode_arbitrary_padded(string in string_regex("[a-z0-9]{0,32}={0,8}").unwrap()) {
let actual = Base32Ct::decode_vec(&string);
let expected = base32::decode(RFC4648_PADDED, &string);
if let (Ok(a), Some(b)) = (actual, expected) {
assert_eq!(a, b);
}
}
#[test]
fn decode_arbitrary_unpadded(string in string_regex("[a-z0-9]{0,32}={0,8}").unwrap()) {
let actual = Base32UnpaddedCt::decode_vec(&string);
let expected = base32::decode(RFC4648_UNPADDED, &string);
if let (Ok(a), Some(b)) = (actual, expected) {
assert_eq!(a, b);
}
}
}