mirror of
https://github.com/byteworksinc/ORCA-C.git
synced 2024-08-17 07:28:57 +00:00
114 lines
3.0 KiB
C
114 lines
3.0 KiB
C
/*
|
|
* Test <stdio.h> features from C99.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include <stdarg.h>
|
|
|
|
int mysscanf(const char *restrict str, const char *restrict fmt, ...);
|
|
int mysnprintf(char *restrict str, size_t n, const char *restrict fmt, ...);
|
|
|
|
int main(void) {
|
|
char s[100] = "abcdef";
|
|
|
|
// snprintf tests
|
|
|
|
if (snprintf(0, 0, "123") != 3)
|
|
goto Fail;
|
|
if (snprintf(s, 0, "123") != 3)
|
|
goto Fail;
|
|
if (memcmp(s, "abcdef", 6) != 0)
|
|
goto Fail;
|
|
if (snprintf(s, 1, "123") != 3)
|
|
goto Fail;
|
|
if (memcmp(s, "\0bcdef", 6) != 0)
|
|
goto Fail;
|
|
if (snprintf(s, 3, "123") != 3)
|
|
goto Fail;
|
|
if (memcmp(s, "12\0def", 6) != 0)
|
|
goto Fail;
|
|
if (snprintf(s, 4, "123") != 3)
|
|
goto Fail;
|
|
if (memcmp(s, "123\0ef", 6) != 0)
|
|
goto Fail;
|
|
s[0] = 'x';
|
|
if (snprintf(s, 0x10000, "123") != 3)
|
|
goto Fail;
|
|
if (memcmp(s, "123\0ef", 6) != 0)
|
|
goto Fail;
|
|
|
|
// new length modifiers for printf
|
|
|
|
signed char sc[2] = {-123, 42};
|
|
unsigned long long ull = 0x2134123412341234;
|
|
uintmax_t uim = 12345678901234567890u;
|
|
size_t sz = 012345;
|
|
ptrdiff_t pd = -12345;
|
|
double d = 123.456;
|
|
|
|
mysnprintf(s, 100, "%hhi %#llx %ju %zo %td %lf",
|
|
sc[0], ull, uim, sz, pd, d);
|
|
if (strcmp(s, "-123 0x2134123412341234 12345678901234567890 12345 -12345 123.456000") != 0)
|
|
goto Fail;
|
|
|
|
sc[0] = 0;
|
|
ull = 0;
|
|
uim = 0;
|
|
sz = 0;
|
|
pd = 0;
|
|
d = 0;
|
|
|
|
// new length modifiers for scanf
|
|
if (mysscanf(s, "%hhi %llx %ju %zo %td %lf",
|
|
&sc[0], &ull, &uim, &sz, &pd, &d) != 6)
|
|
goto Fail;
|
|
if (sc[0] != -123)
|
|
goto Fail;
|
|
if (ull != 0x2134123412341234)
|
|
goto Fail;
|
|
if (uim != 12345678901234567890u)
|
|
goto Fail;
|
|
if (sz != 012345)
|
|
goto Fail;
|
|
if (pd != -12345)
|
|
goto Fail;
|
|
if (d != (double)123.456)
|
|
goto Fail;
|
|
if (sc[1] != 42)
|
|
goto Fail;
|
|
|
|
|
|
printf ("Passed Conformance Test c99stdio\n");
|
|
return 0;
|
|
|
|
Fail:
|
|
printf ("Failed Conformance Test c99stdio\n");
|
|
}
|
|
|
|
int mysscanf(const char *restrict str, const char *restrict fmt, ...) {
|
|
va_list va;
|
|
int ret;
|
|
|
|
// vsscanf function
|
|
va_start(va, fmt);
|
|
ret = vsscanf(str, fmt, va);
|
|
va_end(va);
|
|
|
|
return ret;
|
|
}
|
|
|
|
int mysnprintf(char *restrict str, size_t n, const char *restrict fmt, ...) {
|
|
va_list va;
|
|
int ret;
|
|
|
|
// vsnprintf function
|
|
va_start(va, fmt);
|
|
ret = vsnprintf(str, n, fmt, va);
|
|
va_end(va);
|
|
|
|
return ret;
|
|
}
|