Mercurial > code
changeset 242:a9883eeb9757
Add tests for Base64
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 11 Sep 2014 21:09:58 +0200 |
parents | d9409b338f2f |
children | 73e5381d7baf |
files | C++/Base64.h C++/Tests/Base64/CMakeLists.txt C++/Tests/Base64/main.cpp CMakeLists.txt |
diffstat | 4 files changed, 222 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/C++/Base64.h Thu Sep 11 17:22:11 2014 +0200 +++ b/C++/Base64.h Thu Sep 11 21:09:58 2014 +0200 @@ -67,8 +67,8 @@ inputbuf[count] = *input++; *output++ = lookup(inputbuf[0] >> 2 & 0x3f); - *output++ = lookup(inputbuf[0] << 4 & 0x3f | inputbuf[1] >> 4 & 0x0f); - *output++ = (count < 2) ? '=' : lookup(inputbuf[1] << 2 & 0x3c | inputbuf[2] >> 6 & 0x03); + *output++ = lookup((inputbuf[0] << 4 & 0x3f) | (inputbuf[1] >> 4 & 0x0f)); + *output++ = (count < 2) ? '=' : lookup((inputbuf[1] << 2 & 0x3c) | (inputbuf[2] >> 6 & 0x03)); *output++ = (count < 3) ? '=' : lookup(inputbuf[2] & 0x3f); } } @@ -98,12 +98,12 @@ if (count != 4) throw std::invalid_argument("truncated string"); - *output++ = inputbuf[0] << 2 & 0xfc | inputbuf[1] >> 4 & 0x03; + *output++ = (inputbuf[0] << 2 & 0xfc) | (inputbuf[1] >> 4 & 0x03); if (inputbuf[2] != '=') - *output++ = inputbuf[1] << 4 & 0xf0 | inputbuf[2] >> 2 & 0x0f; + *output++ = (inputbuf[1] << 4 & 0xf0) | (inputbuf[2] >> 2 & 0x0f); if (inputbuf[3] != '=') - *output++ = inputbuf[2] << 6 & 0xc0 | inputbuf[3] & 0x3f; + *output++ = (inputbuf[2] << 6 & 0xc0) | (inputbuf[3] & 0x3f); } } @@ -125,4 +125,4 @@ static std::string decode(const std::string &input); }; -#endif // !_BASE_64_H_ \ No newline at end of file +#endif // !_BASE_64_H_
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/C++/Tests/Base64/CMakeLists.txt Thu Sep 11 21:09:58 2014 +0200 @@ -0,0 +1,27 @@ +# +# CMakeLists.txt -- tests for Base64 +# +# Copyright (c) 2013, 2014 David Demelier <markand@malikania.fr> +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +set( + SOURCES + ${code_SOURCE_DIR}/C++/Base64.cpp + ${code_SOURCE_DIR}/C++/Base64.h + main.cpp +) + +define_test(base64 "${SOURCES}") +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/C++/Tests/Base64/main.cpp Thu Sep 11 21:09:58 2014 +0200 @@ -0,0 +1,184 @@ +/* + * main.cpp -- main test file for Base64 + * + * Copyright (c) 2013, 2014 David Demelier <markand@malikania.fr> + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include <gtest/gtest.h> + +#include <Base64.h> + +TEST(Lookup, lookup) +{ + ASSERT_EQ('A', Base64::lookup(0b000000)); + ASSERT_EQ('B', Base64::lookup(0b000001)); + ASSERT_EQ('C', Base64::lookup(0b000010)); + ASSERT_EQ('D', Base64::lookup(0b000011)); + ASSERT_EQ('E', Base64::lookup(0b000100)); + ASSERT_EQ('F', Base64::lookup(0b000101)); + ASSERT_EQ('G', Base64::lookup(0b000110)); + ASSERT_EQ('H', Base64::lookup(0b000111)); + ASSERT_EQ('I', Base64::lookup(0b001000)); + ASSERT_EQ('J', Base64::lookup(0b001001)); + ASSERT_EQ('K', Base64::lookup(0b001010)); + ASSERT_EQ('L', Base64::lookup(0b001011)); + ASSERT_EQ('M', Base64::lookup(0b001100)); + ASSERT_EQ('N', Base64::lookup(0b001101)); + ASSERT_EQ('O', Base64::lookup(0b001110)); + ASSERT_EQ('P', Base64::lookup(0b001111)); + ASSERT_EQ('Q', Base64::lookup(0b010000)); + ASSERT_EQ('R', Base64::lookup(0b010001)); + ASSERT_EQ('S', Base64::lookup(0b010010)); + ASSERT_EQ('T', Base64::lookup(0b010011)); + ASSERT_EQ('U', Base64::lookup(0b010100)); + ASSERT_EQ('V', Base64::lookup(0b010101)); + ASSERT_EQ('W', Base64::lookup(0b010110)); + ASSERT_EQ('X', Base64::lookup(0b010111)); + ASSERT_EQ('Y', Base64::lookup(0b011000)); + ASSERT_EQ('Z', Base64::lookup(0b011001)); + ASSERT_EQ('a', Base64::lookup(0b011010)); + ASSERT_EQ('b', Base64::lookup(0b011011)); + ASSERT_EQ('c', Base64::lookup(0b011100)); + ASSERT_EQ('d', Base64::lookup(0b011101)); + ASSERT_EQ('e', Base64::lookup(0b011110)); + ASSERT_EQ('f', Base64::lookup(0b011111)); + ASSERT_EQ('g', Base64::lookup(0b100000)); + ASSERT_EQ('h', Base64::lookup(0b100001)); + ASSERT_EQ('i', Base64::lookup(0b100010)); + ASSERT_EQ('j', Base64::lookup(0b100011)); + ASSERT_EQ('k', Base64::lookup(0b100100)); + ASSERT_EQ('l', Base64::lookup(0b100101)); + ASSERT_EQ('m', Base64::lookup(0b100110)); + ASSERT_EQ('n', Base64::lookup(0b100111)); + ASSERT_EQ('o', Base64::lookup(0b101000)); + ASSERT_EQ('p', Base64::lookup(0b101001)); + ASSERT_EQ('q', Base64::lookup(0b101010)); + ASSERT_EQ('r', Base64::lookup(0b101011)); + ASSERT_EQ('s', Base64::lookup(0b101100)); + ASSERT_EQ('t', Base64::lookup(0b101101)); + ASSERT_EQ('u', Base64::lookup(0b101110)); + ASSERT_EQ('v', Base64::lookup(0b101111)); + ASSERT_EQ('w', Base64::lookup(0b110000)); + ASSERT_EQ('x', Base64::lookup(0b110001)); + ASSERT_EQ('y', Base64::lookup(0b110010)); + ASSERT_EQ('z', Base64::lookup(0b110011)); + ASSERT_EQ('0', Base64::lookup(0b110100)); + ASSERT_EQ('1', Base64::lookup(0b110101)); + ASSERT_EQ('2', Base64::lookup(0b110110)); + ASSERT_EQ('3', Base64::lookup(0b110111)); + ASSERT_EQ('4', Base64::lookup(0b111000)); + ASSERT_EQ('5', Base64::lookup(0b111001)); + ASSERT_EQ('6', Base64::lookup(0b111010)); + ASSERT_EQ('7', Base64::lookup(0b111011)); + ASSERT_EQ('8', Base64::lookup(0b111100)); + ASSERT_EQ('9', Base64::lookup(0b111101)); + ASSERT_EQ('+', Base64::lookup(0b111110)); + ASSERT_EQ('/', Base64::lookup(0b111111)); +} + +TEST(Lookup, rlookup) +{ + ASSERT_EQ(0b000000, Base64::rlookup('A')); + ASSERT_EQ(0b000001, Base64::rlookup('B')); + ASSERT_EQ(0b000010, Base64::rlookup('C')); + ASSERT_EQ(0b000011, Base64::rlookup('D')); + ASSERT_EQ(0b000100, Base64::rlookup('E')); + ASSERT_EQ(0b000101, Base64::rlookup('F')); + ASSERT_EQ(0b000110, Base64::rlookup('G')); + ASSERT_EQ(0b000111, Base64::rlookup('H')); + ASSERT_EQ(0b001000, Base64::rlookup('I')); + ASSERT_EQ(0b001001, Base64::rlookup('J')); + ASSERT_EQ(0b001010, Base64::rlookup('K')); + ASSERT_EQ(0b001011, Base64::rlookup('L')); + ASSERT_EQ(0b001100, Base64::rlookup('M')); + ASSERT_EQ(0b001101, Base64::rlookup('N')); + ASSERT_EQ(0b001110, Base64::rlookup('O')); + ASSERT_EQ(0b001111, Base64::rlookup('P')); + ASSERT_EQ(0b010000, Base64::rlookup('Q')); + ASSERT_EQ(0b010001, Base64::rlookup('R')); + ASSERT_EQ(0b010010, Base64::rlookup('S')); + ASSERT_EQ(0b010011, Base64::rlookup('T')); + ASSERT_EQ(0b010100, Base64::rlookup('U')); + ASSERT_EQ(0b010101, Base64::rlookup('V')); + ASSERT_EQ(0b010110, Base64::rlookup('W')); + ASSERT_EQ(0b010111, Base64::rlookup('X')); + ASSERT_EQ(0b011000, Base64::rlookup('Y')); + ASSERT_EQ(0b011001, Base64::rlookup('Z')); + ASSERT_EQ(0b011010, Base64::rlookup('a')); + ASSERT_EQ(0b011011, Base64::rlookup('b')); + ASSERT_EQ(0b011100, Base64::rlookup('c')); + ASSERT_EQ(0b011101, Base64::rlookup('d')); + ASSERT_EQ(0b011110, Base64::rlookup('e')); + ASSERT_EQ(0b011111, Base64::rlookup('f')); + ASSERT_EQ(0b100000, Base64::rlookup('g')); + ASSERT_EQ(0b100001, Base64::rlookup('h')); + ASSERT_EQ(0b100010, Base64::rlookup('i')); + ASSERT_EQ(0b100011, Base64::rlookup('j')); + ASSERT_EQ(0b100100, Base64::rlookup('k')); + ASSERT_EQ(0b100101, Base64::rlookup('l')); + ASSERT_EQ(0b100110, Base64::rlookup('m')); + ASSERT_EQ(0b100111, Base64::rlookup('n')); + ASSERT_EQ(0b101000, Base64::rlookup('o')); + ASSERT_EQ(0b101001, Base64::rlookup('p')); + ASSERT_EQ(0b101010, Base64::rlookup('q')); + ASSERT_EQ(0b101011, Base64::rlookup('r')); + ASSERT_EQ(0b101100, Base64::rlookup('s')); + ASSERT_EQ(0b101101, Base64::rlookup('t')); + ASSERT_EQ(0b101110, Base64::rlookup('u')); + ASSERT_EQ(0b101111, Base64::rlookup('v')); + ASSERT_EQ(0b110000, Base64::rlookup('w')); + ASSERT_EQ(0b110001, Base64::rlookup('x')); + ASSERT_EQ(0b110010, Base64::rlookup('y')); + ASSERT_EQ(0b110011, Base64::rlookup('z')); + ASSERT_EQ(0b110100, Base64::rlookup('0')); + ASSERT_EQ(0b110101, Base64::rlookup('1')); + ASSERT_EQ(0b110110, Base64::rlookup('2')); + ASSERT_EQ(0b110111, Base64::rlookup('3')); + ASSERT_EQ(0b111000, Base64::rlookup('4')); + ASSERT_EQ(0b111001, Base64::rlookup('5')); + ASSERT_EQ(0b111010, Base64::rlookup('6')); + ASSERT_EQ(0b111011, Base64::rlookup('7')); + ASSERT_EQ(0b111100, Base64::rlookup('8')); + ASSERT_EQ(0b111101, Base64::rlookup('9')); + ASSERT_EQ(0b111110, Base64::rlookup('+')); + ASSERT_EQ(0b111111, Base64::rlookup('/')); +} + +TEST(Encode, basic) +{ + ASSERT_EQ("YQ==", Base64::encode("a")); + ASSERT_EQ("YWI=", Base64::encode("ab")); + ASSERT_EQ("YWJj", Base64::encode("abc")); + + ASSERT_EQ("aGVsbG8=", Base64::encode("hello")); + ASSERT_EQ("dGhpcyBpcyBhIGxvbmcgc2VudGVuY2U=", Base64::encode("this is a long sentence")); +} + +TEST(Decode, basic) +{ + ASSERT_EQ("a", Base64::decode("YQ==")); + ASSERT_EQ("ab", Base64::decode("YWI=")); + ASSERT_EQ("abc", Base64::decode("YWJj")); + + ASSERT_EQ("hello", Base64::decode("aGVsbG8=")); + ASSERT_EQ("this is a long sentence", Base64::decode("dGhpcyBpcyBhIGxvbmcgc2VudGVuY2U=")); +} + +int main(int argc, char **argv) +{ + testing::InitGoogleTest(&argc, argv); + + return RUN_ALL_TESTS(); +}
--- a/CMakeLists.txt Thu Sep 11 17:22:11 2014 +0200 +++ b/CMakeLists.txt Thu Sep 11 21:09:58 2014 +0200 @@ -56,6 +56,7 @@ add_test(${name}-test ${name}) endfunction() +option(WITH_BASE64 "Enable base64 tests" On) option(WITH_CONVERTER "Enable converter tests" On) option(WITH_DIRECTORY "Enable directory tests" On) option(WITH_DRIVER "Enable SQL drivers tests" On) @@ -70,6 +71,10 @@ option(WITH_XMLPARSER "Enable XML tests" On) option(WITH_XDG "Enable XDG standard directories tests" On) +if (WITH_BASE64) + add_subdirectory(C++/Tests/Base64) +endif () + if (WITH_DIRECTORY) add_subdirectory(C++/Tests/Directory) endif ()