More tests for "printf"

This commit is contained in:
Alex Kotov 2022-01-20 16:58:08 +05:00
parent edf40ddb83
commit 16c164754e
Signed by: kotovalexarian
GPG Key ID: 553C0EBBEB5D5F08
3 changed files with 41 additions and 13 deletions

View File

@ -7,18 +7,28 @@
#define BUFFER_SIZE 1024
static const char *const data = "foobar";
static char buffer[BUFFER_SIZE];
static size_t buffer_index = 0;
static void my_putchar(const char chr, void *arg __attribute__((unused)))
static void my_putchar(const char chr, void *arg)
{
assert(arg == data);
if (buffer_index >= BUFFER_SIZE) abort();
buffer[buffer_index++] = chr;
}
int main()
{
kernaux_printf(my_putchar, NULL, "Hello, %s! Session ID: %u.", "Alex", 123);
const int result = kernaux_printf(
my_putchar,
(char*)data,
"Hello, %s! Session ID: %u.",
"Alex",
123
);
assert((size_t)result == strlen(buffer));
assert(strcmp(buffer, "Hello, Alex! Session ID: 123.") == 0);
return 0;
}

View File

@ -7,26 +7,31 @@
#define BUFFER_SIZE 1024
static const char *const data = "foobar";
static char buffer[BUFFER_SIZE];
static size_t buffer_index = 0;
static void my_putchar(const char chr, void *arg __attribute__((unused)))
static void my_putchar(const char chr, void *arg)
{
assert(arg == data);
if (buffer_index >= BUFFER_SIZE) abort();
buffer[buffer_index++] = chr;
}
static void my_printf(const char *const format, ...)
static int my_printf(const char *const format, ...)
{
va_list va;
va_start(va, format);
kernaux_vprintf(my_putchar, NULL, format, va);
const int result = kernaux_vprintf(my_putchar, (char*)data, format, va);
va_end(va);
return result;
}
int main()
{
my_printf("Hello, %s! Session ID: %u.", "Alex", 123);
const int result = my_printf("Hello, %s! Session ID: %u.", "Alex", 123);
assert((size_t)result == strlen(buffer));
assert(strcmp(buffer, "Hello, Alex! Session ID: 123.") == 0);
return 0;
}

View File

@ -11,13 +11,15 @@
#define BUFFER_SIZE 1024
static const char *const data = "foobar";
static char buffer[BUFFER_SIZE];
static size_t buffer_index;
static void test_putchar(
const char chr,
void *const arg __attribute__((unused))
) {
static void test_putchar(const char chr, void *const arg)
{
assert(arg == data);
if (buffer_index >= BUFFER_SIZE) {
printf("Buffer overflow!\n");
abort();
@ -28,12 +30,23 @@ static void test_putchar(
static void test(const char *const expected, const char *const format, ...)
{
va_list va;
int result;
memset(buffer, '\0', sizeof(buffer));
buffer_index = 0;
va_list va;
va_start(va, format);
kernaux_vprintf(test_putchar, NULL, format, va);
result = kernaux_vprintf(test_putchar, (char*)data, format, va);
va_end(va);
assert((size_t)result == strlen(expected));
assert(strcmp(expected, buffer) == 0);
memset(buffer, '\0', sizeof(buffer));
buffer_index = 0;
va_start(va, format);
result = kernaux_vsnprintf(buffer, sizeof(buffer), format, va);
va_end(va);
assert((size_t)result == strlen(expected));
assert(strcmp(expected, buffer) == 0);
}
@ -41,7 +54,7 @@ int main()
{
memset(buffer, '\0', sizeof(buffer));
buffer_index = 0;
kernaux_printf(test_putchar, NULL, "Hello, World!");
kernaux_printf(test_putchar, (char*)data, "Hello, World!");
assert(strcmp("Hello, World!", buffer) == 0);
test("", "");