diff mbox series

[v4,08/12] stdio-common: Add tests for formatted vasprintf output specifiers

Message ID alpine.DEB.2.21.2410311938120.40463@angie.orcam.me.uk
State New
Headers show
Series stdio-common: Add tests for formatted printf output specifiers | expand

Commit Message

Maciej W. Rozycki Oct. 31, 2024, 7:56 p.m. UTC
From: Maciej W. Rozycki <macro@redhat.com>

Wire vasprintf into test infrastructure for formatted printf output
specifiers.

Owing to mtrace logging these tests take amounts of time to complete 
similar to those of corresponding asprintf tests, so set timeouts for 
the tests accordingly, with a global default for all the vasprintf 
tests, and then individual higher settings for double and long double 
tests each.
---
Changes from v3:

- Adjust timeouts according to reduced execution time owing to a stub
  implementation of dladdr(3).

New change in v3.
---
 stdio-common/Makefile                        |    2 -
 stdio-common/tst-printf-format-vas-c.c       |   20 ++++++++++
 stdio-common/tst-printf-format-vas-char.c    |   20 ++++++++++
 stdio-common/tst-printf-format-vas-double.c  |   22 +++++++++++
 stdio-common/tst-printf-format-vas-int.c     |   20 ++++++++++
 stdio-common/tst-printf-format-vas-ldouble.c |   22 +++++++++++
 stdio-common/tst-printf-format-vas-llong.c   |   20 ++++++++++
 stdio-common/tst-printf-format-vas-long.c    |   20 ++++++++++
 stdio-common/tst-printf-format-vas-s.c       |   20 ++++++++++
 stdio-common/tst-printf-format-vas-short.c   |   20 ++++++++++
 stdio-common/tst-printf-format-vas-uchar.c   |   20 ++++++++++
 stdio-common/tst-printf-format-vas-uint.c    |   20 ++++++++++
 stdio-common/tst-printf-format-vas-ullong.c  |   20 ++++++++++
 stdio-common/tst-printf-format-vas-ulong.c   |   20 ++++++++++
 stdio-common/tst-printf-format-vas-ushort.c  |   20 ++++++++++
 stdio-common/tst-printf-format-vas.h         |   50 +++++++++++++++++++++++++++
 16 files changed, 335 insertions(+), 1 deletion(-)

glibc-tst-printf-format-all-vasprintf.diff
diff mbox series

Patch

Index: glibc/stdio-common/Makefile
===================================================================
--- glibc.orig/stdio-common/Makefile
+++ glibc/stdio-common/Makefile
@@ -23,7 +23,7 @@  subdir	:= stdio-common
 include ../Makeconfig
 
 # List of markers for printf family function tests.
-xprintf-funcs := p as d f s sn v
+xprintf-funcs := p as d f s sn v vas
 
 # List of data types and formats for individual per-conversion printf tests.
 fmt-convs := double ldouble
Index: glibc/stdio-common/tst-printf-format-vas-c.c
===================================================================
--- /dev/null
+++ glibc/stdio-common/tst-printf-format-vas-c.c
@@ -0,0 +1,20 @@ 
+/* Test for formatted 'vasprintf' output for the 'c' conversion.
+   Copyright (C) 2024 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include "tst-printf-format-vas.h"
+#include "tst-printf-format-skeleton-c.c"
Index: glibc/stdio-common/tst-printf-format-vas-char.c
===================================================================
--- /dev/null
+++ glibc/stdio-common/tst-printf-format-vas-char.c
@@ -0,0 +1,20 @@ 
+/* Test for formatted 'vasprintf' output for signed char conversions.
+   Copyright (C) 2024 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include "tst-printf-format-vas.h"
+#include "tst-printf-format-skeleton-char.c"
Index: glibc/stdio-common/tst-printf-format-vas-double.c
===================================================================
--- /dev/null
+++ glibc/stdio-common/tst-printf-format-vas-double.c
@@ -0,0 +1,22 @@ 
+/* Test for formatted 'vasprintf' output for double conversions.
+   Copyright (C) 2024 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#define TIMEOUT (DEFAULT_TIMEOUT * 32)
+
+#include "tst-printf-format-vas.h"
+#include "tst-printf-format-skeleton-double.c"
Index: glibc/stdio-common/tst-printf-format-vas-int.c
===================================================================
--- /dev/null
+++ glibc/stdio-common/tst-printf-format-vas-int.c
@@ -0,0 +1,20 @@ 
+/* Test for formatted 'vasprintf' output for int conversions.
+   Copyright (C) 2024 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include "tst-printf-format-vas.h"
+#include "tst-printf-format-skeleton-int.c"
Index: glibc/stdio-common/tst-printf-format-vas-ldouble.c
===================================================================
--- /dev/null
+++ glibc/stdio-common/tst-printf-format-vas-ldouble.c
@@ -0,0 +1,22 @@ 
+/* Test for formatted 'vasprintf' output for long double conversions.
+   Copyright (C) 2024 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#define TIMEOUT (DEFAULT_TIMEOUT * 128)
+
+#include "tst-printf-format-vas.h"
+#include "tst-printf-format-skeleton-ldouble.c"
Index: glibc/stdio-common/tst-printf-format-vas-llong.c
===================================================================
--- /dev/null
+++ glibc/stdio-common/tst-printf-format-vas-llong.c
@@ -0,0 +1,20 @@ 
+/* Test for formatted 'vasprintf' output for long long int conversions.
+   Copyright (C) 2024 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include "tst-printf-format-vas.h"
+#include "tst-printf-format-skeleton-llong.c"
Index: glibc/stdio-common/tst-printf-format-vas-long.c
===================================================================
--- /dev/null
+++ glibc/stdio-common/tst-printf-format-vas-long.c
@@ -0,0 +1,20 @@ 
+/* Test for formatted 'vasprintf' output for long int conversions.
+   Copyright (C) 2024 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include "tst-printf-format-vas.h"
+#include "tst-printf-format-skeleton-long.c"
Index: glibc/stdio-common/tst-printf-format-vas-s.c
===================================================================
--- /dev/null
+++ glibc/stdio-common/tst-printf-format-vas-s.c
@@ -0,0 +1,20 @@ 
+/* Test for formatted 'vasprintf' output for the 's' conversion.
+   Copyright (C) 2024 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include "tst-printf-format-vas.h"
+#include "tst-printf-format-skeleton-s.c"
Index: glibc/stdio-common/tst-printf-format-vas-short.c
===================================================================
--- /dev/null
+++ glibc/stdio-common/tst-printf-format-vas-short.c
@@ -0,0 +1,20 @@ 
+/* Test for formatted 'vasprintf' output for short int conversions.
+   Copyright (C) 2024 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include "tst-printf-format-vas.h"
+#include "tst-printf-format-skeleton-short.c"
Index: glibc/stdio-common/tst-printf-format-vas-uchar.c
===================================================================
--- /dev/null
+++ glibc/stdio-common/tst-printf-format-vas-uchar.c
@@ -0,0 +1,20 @@ 
+/* Test for formatted 'vasprintf' output for unsigned char conversions.
+   Copyright (C) 2024 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include "tst-printf-format-vas.h"
+#include "tst-printf-format-skeleton-uchar.c"
Index: glibc/stdio-common/tst-printf-format-vas-uint.c
===================================================================
--- /dev/null
+++ glibc/stdio-common/tst-printf-format-vas-uint.c
@@ -0,0 +1,20 @@ 
+/* Test for formatted 'vasprintf' output for unsigned int conversions.
+   Copyright (C) 2024 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include "tst-printf-format-vas.h"
+#include "tst-printf-format-skeleton-uint.c"
Index: glibc/stdio-common/tst-printf-format-vas-ullong.c
===================================================================
--- /dev/null
+++ glibc/stdio-common/tst-printf-format-vas-ullong.c
@@ -0,0 +1,20 @@ 
+/* Test for formatted 'vasprintf' output for unsigned long long int conversions.
+   Copyright (C) 2024 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include "tst-printf-format-vas.h"
+#include "tst-printf-format-skeleton-ullong.c"
Index: glibc/stdio-common/tst-printf-format-vas-ulong.c
===================================================================
--- /dev/null
+++ glibc/stdio-common/tst-printf-format-vas-ulong.c
@@ -0,0 +1,20 @@ 
+/* Test for formatted 'vasprintf' output for unsigned long int conversions.
+   Copyright (C) 2024 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include "tst-printf-format-vas.h"
+#include "tst-printf-format-skeleton-ulong.c"
Index: glibc/stdio-common/tst-printf-format-vas-ushort.c
===================================================================
--- /dev/null
+++ glibc/stdio-common/tst-printf-format-vas-ushort.c
@@ -0,0 +1,20 @@ 
+/* Test for formatted 'vasprintf' output for unsigned short int conversions.
+   Copyright (C) 2024 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include "tst-printf-format-vas.h"
+#include "tst-printf-format-skeleton-ushort.c"
Index: glibc/stdio-common/tst-printf-format-vas.h
===================================================================
--- /dev/null
+++ glibc/stdio-common/tst-printf-format-vas.h
@@ -0,0 +1,50 @@ 
+/* Test feature wrapper for formatted 'vasprintf' output.
+   Copyright (C) 2024 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+static int
+printf_under_test (const char *restrict fmt, ...)
+{
+  va_list ap;
+  int result;
+  char *str;
+
+  va_start (ap, fmt);
+  result = vasprintf (&str, fmt, ap);
+  va_end (ap);
+  if (result < 0)
+    {
+      perror ("vasprintf");
+      goto out;
+    }
+  if (fwrite (str, sizeof (*str), result, stdout) != result)
+    {
+      perror ("fwrite");
+      result = -1;
+    }
+  free (str);
+out:
+  return result;
+}
+
+#ifndef TIMEOUT
+# define TIMEOUT (DEFAULT_TIMEOUT * 12)
+#endif