/* * Carla Tests * Copyright (C) 2013 Filipe Coelho * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * For a full copy of the GNU General Public License see the GPL.txt file */ #include "CarlaBase64Utils.hpp" #include "CarlaString.hpp" int main() { CARLA_ASSERT(std::strlen(kBase64) == 64); struct Blob { char s[4]; int i; double d; char padding[100]; void* ptr; Blob() : s{'1', 's', 't', 0}, i(228), d(3.33333333333), ptr((void*)0x500) { carla_zeroMem(padding, sizeof(char)*100); } } blob; // binary -> base64 void* const test0 = &blob; size_t test0Len = sizeof(Blob); char buf0[carla_base64_encoded_len(test0Len) + 1]; carla_base64_encode((const uint8_t*)test0, test0Len, buf0); printf("BINARY '%s'\n", buf0); char buf0dec[carla_base64_decoded_max_len(buf0)+1]; carla_zeroMem(buf0dec, sizeof(buf0dec)); carla_base64_decode(buf0, (uint8_t*)buf0dec); Blob blobTester; blobTester.s[0] = 0; blobTester.i = 0; blobTester.d = 9999.99999999999999; std::memcpy(&blobTester, buf0dec, sizeof(Blob)); CARLA_ASSERT(std::strcmp(blobTester.s, "1st") == 0); CARLA_ASSERT(blobTester.i == 228); CARLA_ASSERT(blobTester.d == 3.33333333333); // string -> base64 const char* const test1 = "Hello World!"; size_t test1Len = std::strlen(test1); char buf1[carla_base64_encoded_len(test1Len) + 1]; carla_base64_encode((const uint8_t*)test1, test1Len, buf1); printf("'%s' => '%s'\n", test1, buf1); // base64 -> string const char* const test2 = "SGVsbG8gV29ybGQh"; char buf2[carla_base64_decoded_max_len(test2)+1]; carla_zeroMem(buf2, sizeof(buf2)); carla_base64_decode(test2, (uint8_t*)buf2); printf("'%s' => '%s'\n", test2, buf2); printf("'%s' == '%s'\n", buf1, test2); printf("'%s' == '%s'\n", buf2, test1); CARLA_ASSERT(std::strcmp(buf1, test2) == 0); CARLA_ASSERT(std::strcmp(buf2, test1) == 0); // ----------------------------------------------------------------- blob.s[0] = 'X'; blob.i = 92320; blob.d = 9999887.99999999999999; CarlaString string; string.importBinaryAsBase64(&blob); Blob* blob3 = string.exportAsBase64Binary(); CARLA_ASSERT(std::strcmp(blob3->s, blob.s) == 0); CARLA_ASSERT(blob3->i == blob.i); CARLA_ASSERT(blob3->d == blob.d); CARLA_ASSERT(blob3->ptr == blob.ptr); delete blob3; // ----------------------------------------------------------------- return 0; }