81 lines
1.9 KiB
C
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;
|
|
}
|