27#define INT_MIN_DEZ_STR "2147483648"
28#define INT_MAX_DEZ_STR "2147483647"
29#define UINT_MAX_DEZ_STR "4294967295"
30#define INT_HEXDIG "fffffff"
31#define INT_OCTDIG "37777777777"
33#define _SCAN_TEST(rc, input, fmt, ...) \
36 int ret = sscanf(input, fmt, ##__VA_ARGS__); \
39 LOG_ERR("_SCAN_TEST failed at line %d: expected %d, got %d\n", __LINE__, rc, ret); \
44static inline uint64_t _test_scan_iter(
void)
53 _SCAN_TEST(1,
"foo",
"%3c",
buffer);
57 _SCAN_TEST(1,
"%x",
"%%%c%n",
buffer, &n);
61 _SCAN_TEST(0,
"abcdefg",
"%*[cba]%n", &n);
63 _SCAN_TEST(0,
"foo",
"%*s%n", &n);
65 _SCAN_TEST(0,
"abc",
"%*c%n", &n);
67 _SCAN_TEST(1,
"3xfoo",
"%*dx%3c",
buffer);
71 _SCAN_TEST(1,
"-" INT_MIN_DEZ_STR,
"%d", &i);
73 _SCAN_TEST(1, INT_MAX_DEZ_STR,
"%d", &i);
75 _SCAN_TEST(1,
"-1",
"%d", &i);
77 _SCAN_TEST(1,
"0",
"%d", &i);
79 _SCAN_TEST(1,
"1",
"%d", &i);
81 _SCAN_TEST(1,
"-" INT_MIN_DEZ_STR,
"%i", &i);
83 _SCAN_TEST(1, INT_MAX_DEZ_STR,
"%i", &i);
85 _SCAN_TEST(1,
"-1",
"%i", &i);
87 _SCAN_TEST(1,
"0",
"%i", &i);
89 _SCAN_TEST(1,
"1",
"%i", &i);
91 _SCAN_TEST(1,
"0x7" INT_HEXDIG,
"%i", &i);
93 _SCAN_TEST(1,
"0x0",
"%i", &i);
95 _SCAN_TEST(1,
"00",
"%i%n", &i, &n);
100 _SCAN_TEST(1, UINT_MAX_DEZ_STR,
"%u", &u);
102 _SCAN_TEST(1,
"0",
"%u", &u);
104 _SCAN_TEST(1,
"f" INT_HEXDIG,
"%x", &u);
106 _SCAN_TEST(1,
"7" INT_HEXDIG,
"%x", &u);
108 _SCAN_TEST(1,
"0",
"%o", &u);
110 _SCAN_TEST(1, INT_OCTDIG,
"%o", &u);
114 _SCAN_TEST(1,
"x",
"%c",
buffer);
118 _SCAN_TEST(1,
"foo bar",
"%s%n",
buffer, &n);
121 _SCAN_TEST(2,
"foo bar baz",
"%s %s %n",
buffer,
buffer + 4, &n);
125 _SCAN_TEST(1,
"abcdefg",
"%[cba]",
buffer);
127 _SCAN_TEST(-1,
"",
"%[cba]",
buffer);
128 _SCAN_TEST(1,
"3",
"%u%[cba]", &u,
buffer);
133 _SCAN_TEST(1,
buffer,
"%p", (
void**)&p);
138 _SCAN_TEST(1,
buffer,
"%p", (
void**)&p);
141 _SCAN_TEST(
EOF,
"",
"%d", &i);
142 _SCAN_TEST(1,
"foo",
"%5c",
buffer);
150 for (
int k = 0; k < 1; ++k)
EFI_PHYSICAL_ADDRESS buffer
static char format[MAX_NAME]
#define TEST_DEFINE(_name)
Define a test function to be run by TEST_ALL().
#define TEST_ASSERT(cond)
Assert a condition in a test.
uint64_t scan(fd_t fd, const char *format,...)
Wrapper for reading from a file descriptor using scan formatting.
#define NULL
Pointer error value.
#define ERR
Integer error value.
int sscanf(const char *_RESTRICT s, const char *_RESTRICT format,...)
#define va_start(ap, parmN)
__builtin_va_list va_list
_PUBLIC int vsscanf(const char *_RESTRICT s, const char *_RESTRICT format, va_list arg)
_PUBLIC int sprintf(char *_RESTRICT s, const char *_RESTRICT format,...)
_PUBLIC int memcmp(const void *s1, const void *s2, size_t n)
_PUBLIC void * memset(void *s, int c, size_t n)