1 /* Test of u16_[v]asnprintf() function.
2 Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <https://www.gnu.org/licenses/>. */
17 /* Written by Bruno Haible <bruno@clisp.org>, 2007. */
20 test_function (uint16_t * (*my_asnprintf
) (uint16_t *, size_t *, const char *, ...))
25 /* Test return value convention. */
27 for (size
= 0; size
<= 8; size
++)
30 uint16_t *result
= my_asnprintf (NULL
, &length
, "%d", 12345);
31 static const uint16_t expected
[] =
32 { '1', '2', '3', '4', '5', 0 };
33 ASSERT (result
!= NULL
);
34 ASSERT (u16_strcmp (result
, expected
) == 0);
39 for (size
= 0; size
<= 8; size
++)
41 static const uint16_t initializer
[] =
42 { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F', 0 };
43 static const uint16_t expected
[] =
44 { '1', '2', '3', '4', '5', 0 };
48 u16_cpy (buf
, initializer
, 8);
50 result
= my_asnprintf (buf
, &length
, "%d", 12345);
51 ASSERT (result
!= NULL
);
52 ASSERT (u16_strcmp (result
, expected
) == 0);
55 ASSERT (result
!= buf
);
56 ASSERT (u16_cmp (buf
+ size
, initializer
+ size
, 8 - size
) == 0);
61 /* Verify that u16_[v]asnprintf() rejects a width > 2 GiB, < 4 GiB. */
64 uint16_t *s
= my_asnprintf (NULL
, &length
, "x%03000000000dy\n", -17);
66 ASSERT (errno
== EOVERFLOW
);
69 static const uint16_t arg
[] = { '@', 0 };
71 uint16_t *s
= my_asnprintf (NULL
, &length
, "x%03000000000lUy\n", arg
);
73 ASSERT (errno
== EOVERFLOW
);
76 /* Verify that u16_[v]asnprintf() rejects a width > 4 GiB. */
80 my_asnprintf (NULL
, &length
,
81 "x%04294967306dy\n", /* 2^32 + 10 */
84 ASSERT (errno
== EOVERFLOW
);
87 static const uint16_t arg
[] = { '@', 0 };
90 my_asnprintf (NULL
, &length
,
91 "x%04294967306lUy\n", /* 2^32 + 10 */
94 ASSERT (errno
== EOVERFLOW
);
99 my_asnprintf (NULL
, &length
,
100 "x%018446744073709551626dy\n", /* 2^64 + 10 */
103 ASSERT (errno
== EOVERFLOW
);
106 static const uint16_t arg
[] = { '@', 0 };
109 my_asnprintf (NULL
, &length
,
110 "x%018446744073709551626lUy\n", /* 2^64 + 10 */
113 ASSERT (errno
== EOVERFLOW
);