base64-ng 2.0.1

no_std-first Base64 encoding and decoding with strict RFC 4648 APIs and optional SIMD
Documentation
use super::{Status, web, web::ForgivingError};

#[test]
fn forgiving_core_is_available_without_allocation() {
    let mut output = [0xa5; 4];
    let written = web::FORGIVING
        .decode_into(" Z\tg\n=\x0c=\r ", &mut output)
        .unwrap();
    assert_eq!(&output[..written], b"f");
    assert_eq!(output[written], 0xa5);
    assert_eq!(
        web::FORGIVING.decode_into("Zg=", &mut output),
        Err(ForgivingError::InvalidInput)
    );
}

#[test]
fn forgiving_incremental_core_drains_without_allocation() {
    let mut decoder = web::FORGIVING.decoder();
    let mut output = [0u8; 3];
    let first = decoder.update("Zm", &mut output[..1]).unwrap();
    assert_eq!(first.status(), Status::NeedInput);
    let second = decoder.update("9v", &mut output[..1]).unwrap();
    assert_eq!(second.progress().output_produced(), 1);
    let third = decoder.finish(&mut output[1..]).unwrap();
    assert_eq!(third.status(), Status::Complete);
    assert_eq!(third.progress().output_produced(), 2);
    assert_eq!(output, *b"foo");
}