File: lib.rs

package info (click to toggle)
rust-multibase 0.9.1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 132 kB
  • sloc: makefile: 2
file content (154 lines) | stat: -rw-r--r-- 5,681 bytes parent folder | download
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()));
    }
}