comparison modules/base64/test/main.cpp @ 517:00f1789a49fa

Base64: resurrection
author David Demelier <markand@malikania.fr>
date Wed, 01 Jun 2016 16:19:49 +0200
parents
children f48bb09bccc7
comparison
equal deleted inserted replaced
516:cc50a80dc163 517:00f1789a49fa
1 /*
2 * main.cpp -- main test file for base64
3 *
4 * Copyright (c) 2013-2016 David Demelier <markand@malikania.fr>
5 *
6 * Permission to use, copy, modify, and/or distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19 #include <gtest/gtest.h>
20
21 #include <base64.hpp>
22
23 TEST(Lookup, lookup)
24 {
25 ASSERT_EQ('A', base64::lookup(0b000000));
26 ASSERT_EQ('B', base64::lookup(0b000001));
27 ASSERT_EQ('C', base64::lookup(0b000010));
28 ASSERT_EQ('D', base64::lookup(0b000011));
29 ASSERT_EQ('E', base64::lookup(0b000100));
30 ASSERT_EQ('F', base64::lookup(0b000101));
31 ASSERT_EQ('G', base64::lookup(0b000110));
32 ASSERT_EQ('H', base64::lookup(0b000111));
33 ASSERT_EQ('I', base64::lookup(0b001000));
34 ASSERT_EQ('J', base64::lookup(0b001001));
35 ASSERT_EQ('K', base64::lookup(0b001010));
36 ASSERT_EQ('L', base64::lookup(0b001011));
37 ASSERT_EQ('M', base64::lookup(0b001100));
38 ASSERT_EQ('N', base64::lookup(0b001101));
39 ASSERT_EQ('O', base64::lookup(0b001110));
40 ASSERT_EQ('P', base64::lookup(0b001111));
41 ASSERT_EQ('Q', base64::lookup(0b010000));
42 ASSERT_EQ('R', base64::lookup(0b010001));
43 ASSERT_EQ('S', base64::lookup(0b010010));
44 ASSERT_EQ('T', base64::lookup(0b010011));
45 ASSERT_EQ('U', base64::lookup(0b010100));
46 ASSERT_EQ('V', base64::lookup(0b010101));
47 ASSERT_EQ('W', base64::lookup(0b010110));
48 ASSERT_EQ('X', base64::lookup(0b010111));
49 ASSERT_EQ('Y', base64::lookup(0b011000));
50 ASSERT_EQ('Z', base64::lookup(0b011001));
51 ASSERT_EQ('a', base64::lookup(0b011010));
52 ASSERT_EQ('b', base64::lookup(0b011011));
53 ASSERT_EQ('c', base64::lookup(0b011100));
54 ASSERT_EQ('d', base64::lookup(0b011101));
55 ASSERT_EQ('e', base64::lookup(0b011110));
56 ASSERT_EQ('f', base64::lookup(0b011111));
57 ASSERT_EQ('g', base64::lookup(0b100000));
58 ASSERT_EQ('h', base64::lookup(0b100001));
59 ASSERT_EQ('i', base64::lookup(0b100010));
60 ASSERT_EQ('j', base64::lookup(0b100011));
61 ASSERT_EQ('k', base64::lookup(0b100100));
62 ASSERT_EQ('l', base64::lookup(0b100101));
63 ASSERT_EQ('m', base64::lookup(0b100110));
64 ASSERT_EQ('n', base64::lookup(0b100111));
65 ASSERT_EQ('o', base64::lookup(0b101000));
66 ASSERT_EQ('p', base64::lookup(0b101001));
67 ASSERT_EQ('q', base64::lookup(0b101010));
68 ASSERT_EQ('r', base64::lookup(0b101011));
69 ASSERT_EQ('s', base64::lookup(0b101100));
70 ASSERT_EQ('t', base64::lookup(0b101101));
71 ASSERT_EQ('u', base64::lookup(0b101110));
72 ASSERT_EQ('v', base64::lookup(0b101111));
73 ASSERT_EQ('w', base64::lookup(0b110000));
74 ASSERT_EQ('x', base64::lookup(0b110001));
75 ASSERT_EQ('y', base64::lookup(0b110010));
76 ASSERT_EQ('z', base64::lookup(0b110011));
77 ASSERT_EQ('0', base64::lookup(0b110100));
78 ASSERT_EQ('1', base64::lookup(0b110101));
79 ASSERT_EQ('2', base64::lookup(0b110110));
80 ASSERT_EQ('3', base64::lookup(0b110111));
81 ASSERT_EQ('4', base64::lookup(0b111000));
82 ASSERT_EQ('5', base64::lookup(0b111001));
83 ASSERT_EQ('6', base64::lookup(0b111010));
84 ASSERT_EQ('7', base64::lookup(0b111011));
85 ASSERT_EQ('8', base64::lookup(0b111100));
86 ASSERT_EQ('9', base64::lookup(0b111101));
87 ASSERT_EQ('+', base64::lookup(0b111110));
88 ASSERT_EQ('/', base64::lookup(0b111111));
89 }
90
91 TEST(Lookup, rlookup)
92 {
93 ASSERT_EQ(0b000000U, base64::rlookup('A'));
94 ASSERT_EQ(0b000001U, base64::rlookup('B'));
95 ASSERT_EQ(0b000010U, base64::rlookup('C'));
96 ASSERT_EQ(0b000011U, base64::rlookup('D'));
97 ASSERT_EQ(0b000100U, base64::rlookup('E'));
98 ASSERT_EQ(0b000101U, base64::rlookup('F'));
99 ASSERT_EQ(0b000110U, base64::rlookup('G'));
100 ASSERT_EQ(0b000111U, base64::rlookup('H'));
101 ASSERT_EQ(0b001000U, base64::rlookup('I'));
102 ASSERT_EQ(0b001001U, base64::rlookup('J'));
103 ASSERT_EQ(0b001010U, base64::rlookup('K'));
104 ASSERT_EQ(0b001011U, base64::rlookup('L'));
105 ASSERT_EQ(0b001100U, base64::rlookup('M'));
106 ASSERT_EQ(0b001101U, base64::rlookup('N'));
107 ASSERT_EQ(0b001110U, base64::rlookup('O'));
108 ASSERT_EQ(0b001111U, base64::rlookup('P'));
109 ASSERT_EQ(0b010000U, base64::rlookup('Q'));
110 ASSERT_EQ(0b010001U, base64::rlookup('R'));
111 ASSERT_EQ(0b010010U, base64::rlookup('S'));
112 ASSERT_EQ(0b010011U, base64::rlookup('T'));
113 ASSERT_EQ(0b010100U, base64::rlookup('U'));
114 ASSERT_EQ(0b010101U, base64::rlookup('V'));
115 ASSERT_EQ(0b010110U, base64::rlookup('W'));
116 ASSERT_EQ(0b010111U, base64::rlookup('X'));
117 ASSERT_EQ(0b011000U, base64::rlookup('Y'));
118 ASSERT_EQ(0b011001U, base64::rlookup('Z'));
119 ASSERT_EQ(0b011010U, base64::rlookup('a'));
120 ASSERT_EQ(0b011011U, base64::rlookup('b'));
121 ASSERT_EQ(0b011100U, base64::rlookup('c'));
122 ASSERT_EQ(0b011101U, base64::rlookup('d'));
123 ASSERT_EQ(0b011110U, base64::rlookup('e'));
124 ASSERT_EQ(0b011111U, base64::rlookup('f'));
125 ASSERT_EQ(0b100000U, base64::rlookup('g'));
126 ASSERT_EQ(0b100001U, base64::rlookup('h'));
127 ASSERT_EQ(0b100010U, base64::rlookup('i'));
128 ASSERT_EQ(0b100011U, base64::rlookup('j'));
129 ASSERT_EQ(0b100100U, base64::rlookup('k'));
130 ASSERT_EQ(0b100101U, base64::rlookup('l'));
131 ASSERT_EQ(0b100110U, base64::rlookup('m'));
132 ASSERT_EQ(0b100111U, base64::rlookup('n'));
133 ASSERT_EQ(0b101000U, base64::rlookup('o'));
134 ASSERT_EQ(0b101001U, base64::rlookup('p'));
135 ASSERT_EQ(0b101010U, base64::rlookup('q'));
136 ASSERT_EQ(0b101011U, base64::rlookup('r'));
137 ASSERT_EQ(0b101100U, base64::rlookup('s'));
138 ASSERT_EQ(0b101101U, base64::rlookup('t'));
139 ASSERT_EQ(0b101110U, base64::rlookup('u'));
140 ASSERT_EQ(0b101111U, base64::rlookup('v'));
141 ASSERT_EQ(0b110000U, base64::rlookup('w'));
142 ASSERT_EQ(0b110001U, base64::rlookup('x'));
143 ASSERT_EQ(0b110010U, base64::rlookup('y'));
144 ASSERT_EQ(0b110011U, base64::rlookup('z'));
145 ASSERT_EQ(0b110100U, base64::rlookup('0'));
146 ASSERT_EQ(0b110101U, base64::rlookup('1'));
147 ASSERT_EQ(0b110110U, base64::rlookup('2'));
148 ASSERT_EQ(0b110111U, base64::rlookup('3'));
149 ASSERT_EQ(0b111000U, base64::rlookup('4'));
150 ASSERT_EQ(0b111001U, base64::rlookup('5'));
151 ASSERT_EQ(0b111010U, base64::rlookup('6'));
152 ASSERT_EQ(0b111011U, base64::rlookup('7'));
153 ASSERT_EQ(0b111100U, base64::rlookup('8'));
154 ASSERT_EQ(0b111101U, base64::rlookup('9'));
155 ASSERT_EQ(0b111110U, base64::rlookup('+'));
156 ASSERT_EQ(0b111111U, base64::rlookup('/'));
157 }
158
159 TEST(Encode, basic)
160 {
161 ASSERT_EQ("YQ==", base64::encode("a"));
162 ASSERT_EQ("YWI=", base64::encode("ab"));
163 ASSERT_EQ("YWJj", base64::encode("abc"));
164 ASSERT_EQ("aGVsbG8=", base64::encode("hello"));
165 ASSERT_EQ("dGhpcyBpcyBhIGxvbmcgc2VudGVuY2U=", base64::encode("this is a long sentence"));
166 }
167
168 TEST(Decode, basic)
169 {
170 ASSERT_EQ("a", base64::decode("YQ=="));
171 ASSERT_EQ("ab", base64::decode("YWI="));
172 ASSERT_EQ("abc", base64::decode("YWJj"));
173 ASSERT_EQ("hello", base64::decode("aGVsbG8="));
174 ASSERT_EQ("this is a long sentence", base64::decode("dGhpcyBpcyBhIGxvbmcgc2VudGVuY2U="));
175 ASSERT_EQ("Welcome to our server dude", base64::decode("V2VsY29tZSB0byBvdXIgc2VydmVyIGR1ZGU="));
176 }
177
178 TEST(Failure, truncated)
179 {
180 ASSERT_THROW(base64::decode("YW="), std::invalid_argument);
181 }
182
183 TEST(Failure, invalid)
184 {
185 ASSERT_THROW(base64::decode("?!"), std::invalid_argument);
186 }
187
188 TEST(Failure, wrong1)
189 {
190 ASSERT_THROW(base64::decode("=ABC"), std::invalid_argument);
191 }
192
193 TEST(Failure, wrong2)
194 {
195 ASSERT_THROW(base64::decode("A=BC"), std::invalid_argument);
196 }
197
198 TEST(Failure, wrong3)
199 {
200 ASSERT_THROW(base64::decode("==BC"), std::invalid_argument);
201 }
202
203 TEST(Failure, wrong4)
204 {
205 ASSERT_THROW(base64::decode("AB=C"), std::invalid_argument);
206 }
207
208 int main(int argc, char **argv)
209 {
210 testing::InitGoogleTest(&argc, argv);
211
212 return RUN_ALL_TESTS();
213 }