>From 850b1f97b631d5944a9d0aafc00c078c07ca621d Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Fri, 17 Mar 2023 12:31:24 +0100 Subject: [PATCH 2/6] vasnwprintf: Add tests. * tests/test-vasnwprintf.c: New file, based on tests/test-vasnprintf.c. * modules/vasnwprintf-tests: New file, based on modules/vasnprintf-tests. --- ChangeLog | 5 ++ modules/vasnwprintf-tests | 13 ++++ tests/test-vasnwprintf.c | 122 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 140 insertions(+) create mode 100644 modules/vasnwprintf-tests create mode 100644 tests/test-vasnwprintf.c diff --git a/ChangeLog b/ChangeLog index d1e7222441..eadcbf6765 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2023-03-17 Bruno Haible + vasnwprintf: Add tests. + * tests/test-vasnwprintf.c: New file, based on tests/test-vasnprintf.c. + * modules/vasnwprintf-tests: New file, based on + modules/vasnprintf-tests. + vasnwprintf: New module. * lib/vasnprintf.c: Enable more code for WIDE_CHAR_VERSION, because snwprintf()/_snwprintf() (Windows) and swprintf() (Unix) don't return diff --git a/modules/vasnwprintf-tests b/modules/vasnwprintf-tests new file mode 100644 index 0000000000..e90236e8d2 --- /dev/null +++ b/modules/vasnwprintf-tests @@ -0,0 +1,13 @@ +Files: +tests/test-vasnwprintf.c +tests/macros.h + +Depends-on: +wcscmp +wmemcpy + +configure.ac: + +Makefile.am: +TESTS += test-vasnwprintf +check_PROGRAMS += test-vasnwprintf diff --git a/tests/test-vasnwprintf.c b/tests/test-vasnwprintf.c new file mode 100644 index 0000000000..19db93694b --- /dev/null +++ b/tests/test-vasnwprintf.c @@ -0,0 +1,122 @@ +/* Test of vasnwprintf() and asnwprintf() functions. + Copyright (C) 2007-2023 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "vasnwprintf.h" + +#include +#include +#include +#include + +#include "macros.h" + +static void +test_function (wchar_t * (*my_asnwprintf) (wchar_t *, size_t *, const wchar_t *, ...)) +{ + wchar_t buf[8]; + int size; + + for (size = 0; size <= 8; size++) + { + size_t length = size; + wchar_t *result = my_asnwprintf (NULL, &length, L"%d", 12345); + ASSERT (result != NULL); + ASSERT (wcscmp (result, L"12345") == 0); + ASSERT (length == 5); + free (result); + } + + for (size = 0; size <= 8; size++) + { + size_t length; + wchar_t *result; + + wmemcpy (buf, L"DEADBEEF", 8); + length = size; + result = my_asnwprintf (buf, &length, L"%d", 12345); + ASSERT (result != NULL); + ASSERT (wcscmp (result, L"12345") == 0); + ASSERT (length == 5); + if (size < 5 + 1) + ASSERT (result != buf); + ASSERT (wmemcmp (buf + size, &L"DEADBEEF"[size], 8 - size) == 0); + if (result != buf) + free (result); + } + + /* Note: This test assumes IEEE 754 representation of 'double' floats. */ + for (size = 0; size <= 8; size++) + { + size_t length; + wchar_t *result; + + wmemcpy (buf, L"DEADBEEF", 8); + length = size; + result = my_asnwprintf (buf, &length, L"%2.0f", 1.6314159265358979e+125); + ASSERT (result != NULL); + /* The exact result and the result on glibc systems is + 163141592653589790215729350939528493057529598899734151772468186268423257777068536614838678161083520756952076273094236944990208 + On Cygwin, the result is + 163141592653589790215729350939528493057529600000000000000000000000000000000000000000000000000000000000000000000000000000000000 + On HP-UX 11.31 / hppa and IRIX 6.5, the result is + 163141592653589790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + */ + ASSERT (wcslen (result) == 126); + ASSERT (wmemcmp (result, L"163141592653589790", 18) == 0); + ASSERT (length == 126); + if (size < 126 + 1) + ASSERT (result != buf); + ASSERT (wmemcmp (buf + size, &L"DEADBEEF"[size], 8 - size) == 0); + if (result != buf) + free (result); + } +} + +static wchar_t * +my_asnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, ...) +{ + va_list args; + wchar_t *ret; + + va_start (args, format); + ret = vasnwprintf (resultbuf, lengthp, format, args); + va_end (args); + return ret; +} + +static void +test_vasnwprintf () +{ + test_function (my_asnwprintf); +} + +static void +test_asnwprintf () +{ + test_function (asnwprintf); +} + +int +main (int argc, char *argv[]) +{ + test_vasnwprintf (); + test_asnwprintf (); + return 0; +} -- 2.34.1