vstr/tests/01_vstr.c

84 lines
2.3 KiB
C

#include "../include/vstr.h"
#include <stdio.h>
#include <stdlib.h>
#ifdef NDEBUG
#define TEST(expr)
#else
#define TEST(expr) \
do { \
if (expr) { \
printf(__DATE__" " __TIME__ " [%s@%d] " "\x1b[32m" "| PASSED | " "(%s)" "\x1b[0m \n", __FILE__, __LINE__, #expr); \
} else { \
printf(__DATE__" " __TIME__ " [%s@%d] " "\x1b[31m" "| FAILED | " "(%s)" "\x1b[0m \n", __FILE__, __LINE__, #expr); \
} \
} while (0)
#endif
int main(void){
const char *s = "Hello World";
const char *left = " Hello World";
Vstr v = vstr_n(s,strlen(s));
Vstr l = vstr_n(left,strlen(left));
TEST(strncmp(s,v.buf,v.len) == 0);
TEST(strncmp(s,l.buf,l.len) != 0);
l = vstr_trim_left(v);
TEST(strncmp(s,l.buf,l.len) == 0);
Vstr b = vstr_before_delim(l," ");
Vstr a = vstr_after_delim(l," ");
const char *bs = "Hello";
const char *as = "World";
Vstr bc = vstr_n(bs,strlen(bs));
Vstr ac = vstr_n(as,strlen(as));
TEST(strncmp("Hello",b.buf,b.len) == 0);
TEST(strncmp("World",a.buf,a.len) == 0);
TEST(vstr_cmp(b,bc) == 0);
TEST(vstr_cmp(a,ac) == 0);
unsigned char buffer[256];
size_t packed_size = pack_vstr(buffer, &v);
printf("Packed size: %lu bytes\n", packed_size);
Vstr unpacked_vstr;
unpack_vstr(buffer, &unpacked_vstr);
printf("Unpacked string: %s\n", unpacked_vstr.buf);
printf("Unpacked length: %zu\n", unpacked_vstr.len);
free(unpacked_vstr.buf);
Vstr array[] = {
{5, "Hello"},
{7, "World!"},
{6, "Buffer"}
};
size_t count = 3;
unsigned char arr_buffer[1024];
size_t arr_packed_size = pack_vstr_array(arr_buffer, array, count);
printf("Packed size: %lu bytes\n", arr_packed_size);
size_t unpacked_count;
Vstr *unpacked_array = unpack_vstr_array(arr_buffer, &unpacked_count);
if (!unpacked_array) {
printf("Failed to unpack the array.\n");
return 1;
}
printf("Unpacked %zu Vstr elements:\n", unpacked_count);
for (size_t i = 0; i < unpacked_count; i++) {
printf(" [%zu]: %s (len=%zu)\n", i, unpacked_array[i].buf, unpacked_array[i].len);
free(unpacked_array[i].buf); // Free the string data
}
free(unpacked_array);
return EXIT_SUCCESS;
}