debt64 3.1.0

An implementation of Base64 - https://en.wikipedia.org/wiki/Base64
Documentation
// License: see LICENSE file at root directory of `master` branch

extern crate debt64;

#[test]
fn decode_standard() {
    assert_eq!(debt64::decode_standard("TWFu").unwrap(), b"Man");
    assert_eq!(debt64::decode_standard("TWE=").unwrap(), b"Ma");
    assert_eq!(debt64::decode_standard("TQ==").unwrap(), b"M");

    assert_eq!(debt64::decode_standard("YW55IGNhcm5hbCBwbGVhc3VyZS4=").unwrap(), b"any carnal pleasure.");
    assert_eq!(debt64::decode_standard("YW55IGNhcm5hbCBwbGVhc3VyZQ==").unwrap(), b"any carnal pleasure");
    assert_eq!(debt64::decode_standard("YW55IGNhcm5hbCBwbGVhc3Vy").unwrap(), b"any carnal pleasur");
    assert_eq!(debt64::decode_standard("YW55IGNhcm5hbCBwbGVhc3U=").unwrap(), b"any carnal pleasu");
    assert_eq!(debt64::decode_standard("YW55IGNhcm5hbCBwbGVhcw==").unwrap(), b"any carnal pleas");

    assert_eq!(debt64::decode_standard("cGxlYXN1cmUu").unwrap(), b"pleasure.");
    assert_eq!(debt64::decode_standard("bGVhc3VyZS4=").unwrap(), b"leasure.");
    assert_eq!(debt64::decode_standard("ZWFzdXJlLg==").unwrap(), b"easure.");
    assert_eq!(debt64::decode_standard("YXN1cmUu").unwrap(), b"asure.");
    assert_eq!(debt64::decode_standard("c3VyZS4=").unwrap(), b"sure.");
}

#[test]
fn decode_imap() {
    assert_eq!(debt64::decode_imap("TWFu").unwrap(), b"Man");
    assert_eq!(debt64::decode_imap("TWE").unwrap(), b"Ma");
    assert_eq!(debt64::decode_imap("TQ").unwrap(), b"M");

    assert_eq!(debt64::decode_imap("YW55IGNhcm5hbCBwbGVhc3VyZS4").unwrap(), b"any carnal pleasure.");
    assert_eq!(debt64::decode_imap("YW55IGNhcm5hbCBwbGVhc3VyZQ").unwrap(), b"any carnal pleasure");
    assert_eq!(debt64::decode_imap("YW55IGNhcm5hbCBwbGVhc3Vy").unwrap(), b"any carnal pleasur");
    assert_eq!(debt64::decode_imap("YW55IGNhcm5hbCBwbGVhc3U").unwrap(), b"any carnal pleasu");
    assert_eq!(debt64::decode_imap("YW55IGNhcm5hbCBwbGVhcw").unwrap(), b"any carnal pleas");

    assert_eq!(debt64::decode_imap("cGxlYXN1cmUu").unwrap(), b"pleasure.");
    assert_eq!(debt64::decode_imap("bGVhc3VyZS4").unwrap(), b"leasure.");
    assert_eq!(debt64::decode_imap("ZWFzdXJlLg").unwrap(), b"easure.");
    assert_eq!(debt64::decode_imap("YXN1cmUu").unwrap(), b"asure.");
    assert_eq!(debt64::decode_imap("c3VyZS4").unwrap(), b"sure.");
}

#[test]
fn decode_mime() {
    assert_eq!(
        debt64::decode_mime(concat!(
            "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz\r\n",
            "IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg\r\n",
            "dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu\r\n",
            "dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo\r\n",
            "ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=",
        ))
            .unwrap(),
        concat!(
            "Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that ",
            "by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any ",
            "carnal pleasure.",
        )
            .as_bytes(),
    );

    assert_eq!(debt64::decode_mime("{}cGxlY !@#$ XN1cmUu").unwrap(), b"pleasure.");
    assert_eq!(debt64::decode_mime("bGVh #$#@ c3VyZS4[]=").unwrap(), b"leasure.");
    assert_eq!(debt64::decode_mime("ZWF !^%# zdXJlLg()==").unwrap(), b"easure.");
    assert_eq!(debt64::decode_mime("YXN1 *) cmUu@#").unwrap(), b"asure.");
    assert_eq!(debt64::decode_mime("c3VyZS4**^^=").unwrap(), b"sure.");
}

#[test]
fn decode_with_errors() {
    debt64::decode_standard("~!@").unwrap_err();
    debt64::decode_imap("a=a").unwrap_err();
    debt64::decode_mime("==aa").unwrap_err();
    debt64::decode_url("a=a").unwrap_err();
    debt64::decode_freenet_url("asdasda=a").unwrap_err();
}