Mercurial > libbase64
view test/base64.cpp @ 19:436f5c3243bf
Add C implementation
While here, update years
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 24 Jan 2020 13:57:48 +0100 |
parents | |
children | 2ae35dde6e32 |
line wrap: on
line source
/* * base64.cpp -- main test file for base64 (C version) * * Copyright (c) 2013-2018 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. */ #define BOOST_TEST_MODULE "libbase64" #include <boost/test/unit_test.hpp> #include <string> #include <base64.h> namespace { auto do_encode(const char *str) -> std::string { std::string ret; char buf[5]; while (b64_encode_step(&str, buf)) ret += buf; return ret; } auto do_decode(const char *str) -> std::string { std::string ret; char buf[5]; while (b64_decode_step(&str, buf)) ret += buf; return ret; } BOOST_AUTO_TEST_CASE(lookup) { BOOST_TEST(b64_lookup(0b000000) == 'A'); BOOST_TEST(b64_lookup(0b000001) == 'B'); BOOST_TEST(b64_lookup(0b000010) == 'C'); BOOST_TEST(b64_lookup(0b000011) == 'D'); BOOST_TEST(b64_lookup(0b000100) == 'E'); BOOST_TEST(b64_lookup(0b000101) == 'F'); BOOST_TEST(b64_lookup(0b000110) == 'G'); BOOST_TEST(b64_lookup(0b000111) == 'H'); BOOST_TEST(b64_lookup(0b001000) == 'I'); BOOST_TEST(b64_lookup(0b001001) == 'J'); BOOST_TEST(b64_lookup(0b001010) == 'K'); BOOST_TEST(b64_lookup(0b001011) == 'L'); BOOST_TEST(b64_lookup(0b001100) == 'M'); BOOST_TEST(b64_lookup(0b001101) == 'N'); BOOST_TEST(b64_lookup(0b001110) == 'O'); BOOST_TEST(b64_lookup(0b001111) == 'P'); BOOST_TEST(b64_lookup(0b010000) == 'Q'); BOOST_TEST(b64_lookup(0b010001) == 'R'); BOOST_TEST(b64_lookup(0b010010) == 'S'); BOOST_TEST(b64_lookup(0b010011) == 'T'); BOOST_TEST(b64_lookup(0b010100) == 'U'); BOOST_TEST(b64_lookup(0b010101) == 'V'); BOOST_TEST(b64_lookup(0b010110) == 'W'); BOOST_TEST(b64_lookup(0b010111) == 'X'); BOOST_TEST(b64_lookup(0b011000) == 'Y'); BOOST_TEST(b64_lookup(0b011001) == 'Z'); BOOST_TEST(b64_lookup(0b011010) == 'a'); BOOST_TEST(b64_lookup(0b011011) == 'b'); BOOST_TEST(b64_lookup(0b011100) == 'c'); BOOST_TEST(b64_lookup(0b011101) == 'd'); BOOST_TEST(b64_lookup(0b011110) == 'e'); BOOST_TEST(b64_lookup(0b011111) == 'f'); BOOST_TEST(b64_lookup(0b100000) == 'g'); BOOST_TEST(b64_lookup(0b100001) == 'h'); BOOST_TEST(b64_lookup(0b100010) == 'i'); BOOST_TEST(b64_lookup(0b100011) == 'j'); BOOST_TEST(b64_lookup(0b100100) == 'k'); BOOST_TEST(b64_lookup(0b100101) == 'l'); BOOST_TEST(b64_lookup(0b100110) == 'm'); BOOST_TEST(b64_lookup(0b100111) == 'n'); BOOST_TEST(b64_lookup(0b101000) == 'o'); BOOST_TEST(b64_lookup(0b101001) == 'p'); BOOST_TEST(b64_lookup(0b101010) == 'q'); BOOST_TEST(b64_lookup(0b101011) == 'r'); BOOST_TEST(b64_lookup(0b101100) == 's'); BOOST_TEST(b64_lookup(0b101101) == 't'); BOOST_TEST(b64_lookup(0b101110) == 'u'); BOOST_TEST(b64_lookup(0b101111) == 'v'); BOOST_TEST(b64_lookup(0b110000) == 'w'); BOOST_TEST(b64_lookup(0b110001) == 'x'); BOOST_TEST(b64_lookup(0b110010) == 'y'); BOOST_TEST(b64_lookup(0b110011) == 'z'); BOOST_TEST(b64_lookup(0b110100) == '0'); BOOST_TEST(b64_lookup(0b110101) == '1'); BOOST_TEST(b64_lookup(0b110110) == '2'); BOOST_TEST(b64_lookup(0b110111) == '3'); BOOST_TEST(b64_lookup(0b111000) == '4'); BOOST_TEST(b64_lookup(0b111001) == '5'); BOOST_TEST(b64_lookup(0b111010) == '6'); BOOST_TEST(b64_lookup(0b111011) == '7'); BOOST_TEST(b64_lookup(0b111100) == '8'); BOOST_TEST(b64_lookup(0b111101) == '9'); BOOST_TEST(b64_lookup(0b111110) == '+'); BOOST_TEST(b64_lookup(0b111111) == '/'); } BOOST_AUTO_TEST_CASE(rlookup) { BOOST_TEST(b64_rlookup('A') == 0b000000U); BOOST_TEST(b64_rlookup('B') == 0b000001U); BOOST_TEST(b64_rlookup('C') == 0b000010U); BOOST_TEST(b64_rlookup('D') == 0b000011U); BOOST_TEST(b64_rlookup('E') == 0b000100U); BOOST_TEST(b64_rlookup('F') == 0b000101U); BOOST_TEST(b64_rlookup('G') == 0b000110U); BOOST_TEST(b64_rlookup('H') == 0b000111U); BOOST_TEST(b64_rlookup('I') == 0b001000U); BOOST_TEST(b64_rlookup('J') == 0b001001U); BOOST_TEST(b64_rlookup('K') == 0b001010U); BOOST_TEST(b64_rlookup('L') == 0b001011U); BOOST_TEST(b64_rlookup('M') == 0b001100U); BOOST_TEST(b64_rlookup('N') == 0b001101U); BOOST_TEST(b64_rlookup('O') == 0b001110U); BOOST_TEST(b64_rlookup('P') == 0b001111U); BOOST_TEST(b64_rlookup('Q') == 0b010000U); BOOST_TEST(b64_rlookup('R') == 0b010001U); BOOST_TEST(b64_rlookup('S') == 0b010010U); BOOST_TEST(b64_rlookup('T') == 0b010011U); BOOST_TEST(b64_rlookup('U') == 0b010100U); BOOST_TEST(b64_rlookup('V') == 0b010101U); BOOST_TEST(b64_rlookup('W') == 0b010110U); BOOST_TEST(b64_rlookup('X') == 0b010111U); BOOST_TEST(b64_rlookup('Y') == 0b011000U); BOOST_TEST(b64_rlookup('Z') == 0b011001U); BOOST_TEST(b64_rlookup('a') == 0b011010U); BOOST_TEST(b64_rlookup('b') == 0b011011U); BOOST_TEST(b64_rlookup('c') == 0b011100U); BOOST_TEST(b64_rlookup('d') == 0b011101U); BOOST_TEST(b64_rlookup('e') == 0b011110U); BOOST_TEST(b64_rlookup('f') == 0b011111U); BOOST_TEST(b64_rlookup('g') == 0b100000U); BOOST_TEST(b64_rlookup('h') == 0b100001U); BOOST_TEST(b64_rlookup('i') == 0b100010U); BOOST_TEST(b64_rlookup('j') == 0b100011U); BOOST_TEST(b64_rlookup('k') == 0b100100U); BOOST_TEST(b64_rlookup('l') == 0b100101U); BOOST_TEST(b64_rlookup('m') == 0b100110U); BOOST_TEST(b64_rlookup('n') == 0b100111U); BOOST_TEST(b64_rlookup('o') == 0b101000U); BOOST_TEST(b64_rlookup('p') == 0b101001U); BOOST_TEST(b64_rlookup('q') == 0b101010U); BOOST_TEST(b64_rlookup('r') == 0b101011U); BOOST_TEST(b64_rlookup('s') == 0b101100U); BOOST_TEST(b64_rlookup('t') == 0b101101U); BOOST_TEST(b64_rlookup('u') == 0b101110U); BOOST_TEST(b64_rlookup('v') == 0b101111U); BOOST_TEST(b64_rlookup('w') == 0b110000U); BOOST_TEST(b64_rlookup('x') == 0b110001U); BOOST_TEST(b64_rlookup('y') == 0b110010U); BOOST_TEST(b64_rlookup('z') == 0b110011U); BOOST_TEST(b64_rlookup('0') == 0b110100U); BOOST_TEST(b64_rlookup('1') == 0b110101U); BOOST_TEST(b64_rlookup('2') == 0b110110U); BOOST_TEST(b64_rlookup('3') == 0b110111U); BOOST_TEST(b64_rlookup('4') == 0b111000U); BOOST_TEST(b64_rlookup('5') == 0b111001U); BOOST_TEST(b64_rlookup('6') == 0b111010U); BOOST_TEST(b64_rlookup('7') == 0b111011U); BOOST_TEST(b64_rlookup('8') == 0b111100U); BOOST_TEST(b64_rlookup('9') == 0b111101U); BOOST_TEST(b64_rlookup('+') == 0b111110U); BOOST_TEST(b64_rlookup('/') == 0b111111U); } BOOST_AUTO_TEST_CASE(encode) { BOOST_TEST(do_encode("a") == "YQ=="); BOOST_TEST(do_encode("ab") == "YWI="); BOOST_TEST(do_encode("abc") == "YWJj"); BOOST_TEST(do_encode("hello") == "aGVsbG8="); BOOST_TEST(do_encode("this is a long sentence") == "dGhpcyBpcyBhIGxvbmcgc2VudGVuY2U="); } BOOST_AUTO_TEST_CASE(decode) { BOOST_TEST(do_decode("YQ==") == "a"); BOOST_TEST(do_decode("YWI=") == "ab"); BOOST_TEST(do_decode("YWJj") == "abc"); BOOST_TEST(do_decode("aGVsbG8=") == "hello"); BOOST_TEST(do_decode("dGhpcyBpcyBhIGxvbmcgc2VudGVuY2U=") == "this is a long sentence"); BOOST_TEST(do_decode("V2VsY29tZSB0byBvdXIgc2VydmVyIGR1ZGU=") == "Welcome to our server dude"); } BOOST_AUTO_TEST_CASE(truncated) { BOOST_TEST(do_decode("YW=").empty()); BOOST_TEST(errno == EILSEQ); } BOOST_AUTO_TEST_CASE(invalid) { BOOST_TEST(do_decode("?!").empty()); BOOST_TEST(errno == EILSEQ); } BOOST_AUTO_TEST_CASE(wrong1) { BOOST_TEST(do_decode("=ABC").empty()); BOOST_TEST(errno == EILSEQ); } BOOST_AUTO_TEST_CASE(wrong2) { BOOST_TEST(do_decode("A=BC").empty()); BOOST_TEST(errno == EILSEQ); } BOOST_AUTO_TEST_CASE(wrong3) { BOOST_TEST(do_decode("==BC").empty()); BOOST_TEST(errno == EILSEQ); } BOOST_AUTO_TEST_CASE(wrong4) { BOOST_TEST(do_decode("AB=C").empty()); BOOST_TEST(errno == EILSEQ); } } // !namespace