Branch data Line data Source code
1 : : /* Test of vasnprintf() and asnprintf() functions.
2 : : Copyright (C) 2007-2012 Free Software Foundation, Inc.
3 : :
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.
8 : :
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.
13 : :
14 : : You should have received a copy of the GNU General Public License
15 : : along with this program. If not, see <http://www.gnu.org/licenses/>. */
16 : :
17 : : /* Written by Bruno Haible <bruno@clisp.org>, 2007. */
18 : :
19 : : #include <config.h>
20 : :
21 : : #include "vasnprintf.h"
22 : :
23 : : #include <stdarg.h>
24 : : #include <stdlib.h>
25 : : #include <string.h>
26 : :
27 : : #include "macros.h"
28 : :
29 : : static void
30 : 2 : test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
31 : : {
32 : : char buf[8];
33 : : int size;
34 : :
35 [ + + ]: 20 : for (size = 0; size <= 8; size++)
36 : : {
37 : 18 : size_t length = size;
38 : 18 : char *result = my_asnprintf (NULL, &length, "%d", 12345);
39 [ - + ]: 18 : ASSERT (result != NULL);
40 [ - + ]: 18 : ASSERT (strcmp (result, "12345") == 0);
41 [ - + ]: 18 : ASSERT (length == 5);
42 : 18 : free (result);
43 : : }
44 : :
45 [ + + ]: 20 : for (size = 0; size <= 8; size++)
46 : : {
47 : : size_t length;
48 : : char *result;
49 : :
50 : 18 : memcpy (buf, "DEADBEEF", 8);
51 : 18 : length = size;
52 : 18 : result = my_asnprintf (buf, &length, "%d", 12345);
53 [ - + ]: 18 : ASSERT (result != NULL);
54 [ - + ]: 18 : ASSERT (strcmp (result, "12345") == 0);
55 [ - + ]: 18 : ASSERT (length == 5);
56 [ + + ]: 18 : if (size < 6)
57 [ - + ]: 12 : ASSERT (result != buf);
58 [ - + ]: 18 : ASSERT (memcmp (buf + size, "DEADBEEF" + size, 8 - size) == 0);
59 [ + + ]: 18 : if (result != buf)
60 : 14 : free (result);
61 : : }
62 : 2 : }
63 : :
64 : : static char *
65 : 18 : my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
66 : : {
67 : : va_list args;
68 : : char *ret;
69 : :
70 : 18 : va_start (args, format);
71 : 18 : ret = vasnprintf (resultbuf, lengthp, format, args);
72 : 18 : va_end (args);
73 : 18 : return ret;
74 : : }
75 : :
76 : : static void
77 : 1 : test_vasnprintf ()
78 : : {
79 : 1 : test_function (my_asnprintf);
80 : 1 : }
81 : :
82 : : static void
83 : 1 : test_asnprintf ()
84 : : {
85 : 1 : test_function (asnprintf);
86 : 1 : }
87 : :
88 : : int
89 : 1 : main (int argc, char *argv[])
90 : : {
91 : 1 : test_vasnprintf ();
92 : 1 : test_asnprintf ();
93 : 1 : return 0;
94 : : }
|