ldbl-opt: Reuse test cases from misc/ that check long double

This patch adds test cases for the compatibility versions of the
functions: err, errx, verr, verrx, warn, warnx, vwarn, vwarnx (from
err.h), error, and error_at_line (from error.h), when long double has
the same format as double (-mlong-double-64).

Tested for powerpc, powerpc64 and powerpc64le.
This commit is contained in:
Gabriel F. T. Gomes 2018-08-07 18:06:58 -03:00
parent d11086a939
commit f0eaf86276
4 changed files with 59 additions and 18 deletions

View File

@ -1,3 +1,19 @@
2019-03-01 Gabriel F. T. Gomes <gabriel@inconstante.eti.br>
* misc/tst-ldbl-error.c (do_one_test): Adapt for reuse by nldbl
tests.
(do_test): Likewise.
* misc/tst-ldbl-warn.c (do_one_test): Likewise.
(do_test_call_varg): Likewise.
(do_test_call_rarg): Likewise.
* sysdeps/ieee754/ldbl-opt/Makefile
[subdir == misc] (tests-internal): Add tst-nldbl-warn,
tst-nldbl-error.
($(objpfx)tst-nldbl-warn.c): New rule.
($(objpfx)tst-nldbl-error.c): Likewise.
(CFLAGS-tst-nldbl-warn.c, CFLAGS-tst-nldbl-error.c):
New variables.
2019-03-01 Gabriel F. T. Gomes <gabriel@inconstante.eti.br>
[BZ #23984]

View File

@ -85,14 +85,15 @@ do_one_test (void *callback, const char *expected, ...)
/* Call 'callback', which fills in the output and error buffers. */
result = support_capture_subprocess (callback, NULL);
/* The functions err, errx, verr, and verrx print just the program
name followed by a colon, whereas error and error_at_line print the
whole path to the program. Since the whole path depends on the
working directory used to build and test glibc, remove it from the
comparison against the expected result. */
const char *needle = "tst-ldbl-error:";
/* Filter out the name of the program (which should always end with
-error), so that the test case can be reused by ldbl-opt and
ldbl-128ibm-compat. */
const char *needle = "-error:";
char *message;
message = strstr (result.err.buffer, needle);
if (message == NULL)
FAIL_EXIT1 ("test case error");
message += strlen (needle);
/* Verify that the output message is as expected. */
TEST_COMPARE_STRING (message, expected);
@ -104,12 +105,12 @@ static int
do_test (void)
{
struct tests tests[] = {
{ &callback_err, "tst-ldbl-error: -1.000000: Success\n" },
{ &callback_errx, "tst-ldbl-error: -1.000000\n" },
{ &callback_verr, "tst-ldbl-error: -1.000000: Success\n" },
{ &callback_verrx, "tst-ldbl-error: -1.000000\n" },
{ &callback_error, "tst-ldbl-error: -1.000000\n" },
{ &callback_error_at_line, "tst-ldbl-error::0: -1.000000\n" }
{ &callback_err, " -1.000000: Success\n" },
{ &callback_errx, " -1.000000\n" },
{ &callback_verr, " -1.000000: Success\n" },
{ &callback_verrx, " -1.000000\n" },
{ &callback_error, " -1.000000\n" },
{ &callback_error_at_line, ":0: -1.000000\n" }
};
for (int i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)

View File

@ -59,9 +59,21 @@ do_one_test (int select, const char *format, va_list args,
stderr = old_stderr;
/* Close the in-memory stream and check the output buffer. */
/* Close the in-memory stream. */
xfclose_memstream (&stream);
TEST_COMPARE_STRING (stream.buffer, expected);
/* Filter out the name of the program (which should always end with
warn), so that the test case can be reused by ldbl-opt and
ldbl-128ibm-compat. */
const char *needle = "warn: ";
char *message;
message = strstr (stream.buffer, needle);
if (message == NULL)
FAIL_EXIT1 ("test case error");
message += strlen (needle);
/* Check that the rest of the output is as expected. */
TEST_COMPARE_STRING (message, expected);
if (stream.buffer != NULL)
free (stream.buffer);
@ -74,13 +86,11 @@ do_test_call_varg (const char *format, ...)
va_start (args, format);
do_one_test (VWARN, format, args, 0, 0, 0, 0,
"tst-ldbl-warn: "
"-1.000000 - -2.000000 - -3.000000 - -4.000000: Success\n");
va_end (args);
va_start (args, format);
do_one_test (VWARNX, format, args, 0, 0, 0, 0,
"tst-ldbl-warn: "
"-1.000000 - -2.000000 - -3.000000 - -4.000000\n");
va_end (args);
}
@ -92,10 +102,8 @@ do_test_call_rarg (const char *format, long double arg1, double arg2,
va_list args;
memset (&args, 0, sizeof (args));
do_one_test (WARN, format, args, arg1, arg2, arg3, arg4,
"tst-ldbl-warn: "
"-1.000000 - -2.000000 - -3.000000 - -4.000000: Success\n");
do_one_test (WARNX, format, args, arg1, arg2, arg3, arg4,
"tst-ldbl-warn: "
"-1.000000 - -2.000000 - -3.000000 - -4.000000\n");
}

View File

@ -189,3 +189,19 @@ $(objpfx)tst-nldbl-argp.c: tst-ldbl-argp.c
CFLAGS-tst-nldbl-argp.c += -mlong-double-64
endif
# Tests for err.h and error.h functions (reusing the relevant tests from
# misc/).
ifeq ($(subdir), misc)
tests-internal += tst-nldbl-warn
tests-internal += tst-nldbl-error
$(objpfx)tst-nldbl-warn.c: tst-ldbl-warn.c
cp $< $@
$(objpfx)tst-nldbl-error.c: tst-ldbl-error.c
cp $< $@
CFLAGS-tst-nldbl-warn.c += -mlong-double-64
CFLAGS-tst-nldbl-error.c += -mlong-double-64
endif