diff options
author | dzwdz | 2023-08-14 18:51:07 +0200 |
---|---|---|
committer | dzwdz | 2023-08-14 18:51:07 +0200 |
commit | 642b5fb0007b64c77d186fcb018d571152ee1d47 (patch) | |
tree | 1c466461f3602d306be309a053edae558ef2568e /src/cmd/tests/shared/printf.c | |
parent | 8050069c57b729c18c19b1a03ab6e4bf63b4735e (diff) |
reorganization: first steps
Diffstat (limited to 'src/cmd/tests/shared/printf.c')
-rw-r--r-- | src/cmd/tests/shared/printf.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/cmd/tests/shared/printf.c b/src/cmd/tests/shared/printf.c new file mode 100644 index 0000000..d8df48a --- /dev/null +++ b/src/cmd/tests/shared/printf.c @@ -0,0 +1,55 @@ +#include "../tests.h" +#include <stdio.h> +#include <string.h> + +#pragma GCC diagnostic ignored "-Wformat-truncation" + +static void test_printf(void) { + char buf[64]; + memset(buf, '?', 64); + + /* test proper overflow handling in snprintf */ + test(13 == snprintf(buf, 15, "That's 0x%x", 0x1337)); + test(!memcmp(buf, "That's 0x1337\0??", 16)); + test(17 == snprintf(buf, 15, "%05x %05x %05x", 0, 0, 0)); + test(!memcmp(buf, "00000 00000 00\0?", 16)); + + /* all the other stuff */ + snprintf(buf, sizeof buf, "%010x", 0x1BABE); + test(!strcmp(buf, "000001babe")); + snprintf(buf, sizeof buf, "%10x", 0x1BABE); + test(!strcmp(buf, " 1babe")); + snprintf(buf, sizeof buf, "%10s", "hello"); + test(!strcmp(buf, " hello")); + + snprintf(buf, sizeof buf, "%s%%%s", "ab", "cd"); + test(!strcmp(buf, "ab%cd")); + + snprintf(buf, sizeof buf, "%05u,%05u", 1234, 56789); + test(!strcmp(buf, "01234,56789")); + + snprintf(buf, sizeof buf, "%5d,%5d", 123, 4567); + test(!strcmp(buf, " 123, 4567")); + snprintf(buf, sizeof buf, "%5d,%5d", -123, -4567); + test(!strcmp(buf, " -123,-4567")); + + snprintf(buf, sizeof buf, "%u,%d,%x", 0, 0, 0); + test(!strcmp(buf, "0,0,0")); + + /* precision */ + snprintf(buf, sizeof buf, "%5.2u,%5.2d,%5.2x", 0, 0, 0); + test(!strcmp(buf, " 00, 00, 00")); + snprintf(buf, sizeof buf, "%5.2u,%5.2d,%5.2x", 10, -10, 0x10); + test(!strcmp(buf, " 10, -10, 10")); + snprintf(buf, sizeof buf, "%5.3d", -1); + test(!strcmp(buf, " -001")); + snprintf(buf, sizeof buf, "%.5d", 123); + test(!strcmp(buf, "00123")); + + snprintf(buf, sizeof buf, "%.1s,%.10s,%.*s", "hello", "hello", 3, "hello"); + test(!strcmp(buf, "h,hello,hel")); +} + +void r_s_printf(void) { + run_test(test_printf); +} |