diff options
author | Kevin Ryde <user42@zip.com.au> | 2001-11-17 22:40:28 +0100 |
---|---|---|
committer | Kevin Ryde <user42@zip.com.au> | 2001-11-17 22:40:28 +0100 |
commit | 81f12b4e956aae2652473e0ce977bcc31bf8c469 (patch) | |
tree | c04f3de7e5d6efadc935a51debdda6f7510b3176 /tests | |
parent | 57ed5aa6fc389bb5b5b8e4fbff4a85cb73411fab (diff) | |
download | gmp-81f12b4e956aae2652473e0ce977bcc31bf8c469.tar.gz |
More of:
* scanf/doscan.c, scanf/fscanf.c, scanf/fscanffuns.c, scanf/scanf.c,
scanf/sscanf.c, scanf/sscanffuns.c, scanf/vfscanf.c, scanf/vscanf.c,
scanf/vsscanf.c, scanf/Makefile.am, tests/misc/t-scanf.c: New files.
Hopefully right everywhere now.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/misc/t-scanf.c | 412 |
1 files changed, 223 insertions, 189 deletions
diff --git a/tests/misc/t-scanf.c b/tests/misc/t-scanf.c index 84a1a071d..0d813fbb8 100644 --- a/tests/misc/t-scanf.c +++ b/tests/misc/t-scanf.c @@ -169,6 +169,26 @@ fromstring_fscanf2 (const char *input, const char *fmt, void *a1, void *a2) } +/* whether the format string consists entirely of ignored fields */ +int +fmt_allignore (const char *fmt) +{ + int saw_star = 1; + for ( ; *fmt != '\0'; fmt++) + { + switch (*fmt) { + case '%': + if (! saw_star) + return 0; + saw_star = 0; + break; + case '*': + saw_star = 1; + break; + } + } + return 1; +} void check_z (void) @@ -177,180 +197,208 @@ check_z (void) const char *fmt; const char *input; const char *want; - int ret; - long ftell; + int want_ret; + long want_ftell; + int want_upto; } data[] = { - { "%Zd", "0", "0", 1, -1 }, - { "%Zd", "1", "1", 1, -1 }, - { "%Zd", "123", "123", 1, -1 }, - { "%Zd", "+0", "0", 1, -1 }, - { "%Zd", "+1", "1", 1, -1 }, - { "%Zd", "+123", "123", 1, -1 }, - { "%Zd", "-0", "0", 1, -1 }, - { "%Zd", "-1", "-1", 1, -1 }, - { "%Zd", "-123", "-123", 1, -1 }, - - { "%Zo", "0", "0", 1, -1 }, - { "%Zo", "173", "123", 1, -1 }, - { "%Zo", "+0", "0", 1, -1 }, - { "%Zo", "+173", "123", 1, -1 }, - { "%Zo", "-0", "0", 1, -1 }, - { "%Zo", "-173", "-123", 1, -1 }, - - { "%Zx", "0", "0", 1, -1 }, - { "%Zx", "7b", "123", 1, -1 }, - { "%Zx", "7b", "123", 1, -1 }, - { "%Zx", "+0", "0", 1, -1 }, - { "%Zx", "+7b", "123", 1, -1 }, - { "%Zx", "+7b", "123", 1, -1 }, - { "%Zx", "-0", "-0", 1, -1 }, - { "%Zx", "-7b", "-123", 1, -1 }, - { "%Zx", "-7b", "-123", 1, -1 }, - { "%ZX", "0", "0", 1, -1 }, - { "%ZX", "7b", "123", 1, -1 }, - { "%ZX", "7b", "123", 1, -1 }, - { "%ZX", "+0", "0", 1, -1 }, - { "%ZX", "+7b", "123", 1, -1 }, - { "%ZX", "+7b", "123", 1, -1 }, - { "%ZX", "-0", "-0", 1, -1 }, - { "%ZX", "-7b", "-123", 1, -1 }, - { "%ZX", "-7b", "-123", 1, -1 }, - { "%Zx", "0", "0", 1, -1 }, - { "%Zx", "7B", "123", 1, -1 }, - { "%Zx", "7B", "123", 1, -1 }, - { "%Zx", "+0", "0", 1, -1 }, - { "%Zx", "+7B", "123", 1, -1 }, - { "%Zx", "+7B", "123", 1, -1 }, - { "%Zx", "-0", "-0", 1, -1 }, - { "%Zx", "-7B", "-123", 1, -1 }, - { "%Zx", "-7B", "-123", 1, -1 }, - { "%ZX", "0", "0", 1, -1 }, - { "%ZX", "7B", "123", 1, -1 }, - { "%ZX", "7B", "123", 1, -1 }, - { "%ZX", "+0", "0", 1, -1 }, - { "%ZX", "+7B", "123", 1, -1 }, - { "%ZX", "+7B", "123", 1, -1 }, - { "%ZX", "-0", "-0", 1, -1 }, - { "%ZX", "-7B", "-123", 1, -1 }, - { "%ZX", "-7B", "-123", 1, -1 }, - - { "%Zi", "0", "0", 1, -1 }, - { "%Zi", "1", "1", 1, -1 }, - { "%Zi", "123", "123", 1, -1 }, - { "%Zi", "+0", "0", 1, -1 }, - { "%Zi", "+1", "1", 1, -1 }, - { "%Zi", "+123", "123", 1, -1 }, - { "%Zi", "-0", "0", 1, -1 }, - { "%Zi", "-1", "-1", 1, -1 }, - { "%Zi", "-123", "-123", 1, -1 }, - - { "%Zi", "00", "0", 1, -1 }, - { "%Zi", "0173", "123", 1, -1 }, - { "%Zi", "+00", "0", 1, -1 }, - { "%Zi", "+0173", "123", 1, -1 }, - { "%Zi", "-00", "0", 1, -1 }, - { "%Zi", "-0173", "-123", 1, -1 }, - - { "%Zi", "0x0", "0", 1, -1 }, - { "%Zi", "0x7b", "123", 1, -1 }, - { "%Zi", "0x7b", "123", 1, -1 }, - { "%Zi", "+0x0", "0", 1, -1 }, - { "%Zi", "+0x7b", "123", 1, -1 }, - { "%Zi", "+0x7b", "123", 1, -1 }, - { "%Zi", "-0x0", "-0", 1, -1 }, - { "%Zi", "-0x7b", "-123", 1, -1 }, - { "%Zi", "-0x7b", "-123", 1, -1 }, - { "%Zi", "0X0", "0", 1, -1 }, - { "%Zi", "0X7b", "123", 1, -1 }, - { "%Zi", "0X7b", "123", 1, -1 }, - { "%Zi", "+0X0", "0", 1, -1 }, - { "%Zi", "+0X7b", "123", 1, -1 }, - { "%Zi", "+0X7b", "123", 1, -1 }, - { "%Zi", "-0X0", "-0", 1, -1 }, - { "%Zi", "-0X7b", "-123", 1, -1 }, - { "%Zi", "-0X7b", "-123", 1, -1 }, - { "%Zi", "0x0", "0", 1, -1 }, - { "%Zi", "0x7B", "123", 1, -1 }, - { "%Zi", "0x7B", "123", 1, -1 }, - { "%Zi", "+0x0", "0", 1, -1 }, - { "%Zi", "+0x7B", "123", 1, -1 }, - { "%Zi", "+0x7B", "123", 1, -1 }, - { "%Zi", "-0x0", "-0", 1, -1 }, - { "%Zi", "-0x7B", "-123", 1, -1 }, - { "%Zi", "-0x7B", "-123", 1, -1 }, - { "%Zi", "0X0", "0", 1, -1 }, - { "%Zi", "0X7B", "123", 1, -1 }, - { "%Zi", "0X7B", "123", 1, -1 }, - { "%Zi", "+0X0", "0", 1, -1 }, - { "%Zi", "+0X7B", "123", 1, -1 }, - { "%Zi", "+0X7B", "123", 1, -1 }, - { "%Zi", "-0X0", "-0", 1, -1 }, - { "%Zi", "-0X7B", "-123", 1, -1 }, - { "%Zi", "-0X7B", "-123", 1, -1 }, - - { "%Zd", " 0", "0", 1, -1 }, - { "%Zd", " 0", "0", 1, -1 }, - { "%Zd", " 0", "0", 1, -1 }, - { "%Zd", "\t0", "0", 1, -1 }, - { "%Zd", "\t\t0", "0", 1, -1 }, - - { "hello%Zd", "hello0", "0", 1, -1 }, - { "hello%Zd", "hello 0", "0", 1, -1 }, - { "hello%Zd", "hello \t0", "0", 1, -1 }, - { "hello%Zdworld", "hello 0world", "0", 1, -1 }, - - { "hello%*Zd", "hello0", "-999", 0, -1 }, - { "hello%*Zd", "hello 0", "-999", 0, -1 }, - { "hello%*Zd", "hello \t0", "-999", 0, -1 }, - { "hello%*Zdworld", "hello 0world", "-999", 0, -1 }, - - { "%Zd", "", "-999", -1, -1 }, - { "%Zd", " ", "-999", -1, -1 }, - { " %Zd", "", "-999", -1, -1 }, - { "xyz%Zd", "", "-999", -1, -1 }, - - { "%*Zd", "", "-999", -1, -1 }, - { " %*Zd", "", "-999", -1, -1 }, - { "xyz%*Zd", "", "-999", -1, -1 }, + { "%Zd", "0", "0", 1, -1, -1 }, + { "%Zd", "1", "1", 1, -1, -1 }, + { "%Zd", "123", "123", 1, -1, -1 }, + { "%Zd", "+0", "0", 1, -1, -1 }, + { "%Zd", "+1", "1", 1, -1, -1 }, + { "%Zd", "+123", "123", 1, -1, -1 }, + { "%Zd", "-0", "0", 1, -1, -1 }, + { "%Zd", "-1", "-1", 1, -1, -1 }, + { "%Zd", "-123", "-123", 1, -1, -1 }, + + { "%Zo", "0", "0", 1, -1, -1 }, + { "%Zo", "173", "123", 1, -1, -1 }, + { "%Zo", "+0", "0", 1, -1, -1 }, + { "%Zo", "+173", "123", 1, -1, -1 }, + { "%Zo", "-0", "0", 1, -1, -1 }, + { "%Zo", "-173", "-123", 1, -1, -1 }, + + { "%Zx", "0", "0", 1, -1, -1 }, + { "%Zx", "7b", "123", 1, -1, -1 }, + { "%Zx", "7b", "123", 1, -1, -1 }, + { "%Zx", "+0", "0", 1, -1, -1 }, + { "%Zx", "+7b", "123", 1, -1, -1 }, + { "%Zx", "+7b", "123", 1, -1, -1 }, + { "%Zx", "-0", "-0", 1, -1, -1 }, + { "%Zx", "-7b", "-123", 1, -1, -1 }, + { "%Zx", "-7b", "-123", 1, -1, -1 }, + { "%ZX", "0", "0", 1, -1, -1 }, + { "%ZX", "7b", "123", 1, -1, -1 }, + { "%ZX", "7b", "123", 1, -1, -1 }, + { "%ZX", "+0", "0", 1, -1, -1 }, + { "%ZX", "+7b", "123", 1, -1, -1 }, + { "%ZX", "+7b", "123", 1, -1, -1 }, + { "%ZX", "-0", "-0", 1, -1, -1 }, + { "%ZX", "-7b", "-123", 1, -1, -1 }, + { "%ZX", "-7b", "-123", 1, -1, -1 }, + { "%Zx", "0", "0", 1, -1, -1 }, + { "%Zx", "7B", "123", 1, -1, -1 }, + { "%Zx", "7B", "123", 1, -1, -1 }, + { "%Zx", "+0", "0", 1, -1, -1 }, + { "%Zx", "+7B", "123", 1, -1, -1 }, + { "%Zx", "+7B", "123", 1, -1, -1 }, + { "%Zx", "-0", "-0", 1, -1, -1 }, + { "%Zx", "-7B", "-123", 1, -1, -1 }, + { "%Zx", "-7B", "-123", 1, -1, -1 }, + { "%ZX", "0", "0", 1, -1, -1 }, + { "%ZX", "7B", "123", 1, -1, -1 }, + { "%ZX", "7B", "123", 1, -1, -1 }, + { "%ZX", "+0", "0", 1, -1, -1 }, + { "%ZX", "+7B", "123", 1, -1, -1 }, + { "%ZX", "+7B", "123", 1, -1, -1 }, + { "%ZX", "-0", "-0", 1, -1, -1 }, + { "%ZX", "-7B", "-123", 1, -1, -1 }, + { "%ZX", "-7B", "-123", 1, -1, -1 }, + + { "%Zi", "0", "0", 1, -1, -1 }, + { "%Zi", "1", "1", 1, -1, -1 }, + { "%Zi", "123", "123", 1, -1, -1 }, + { "%Zi", "+0", "0", 1, -1, -1 }, + { "%Zi", "+1", "1", 1, -1, -1 }, + { "%Zi", "+123", "123", 1, -1, -1 }, + { "%Zi", "-0", "0", 1, -1, -1 }, + { "%Zi", "-1", "-1", 1, -1, -1 }, + { "%Zi", "-123", "-123", 1, -1, -1 }, + + { "%Zi", "00", "0", 1, -1, -1 }, + { "%Zi", "0173", "123", 1, -1, -1 }, + { "%Zi", "+00", "0", 1, -1, -1 }, + { "%Zi", "+0173", "123", 1, -1, -1 }, + { "%Zi", "-00", "0", 1, -1, -1 }, + { "%Zi", "-0173", "-123", 1, -1, -1 }, + + { "%Zi", "0x0", "0", 1, -1, -1 }, + { "%Zi", "0x7b", "123", 1, -1, -1 }, + { "%Zi", "0x7b", "123", 1, -1, -1 }, + { "%Zi", "+0x0", "0", 1, -1, -1 }, + { "%Zi", "+0x7b", "123", 1, -1, -1 }, + { "%Zi", "+0x7b", "123", 1, -1, -1 }, + { "%Zi", "-0x0", "-0", 1, -1, -1 }, + { "%Zi", "-0x7b", "-123", 1, -1, -1 }, + { "%Zi", "-0x7b", "-123", 1, -1, -1 }, + { "%Zi", "0X0", "0", 1, -1, -1 }, + { "%Zi", "0X7b", "123", 1, -1, -1 }, + { "%Zi", "0X7b", "123", 1, -1, -1 }, + { "%Zi", "+0X0", "0", 1, -1, -1 }, + { "%Zi", "+0X7b", "123", 1, -1, -1 }, + { "%Zi", "+0X7b", "123", 1, -1, -1 }, + { "%Zi", "-0X0", "-0", 1, -1, -1 }, + { "%Zi", "-0X7b", "-123", 1, -1, -1 }, + { "%Zi", "-0X7b", "-123", 1, -1, -1 }, + { "%Zi", "0x0", "0", 1, -1, -1 }, + { "%Zi", "0x7B", "123", 1, -1, -1 }, + { "%Zi", "0x7B", "123", 1, -1, -1 }, + { "%Zi", "+0x0", "0", 1, -1, -1 }, + { "%Zi", "+0x7B", "123", 1, -1, -1 }, + { "%Zi", "+0x7B", "123", 1, -1, -1 }, + { "%Zi", "-0x0", "-0", 1, -1, -1 }, + { "%Zi", "-0x7B", "-123", 1, -1, -1 }, + { "%Zi", "-0x7B", "-123", 1, -1, -1 }, + { "%Zi", "0X0", "0", 1, -1, -1 }, + { "%Zi", "0X7B", "123", 1, -1, -1 }, + { "%Zi", "0X7B", "123", 1, -1, -1 }, + { "%Zi", "+0X0", "0", 1, -1, -1 }, + { "%Zi", "+0X7B", "123", 1, -1, -1 }, + { "%Zi", "+0X7B", "123", 1, -1, -1 }, + { "%Zi", "-0X0", "-0", 1, -1, -1 }, + { "%Zi", "-0X7B", "-123", 1, -1, -1 }, + { "%Zi", "-0X7B", "-123", 1, -1, -1 }, + + { "%Zd", " 0", "0", 1, -1, -1 }, + { "%Zd", " 0", "0", 1, -1, -1 }, + { "%Zd", " 0", "0", 1, -1, -1 }, + { "%Zd", "\t0", "0", 1, -1, -1 }, + { "%Zd", "\t\t0", "0", 1, -1, -1 }, + + { "hello%Zd", "hello0", "0", 1, -1, -1 }, + { "hello%Zd", "hello 0", "0", 1, -1, -1 }, + { "hello%Zd", "hello \t0", "0", 1, -1, -1 }, + { "hello%Zdworld", "hello 0world", "0", 1, -1, -1 }, + + { "hello%*Zd", "hello0", "-999", 0, -1, -1 }, + { "hello%*Zd", "hello 0", "-999", 0, -1, -1 }, + { "hello%*Zd", "hello \t0", "-999", 0, -1, -1 }, + { "hello%*Zdworld", "hello 0world", "-999", 0, -1, -1 }, + + { "%Zd", "", "-999", -1, -1, -555 }, + { "%Zd", " ", "-999", -1, -1, -555 }, + { " %Zd", "", "-999", -1, -1, -555 }, + { "xyz%Zd", "", "-999", -1, -1, -555 }, + + { "%*Zd", "", "-999", -1, -1, -555 }, + { " %*Zd", "", "-999", -1, -1, -555 }, + { "xyz%*Zd", "", "-999", -1, -1, -555 }, + + { "%Zd", "xyz", "0", 0, 0, -555 }, /* match something, but invalid */ - { "%Zd", "-", "-999", 0, 1 }, - { "%Zd", "+", "-999", 0, 1 }, - { "xyz%Zd", "xyz-", "-999", 0, 4 }, - { "xyz%Zd", "xyz+", "-999", 0, 4 }, - - { "%1Zi", "1234", "1", 1, 1 }, - { "%2Zi", "1234", "12", 1, 2 }, - { "%3Zi", "1234", "123", 1, 3 }, - { "%4Zi", "1234", "1234", 1, 4 }, - { "%5Zi", "1234", "1234", 1, 4 }, - { "%6Zi", "1234", "1234", 1, 4 }, - - { "%1Zi", "01234", "0", 1, 1 }, - { "%2Zi", "01234", "01", 1, 2 }, - { "%3Zi", "01234", "012", 1, 3 }, - { "%4Zi", "01234", "0123", 1, 4 }, - { "%5Zi", "01234", "01234", 1, 5 }, - { "%6Zi", "01234", "01234", 1, 5 }, - { "%7Zi", "01234", "01234", 1, 5 }, - - { "%1Zi", "0x1234", "0", 1, 1 }, - { "%2Zi", "0x1234", "0", 1, 2 }, - { "%3Zi", "0x1234", "0x1", 1, 3 }, - { "%4Zi", "0x1234", "0x12", 1, 4 }, - { "%5Zi", "0x1234", "0x123", 1, 5 }, - { "%6Zi", "0x1234", "0x1234", 1, 6 }, - { "%7Zi", "0x1234", "0x1234", 1, 6 }, - { "%8Zi", "0x1234", "0x1234", 1, 6 }, - - { "%Zd", "xyz", "0", 0, 0 }, - - { "%%xyz%Zd", "%xyz123", "123", 1, -1 }, - { "12%%34%Zd", "12%34567", "567", 1, -1 }, - { "%%%%%Zd", "%%123", "123", 1, -1 }, -}; + { "%Zd", "-", "-999", 0, 1, -555 }, + { "%Zd", "+", "-999", 0, 1, -555 }, + { "xyz%Zd", "xyz-", "-999", 0, 4, -555 }, + { "xyz%Zd", "xyz+", "-999", 0, 4, -555 }, + + { "%1Zi", "1234", "1", 1, 1, 1 }, + { "%2Zi", "1234", "12", 1, 2, 2 }, + { "%3Zi", "1234", "123", 1, 3, 3 }, + { "%4Zi", "1234", "1234", 1, 4, 4 }, + { "%5Zi", "1234", "1234", 1, 4, 4 }, + { "%6Zi", "1234", "1234", 1, 4, 4 }, + + { "%1Zi", "01234", "0", 1, 1, 1 }, + { "%2Zi", "01234", "01", 1, 2, 2 }, + { "%3Zi", "01234", "012", 1, 3, 3 }, + { "%4Zi", "01234", "0123", 1, 4, 4 }, + { "%5Zi", "01234", "01234", 1, 5, 5 }, + { "%6Zi", "01234", "01234", 1, 5, 5 }, + { "%7Zi", "01234", "01234", 1, 5, 5 }, + + { "%1Zi", "0x1234", "0", 1, 1, 1 }, + { "%2Zi", "0x1234", "0", 1, 2, 2 }, + { "%3Zi", "0x1234", "0x1", 1, 3, 3 }, + { "%4Zi", "0x1234", "0x12", 1, 4, 4 }, + { "%5Zi", "0x1234", "0x123", 1, 5, 5 }, + { "%6Zi", "0x1234", "0x1234", 1, 6, 6 }, + { "%7Zi", "0x1234", "0x1234", 1, 6, 6 }, + { "%8Zi", "0x1234", "0x1234", 1, 6, 6 }, + + { "%%xyz%Zd", "%xyz123", "123", 1, -1, -1 }, + { "12%%34%Zd", "12%34567", "567", 1, -1, -1 }, + { "%%%%%Zd", "%%123", "123", 1, -1, -1 }, + + /* various subtle EOF cases */ + { "x", "", "-999", EOF, 0, -555 }, + { " x", "", "-999", EOF, 0, -555 }, + { "xyz", "", "-999", EOF, 0, -555 }, + { " ", "", "-999", 0, 0, 0 }, + { " ", " ", "-999", 0, 1, 1 }, + { "%*Zd%Zd", "", "-999", EOF, 0, -555 }, + { "%*Zd%Zd", "123", "-999", EOF, 3, -555 }, + { "x", "x", "-999", 0, 1, 1 }, + { "xyz", "x", "-999", EOF, 1, -555 }, + { "xyz", "xy", "-999", EOF, 2, -555 }, + { "xyz", "xyz", "-999", 0, 3, 3 }, + { "%Zn", "", "0", 0, 0, 0 }, + { " %Zn", "", "0", 0, 0, 0 }, + { " x%Zn", "", "-999", EOF, 0, -555 }, + { "xyz%Zn", "", "-999", EOF, 0, -555 }, + { " x%Zn", "", "-999", EOF, 0, -555 }, + { " %Zn x", " ", "-999", EOF, 1, -555 }, + + /* these give different return value on glibc and bsd, disabled until + can find which is right */ +#if 0 + { " x", " ", "-999", 0, 1, -555 }, + { " xyz", " ", "-999", 0, 1, -555 }, + { " x%Zn", " ", "-999", 0, 1, -555 }, +#endif + }; int i, j, ignore; int got_ret, want_ret, got_upto, want_upto; @@ -373,22 +421,19 @@ check_z (void) strcpy (fmt, data[i].fmt); strcat (fmt, "%n"); - ignore = (strchr (fmt, '*') != NULL); + ignore = fmt_allignore (fmt); for (j = 0; j <= 3; j++) { - want_ret = data[i].ret; + want_ret = data[i].want_ret; - want_ftell = data[i].ftell; + want_ftell = data[i].want_ftell; if (want_ftell == -1) want_ftell = strlen (data[i].input); - want_upto = want_ftell; - if (want_ret == -1 || (want_ret == 0 && ! ignore)) - { - want_ftell = -1; - want_upto = -555; - } + want_upto = data[i].want_upto; + if (want_upto == -1) + want_upto = strlen (data[i].input); switch (j) { case 0: @@ -1192,15 +1237,6 @@ check_misc (void) } } - ASSERT_ALWAYS (gmp_sscanf (" \t", " xyz") == 0); - ASSERT_ALWAYS (fromstring_gmp_fscanf (" \t", " xyz") == 0); - if (option_libc_scanf) - { - int dummy; - ASSERT_ALWAYS (sscanf (" \t", " xyz") == 0); - ASSERT_ALWAYS (fromstring_fscanf1 (" \t", " xyz", &dummy) == 0); - } - /* suppressed field, then eof */ { int x; @@ -1289,8 +1325,6 @@ check_misc (void) int main (int argc, char *argv[]) { - exit (0); - if (argc > 1 && strcmp (argv[1], "-s") == 0) option_libc_scanf = 1; |