wdg-base32 0.3.21

The Base32 Data Encoding
Documentation
use wdg_base32::B32;
use wdg_base32::B32Encode;
use wdg_base32::B32Decode;
use wdg_base32::B32DecodeError;

macro_rules! test_encode{($t:ty,$v1:expr,$v2:expr)=>{assert_eq!(B32::<$t>::encode($v1),$v2);}}
macro_rules! test_decode{($t:ty,$v1:expr,$v2:expr,$v3:expr)=>{match B32::<$t>::decode($v1){Ok(v)=>{assert_eq!(v,$v2);},Err(e)=>{assert_eq!(e,$v3);}}}}
macro_rules! test_unsafe_decode{($t:ty,$v1:expr,$v2:expr)=>{assert_eq!(unsafe{B32::<$t>::unsafe_decode($v1)},$v2);}}
macro_rules! test_validation{($t:ty,$v1:expr,$v2:expr)=>{assert_eq!(B32::<$t>::validation($v1),$v2);}}

#[test]
fn encode() {
    test_encode!(String,String::from(""),       String::from(""));
    test_encode!(String,String::from("f"),      String::from("MY======"));
    test_encode!(String,String::from("fo"),     String::from("MZXQ===="));
    test_encode!(String,String::from("foo"),    String::from("MZXW6==="));
    test_encode!(String,String::from("foob"),   String::from("MZXW6YQ="));
    test_encode!(String,String::from("fooba"),  String::from("MZXW6YTB"));

    // test_encode!(String,"",                     String::from(""));
    // test_encode!(String,"f",                    String::from("MY======"));
    // test_encode!(String,"fo",                   String::from("MZXQ===="));
    // test_encode!(String,"foo",                  String::from("MZXW6==="));
    // test_encode!(String,"foob",                 String::from("MZXW6YQ="));
    // test_encode!(String,"fooba",                String::from("MZXW6YTB"));
    // test_encode!(String,"very_long_string",     String::from("OZSXE6K7NRXW4Z27ON2HE2LOM4======"));
}

#[test]
fn validation(){
    test_validation!(String,String::from("A"),          B32DecodeError::InvalidLength);
    test_validation!(String,String::from("AA"),         B32DecodeError::InvalidLength);
    test_validation!(String,String::from("AAA"),        B32DecodeError::InvalidLength);
    test_validation!(String,String::from("AAAA"),       B32DecodeError::InvalidLength);
    test_validation!(String,String::from("AAAAA"),      B32DecodeError::InvalidLength);
    test_validation!(String,String::from("AAAAAA"),     B32DecodeError::InvalidLength);
    test_validation!(String,String::from("AAAAAAA"),    B32DecodeError::InvalidLength);
    test_validation!(String,String::from("AAAAAA=="),   B32DecodeError::InvalidPadding);
    test_validation!(String,String::from("AAA====="),   B32DecodeError::InvalidPadding);
    test_validation!(String,String::from("A======="),   B32DecodeError::InvalidPadding);
    test_validation!(String,String::from("========"),   B32DecodeError::InvalidPadding);
    test_validation!(String,String::from(""),           B32DecodeError::Null);
    test_validation!(String,String::from("MY======"),   B32DecodeError::Null);
    test_validation!(String,String::from("MZXQ===="),   B32DecodeError::Null);
    test_validation!(String,String::from("MZXW6==="),   B32DecodeError::Null);
    test_validation!(String,String::from("MZXW6YQ="),   B32DecodeError::Null);
    test_validation!(String,String::from("MZXW6YTB"),   B32DecodeError::Null);

    // test_validation!(String,"A",                        B32DecodeError::InvalidLength);
    // test_validation!(String,"AA",                       B32DecodeError::InvalidLength);
    // test_validation!(String,"AAA",                      B32DecodeError::InvalidLength);
    // test_validation!(String,"AAAA",                     B32DecodeError::InvalidLength);
    // test_validation!(String,"AAAAA",                    B32DecodeError::InvalidLength);
    // test_validation!(String,"AAAAAA",                   B32DecodeError::InvalidLength);
    // test_validation!(String,"AAAAAAA",                  B32DecodeError::InvalidLength);
    // test_validation!(String,"AAAAAA==",                 B32DecodeError::InvalidPadding);
    // test_validation!(String,"AAA=====",                 B32DecodeError::InvalidPadding);
    // test_validation!(String,"A=======",                 B32DecodeError::InvalidPadding);
    // test_validation!(String,"========",                 B32DecodeError::InvalidPadding);
    // test_validation!(String,"",                         B32DecodeError::Null);
    // test_validation!(String,"MY======",                 B32DecodeError::Null);
    // test_validation!(String,"MZXQ====",                 B32DecodeError::Null);
    // test_validation!(String,"MZXW6===",                 B32DecodeError::Null);
    // test_validation!(String,"MZXW6YQ=",                 B32DecodeError::Null);
    // test_validation!(String,"MZXW6YTB",                 B32DecodeError::Null);
}

#[test]
fn decode(){
    test_decode!(String,String::from("A"),          String::from(""),       B32DecodeError::InvalidLength);
    test_decode!(String,String::from("AA"),         String::from(""),       B32DecodeError::InvalidLength);
    test_decode!(String,String::from("AAA"),        String::from(""),       B32DecodeError::InvalidLength);
    test_decode!(String,String::from("AAAA"),       String::from(""),       B32DecodeError::InvalidLength);
    test_decode!(String,String::from("AAAAA"),      String::from(""),       B32DecodeError::InvalidLength);
    test_decode!(String,String::from("AAAAAA"),     String::from(""),       B32DecodeError::InvalidLength);
    test_decode!(String,String::from("AAAAAAA"),    String::from(""),       B32DecodeError::InvalidLength);
    test_decode!(String,String::from("AAAAAA=="),   String::from(""),       B32DecodeError::InvalidPadding);
    test_decode!(String,String::from("AAA====="),   String::from(""),       B32DecodeError::InvalidPadding);
    test_decode!(String,String::from("A======="),   String::from(""),       B32DecodeError::InvalidPadding);
    test_decode!(String,String::from("========"),   String::from(""),       B32DecodeError::InvalidPadding);
    test_decode!(String,String::from(""),           String::from(""),       B32DecodeError::Null);
    test_decode!(String,String::from("MY======"),   String::from("f"),      B32DecodeError::Null);
    test_decode!(String,String::from("MZXQ===="),   String::from("fo"),     B32DecodeError::Null);
    test_decode!(String,String::from("MZXW6==="),   String::from("foo"),    B32DecodeError::Null);
    test_decode!(String,String::from("MZXW6YQ="),   String::from("foob"),   B32DecodeError::Null);
    test_decode!(String,String::from("MZXW6YTB"),   String::from("fooba"),  B32DecodeError::Null);
}

#[test]
fn unsafe_decode() {
    test_unsafe_decode!(String,String::from(""),            String::from(""));
    test_unsafe_decode!(String,String::from("MY======"),    String::from("f"));
    test_unsafe_decode!(String,String::from("MZXQ===="),    String::from("fo"));
    test_unsafe_decode!(String,String::from("MZXW6==="),    String::from("foo"));
    test_unsafe_decode!(String,String::from("MZXW6YQ="),    String::from("foob"));
    test_unsafe_decode!(String,String::from("MZXW6YTB"),    String::from("fooba"));

    // test_unsafe_decode!(String,"",                          String::from(""));
    // test_unsafe_decode!(String,"MY======",                  String::from("f"));
    // test_unsafe_decode!(String,"MZXQ====",                  String::from("fo"));
    // test_unsafe_decode!(String,"MZXW6===",                  String::from("foo"));
    // test_unsafe_decode!(String,"MZXW6YQ=",                  String::from("foob"));
    // test_unsafe_decode!(String,"MZXW6YTB",                  String::from("fooba"));
}