base64url_nopad

base64url without padding library.
git clone https://git.philomathiclife.com/repos/base64url_nopad
Log | Files | Refs | README

commit 0858cccfdf2b69f61a389808e47202f01f3af2fb
parent f17b7613d3ddd9a514d7b2db2e9e33f286b3981d
Author: Zack Newman <zack@philomathiclife.com>
Date:   Wed, 15 Apr 2026 08:00:52 -0600

use assert_eq in tests

Diffstat:
Msrc/lib.rs | 106++++++++++++++++++++++++++++++++++++++++++-------------------------------------
1 file changed, 57 insertions(+), 49 deletions(-)

diff --git a/src/lib.rs b/src/lib.rs @@ -26,7 +26,7 @@ //! input[258] = 209; //! let mut output = [0; base64url_nopad::encode_len(INPUT_LEN)]; //! assert_eq!(base64url_nopad::encode_buffer(&input, &mut output), ENCODED_VAL); -//! assert!(base64url_nopad::decode_len(output.len()).is_some_and(|len| len == INPUT_LEN)); +//! assert_eq!(base64url_nopad::decode_len(output.len()), Some(INPUT_LEN)); //! base64url_nopad::decode_buffer(ENCODED_VAL.as_bytes(), &mut output[..INPUT_LEN])?; //! assert_eq!(input, output[..INPUT_LEN]); //! # Ok::<_, DecodeErr>(()) @@ -478,7 +478,7 @@ impl Alphabet { /// /// ``` /// # use base64url_nopad::Alphabet; - /// assert!(Alphabet::from_u8(25).is_some_and(|val| val == Alphabet::Z)); + /// assert_eq!(Alphabet::from_u8(25), Some(Alphabet::Z)); /// for i in 0..=63 { /// assert!(Alphabet::from_u8(i).is_some()); /// } @@ -921,11 +921,11 @@ pub const MAX_ENCODE_INPUT_LEN: usize = decode_len(usize::MAX).unwrap(); /// # use base64url_nopad::MAX_ENCODE_INPUT_LEN; /// assert!(base64url_nopad::encode_len_checked(usize::MAX).is_none()); /// assert!(base64url_nopad::encode_len_checked(MAX_ENCODE_INPUT_LEN + 1).is_none()); -/// assert!(base64url_nopad::encode_len_checked(MAX_ENCODE_INPUT_LEN).is_some_and(|len| len == usize::MAX)); -/// assert!(base64url_nopad::encode_len_checked(3).is_some_and(|len| len == 4)); -/// assert!(base64url_nopad::encode_len_checked(2).is_some_and(|len| len == 3)); -/// assert!(base64url_nopad::encode_len_checked(1).is_some_and(|len| len == 2)); -/// assert!(base64url_nopad::encode_len_checked(0).is_some_and(|len| len == 0)); +/// assert_eq!(base64url_nopad::encode_len_checked(MAX_ENCODE_INPUT_LEN), Some(usize::MAX)); +/// assert_eq!(base64url_nopad::encode_len_checked(3), Some(4)); +/// assert_eq!(base64url_nopad::encode_len_checked(2), Some(3)); +/// assert_eq!(base64url_nopad::encode_len_checked(1), Some(2)); +/// assert_eq!(base64url_nopad::encode_len_checked(0), Some(0)); /// ``` #[expect( clippy::arithmetic_side_effects, @@ -1027,21 +1027,22 @@ pub const fn encode_len(input_length: usize) -> usize { /// # Examples /// /// ``` -/// assert!( -/// base64url_nopad::encode_buffer_checked([0; 0].as_slice(), [0; 0].as_mut_slice()).is_some_and(|val| val.is_empty()) +/// assert_eq!( +/// base64url_nopad::encode_buffer_checked([0; 0].as_slice(), [0; 0].as_mut_slice()).as_deref(), Some("") /// ); -/// assert!( -/// base64url_nopad::encode_buffer_checked([0; 1].as_slice(), [0; 2].as_mut_slice()).is_some_and(|val| val == "AA") +/// assert_eq!( +/// base64url_nopad::encode_buffer_checked([0; 1].as_slice(), [0; 2].as_mut_slice()).as_deref(), Some("AA") /// ); /// // A larger output buffer than necessary is OK. -/// assert!( -/// base64url_nopad::encode_buffer_checked([1; 1].as_slice(), [0; 128].as_mut_slice()).is_some_and(|val| val == "AQ") +/// assert_eq!( +/// base64url_nopad::encode_buffer_checked([1; 1].as_slice(), [0; 128].as_mut_slice()).as_deref(), Some("AQ") /// ); -/// assert!( +/// assert_eq!( /// base64url_nopad::encode_buffer_checked( /// [0xc9; 14].as_slice(), /// [0; base64url_nopad::encode_len(14)].as_mut_slice() -/// ).is_some_and(|val| val == "ycnJycnJycnJycnJyck") +/// ).as_deref(), +/// Some("ycnJycnJycnJycnJyck") /// ); /// assert!(base64url_nopad::encode_buffer_checked([0; 1].as_slice(), [0; 1].as_mut_slice()).is_none()); /// ``` @@ -1534,11 +1535,11 @@ pub fn encode_append_only(input: &[u8], s: &mut String) { /// ``` /// # use base64url_nopad::MAX_ENCODE_INPUT_LEN; /// assert!(base64url_nopad::decode_len(1).is_none()); -/// assert!(base64url_nopad::decode_len(usize::MAX).is_some_and(|len| len == MAX_ENCODE_INPUT_LEN)); -/// assert!(base64url_nopad::decode_len(4).is_some_and(|len| len == 3)); -/// assert!(base64url_nopad::decode_len(3).is_some_and(|len| len == 2)); -/// assert!(base64url_nopad::decode_len(2).is_some_and(|len| len == 1)); -/// assert!(base64url_nopad::decode_len(0).is_some_and(|len| len == 0)); +/// assert_eq!(base64url_nopad::decode_len(usize::MAX), Some(MAX_ENCODE_INPUT_LEN)); +/// assert_eq!(base64url_nopad::decode_len(4), Some(3)); +/// assert_eq!(base64url_nopad::decode_len(3), Some(2)); +/// assert_eq!(base64url_nopad::decode_len(2), Some(1)); +/// assert_eq!(base64url_nopad::decode_len(0), Some(0)); /// ``` #[expect( clippy::arithmetic_side_effects, @@ -1655,17 +1656,17 @@ impl Error for DecodeErr {} /// /// ``` /// # use base64url_nopad::DecodeErr; -/// assert_eq!(base64url_nopad::decode_buffer([0; 0].as_slice(), [0; 0].as_mut_slice())?, b""); +/// assert_eq!(base64url_nopad::decode_buffer(b"", [0; 0].as_mut_slice())?, b""); /// assert_eq!( -/// base64url_nopad::decode_buffer([0; 1].as_slice(), [0; 0].as_mut_slice()).unwrap_err(), +/// base64url_nopad::decode_buffer(b"A", [0; 0].as_mut_slice()).unwrap_err(), /// DecodeErr::EncodedLen /// ); /// assert_eq!( -/// base64url_nopad::decode_buffer([0; 2].as_slice(), [0; 3].as_mut_slice()).unwrap_err(), +/// base64url_nopad::decode_buffer(b"A+".as_slice(), [0; 3].as_mut_slice()).unwrap_err(), /// DecodeErr::InvalidByte /// ); /// assert_eq!( -/// base64url_nopad::decode_buffer([0; 2].as_slice(), [0; 0].as_mut_slice()).unwrap_err(), +/// base64url_nopad::decode_buffer(b"AA".as_slice(), [0; 0].as_mut_slice()).unwrap_err(), /// DecodeErr::BufferLen /// ); /// assert_eq!( @@ -1773,11 +1774,11 @@ pub const fn decode_buffer<'a>( /// # use base64url_nopad::DecodeErr; /// assert_eq!(base64url_nopad::decode([0; 0].as_slice())?, b""); /// assert_eq!( -/// base64url_nopad::decode([0; 1].as_slice()).unwrap_err(), +/// base64url_nopad::decode(b"A").unwrap_err(), /// DecodeErr::EncodedLen /// ); /// assert_eq!( -/// base64url_nopad::decode([0; 2].as_slice()).unwrap_err(), +/// base64url_nopad::decode(b"AA==").unwrap_err(), /// DecodeErr::InvalidByte /// ); /// assert_eq!( @@ -1824,13 +1825,13 @@ pub fn decode(input: &[u8]) -> Result<Vec<u8>, DecodeErr> { /// /// ``` /// # use base64url_nopad::DecodeErr; -/// base64url_nopad::validate_encoded_data([0; 0].as_slice())?; +/// base64url_nopad::validate_encoded_data(b"")?; /// assert_eq!( -/// base64url_nopad::validate_encoded_data([0; 1].as_slice()).unwrap_err(), +/// base64url_nopad::validate_encoded_data(b"A").unwrap_err(), /// DecodeErr::EncodedLen /// ); /// assert_eq!( -/// base64url_nopad::validate_encoded_data([0; 2].as_slice()).unwrap_err(), +/// base64url_nopad::validate_encoded_data(b"A/").unwrap_err(), /// DecodeErr::InvalidByte /// ); /// assert_eq!( @@ -1930,11 +1931,11 @@ pub const fn encode_buffer_exact(input: &[u8], output: &mut [u8]) { /// ``` /// # use base64url_nopad::DecodeErr; /// assert_eq!( -/// base64url_nopad::decode_buffer_exact([0; 1].as_slice(), [0; 0].as_mut_slice()).unwrap_err(), +/// base64url_nopad::decode_buffer_exact(b"A", [0; 0].as_mut_slice()).unwrap_err(), /// DecodeErr::EncodedLen /// ); /// assert_eq!( -/// base64url_nopad::decode_buffer_exact([0; 2].as_slice(), [0; 1].as_mut_slice()).unwrap_err(), +/// base64url_nopad::decode_buffer_exact(b"+A", [0; 1].as_mut_slice()).unwrap_err(), /// DecodeErr::InvalidByte /// ); /// assert_eq!( @@ -2008,18 +2009,18 @@ mod test { #[cfg(target_pointer_width = "64")] let len = rng.random::<u64>() as usize; if len <= MAX_ENCODE_INPUT_LEN { - assert!( - super::encode_len_checked(len) - .is_some_and(|l| super::decode_len(l).is_some_and(|orig| orig == len)) + assert_eq!( + super::encode_len_checked(len).map(super::decode_len), + Some(Some(len)) ); } else { assert!(super::encode_len_checked(len).is_none()); } } for i in 0..1025 { - assert!( - super::encode_len_checked(i) - .is_some_and(|l| super::decode_len(l).is_some_and(|orig| orig == i)) + assert_eq!( + super::encode_len_checked(i).map(super::decode_len), + Some(Some(i)) ); } #[cfg(target_pointer_width = "16")] @@ -2031,7 +2032,10 @@ mod test { assert!(super::encode_len_checked(i).is_none()); } assert!(super::encode_len_checked(usize::MAX).is_none()); - assert!(super::encode_len_checked(MAX_ENCODE_INPUT_LEN).is_some_and(|l| l == usize::MAX)); + assert_eq!( + super::encode_len_checked(MAX_ENCODE_INPUT_LEN), + Some(usize::MAX) + ); for _ in 0u32..10_000_000 { #[cfg(target_pointer_width = "16")] let len = rng.random::<u16>() as usize; @@ -2042,10 +2046,9 @@ mod test { if len & 3 == 1 { assert!(super::decode_len(len).is_none()); } else { - assert!( - super::decode_len(len).is_some_and( - |l| super::encode_len_checked(l).is_some_and(|orig| orig == len) - ) + assert_eq!( + super::decode_len(len).map(super::encode_len_checked), + Some(Some(len)) ); } } @@ -2053,10 +2056,9 @@ mod test { if i & 3 == 1 { assert!(super::decode_len(i).is_none()); } else { - assert!( - super::decode_len(i).is_some_and( - |l| super::encode_len_checked(l).is_some_and(|orig| orig == i) - ) + assert_eq!( + super::decode_len(i).map(super::encode_len_checked), + Some(Some(i)) ); } } @@ -2065,7 +2067,10 @@ mod test { if i & 3 == 1 { assert!(super::decode_len(i).is_none()); } else { - assert!(super::decode_len(i).is_some_and(|l| super::encode_len_checked(l).is_some_and(|orig| orig == i))); + assert_eq!( + super::decode_len(i).map(super::encode_len_checked), + Some(Some(i)) + ); } } #[cfg(not(target_pointer_width = "16"))] @@ -2073,10 +2078,13 @@ mod test { if i & 3 == 1 { assert!(super::decode_len(i).is_none()); } else { - assert!(super::decode_len(i).is_some_and(|l| super::encode_len_checked(l).is_some_and(|orig| orig == i))); + assert_eq!( + super::decode_len(i).map(super::encode_len_checked), + Some(Some(i)) + ); } } - assert!(super::decode_len(usize::MAX).is_some_and(|l| l == MAX_ENCODE_INPUT_LEN)); + assert_eq!(super::decode_len(usize::MAX), Some(MAX_ENCODE_INPUT_LEN)); } #[expect(clippy::indexing_slicing, reason = "comments justify correctness")] #[cfg(feature = "alloc")]