1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
use multibase::{decode, encode, Base, Base::*};
fn encode_decode_assert(input: &[u8], test_cases: Vec<(Base, &str)>) {
for (base, output) in test_cases {
assert_eq!(encode(base, input), output);
assert_eq!(decode(output).unwrap(), (base, input.to_vec()));
}
}
#[test]
fn test_bases_code() {
assert_eq!(Identity.code(), '\x00');
assert_eq!(Base2.code(), '0');
}
#[test]
fn test_bases_from_code() {
assert_eq!(Base::from_code('\x00').unwrap(), Identity);
assert_eq!(Base::from_code('0').unwrap(), Base2);
}
#[test]
fn test_round_trip() {
let test_cases: &[&str] = &[
"helloworld",
"we all want decentralization",
"zdj7WfBb6j58iSJuAzDcSZgy2SxFhdpJ4H87uvMpfyN6hRGyH",
];
for case in test_cases {
let encoded = encode(Base58Btc, case);
let decoded = decode(encoded).unwrap();
assert_eq!(decoded, (Base58Btc, case.as_bytes().to_vec()))
}
}
#[test]
fn test_basic() {
let input = b"yes mani !";
let test_cases = vec![
(Identity, "\x00yes mani !"),
(
Base2,
"001111001011001010111001100100000011011010110000101101110011010010010000000100001",
),
(Base8, "7362625631006654133464440102"),
(Base10, "9573277761329450583662625"),
(Base16Lower, "f796573206d616e692021"),
(Base16Upper, "F796573206D616E692021"),
(Base32Lower, "bpfsxgidnmfxgsibb"),
(Base32Upper, "BPFSXGIDNMFXGSIBB"),
(Base32HexLower, "vf5in683dc5n6i811"),
(Base32HexUpper, "VF5IN683DC5N6I811"),
(Base32PadLower, "cpfsxgidnmfxgsibb"),
(Base32PadUpper, "CPFSXGIDNMFXGSIBB"),
(Base32HexPadLower, "tf5in683dc5n6i811"),
(Base32HexPadUpper, "TF5IN683DC5N6I811"),
(Base32Z, "hxf1zgedpcfzg1ebb"),
(Base36Lower, "k2lcpzo5yikidynfl"),
(Base36Upper, "K2LCPZO5YIKIDYNFL"),
(Base58Flickr, "Z7Pznk19XTTzBtx"),
(Base58Btc, "z7paNL19xttacUY"),
(Base64, "meWVzIG1hbmkgIQ"),
(Base64Pad, "MeWVzIG1hbmkgIQ=="),
(Base64Url, "ueWVzIG1hbmkgIQ"),
(Base64UrlPad, "UeWVzIG1hbmkgIQ=="),
];
encode_decode_assert(input, test_cases);
}
#[test]
fn preserves_leading_zero() {
let input = b"\x00yes mani !";
let test_cases = vec![
(Identity, "\x00\x00yes mani !"),
(Base2, "00000000001111001011001010111001100100000011011010110000101101110011010010010000000100001"),
(Base8, "7000745453462015530267151100204"),
(Base10, "90573277761329450583662625"),
(Base16Lower, "f00796573206d616e692021"),
(Base16Upper, "F00796573206D616E692021"),
(Base32Lower, "bab4wk4zanvqw42jaee"),
(Base32Upper, "BAB4WK4ZANVQW42JAEE"),
(Base32HexLower, "v01smasp0dlgmsq9044"),
(Base32HexUpper, "V01SMASP0DLGMSQ9044"),
(Base32PadLower, "cab4wk4zanvqw42jaee======"),
(Base32PadUpper, "CAB4WK4ZANVQW42JAEE======"),
(Base32HexPadLower, "t01smasp0dlgmsq9044======"),
(Base32HexPadUpper, "T01SMASP0DLGMSQ9044======"),
(Base32Z, "hybhskh3ypiosh4jyrr"),
(Base36Lower, "k02lcpzo5yikidynfl"),
(Base36Upper, "K02LCPZO5YIKIDYNFL"),
(Base58Flickr, "Z17Pznk19XTTzBtx"),
(Base58Btc, "z17paNL19xttacUY"),
(Base64, "mAHllcyBtYW5pICE"),
(Base64Pad, "MAHllcyBtYW5pICE="),
(Base64Url, "uAHllcyBtYW5pICE"),
(Base64UrlPad, "UAHllcyBtYW5pICE="),
];
encode_decode_assert(input, test_cases);
}
#[test]
fn preserves_two_leading_zeroes() {
let input = b"\x00\x00yes mani !";
let test_cases = vec![
(Identity, "\x00\x00\x00yes mani !"),
(Base2, "0000000000000000001111001011001010111001100100000011011010110000101101110011010010010000000100001"),
(Base8, "700000171312714403326055632220041"),
(Base10, "900573277761329450583662625"),
(Base16Lower, "f0000796573206d616e692021"),
(Base16Upper, "F0000796573206D616E692021"),
(Base32Lower, "baaahszltebwwc3tjeaqq"),
(Base32Upper, "BAAAHSZLTEBWWC3TJEAQQ"),
(Base32HexLower, "v0007ipbj41mm2rj940gg"),
(Base32HexUpper, "V0007IPBJ41MM2RJ940GG"),
(Base32PadLower, "caaahszltebwwc3tjeaqq===="),
(Base32PadUpper, "CAAAHSZLTEBWWC3TJEAQQ===="),
(Base32HexPadLower, "t0007ipbj41mm2rj940gg===="),
(Base32HexPadUpper, "T0007IPBJ41MM2RJ940GG===="),
(Base32Z, "hyyy813murbssn5ujryoo"),
(Base36Lower, "k002lcpzo5yikidynfl"),
(Base36Upper, "K002LCPZO5YIKIDYNFL"),
(Base58Flickr, "Z117Pznk19XTTzBtx"),
(Base58Btc, "z117paNL19xttacUY"),
(Base64, "mAAB5ZXMgbWFuaSAh"),
(Base64Pad, "MAAB5ZXMgbWFuaSAh"),
(Base64Url, "uAAB5ZXMgbWFuaSAh"),
(Base64UrlPad, "UAAB5ZXMgbWFuaSAh"),
];
encode_decode_assert(input, test_cases);
}
#[test]
fn case_insensitivity() {
let input = b"hello world";
let test_cases = vec![
(Base16Lower, "f68656c6c6f20776F726C64"),
(Base16Upper, "F68656c6c6f20776F726C64"),
(Base32Lower, "bnbswy3dpeB3W64TMMQ"),
(Base32Upper, "Bnbswy3dpeB3W64TMMQ"),
(Base32HexLower, "vd1imor3f41RMUSJCCG"),
(Base32HexUpper, "Vd1imor3f41RMUSJCCG"),
(Base32PadLower, "cnbswy3dpeB3W64TMMQ======"),
(Base32PadUpper, "Cnbswy3dpeB3W64TMMQ======"),
(Base32HexPadLower, "td1imor3f41RMUSJCCG======"),
(Base32HexPadUpper, "Td1imor3f41RMUSJCCG======"),
(Base36Lower, "kfUvrsIvVnfRbjWaJo"),
(Base36Upper, "KfUVrSIVVnFRbJWAJo"),
];
for (base, output) in test_cases {
assert_eq!(decode(output).unwrap(), (base, input.to_vec()));
}
}
|