1 use base64::{
2     alphabet::URL_SAFE, engine::general_purpose::PAD, engine::general_purpose::STANDARD, *,
3 };
4 
compare_encode(expected: &str, target: &[u8])5 fn compare_encode(expected: &str, target: &[u8]) {
6     assert_eq!(expected, STANDARD.encode(target));
7 }
8 
9 #[test]
encode_all_ascii()10 fn encode_all_ascii() {
11     let ascii: Vec<u8> = (0..=127).collect();
12 
13     compare_encode(
14         "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7P\
15          D0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn8\
16          =",
17         &ascii,
18     );
19 }
20 
21 #[test]
encode_all_bytes()22 fn encode_all_bytes() {
23     let bytes: Vec<u8> = (0..=255).collect();
24 
25     compare_encode(
26         "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7P\
27          D0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn\
28          +AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6\
29          /wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==",
30         &bytes,
31     );
32 }
33 
34 #[test]
encode_all_bytes_url()35 fn encode_all_bytes_url() {
36     let bytes: Vec<u8> = (0..=255).collect();
37 
38     assert_eq!(
39         "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0\
40          -P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn\
41          -AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq\
42          -wsbKztLW2t7i5uru8vb6_wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t_g4eLj5OXm5-jp6uvs7e7v8PHy\
43          8_T19vf4-fr7_P3-_w==",
44         &engine::GeneralPurpose::new(&URL_SAFE, PAD).encode(bytes)
45     );
46 }
47 
48 #[test]
encoded_len_unpadded()49 fn encoded_len_unpadded() {
50     assert_eq!(0, encoded_len(0, false).unwrap());
51     assert_eq!(2, encoded_len(1, false).unwrap());
52     assert_eq!(3, encoded_len(2, false).unwrap());
53     assert_eq!(4, encoded_len(3, false).unwrap());
54     assert_eq!(6, encoded_len(4, false).unwrap());
55     assert_eq!(7, encoded_len(5, false).unwrap());
56     assert_eq!(8, encoded_len(6, false).unwrap());
57     assert_eq!(10, encoded_len(7, false).unwrap());
58 }
59 
60 #[test]
encoded_len_padded()61 fn encoded_len_padded() {
62     assert_eq!(0, encoded_len(0, true).unwrap());
63     assert_eq!(4, encoded_len(1, true).unwrap());
64     assert_eq!(4, encoded_len(2, true).unwrap());
65     assert_eq!(4, encoded_len(3, true).unwrap());
66     assert_eq!(8, encoded_len(4, true).unwrap());
67     assert_eq!(8, encoded_len(5, true).unwrap());
68     assert_eq!(8, encoded_len(6, true).unwrap());
69     assert_eq!(12, encoded_len(7, true).unwrap());
70 }
71 #[test]
encoded_len_overflow()72 fn encoded_len_overflow() {
73     let max_size = usize::MAX / 4 * 3 + 2;
74     assert_eq!(2, max_size % 3);
75     assert_eq!(Some(usize::MAX), encoded_len(max_size, false));
76     assert_eq!(None, encoded_len(max_size + 1, false));
77 }
78