📄 tst-strftime.c
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>static struct{ const char *fmt; size_t min; size_t max;} tests[] = { { "%2000Y", 2000, 4000 }, { "%02000Y", 2000, 4000 }, { "%_2000Y", 2000, 4000 }, { "%-2000Y", 2000, 4000 }, };#define ntests (sizeof (tests) / sizeof (tests[0]))static intdo_test (void){ size_t cnt; int result = 0; time_t tnow = time (NULL); struct tm *now = localtime (&tnow); for (cnt = 0; cnt < ntests; ++cnt) { size_t size = 0; int res; char *buf = NULL; do { size += 500; buf = (char *) realloc (buf, size); if (buf == NULL) { puts ("out of memory"); exit (1); } res = strftime (buf, size, tests[cnt].fmt, now); if (res != 0) break; } while (size < tests[cnt].max); if (res == 0) { printf ("%Zu: %s: res == 0 despite size == %Zu\n", cnt, tests[cnt].fmt, size); result = 1; } else if (size < tests[cnt].min) { printf ("%Zu: %s: size == %Zu was enough\n", cnt, tests[cnt].fmt, size); result = 1; } else printf ("%Zu: %s: size == %Zu: OK\n", cnt, tests[cnt].fmt, size); free (buf); } struct tm ttm = { /* Initialize the fields which are needed in the tests. */ .tm_mday = 1, .tm_hour = 2 }; const struct { const char *fmt; const char *exp; size_t n; } ftests[] = { { "%-e", "1", 1 }, { "%-k", "2", 1 }, { "%-l", "2", 1 }, };#define nftests (sizeof (ftests) / sizeof (ftests[0])) for (cnt = 0; cnt < nftests; ++cnt) { char buf[100]; size_t r = strftime (buf, sizeof (buf), ftests[cnt].fmt, &ttm); if (r != ftests[cnt].n) { printf ("strftime(\"%s\") returned %zu not %zu\n", ftests[cnt].fmt, r, ftests[cnt].n); result = 1; } if (strcmp (buf, ftests[cnt].exp) != 0) { printf ("strftime(\"%s\") produced \"%s\" not \"%s\"\n", ftests[cnt].fmt, buf, ftests[cnt].exp); result = 1; } } return result;}#define TEST_FUNCTION do_test ()#include "../test-skeleton.c"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -