|
- /*
- * Carla Tests
- * Copyright (C) 2013 Filipe Coelho <falktx@falktx.com>
- *
- * 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()
- {
- // First check, cannot fail
- assert(std::strlen(kBase64) == 64);
-
- // Test regular C strings
- {
- const char strHelloWorld[] = "Hello World\n\0";
- const char b64HelloWorld[] = "SGVsbG8gV29ybGQK\0";
-
- // encode "Hello World" to base64
- size_t bufSize = std::strlen(strHelloWorld);
- char bufEncoded[carla_base64_encoded_len(bufSize) + 1];
- carla_base64_encode((const uint8_t*)strHelloWorld, bufSize, bufEncoded);
- assert(std::strcmp(b64HelloWorld, bufEncoded) == 0);
-
- // decode base64 "SGVsbG8gV29ybGQK" back to "Hello World"
- uint8_t bufDecoded[carla_base64_decoded_max_len(b64HelloWorld)];
- size_t bufDecSize = carla_base64_decode(b64HelloWorld, bufDecoded);
- char strDecoded[bufDecSize+1];
- std::strncpy(strDecoded, (char*)bufDecoded, bufDecSize);
- strDecoded[bufDecSize] = '\0';
- assert(std::strcmp(strHelloWorld, strDecoded) == 0);
- assert(bufSize == bufDecSize);
- }
-
- struct Blob {
- char s[4];
- int i;
- double d;
- void* ptr;
- int32_t i32;
- int64_t i64;
- bool b;
- } blob;
-
- const size_t blobSize = sizeof(Blob);
- carla_zeroStruct<Blob>(blob);
-
- blob.s[0] = '1';
- blob.s[1] = 's';
- blob.s[2] = 't';
- blob.i = 228;
- blob.d = 3.33333333333;
- blob.ptr = (void*)0x500;
- blob.i32 = 32;
- blob.i64 = 64;
- blob.b = true;
-
- // binary -> base64
- char blobEnc[carla_base64_encoded_len(blobSize) + 1];
- carla_base64_encode((const uint8_t*)&blob, blobSize, blobEnc);
- std::printf("BINARY '%s', size:" P_SIZE "\n", blobEnc, blobSize);
-
- {
- // base64 -> binary
- uint8_t blobDec[carla_base64_decoded_max_len(blobEnc)];
- carla_base64_decode(blobEnc, blobDec);
-
- Blob blobTest;
- carla_zeroStruct<Blob>(blobTest);
-
- std::memcpy(&blobTest, blobDec, sizeof(Blob));
- assert(blobTest.s[0] == '1');
- assert(blobTest.s[1] == 's');
- assert(blobTest.s[2] == 't');
- assert(blobTest.i == 228);
- assert(blobTest.d == 3.33333333333);
- assert(blobTest.ptr == (void*)0x500);
- assert(blobTest.i32 == 32);
- assert(blobTest.i64 == 64);
- assert(blobTest.b == true);
- }
-
- {
- // CarlaString usage
- CarlaString string;
- string.importBinaryAsBase64<Blob>(&blob);
- assert(std::strcmp(blobEnc, (const char*)string) == 0);
- assert(std::strlen(blobEnc) == string.length());
-
- Blob* blobNew = string.exportAsBase64Binary<Blob>();
-
- assert(blobNew->s[0] == '1');
- assert(blobNew->s[1] == 's');
- assert(blobNew->s[2] == 't');
- assert(blobNew->i == 228);
- assert(blobNew->d == 3.33333333333);
- assert(blobNew->ptr == (void*)0x500);
- assert(blobNew->i32 == 32);
- assert(blobNew->i64 == 64);
- assert(blobNew->b == true);
-
- delete blobNew;
- }
-
- return 0;
- }
|