diff options
author | Bruno Haible <bruno@clisp.org> | 2023-03-17 12:31:24 +0100 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2023-03-17 12:31:24 +0100 |
commit | 850b1f97b631d5944a9d0aafc00c078c07ca621d (patch) | |
tree | 70f2c5593bef0ca63659ca9ceab75d96f807abc9 /tests | |
parent | cc90bee0e183c03c0ad05a14f69e59e20c1a6392 (diff) | |
download | gnulib-850b1f97b631d5944a9d0aafc00c078c07ca621d.tar.gz |
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.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test-vasnwprintf.c | 122 |
1 files changed, 122 insertions, 0 deletions
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 <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +#include "vasnwprintf.h" + +#include <stdarg.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#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; +} |