Implement Base64 encoding function

This commit is contained in:
2020-11-01 17:58:05 +01:00
commit 2035cf0ad8
10 changed files with 18289 additions and 0 deletions

9
test/CMakeLists.txt Normal file
View File

@@ -0,0 +1,9 @@
project(base64-test)
add_custom_target(test "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}" "-r compact" "-s" DEPENDS ${PROJECT_NAME})
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/catch-framework")
aux_source_directory("src" TEST_SOURCES)
add_executable(${PROJECT_NAME} ${TEST_SOURCES})
target_link_libraries(${PROJECT_NAME} base64-lib)

17618
test/catch-framework/catch.hpp Normal file

File diff suppressed because it is too large Load Diff

2
test/src/test-main.cpp Normal file
View File

@@ -0,0 +1,2 @@
#define CATCH_CONFIG_MAIN
#include <catch.hpp>

75
test/src/tests.cpp Normal file
View File

@@ -0,0 +1,75 @@
#include <catch.hpp>
#include <string>
#include <iostream>
extern "C" {
#include <base64-lib/base64-lib.h>
}
std::string lorem_ipsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque tristique eu nibh eget efficitur."
" Proin pretium, massa in varius malesuada, purus ante pellentesque libero, ut dictum justo enim vel elit."
" Nullam convallis lectus non placerat lobortis. Aliquam consequat mi nulla, eget ultricies nibh ullamcorper at."
" Ut vitae commodo tellus, ut tempor lectus. Etiam vel cursus purus. Etiam ac sagittis nisl, ac mollis mauris."
" Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos."
" Fusce imperdiet malesuada tellus sit amet hendrerit."
" Suspendisse et lacus vehicula, viverra mauris id, scelerisque diam."
" Donec hendrerit mattis neque, non iaculis nisi accumsan quis.";
std::string base64_reference = "TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4g"
"UXVpc3F1ZSB0cmlzdGlxdWUgZXUgbmliaCBlZ2V0IGVmZmljaXR1ci4gUHJvaW4gcHJldGl1bSwg"
"bWFzc2EgaW4gdmFyaXVzIG1hbGVzdWFkYSwgcHVydXMgYW50ZSBwZWxsZW50ZXNxdWUgbGliZXJv"
"LCB1dCBkaWN0dW0ganVzdG8gZW5pbSB2ZWwgZWxpdC4gTnVsbGFtIGNvbnZhbGxpcyBsZWN0dXMg"
"bm9uIHBsYWNlcmF0IGxvYm9ydGlzLiBBbGlxdWFtIGNvbnNlcXVhdCBtaSBudWxsYSwgZWdldCB1"
"bHRyaWNpZXMgbmliaCB1bGxhbWNvcnBlciBhdC4gVXQgdml0YWUgY29tbW9kbyB0ZWxsdXMsIHV0"
"IHRlbXBvciBsZWN0dXMuIEV0aWFtIHZlbCBjdXJzdXMgcHVydXMuIEV0aWFtIGFjIHNhZ2l0dGlz"
"IG5pc2wsIGFjIG1vbGxpcyBtYXVyaXMuIENsYXNzIGFwdGVudCB0YWNpdGkgc29jaW9zcXUgYWQg"
"bGl0b3JhIHRvcnF1ZW50IHBlciBjb251YmlhIG5vc3RyYSwgcGVyIGluY2VwdG9zIGhpbWVuYWVv"
"cy4gRnVzY2UgaW1wZXJkaWV0IG1hbGVzdWFkYSB0ZWxsdXMgc2l0IGFtZXQgaGVuZHJlcml0LiBT"
"dXNwZW5kaXNzZSBldCBsYWN1cyB2ZWhpY3VsYSwgdml2ZXJyYSBtYXVyaXMgaWQsIHNjZWxlcmlz"
"cXVlIGRpYW0uIERvbmVjIGhlbmRyZXJpdCBtYXR0aXMgbmVxdWUsIG5vbiBpYWN1bGlzIG5pc2kg"
"YWNjdW1zYW4gcXVpcy4=";
TEST_CASE("base64/encode", "[ENCODE]")
{
int res;
char base64_encoded[2048];
size_t output_len;
res = base64_encode(lorem_ipsum.c_str(), base64_encoded, lorem_ipsum.length(), sizeof(base64_encoded), &output_len);
REQUIRE(res == 0);
if (!res) {
base64_encoded[output_len] = 0;
REQUIRE(output_len == base64_reference.length());
REQUIRE(base64_reference == std::string(base64_encoded));
}
}
TEST_CASE("base64/encoded_size_calc", "[ENCODE]")
{
size_t res;
res = base64_calculate_encoded_size(1U);
REQUIRE(res == 4);
res = base64_calculate_encoded_size(2U);
REQUIRE(res == 4);
res = base64_calculate_encoded_size(3U);
REQUIRE(res == 4);
res = base64_calculate_encoded_size(4U);
REQUIRE(res == 8);
res = base64_calculate_encoded_size(120U);
REQUIRE(res == 160);
res = base64_calculate_encoded_size(119U);
REQUIRE(res == 160);
}
TEST_CASE("base64/base64_calculate_maximum_decoded_size", "[DECODE]")
{
REQUIRE(base64_calculate_maximum_decoded_size(3) == 0);
REQUIRE(base64_calculate_maximum_decoded_size(4) == 3);
REQUIRE(base64_calculate_maximum_decoded_size(160) == 120);
}