scratch/misc/nstr/nstr_test.c
2025-04-05 19:31:25 -03:00

81 lines
1.9 KiB
C

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#define NSTR_IMPLEMENTATION
#define NSTR_LEN_TYPE size_t
#include "nstr.h"
#define tmsg(s) fputs(s "... ", stderr)
#define tpass() fputs("passed\n", stderr)
int
main(void)
{
{
tmsg("String heap allocation with copy");
const char *cs1 = "hello woooooooooooooooorld aaaaaa!!!!aaaaaaaaaaaaaaaaaa";
size_t cs1len = strlen(cs1);
Str s1 = nstr_new(cs1, cs1len);
s1.len = cs1len;
assert(!nstr_is_null(s1)); /* ensure allocation success */
assert(s1.s[s1.len] == '\0');
assert(s1.len == cs1len);
assert(memcmp(s1.s, cs1, s1.len) == 0);
nstr_free(s1);
tpass();
}
{
tmsg("nstr_afmt");
Str s1 = nstr_afmt("%s/file/path/to/%s_%d", "/var", "log", 3129);
Str s2 = nstr_from_c("/var/file/path/to/log_3129");
assert(nstr_equal(s1, s2));
nstr_free(s1);
tpass();
}
{
tmsg("nstr_fmt");
Str buf = { .s = (char [128]){0}, .cap = 128 };
Str s1 = nstr_fmt(buf, "%s/file/path/to/%s_%d", "/var", "log", 3129);
Str s2 = nstr_from_c("/var/file/path/to/log_3129");
assert(nstr_equal(s1, s2));
tpass();
}
{
tmsg("nstr_append with truncation");
Str s1 = { .s = (char [12]){0}, .cap = 12 };
Str s2 = nstr_from_c("abcde");
s1 = nstr_append(s1, s2, NSTR_TRUNCATE);
assert(nstr_equal(s1, s2));
s1 = nstr_append(s1, s2, NSTR_TRUNCATE);
assert(nstr_equal(s1, nstr_from_c("abcdeabcde")));
s1 = nstr_append(s1, s2, NSTR_TRUNCATE);
assert(nstr_equal(s1, nstr_from_c("abcdeabcdea")));
tpass();
}
{
tmsg("nstr_append with resizing");
Str s1 = nstr_new(NULL, 8);
s1 = nstr_append(s1, nstr_from_c("ABCDEFGHIJ"), NSTR_RESIZE);
s1 = nstr_append(s1, nstr_from_c("KLMNOP"), NSTR_RESIZE);
s1 = nstr_append(s1, nstr_from_c("QRSTUVWXYZ"), NSTR_RESIZE);
assert(nstr_equal(s1, nstr_from_c("ABCDEFGHIJKLMNOPQRSTUVWXYZ")));
nstr_free(s1);
tpass();
}
return 0;
}