1/***************************************************************************
2 *                                  _   _ ____  _
3 *  Project                     ___| | | |  _ \| |
4 *                             / __| | | | |_) | |
5 *                            | (__| |_| |  _ <| |___
6 *                             \___|\___/|_| \_\_____|
7 *
8 * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
9 *
10 * This software is licensed as described in the file COPYING, which
11 * you should have received as part of this distribution. The terms
12 * are also available at http://curl.haxx.se/docs/copyright.html.
13 *
14 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15 * copies of the Software, and permit persons to whom the Software is
16 * furnished to do so, under the terms of the COPYING file.
17 *
18 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19 * KIND, either express or implied.
20 *
21 ***************************************************************************/
22
23/*
24 * The purpose of this test is to minimally exercise libcurl's internal
25 * curl_m*printf formatting capabilities and handling of some data types.
26 */
27
28#include "test.h"
29
30#include <curl/mprintf.h>
31
32#include "memdebug.h"
33
34
35#if (CURL_SIZEOF_CURL_OFF_T > CURL_SIZEOF_LONG)
36#  define MPRNT_SUFFIX_CURL_OFF_T  LL
37#else
38#  define MPRNT_SUFFIX_CURL_OFF_T  L
39#endif
40
41
42#ifdef CURL_ISOCPP
43#  define MPRNT_OFF_T_C_HELPER2(Val,Suffix) Val ## Suffix
44#else
45#  define MPRNT_OFF_T_C_HELPER2(Val,Suffix) Val/**/Suffix
46#endif
47#define MPRNT_OFF_T_C_HELPER1(Val,Suffix) MPRNT_OFF_T_C_HELPER2(Val,Suffix)
48#define MPRNT_OFF_T_C(Val)  MPRNT_OFF_T_C_HELPER1(Val,MPRNT_SUFFIX_CURL_OFF_T)
49
50
51#define BUFSZ    256
52#define USHORT_TESTS_ARRSZ 1 + 100
53#define SSHORT_TESTS_ARRSZ 1 + 100
54#define UINT_TESTS_ARRSZ   1 + 100
55#define SINT_TESTS_ARRSZ   1 + 100
56#define ULONG_TESTS_ARRSZ  1 + 100
57#define SLONG_TESTS_ARRSZ  1 + 100
58#define COFFT_TESTS_ARRSZ  1 + 100
59
60
61struct unsshort_st {
62  unsigned short num;   /* unsigned short  */
63  const char *expected; /* expected string */
64  char result[BUFSZ];   /* result string   */
65};
66
67
68struct sigshort_st {
69  short num;            /* signed short    */
70  const char *expected; /* expected string */
71  char result[BUFSZ];   /* result string   */
72};
73
74
75struct unsint_st {
76  unsigned int num;     /* unsigned int    */
77  const char *expected; /* expected string */
78  char result[BUFSZ];   /* result string   */
79};
80
81
82struct sigint_st {
83  int num;              /* signed int      */
84  const char *expected; /* expected string */
85  char result[BUFSZ];   /* result string   */
86};
87
88
89struct unslong_st {
90  unsigned long num;    /* unsigned long   */
91  const char *expected; /* expected string */
92  char result[BUFSZ];   /* result string   */
93};
94
95
96struct siglong_st {
97  long num;             /* signed long     */
98  const char *expected; /* expected string */
99  char result[BUFSZ];   /* result string   */
100};
101
102
103struct curloff_st {
104  curl_off_t num;       /* curl_off_t      */
105  const char *expected; /* expected string */
106  char result[BUFSZ];   /* result string   */
107};
108
109
110static struct unsshort_st us_test[USHORT_TESTS_ARRSZ];
111static struct sigshort_st ss_test[SSHORT_TESTS_ARRSZ];
112static struct unsint_st   ui_test[UINT_TESTS_ARRSZ];
113static struct sigint_st   si_test[SINT_TESTS_ARRSZ];
114static struct unslong_st  ul_test[ULONG_TESTS_ARRSZ];
115static struct siglong_st  sl_test[SLONG_TESTS_ARRSZ];
116static struct curloff_st  co_test[COFFT_TESTS_ARRSZ];
117
118
119static int test_unsigned_short_formatting(void)
120{
121  int i, j;
122  int num_ushort_tests;
123  int failed = 0;
124
125#if (SIZEOF_SHORT == 1)
126
127  i=1; us_test[i].num = 0xFFU; us_test[i].expected = "256";
128  i++; us_test[i].num = 0xF0U; us_test[i].expected = "240";
129  i++; us_test[i].num = 0x0FU; us_test[i].expected = "15";
130
131  i++; us_test[i].num = 0xE0U; us_test[i].expected = "224";
132  i++; us_test[i].num = 0x0EU; us_test[i].expected = "14";
133
134  i++; us_test[i].num = 0xC0U; us_test[i].expected = "192";
135  i++; us_test[i].num = 0x0CU; us_test[i].expected = "12";
136
137  i++; us_test[i].num = 0x01U; us_test[i].expected = "1";
138  i++; us_test[i].num = 0x00U; us_test[i].expected = "0";
139
140  num_ushort_tests = i;
141
142#elif (SIZEOF_SHORT == 2)
143
144  i=1; us_test[i].num = 0xFFFFU; us_test[i].expected = "65535";
145  i++; us_test[i].num = 0xFF00U; us_test[i].expected = "65280";
146  i++; us_test[i].num = 0x00FFU; us_test[i].expected = "255";
147
148  i++; us_test[i].num = 0xF000U; us_test[i].expected = "61440";
149  i++; us_test[i].num = 0x0F00U; us_test[i].expected = "3840";
150  i++; us_test[i].num = 0x00F0U; us_test[i].expected = "240";
151  i++; us_test[i].num = 0x000FU; us_test[i].expected = "15";
152
153  i++; us_test[i].num = 0xC000U; us_test[i].expected = "49152";
154  i++; us_test[i].num = 0x0C00U; us_test[i].expected = "3072";
155  i++; us_test[i].num = 0x00C0U; us_test[i].expected = "192";
156  i++; us_test[i].num = 0x000CU; us_test[i].expected = "12";
157
158  i++; us_test[i].num = 0x0001U; us_test[i].expected = "1";
159  i++; us_test[i].num = 0x0000U; us_test[i].expected = "0";
160
161  num_ushort_tests = i;
162
163#elif (SIZEOF_SHORT == 4)
164
165  i=1; us_test[i].num = 0xFFFFFFFFU; us_test[i].expected = "4294967295";
166  i++; us_test[i].num = 0xFFFF0000U; us_test[i].expected = "4294901760";
167  i++; us_test[i].num = 0x0000FFFFU; us_test[i].expected = "65535";
168
169  i++; us_test[i].num = 0xFF000000U; us_test[i].expected = "4278190080";
170  i++; us_test[i].num = 0x00FF0000U; us_test[i].expected = "16711680";
171  i++; us_test[i].num = 0x0000FF00U; us_test[i].expected = "65280";
172  i++; us_test[i].num = 0x000000FFU; us_test[i].expected = "255";
173
174  i++; us_test[i].num = 0xF0000000U; us_test[i].expected = "4026531840";
175  i++; us_test[i].num = 0x0F000000U; us_test[i].expected = "251658240";
176  i++; us_test[i].num = 0x00F00000U; us_test[i].expected = "15728640";
177  i++; us_test[i].num = 0x000F0000U; us_test[i].expected = "983040";
178  i++; us_test[i].num = 0x0000F000U; us_test[i].expected = "61440";
179  i++; us_test[i].num = 0x00000F00U; us_test[i].expected = "3840";
180  i++; us_test[i].num = 0x000000F0U; us_test[i].expected = "240";
181  i++; us_test[i].num = 0x0000000FU; us_test[i].expected = "15";
182
183  i++; us_test[i].num = 0xC0000000U; us_test[i].expected = "3221225472";
184  i++; us_test[i].num = 0x0C000000U; us_test[i].expected = "201326592";
185  i++; us_test[i].num = 0x00C00000U; us_test[i].expected = "12582912";
186  i++; us_test[i].num = 0x000C0000U; us_test[i].expected = "786432";
187  i++; us_test[i].num = 0x0000C000U; us_test[i].expected = "49152";
188  i++; us_test[i].num = 0x00000C00U; us_test[i].expected = "3072";
189  i++; us_test[i].num = 0x000000C0U; us_test[i].expected = "192";
190  i++; us_test[i].num = 0x0000000CU; us_test[i].expected = "12";
191
192  i++; us_test[i].num = 0x00000001U; us_test[i].expected = "1";
193  i++; us_test[i].num = 0x00000000U; us_test[i].expected = "0";
194
195  num_ushort_tests = i;
196
197#endif
198
199  for(i=1; i<=num_ushort_tests; i++) {
200
201    for(j=0; j<BUFSZ; j++)
202      us_test[i].result[j] = 'X';
203    us_test[i].result[BUFSZ-1] = '\0';
204
205    (void)curl_msprintf(us_test[i].result, "%hu", us_test[i].num);
206
207    if(memcmp(us_test[i].result,
208               us_test[i].expected,
209               strlen(us_test[i].expected))) {
210      printf("unsigned short test #%.2d: Failed (Expected: %s Got: %s)\n",
211             i, us_test[i].expected, us_test[i].result);
212      failed++;
213    }
214
215  }
216
217  if(!failed)
218    printf("All curl_mprintf() unsigned short tests OK!\n");
219  else
220    printf("Some curl_mprintf() unsigned short tests Failed!\n");
221
222  return failed;
223}
224
225
226static int test_signed_short_formatting(void)
227{
228  int i, j;
229  int num_sshort_tests;
230  int failed = 0;
231
232#if (SIZEOF_SHORT == 1)
233
234  i=1; ss_test[i].num = 0x7F; ss_test[i].expected = "127";
235
236  i++; ss_test[i].num = 0x70; ss_test[i].expected = "112";
237  i++; ss_test[i].num = 0x07; ss_test[i].expected = "7";
238
239  i++; ss_test[i].num = 0x50; ss_test[i].expected = "80";
240  i++; ss_test[i].num = 0x05; ss_test[i].expected = "5";
241
242  i++; ss_test[i].num = 0x01; ss_test[i].expected = "1";
243  i++; ss_test[i].num = 0x00; ss_test[i].expected = "0";
244
245  i++; ss_test[i].num = -0x7F -1; ss_test[i].expected = "-128";
246
247  i++; ss_test[i].num = -0x70 -1; ss_test[i].expected = "-113";
248  i++; ss_test[i].num = -0x07 -1; ss_test[i].expected = "-8";
249
250  i++; ss_test[i].num = -0x50 -1; ss_test[i].expected = "-81";
251  i++; ss_test[i].num = -0x05 -1; ss_test[i].expected = "-6";
252
253  i++; ss_test[i].num =  0x00 -1; ss_test[i].expected = "-1";
254
255  num_sshort_tests = i;
256
257#elif (SIZEOF_SHORT == 2)
258
259  i=1; ss_test[i].num = 0x7FFF; ss_test[i].expected = "32767";
260  i++; ss_test[i].num = 0x7FFE; ss_test[i].expected = "32766";
261  i++; ss_test[i].num = 0x7FFD; ss_test[i].expected = "32765";
262  i++; ss_test[i].num = 0x7F00; ss_test[i].expected = "32512";
263  i++; ss_test[i].num = 0x07F0; ss_test[i].expected = "2032";
264  i++; ss_test[i].num = 0x007F; ss_test[i].expected = "127";
265
266  i++; ss_test[i].num = 0x7000; ss_test[i].expected = "28672";
267  i++; ss_test[i].num = 0x0700; ss_test[i].expected = "1792";
268  i++; ss_test[i].num = 0x0070; ss_test[i].expected = "112";
269  i++; ss_test[i].num = 0x0007; ss_test[i].expected = "7";
270
271  i++; ss_test[i].num = 0x5000; ss_test[i].expected = "20480";
272  i++; ss_test[i].num = 0x0500; ss_test[i].expected = "1280";
273  i++; ss_test[i].num = 0x0050; ss_test[i].expected = "80";
274  i++; ss_test[i].num = 0x0005; ss_test[i].expected = "5";
275
276  i++; ss_test[i].num = 0x0001; ss_test[i].expected = "1";
277  i++; ss_test[i].num = 0x0000; ss_test[i].expected = "0";
278
279  i++; ss_test[i].num = -0x7FFF -1; ss_test[i].expected = "-32768";
280  i++; ss_test[i].num = -0x7FFE -1; ss_test[i].expected = "-32767";
281  i++; ss_test[i].num = -0x7FFD -1; ss_test[i].expected = "-32766";
282  i++; ss_test[i].num = -0x7F00 -1; ss_test[i].expected = "-32513";
283  i++; ss_test[i].num = -0x07F0 -1; ss_test[i].expected = "-2033";
284  i++; ss_test[i].num = -0x007F -1; ss_test[i].expected = "-128";
285
286  i++; ss_test[i].num = -0x7000 -1; ss_test[i].expected = "-28673";
287  i++; ss_test[i].num = -0x0700 -1; ss_test[i].expected = "-1793";
288  i++; ss_test[i].num = -0x0070 -1; ss_test[i].expected = "-113";
289  i++; ss_test[i].num = -0x0007 -1; ss_test[i].expected = "-8";
290
291  i++; ss_test[i].num = -0x5000 -1; ss_test[i].expected = "-20481";
292  i++; ss_test[i].num = -0x0500 -1; ss_test[i].expected = "-1281";
293  i++; ss_test[i].num = -0x0050 -1; ss_test[i].expected = "-81";
294  i++; ss_test[i].num = -0x0005 -1; ss_test[i].expected = "-6";
295
296  i++; ss_test[i].num =  0x0000 -1; ss_test[i].expected = "-1";
297
298  num_sshort_tests = i;
299
300#elif (SIZEOF_SHORT == 4)
301
302  i=1; ss_test[i].num = 0x7FFFFFFF; ss_test[i].expected = "2147483647";
303  i++; ss_test[i].num = 0x7FFFFFFE; ss_test[i].expected = "2147483646";
304  i++; ss_test[i].num = 0x7FFFFFFD; ss_test[i].expected = "2147483645";
305  i++; ss_test[i].num = 0x7FFF0000; ss_test[i].expected = "2147418112";
306  i++; ss_test[i].num = 0x00007FFF; ss_test[i].expected = "32767";
307
308  i++; ss_test[i].num = 0x7F000000; ss_test[i].expected = "2130706432";
309  i++; ss_test[i].num = 0x007F0000; ss_test[i].expected = "8323072";
310  i++; ss_test[i].num = 0x00007F00; ss_test[i].expected = "32512";
311  i++; ss_test[i].num = 0x0000007F; ss_test[i].expected = "127";
312
313  i++; ss_test[i].num = 0x70000000; ss_test[i].expected = "1879048192";
314  i++; ss_test[i].num = 0x07000000; ss_test[i].expected = "117440512";
315  i++; ss_test[i].num = 0x00700000; ss_test[i].expected = "7340032";
316  i++; ss_test[i].num = 0x00070000; ss_test[i].expected = "458752";
317  i++; ss_test[i].num = 0x00007000; ss_test[i].expected = "28672";
318  i++; ss_test[i].num = 0x00000700; ss_test[i].expected = "1792";
319  i++; ss_test[i].num = 0x00000070; ss_test[i].expected = "112";
320  i++; ss_test[i].num = 0x00000007; ss_test[i].expected = "7";
321
322  i++; ss_test[i].num = 0x50000000; ss_test[i].expected = "1342177280";
323  i++; ss_test[i].num = 0x05000000; ss_test[i].expected = "83886080";
324  i++; ss_test[i].num = 0x00500000; ss_test[i].expected = "5242880";
325  i++; ss_test[i].num = 0x00050000; ss_test[i].expected = "327680";
326  i++; ss_test[i].num = 0x00005000; ss_test[i].expected = "20480";
327  i++; ss_test[i].num = 0x00000500; ss_test[i].expected = "1280";
328  i++; ss_test[i].num = 0x00000050; ss_test[i].expected = "80";
329  i++; ss_test[i].num = 0x00000005; ss_test[i].expected = "5";
330
331  i++; ss_test[i].num = 0x00000001; ss_test[i].expected = "1";
332  i++; ss_test[i].num = 0x00000000; ss_test[i].expected = "0";
333
334  i++; ss_test[i].num = -0x7FFFFFFF -1; ss_test[i].expected = "-2147483648";
335  i++; ss_test[i].num = -0x7FFFFFFE -1; ss_test[i].expected = "-2147483647";
336  i++; ss_test[i].num = -0x7FFFFFFD -1; ss_test[i].expected = "-2147483646";
337  i++; ss_test[i].num = -0x7FFF0000 -1; ss_test[i].expected = "-2147418113";
338  i++; ss_test[i].num = -0x00007FFF -1; ss_test[i].expected = "-32768";
339
340  i++; ss_test[i].num = -0x7F000000 -1; ss_test[i].expected = "-2130706433";
341  i++; ss_test[i].num = -0x007F0000 -1; ss_test[i].expected = "-8323073";
342  i++; ss_test[i].num = -0x00007F00 -1; ss_test[i].expected = "-32513";
343  i++; ss_test[i].num = -0x0000007F -1; ss_test[i].expected = "-128";
344
345  i++; ss_test[i].num = -0x70000000 -1; ss_test[i].expected = "-1879048193";
346  i++; ss_test[i].num = -0x07000000 -1; ss_test[i].expected = "-117440513";
347  i++; ss_test[i].num = -0x00700000 -1; ss_test[i].expected = "-7340033";
348  i++; ss_test[i].num = -0x00070000 -1; ss_test[i].expected = "-458753";
349  i++; ss_test[i].num = -0x00007000 -1; ss_test[i].expected = "-28673";
350  i++; ss_test[i].num = -0x00000700 -1; ss_test[i].expected = "-1793";
351  i++; ss_test[i].num = -0x00000070 -1; ss_test[i].expected = "-113";
352  i++; ss_test[i].num = -0x00000007 -1; ss_test[i].expected = "-8";
353
354  i++; ss_test[i].num = -0x50000000 -1; ss_test[i].expected = "-1342177281";
355  i++; ss_test[i].num = -0x05000000 -1; ss_test[i].expected = "-83886081";
356  i++; ss_test[i].num = -0x00500000 -1; ss_test[i].expected = "-5242881";
357  i++; ss_test[i].num = -0x00050000 -1; ss_test[i].expected = "-327681";
358  i++; ss_test[i].num = -0x00005000 -1; ss_test[i].expected = "-20481";
359  i++; ss_test[i].num = -0x00000500 -1; ss_test[i].expected = "-1281";
360  i++; ss_test[i].num = -0x00000050 -1; ss_test[i].expected = "-81";
361  i++; ss_test[i].num = -0x00000005 -1; ss_test[i].expected = "-6";
362
363  i++; ss_test[i].num =  0x00000000 -1; ss_test[i].expected = "-1";
364
365  num_sshort_tests = i;
366
367#endif
368
369  for(i=1; i<=num_sshort_tests; i++) {
370
371    for(j=0; j<BUFSZ; j++)
372      ss_test[i].result[j] = 'X';
373    ss_test[i].result[BUFSZ-1] = '\0';
374
375    (void)curl_msprintf(ss_test[i].result, "%hd", ss_test[i].num);
376
377    if(memcmp(ss_test[i].result,
378              ss_test[i].expected,
379              strlen(ss_test[i].expected))) {
380      printf("signed short test #%.2d: Failed (Expected: %s Got: %s)\n",
381             i, ss_test[i].expected, ss_test[i].result);
382      failed++;
383    }
384
385  }
386
387  if(!failed)
388    printf("All curl_mprintf() signed short tests OK!\n");
389  else
390    printf("Some curl_mprintf() signed short tests Failed!\n");
391
392  return failed;
393}
394
395
396static int test_unsigned_int_formatting(void)
397{
398  int i, j;
399  int num_uint_tests;
400  int failed = 0;
401
402#if (SIZEOF_INT == 2)
403
404  i=1; ui_test[i].num = 0xFFFFU; ui_test[i].expected = "65535";
405  i++; ui_test[i].num = 0xFF00U; ui_test[i].expected = "65280";
406  i++; ui_test[i].num = 0x00FFU; ui_test[i].expected = "255";
407
408  i++; ui_test[i].num = 0xF000U; ui_test[i].expected = "61440";
409  i++; ui_test[i].num = 0x0F00U; ui_test[i].expected = "3840";
410  i++; ui_test[i].num = 0x00F0U; ui_test[i].expected = "240";
411  i++; ui_test[i].num = 0x000FU; ui_test[i].expected = "15";
412
413  i++; ui_test[i].num = 0xC000U; ui_test[i].expected = "49152";
414  i++; ui_test[i].num = 0x0C00U; ui_test[i].expected = "3072";
415  i++; ui_test[i].num = 0x00C0U; ui_test[i].expected = "192";
416  i++; ui_test[i].num = 0x000CU; ui_test[i].expected = "12";
417
418  i++; ui_test[i].num = 0x0001U; ui_test[i].expected = "1";
419  i++; ui_test[i].num = 0x0000U; ui_test[i].expected = "0";
420
421  num_uint_tests = i;
422
423#elif (SIZEOF_INT == 4)
424
425  i=1; ui_test[i].num = 0xFFFFFFFFU; ui_test[i].expected = "4294967295";
426  i++; ui_test[i].num = 0xFFFF0000U; ui_test[i].expected = "4294901760";
427  i++; ui_test[i].num = 0x0000FFFFU; ui_test[i].expected = "65535";
428
429  i++; ui_test[i].num = 0xFF000000U; ui_test[i].expected = "4278190080";
430  i++; ui_test[i].num = 0x00FF0000U; ui_test[i].expected = "16711680";
431  i++; ui_test[i].num = 0x0000FF00U; ui_test[i].expected = "65280";
432  i++; ui_test[i].num = 0x000000FFU; ui_test[i].expected = "255";
433
434  i++; ui_test[i].num = 0xF0000000U; ui_test[i].expected = "4026531840";
435  i++; ui_test[i].num = 0x0F000000U; ui_test[i].expected = "251658240";
436  i++; ui_test[i].num = 0x00F00000U; ui_test[i].expected = "15728640";
437  i++; ui_test[i].num = 0x000F0000U; ui_test[i].expected = "983040";
438  i++; ui_test[i].num = 0x0000F000U; ui_test[i].expected = "61440";
439  i++; ui_test[i].num = 0x00000F00U; ui_test[i].expected = "3840";
440  i++; ui_test[i].num = 0x000000F0U; ui_test[i].expected = "240";
441  i++; ui_test[i].num = 0x0000000FU; ui_test[i].expected = "15";
442
443  i++; ui_test[i].num = 0xC0000000U; ui_test[i].expected = "3221225472";
444  i++; ui_test[i].num = 0x0C000000U; ui_test[i].expected = "201326592";
445  i++; ui_test[i].num = 0x00C00000U; ui_test[i].expected = "12582912";
446  i++; ui_test[i].num = 0x000C0000U; ui_test[i].expected = "786432";
447  i++; ui_test[i].num = 0x0000C000U; ui_test[i].expected = "49152";
448  i++; ui_test[i].num = 0x00000C00U; ui_test[i].expected = "3072";
449  i++; ui_test[i].num = 0x000000C0U; ui_test[i].expected = "192";
450  i++; ui_test[i].num = 0x0000000CU; ui_test[i].expected = "12";
451
452  i++; ui_test[i].num = 0x00000001U; ui_test[i].expected = "1";
453  i++; ui_test[i].num = 0x00000000U; ui_test[i].expected = "0";
454
455  num_uint_tests = i;
456
457#elif (SIZEOF_INT == 8)
458
459  i=1; ui_test[i].num = 0xFFFFFFFFFFFFFFFFU; ui_test[i].expected = "18446744073709551615";
460  i++; ui_test[i].num = 0xFFFFFFFF00000000U; ui_test[i].expected = "18446744069414584320";
461  i++; ui_test[i].num = 0x00000000FFFFFFFFU; ui_test[i].expected = "4294967295";
462
463  i++; ui_test[i].num = 0xFFFF000000000000U; ui_test[i].expected = "18446462598732840960";
464  i++; ui_test[i].num = 0x0000FFFF00000000U; ui_test[i].expected = "281470681743360";
465  i++; ui_test[i].num = 0x00000000FFFF0000U; ui_test[i].expected = "4294901760";
466  i++; ui_test[i].num = 0x000000000000FFFFU; ui_test[i].expected = "65535";
467
468  i++; ui_test[i].num = 0xFF00000000000000U; ui_test[i].expected = "18374686479671623680";
469  i++; ui_test[i].num = 0x00FF000000000000U; ui_test[i].expected = "71776119061217280";
470  i++; ui_test[i].num = 0x0000FF0000000000U; ui_test[i].expected = "280375465082880";
471  i++; ui_test[i].num = 0x000000FF00000000U; ui_test[i].expected = "1095216660480";
472  i++; ui_test[i].num = 0x00000000FF000000U; ui_test[i].expected = "4278190080";
473  i++; ui_test[i].num = 0x0000000000FF0000U; ui_test[i].expected = "16711680";
474  i++; ui_test[i].num = 0x000000000000FF00U; ui_test[i].expected = "65280";
475  i++; ui_test[i].num = 0x00000000000000FFU; ui_test[i].expected = "255";
476
477  i++; ui_test[i].num = 0xF000000000000000U; ui_test[i].expected = "17293822569102704640";
478  i++; ui_test[i].num = 0x0F00000000000000U; ui_test[i].expected = "1080863910568919040";
479  i++; ui_test[i].num = 0x00F0000000000000U; ui_test[i].expected = "67553994410557440";
480  i++; ui_test[i].num = 0x000F000000000000U; ui_test[i].expected = "4222124650659840";
481  i++; ui_test[i].num = 0x0000F00000000000U; ui_test[i].expected = "263882790666240";
482  i++; ui_test[i].num = 0x00000F0000000000U; ui_test[i].expected = "16492674416640";
483  i++; ui_test[i].num = 0x000000F000000000U; ui_test[i].expected = "1030792151040";
484  i++; ui_test[i].num = 0x0000000F00000000U; ui_test[i].expected = "64424509440";
485  i++; ui_test[i].num = 0x00000000F0000000U; ui_test[i].expected = "4026531840";
486  i++; ui_test[i].num = 0x000000000F000000U; ui_test[i].expected = "251658240";
487  i++; ui_test[i].num = 0x0000000000F00000U; ui_test[i].expected = "15728640";
488  i++; ui_test[i].num = 0x00000000000F0000U; ui_test[i].expected = "983040";
489  i++; ui_test[i].num = 0x000000000000F000U; ui_test[i].expected = "61440";
490  i++; ui_test[i].num = 0x0000000000000F00U; ui_test[i].expected = "3840";
491  i++; ui_test[i].num = 0x00000000000000F0U; ui_test[i].expected = "240";
492  i++; ui_test[i].num = 0x000000000000000FU; ui_test[i].expected = "15";
493
494  i++; ui_test[i].num = 0xC000000000000000U; ui_test[i].expected = "13835058055282163712";
495  i++; ui_test[i].num = 0x0C00000000000000U; ui_test[i].expected = "864691128455135232";
496  i++; ui_test[i].num = 0x00C0000000000000U; ui_test[i].expected = "54043195528445952";
497  i++; ui_test[i].num = 0x000C000000000000U; ui_test[i].expected = "3377699720527872";
498  i++; ui_test[i].num = 0x0000C00000000000U; ui_test[i].expected = "211106232532992";
499  i++; ui_test[i].num = 0x00000C0000000000U; ui_test[i].expected = "13194139533312";
500  i++; ui_test[i].num = 0x000000C000000000U; ui_test[i].expected = "824633720832";
501  i++; ui_test[i].num = 0x0000000C00000000U; ui_test[i].expected = "51539607552";
502  i++; ui_test[i].num = 0x00000000C0000000U; ui_test[i].expected = "3221225472";
503  i++; ui_test[i].num = 0x000000000C000000U; ui_test[i].expected = "201326592";
504  i++; ui_test[i].num = 0x0000000000C00000U; ui_test[i].expected = "12582912";
505  i++; ui_test[i].num = 0x00000000000C0000U; ui_test[i].expected = "786432";
506  i++; ui_test[i].num = 0x000000000000C000U; ui_test[i].expected = "49152";
507  i++; ui_test[i].num = 0x0000000000000C00U; ui_test[i].expected = "3072";
508  i++; ui_test[i].num = 0x00000000000000C0U; ui_test[i].expected = "192";
509  i++; ui_test[i].num = 0x000000000000000CU; ui_test[i].expected = "12";
510
511  i++; ui_test[i].num = 0x00000001U; ui_test[i].expected = "1";
512  i++; ui_test[i].num = 0x00000000U; ui_test[i].expected = "0";
513
514  num_uint_tests = i;
515
516#endif
517
518  for(i=1; i<=num_uint_tests; i++) {
519
520    for(j=0; j<BUFSZ; j++)
521      ui_test[i].result[j] = 'X';
522    ui_test[i].result[BUFSZ-1] = '\0';
523
524    (void)curl_msprintf(ui_test[i].result, "%u", ui_test[i].num);
525
526    if(memcmp(ui_test[i].result,
527               ui_test[i].expected,
528               strlen(ui_test[i].expected))) {
529      printf("unsigned int test #%.2d: Failed (Expected: %s Got: %s)\n",
530             i, ui_test[i].expected, ui_test[i].result);
531      failed++;
532    }
533
534  }
535
536  if(!failed)
537    printf("All curl_mprintf() unsigned int tests OK!\n");
538  else
539    printf("Some curl_mprintf() unsigned int tests Failed!\n");
540
541  return failed;
542}
543
544
545static int test_signed_int_formatting(void)
546{
547  int i, j;
548  int num_sint_tests;
549  int failed = 0;
550
551#if (SIZEOF_INT == 2)
552
553  i=1; si_test[i].num = 0x7FFF; si_test[i].expected = "32767";
554  i++; si_test[i].num = 0x7FFE; si_test[i].expected = "32766";
555  i++; si_test[i].num = 0x7FFD; si_test[i].expected = "32765";
556  i++; si_test[i].num = 0x7F00; si_test[i].expected = "32512";
557  i++; si_test[i].num = 0x07F0; si_test[i].expected = "2032";
558  i++; si_test[i].num = 0x007F; si_test[i].expected = "127";
559
560  i++; si_test[i].num = 0x7000; si_test[i].expected = "28672";
561  i++; si_test[i].num = 0x0700; si_test[i].expected = "1792";
562  i++; si_test[i].num = 0x0070; si_test[i].expected = "112";
563  i++; si_test[i].num = 0x0007; si_test[i].expected = "7";
564
565  i++; si_test[i].num = 0x5000; si_test[i].expected = "20480";
566  i++; si_test[i].num = 0x0500; si_test[i].expected = "1280";
567  i++; si_test[i].num = 0x0050; si_test[i].expected = "80";
568  i++; si_test[i].num = 0x0005; si_test[i].expected = "5";
569
570  i++; si_test[i].num = 0x0001; si_test[i].expected = "1";
571  i++; si_test[i].num = 0x0000; si_test[i].expected = "0";
572
573  i++; si_test[i].num = -0x7FFF -1; si_test[i].expected = "-32768";
574  i++; si_test[i].num = -0x7FFE -1; si_test[i].expected = "-32767";
575  i++; si_test[i].num = -0x7FFD -1; si_test[i].expected = "-32766";
576  i++; si_test[i].num = -0x7F00 -1; si_test[i].expected = "-32513";
577  i++; si_test[i].num = -0x07F0 -1; si_test[i].expected = "-2033";
578  i++; si_test[i].num = -0x007F -1; si_test[i].expected = "-128";
579
580  i++; si_test[i].num = -0x7000 -1; si_test[i].expected = "-28673";
581  i++; si_test[i].num = -0x0700 -1; si_test[i].expected = "-1793";
582  i++; si_test[i].num = -0x0070 -1; si_test[i].expected = "-113";
583  i++; si_test[i].num = -0x0007 -1; si_test[i].expected = "-8";
584
585  i++; si_test[i].num = -0x5000 -1; si_test[i].expected = "-20481";
586  i++; si_test[i].num = -0x0500 -1; si_test[i].expected = "-1281";
587  i++; si_test[i].num = -0x0050 -1; si_test[i].expected = "-81";
588  i++; si_test[i].num = -0x0005 -1; si_test[i].expected = "-6";
589
590  i++; si_test[i].num =  0x0000 -1; si_test[i].expected = "-1";
591
592  num_sint_tests = i;
593
594#elif (SIZEOF_INT == 4)
595
596  i=1; si_test[i].num = 0x7FFFFFFF; si_test[i].expected = "2147483647";
597  i++; si_test[i].num = 0x7FFFFFFE; si_test[i].expected = "2147483646";
598  i++; si_test[i].num = 0x7FFFFFFD; si_test[i].expected = "2147483645";
599  i++; si_test[i].num = 0x7FFF0000; si_test[i].expected = "2147418112";
600  i++; si_test[i].num = 0x00007FFF; si_test[i].expected = "32767";
601
602  i++; si_test[i].num = 0x7F000000; si_test[i].expected = "2130706432";
603  i++; si_test[i].num = 0x007F0000; si_test[i].expected = "8323072";
604  i++; si_test[i].num = 0x00007F00; si_test[i].expected = "32512";
605  i++; si_test[i].num = 0x0000007F; si_test[i].expected = "127";
606
607  i++; si_test[i].num = 0x70000000; si_test[i].expected = "1879048192";
608  i++; si_test[i].num = 0x07000000; si_test[i].expected = "117440512";
609  i++; si_test[i].num = 0x00700000; si_test[i].expected = "7340032";
610  i++; si_test[i].num = 0x00070000; si_test[i].expected = "458752";
611  i++; si_test[i].num = 0x00007000; si_test[i].expected = "28672";
612  i++; si_test[i].num = 0x00000700; si_test[i].expected = "1792";
613  i++; si_test[i].num = 0x00000070; si_test[i].expected = "112";
614  i++; si_test[i].num = 0x00000007; si_test[i].expected = "7";
615
616  i++; si_test[i].num = 0x50000000; si_test[i].expected = "1342177280";
617  i++; si_test[i].num = 0x05000000; si_test[i].expected = "83886080";
618  i++; si_test[i].num = 0x00500000; si_test[i].expected = "5242880";
619  i++; si_test[i].num = 0x00050000; si_test[i].expected = "327680";
620  i++; si_test[i].num = 0x00005000; si_test[i].expected = "20480";
621  i++; si_test[i].num = 0x00000500; si_test[i].expected = "1280";
622  i++; si_test[i].num = 0x00000050; si_test[i].expected = "80";
623  i++; si_test[i].num = 0x00000005; si_test[i].expected = "5";
624
625  i++; si_test[i].num = 0x00000001; si_test[i].expected = "1";
626  i++; si_test[i].num = 0x00000000; si_test[i].expected = "0";
627
628  i++; si_test[i].num = -0x7FFFFFFF -1; si_test[i].expected = "-2147483648";
629  i++; si_test[i].num = -0x7FFFFFFE -1; si_test[i].expected = "-2147483647";
630  i++; si_test[i].num = -0x7FFFFFFD -1; si_test[i].expected = "-2147483646";
631  i++; si_test[i].num = -0x7FFF0000 -1; si_test[i].expected = "-2147418113";
632  i++; si_test[i].num = -0x00007FFF -1; si_test[i].expected = "-32768";
633
634  i++; si_test[i].num = -0x7F000000 -1; si_test[i].expected = "-2130706433";
635  i++; si_test[i].num = -0x007F0000 -1; si_test[i].expected = "-8323073";
636  i++; si_test[i].num = -0x00007F00 -1; si_test[i].expected = "-32513";
637  i++; si_test[i].num = -0x0000007F -1; si_test[i].expected = "-128";
638
639  i++; si_test[i].num = -0x70000000 -1; si_test[i].expected = "-1879048193";
640  i++; si_test[i].num = -0x07000000 -1; si_test[i].expected = "-117440513";
641  i++; si_test[i].num = -0x00700000 -1; si_test[i].expected = "-7340033";
642  i++; si_test[i].num = -0x00070000 -1; si_test[i].expected = "-458753";
643  i++; si_test[i].num = -0x00007000 -1; si_test[i].expected = "-28673";
644  i++; si_test[i].num = -0x00000700 -1; si_test[i].expected = "-1793";
645  i++; si_test[i].num = -0x00000070 -1; si_test[i].expected = "-113";
646  i++; si_test[i].num = -0x00000007 -1; si_test[i].expected = "-8";
647
648  i++; si_test[i].num = -0x50000000 -1; si_test[i].expected = "-1342177281";
649  i++; si_test[i].num = -0x05000000 -1; si_test[i].expected = "-83886081";
650  i++; si_test[i].num = -0x00500000 -1; si_test[i].expected = "-5242881";
651  i++; si_test[i].num = -0x00050000 -1; si_test[i].expected = "-327681";
652  i++; si_test[i].num = -0x00005000 -1; si_test[i].expected = "-20481";
653  i++; si_test[i].num = -0x00000500 -1; si_test[i].expected = "-1281";
654  i++; si_test[i].num = -0x00000050 -1; si_test[i].expected = "-81";
655  i++; si_test[i].num = -0x00000005 -1; si_test[i].expected = "-6";
656
657  i++; si_test[i].num =  0x00000000 -1; si_test[i].expected = "-1";
658
659  num_sint_tests = i;
660
661#elif (SIZEOF_INT == 8)
662
663  i=1; si_test[i].num = 0x7FFFFFFFFFFFFFFF; si_test[i].expected = "9223372036854775807";
664  i++; si_test[i].num = 0x7FFFFFFFFFFFFFFE; si_test[i].expected = "9223372036854775806";
665  i++; si_test[i].num = 0x7FFFFFFFFFFFFFFD; si_test[i].expected = "9223372036854775805";
666  i++; si_test[i].num = 0x7FFFFFFF00000000; si_test[i].expected = "9223372032559808512";
667  i++; si_test[i].num = 0x000000007FFFFFFF; si_test[i].expected = "2147483647";
668
669  i++; si_test[i].num = 0x7FFF000000000000; si_test[i].expected = "9223090561878065152";
670  i++; si_test[i].num = 0x00007FFF00000000; si_test[i].expected = "140733193388032";
671  i++; si_test[i].num = 0x000000007FFF0000; si_test[i].expected = "2147418112";
672  i++; si_test[i].num = 0x0000000000007FFF; si_test[i].expected = "32767";
673
674  i++; si_test[i].num = 0x7F00000000000000; si_test[i].expected = "9151314442816847872";
675  i++; si_test[i].num = 0x007F000000000000; si_test[i].expected = "35747322042253312";
676  i++; si_test[i].num = 0x00007F0000000000; si_test[i].expected = "139637976727552";
677  i++; si_test[i].num = 0x0000007F00000000; si_test[i].expected = "545460846592";
678  i++; si_test[i].num = 0x000000007F000000; si_test[i].expected = "2130706432";
679  i++; si_test[i].num = 0x00000000007F0000; si_test[i].expected = "8323072";
680  i++; si_test[i].num = 0x0000000000007F00; si_test[i].expected = "32512";
681  i++; si_test[i].num = 0x000000000000007F; si_test[i].expected = "127";
682
683  i++; si_test[i].num = 0x7000000000000000; si_test[i].expected = "8070450532247928832";
684  i++; si_test[i].num = 0x0700000000000000; si_test[i].expected = "504403158265495552";
685  i++; si_test[i].num = 0x0070000000000000; si_test[i].expected = "31525197391593472";
686  i++; si_test[i].num = 0x0007000000000000; si_test[i].expected = "1970324836974592";
687  i++; si_test[i].num = 0x0000700000000000; si_test[i].expected = "123145302310912";
688  i++; si_test[i].num = 0x0000070000000000; si_test[i].expected = "7696581394432";
689  i++; si_test[i].num = 0x0000007000000000; si_test[i].expected = "481036337152";
690  i++; si_test[i].num = 0x0000000700000000; si_test[i].expected = "30064771072";
691  i++; si_test[i].num = 0x0000000070000000; si_test[i].expected = "1879048192";
692  i++; si_test[i].num = 0x0000000007000000; si_test[i].expected = "117440512";
693  i++; si_test[i].num = 0x0000000000700000; si_test[i].expected = "7340032";
694  i++; si_test[i].num = 0x0000000000070000; si_test[i].expected = "458752";
695  i++; si_test[i].num = 0x0000000000007000; si_test[i].expected = "28672";
696  i++; si_test[i].num = 0x0000000000000700; si_test[i].expected = "1792";
697  i++; si_test[i].num = 0x0000000000000070; si_test[i].expected = "112";
698  i++; si_test[i].num = 0x0000000000000007; si_test[i].expected = "7";
699
700  i++; si_test[i].num = 0x0000000000000001; si_test[i].expected = "1";
701  i++; si_test[i].num = 0x0000000000000000; si_test[i].expected = "0";
702
703  i++; si_test[i].num = -0x7FFFFFFFFFFFFFFF -1; si_test[i].expected = "-9223372036854775808";
704  i++; si_test[i].num = -0x7FFFFFFFFFFFFFFE -1; si_test[i].expected = "-9223372036854775807";
705  i++; si_test[i].num = -0x7FFFFFFFFFFFFFFD -1; si_test[i].expected = "-9223372036854775806";
706  i++; si_test[i].num = -0x7FFFFFFF00000000 -1; si_test[i].expected = "-9223372032559808513";
707  i++; si_test[i].num = -0x000000007FFFFFFF -1; si_test[i].expected = "-2147483648";
708
709  i++; si_test[i].num = -0x7FFF000000000000 -1; si_test[i].expected = "-9223090561878065153";
710  i++; si_test[i].num = -0x00007FFF00000000 -1; si_test[i].expected = "-140733193388033";
711  i++; si_test[i].num = -0x000000007FFF0000 -1; si_test[i].expected = "-2147418113";
712  i++; si_test[i].num = -0x0000000000007FFF -1; si_test[i].expected = "-32768";
713
714  i++; si_test[i].num = -0x7F00000000000000 -1; si_test[i].expected = "-9151314442816847873";
715  i++; si_test[i].num = -0x007F000000000000 -1; si_test[i].expected = "-35747322042253313";
716  i++; si_test[i].num = -0x00007F0000000000 -1; si_test[i].expected = "-139637976727553";
717  i++; si_test[i].num = -0x0000007F00000000 -1; si_test[i].expected = "-545460846593";
718  i++; si_test[i].num = -0x000000007F000000 -1; si_test[i].expected = "-2130706433";
719  i++; si_test[i].num = -0x00000000007F0000 -1; si_test[i].expected = "-8323073";
720  i++; si_test[i].num = -0x0000000000007F00 -1; si_test[i].expected = "-32513";
721  i++; si_test[i].num = -0x000000000000007F -1; si_test[i].expected = "-128";
722
723  i++; si_test[i].num = -0x7000000000000000 -1; si_test[i].expected = "-8070450532247928833";
724  i++; si_test[i].num = -0x0700000000000000 -1; si_test[i].expected = "-504403158265495553";
725  i++; si_test[i].num = -0x0070000000000000 -1; si_test[i].expected = "-31525197391593473";
726  i++; si_test[i].num = -0x0007000000000000 -1; si_test[i].expected = "-1970324836974593";
727  i++; si_test[i].num = -0x0000700000000000 -1; si_test[i].expected = "-123145302310913";
728  i++; si_test[i].num = -0x0000070000000000 -1; si_test[i].expected = "-7696581394433";
729  i++; si_test[i].num = -0x0000007000000000 -1; si_test[i].expected = "-481036337153";
730  i++; si_test[i].num = -0x0000000700000000 -1; si_test[i].expected = "-30064771073";
731  i++; si_test[i].num = -0x0000000070000000 -1; si_test[i].expected = "-1879048193";
732  i++; si_test[i].num = -0x0000000007000000 -1; si_test[i].expected = "-117440513";
733  i++; si_test[i].num = -0x0000000000700000 -1; si_test[i].expected = "-7340033";
734  i++; si_test[i].num = -0x0000000000070000 -1; si_test[i].expected = "-458753";
735  i++; si_test[i].num = -0x0000000000007000 -1; si_test[i].expected = "-28673";
736  i++; si_test[i].num = -0x0000000000000700 -1; si_test[i].expected = "-1793";
737  i++; si_test[i].num = -0x0000000000000070 -1; si_test[i].expected = "-113";
738  i++; si_test[i].num = -0x0000000000000007 -1; si_test[i].expected = "-8";
739
740  i++; si_test[i].num =  0x0000000000000000 -1; si_test[i].expected = "-1";
741
742  num_sint_tests = i;
743
744#endif
745
746  for(i=1; i<=num_sint_tests; i++) {
747
748    for(j=0; j<BUFSZ; j++)
749      si_test[i].result[j] = 'X';
750    si_test[i].result[BUFSZ-1] = '\0';
751
752    (void)curl_msprintf(si_test[i].result, "%d", si_test[i].num);
753
754    if(memcmp(si_test[i].result,
755              si_test[i].expected,
756              strlen(si_test[i].expected))) {
757      printf("signed int test #%.2d: Failed (Expected: %s Got: %s)\n",
758             i, si_test[i].expected, si_test[i].result);
759      failed++;
760    }
761
762  }
763
764  if(!failed)
765    printf("All curl_mprintf() signed int tests OK!\n");
766  else
767    printf("Some curl_mprintf() signed int tests Failed!\n");
768
769  return failed;
770}
771
772
773static int test_unsigned_long_formatting(void)
774{
775  int i, j;
776  int num_ulong_tests;
777  int failed = 0;
778
779#if (CURL_SIZEOF_LONG == 2)
780
781  i=1; ul_test[i].num = 0xFFFFUL; ul_test[i].expected = "65535";
782  i++; ul_test[i].num = 0xFF00UL; ul_test[i].expected = "65280";
783  i++; ul_test[i].num = 0x00FFUL; ul_test[i].expected = "255";
784
785  i++; ul_test[i].num = 0xF000UL; ul_test[i].expected = "61440";
786  i++; ul_test[i].num = 0x0F00UL; ul_test[i].expected = "3840";
787  i++; ul_test[i].num = 0x00F0UL; ul_test[i].expected = "240";
788  i++; ul_test[i].num = 0x000FUL; ul_test[i].expected = "15";
789
790  i++; ul_test[i].num = 0xC000UL; ul_test[i].expected = "49152";
791  i++; ul_test[i].num = 0x0C00UL; ul_test[i].expected = "3072";
792  i++; ul_test[i].num = 0x00C0UL; ul_test[i].expected = "192";
793  i++; ul_test[i].num = 0x000CUL; ul_test[i].expected = "12";
794
795  i++; ul_test[i].num = 0x0001UL; ul_test[i].expected = "1";
796  i++; ul_test[i].num = 0x0000UL; ul_test[i].expected = "0";
797
798  num_ulong_tests = i;
799
800#elif (CURL_SIZEOF_LONG == 4)
801
802  i=1; ul_test[i].num = 0xFFFFFFFFUL; ul_test[i].expected = "4294967295";
803  i++; ul_test[i].num = 0xFFFF0000UL; ul_test[i].expected = "4294901760";
804  i++; ul_test[i].num = 0x0000FFFFUL; ul_test[i].expected = "65535";
805
806  i++; ul_test[i].num = 0xFF000000UL; ul_test[i].expected = "4278190080";
807  i++; ul_test[i].num = 0x00FF0000UL; ul_test[i].expected = "16711680";
808  i++; ul_test[i].num = 0x0000FF00UL; ul_test[i].expected = "65280";
809  i++; ul_test[i].num = 0x000000FFUL; ul_test[i].expected = "255";
810
811  i++; ul_test[i].num = 0xF0000000UL; ul_test[i].expected = "4026531840";
812  i++; ul_test[i].num = 0x0F000000UL; ul_test[i].expected = "251658240";
813  i++; ul_test[i].num = 0x00F00000UL; ul_test[i].expected = "15728640";
814  i++; ul_test[i].num = 0x000F0000UL; ul_test[i].expected = "983040";
815  i++; ul_test[i].num = 0x0000F000UL; ul_test[i].expected = "61440";
816  i++; ul_test[i].num = 0x00000F00UL; ul_test[i].expected = "3840";
817  i++; ul_test[i].num = 0x000000F0UL; ul_test[i].expected = "240";
818  i++; ul_test[i].num = 0x0000000FUL; ul_test[i].expected = "15";
819
820  i++; ul_test[i].num = 0xC0000000UL; ul_test[i].expected = "3221225472";
821  i++; ul_test[i].num = 0x0C000000UL; ul_test[i].expected = "201326592";
822  i++; ul_test[i].num = 0x00C00000UL; ul_test[i].expected = "12582912";
823  i++; ul_test[i].num = 0x000C0000UL; ul_test[i].expected = "786432";
824  i++; ul_test[i].num = 0x0000C000UL; ul_test[i].expected = "49152";
825  i++; ul_test[i].num = 0x00000C00UL; ul_test[i].expected = "3072";
826  i++; ul_test[i].num = 0x000000C0UL; ul_test[i].expected = "192";
827  i++; ul_test[i].num = 0x0000000CUL; ul_test[i].expected = "12";
828
829  i++; ul_test[i].num = 0x00000001UL; ul_test[i].expected = "1";
830  i++; ul_test[i].num = 0x00000000UL; ul_test[i].expected = "0";
831
832  num_ulong_tests = i;
833
834#elif (CURL_SIZEOF_LONG == 8)
835
836  i=1; ul_test[i].num = 0xFFFFFFFFFFFFFFFFUL; ul_test[i].expected = "18446744073709551615";
837  i++; ul_test[i].num = 0xFFFFFFFF00000000UL; ul_test[i].expected = "18446744069414584320";
838  i++; ul_test[i].num = 0x00000000FFFFFFFFUL; ul_test[i].expected = "4294967295";
839
840  i++; ul_test[i].num = 0xFFFF000000000000UL; ul_test[i].expected = "18446462598732840960";
841  i++; ul_test[i].num = 0x0000FFFF00000000UL; ul_test[i].expected = "281470681743360";
842  i++; ul_test[i].num = 0x00000000FFFF0000UL; ul_test[i].expected = "4294901760";
843  i++; ul_test[i].num = 0x000000000000FFFFUL; ul_test[i].expected = "65535";
844
845  i++; ul_test[i].num = 0xFF00000000000000UL; ul_test[i].expected = "18374686479671623680";
846  i++; ul_test[i].num = 0x00FF000000000000UL; ul_test[i].expected = "71776119061217280";
847  i++; ul_test[i].num = 0x0000FF0000000000UL; ul_test[i].expected = "280375465082880";
848  i++; ul_test[i].num = 0x000000FF00000000UL; ul_test[i].expected = "1095216660480";
849  i++; ul_test[i].num = 0x00000000FF000000UL; ul_test[i].expected = "4278190080";
850  i++; ul_test[i].num = 0x0000000000FF0000UL; ul_test[i].expected = "16711680";
851  i++; ul_test[i].num = 0x000000000000FF00UL; ul_test[i].expected = "65280";
852  i++; ul_test[i].num = 0x00000000000000FFUL; ul_test[i].expected = "255";
853
854  i++; ul_test[i].num = 0xF000000000000000UL; ul_test[i].expected = "17293822569102704640";
855  i++; ul_test[i].num = 0x0F00000000000000UL; ul_test[i].expected = "1080863910568919040";
856  i++; ul_test[i].num = 0x00F0000000000000UL; ul_test[i].expected = "67553994410557440";
857  i++; ul_test[i].num = 0x000F000000000000UL; ul_test[i].expected = "4222124650659840";
858  i++; ul_test[i].num = 0x0000F00000000000UL; ul_test[i].expected = "263882790666240";
859  i++; ul_test[i].num = 0x00000F0000000000UL; ul_test[i].expected = "16492674416640";
860  i++; ul_test[i].num = 0x000000F000000000UL; ul_test[i].expected = "1030792151040";
861  i++; ul_test[i].num = 0x0000000F00000000UL; ul_test[i].expected = "64424509440";
862  i++; ul_test[i].num = 0x00000000F0000000UL; ul_test[i].expected = "4026531840";
863  i++; ul_test[i].num = 0x000000000F000000UL; ul_test[i].expected = "251658240";
864  i++; ul_test[i].num = 0x0000000000F00000UL; ul_test[i].expected = "15728640";
865  i++; ul_test[i].num = 0x00000000000F0000UL; ul_test[i].expected = "983040";
866  i++; ul_test[i].num = 0x000000000000F000UL; ul_test[i].expected = "61440";
867  i++; ul_test[i].num = 0x0000000000000F00UL; ul_test[i].expected = "3840";
868  i++; ul_test[i].num = 0x00000000000000F0UL; ul_test[i].expected = "240";
869  i++; ul_test[i].num = 0x000000000000000FUL; ul_test[i].expected = "15";
870
871  i++; ul_test[i].num = 0xC000000000000000UL; ul_test[i].expected = "13835058055282163712";
872  i++; ul_test[i].num = 0x0C00000000000000UL; ul_test[i].expected = "864691128455135232";
873  i++; ul_test[i].num = 0x00C0000000000000UL; ul_test[i].expected = "54043195528445952";
874  i++; ul_test[i].num = 0x000C000000000000UL; ul_test[i].expected = "3377699720527872";
875  i++; ul_test[i].num = 0x0000C00000000000UL; ul_test[i].expected = "211106232532992";
876  i++; ul_test[i].num = 0x00000C0000000000UL; ul_test[i].expected = "13194139533312";
877  i++; ul_test[i].num = 0x000000C000000000UL; ul_test[i].expected = "824633720832";
878  i++; ul_test[i].num = 0x0000000C00000000UL; ul_test[i].expected = "51539607552";
879  i++; ul_test[i].num = 0x00000000C0000000UL; ul_test[i].expected = "3221225472";
880  i++; ul_test[i].num = 0x000000000C000000UL; ul_test[i].expected = "201326592";
881  i++; ul_test[i].num = 0x0000000000C00000UL; ul_test[i].expected = "12582912";
882  i++; ul_test[i].num = 0x00000000000C0000UL; ul_test[i].expected = "786432";
883  i++; ul_test[i].num = 0x000000000000C000UL; ul_test[i].expected = "49152";
884  i++; ul_test[i].num = 0x0000000000000C00UL; ul_test[i].expected = "3072";
885  i++; ul_test[i].num = 0x00000000000000C0UL; ul_test[i].expected = "192";
886  i++; ul_test[i].num = 0x000000000000000CUL; ul_test[i].expected = "12";
887
888  i++; ul_test[i].num = 0x00000001UL; ul_test[i].expected = "1";
889  i++; ul_test[i].num = 0x00000000UL; ul_test[i].expected = "0";
890
891  num_ulong_tests = i;
892
893#endif
894
895  for(i=1; i<=num_ulong_tests; i++) {
896
897    for(j=0; j<BUFSZ; j++)
898      ul_test[i].result[j] = 'X';
899    ul_test[i].result[BUFSZ-1] = '\0';
900
901    (void)curl_msprintf(ul_test[i].result, "%lu", ul_test[i].num);
902
903    if(memcmp(ul_test[i].result,
904               ul_test[i].expected,
905               strlen(ul_test[i].expected))) {
906      printf("unsigned long test #%.2d: Failed (Expected: %s Got: %s)\n",
907             i, ul_test[i].expected, ul_test[i].result);
908      failed++;
909    }
910
911  }
912
913  if(!failed)
914    printf("All curl_mprintf() unsigned long tests OK!\n");
915  else
916    printf("Some curl_mprintf() unsigned long tests Failed!\n");
917
918  return failed;
919}
920
921
922static int test_signed_long_formatting(void)
923{
924  int i, j;
925  int num_slong_tests;
926  int failed = 0;
927
928#if (CURL_SIZEOF_LONG == 2)
929
930  i=1; sl_test[i].num = 0x7FFFL; sl_test[i].expected = "32767";
931  i++; sl_test[i].num = 0x7FFEL; sl_test[i].expected = "32766";
932  i++; sl_test[i].num = 0x7FFDL; sl_test[i].expected = "32765";
933  i++; sl_test[i].num = 0x7F00L; sl_test[i].expected = "32512";
934  i++; sl_test[i].num = 0x07F0L; sl_test[i].expected = "2032";
935  i++; sl_test[i].num = 0x007FL; sl_test[i].expected = "127";
936
937  i++; sl_test[i].num = 0x7000L; sl_test[i].expected = "28672";
938  i++; sl_test[i].num = 0x0700L; sl_test[i].expected = "1792";
939  i++; sl_test[i].num = 0x0070L; sl_test[i].expected = "112";
940  i++; sl_test[i].num = 0x0007L; sl_test[i].expected = "7";
941
942  i++; sl_test[i].num = 0x5000L; sl_test[i].expected = "20480";
943  i++; sl_test[i].num = 0x0500L; sl_test[i].expected = "1280";
944  i++; sl_test[i].num = 0x0050L; sl_test[i].expected = "80";
945  i++; sl_test[i].num = 0x0005L; sl_test[i].expected = "5";
946
947  i++; sl_test[i].num = 0x0001L; sl_test[i].expected = "1";
948  i++; sl_test[i].num = 0x0000L; sl_test[i].expected = "0";
949
950  i++; sl_test[i].num = -0x7FFFL -1L; sl_test[i].expected = "-32768";
951  i++; sl_test[i].num = -0x7FFEL -1L; sl_test[i].expected = "-32767";
952  i++; sl_test[i].num = -0x7FFDL -1L; sl_test[i].expected = "-32766";
953  i++; sl_test[i].num = -0x7F00L -1L; sl_test[i].expected = "-32513";
954  i++; sl_test[i].num = -0x07F0L -1L; sl_test[i].expected = "-2033";
955  i++; sl_test[i].num = -0x007FL -1L; sl_test[i].expected = "-128";
956
957  i++; sl_test[i].num = -0x7000L -1L; sl_test[i].expected = "-28673";
958  i++; sl_test[i].num = -0x0700L -1L; sl_test[i].expected = "-1793";
959  i++; sl_test[i].num = -0x0070L -1L; sl_test[i].expected = "-113";
960  i++; sl_test[i].num = -0x0007L -1L; sl_test[i].expected = "-8";
961
962  i++; sl_test[i].num = -0x5000L -1L; sl_test[i].expected = "-20481";
963  i++; sl_test[i].num = -0x0500L -1L; sl_test[i].expected = "-1281";
964  i++; sl_test[i].num = -0x0050L -1L; sl_test[i].expected = "-81";
965  i++; sl_test[i].num = -0x0005L -1L; sl_test[i].expected = "-6";
966
967  i++; sl_test[i].num =  0x0000L -1L; sl_test[i].expected = "-1";
968
969  num_slong_tests = i;
970
971#elif (CURL_SIZEOF_LONG == 4)
972
973  i=1; sl_test[i].num = 0x7FFFFFFFL; sl_test[i].expected = "2147483647";
974  i++; sl_test[i].num = 0x7FFFFFFEL; sl_test[i].expected = "2147483646";
975  i++; sl_test[i].num = 0x7FFFFFFDL; sl_test[i].expected = "2147483645";
976  i++; sl_test[i].num = 0x7FFF0000L; sl_test[i].expected = "2147418112";
977  i++; sl_test[i].num = 0x00007FFFL; sl_test[i].expected = "32767";
978
979  i++; sl_test[i].num = 0x7F000000L; sl_test[i].expected = "2130706432";
980  i++; sl_test[i].num = 0x007F0000L; sl_test[i].expected = "8323072";
981  i++; sl_test[i].num = 0x00007F00L; sl_test[i].expected = "32512";
982  i++; sl_test[i].num = 0x0000007FL; sl_test[i].expected = "127";
983
984  i++; sl_test[i].num = 0x70000000L; sl_test[i].expected = "1879048192";
985  i++; sl_test[i].num = 0x07000000L; sl_test[i].expected = "117440512";
986  i++; sl_test[i].num = 0x00700000L; sl_test[i].expected = "7340032";
987  i++; sl_test[i].num = 0x00070000L; sl_test[i].expected = "458752";
988  i++; sl_test[i].num = 0x00007000L; sl_test[i].expected = "28672";
989  i++; sl_test[i].num = 0x00000700L; sl_test[i].expected = "1792";
990  i++; sl_test[i].num = 0x00000070L; sl_test[i].expected = "112";
991  i++; sl_test[i].num = 0x00000007L; sl_test[i].expected = "7";
992
993  i++; sl_test[i].num = 0x50000000L; sl_test[i].expected = "1342177280";
994  i++; sl_test[i].num = 0x05000000L; sl_test[i].expected = "83886080";
995  i++; sl_test[i].num = 0x00500000L; sl_test[i].expected = "5242880";
996  i++; sl_test[i].num = 0x00050000L; sl_test[i].expected = "327680";
997  i++; sl_test[i].num = 0x00005000L; sl_test[i].expected = "20480";
998  i++; sl_test[i].num = 0x00000500L; sl_test[i].expected = "1280";
999  i++; sl_test[i].num = 0x00000050L; sl_test[i].expected = "80";
1000  i++; sl_test[i].num = 0x00000005L; sl_test[i].expected = "5";
1001
1002  i++; sl_test[i].num = 0x00000001L; sl_test[i].expected = "1";
1003  i++; sl_test[i].num = 0x00000000L; sl_test[i].expected = "0";
1004
1005  i++; sl_test[i].num = -0x7FFFFFFFL -1L; sl_test[i].expected = "-2147483648";
1006  i++; sl_test[i].num = -0x7FFFFFFEL -1L; sl_test[i].expected = "-2147483647";
1007  i++; sl_test[i].num = -0x7FFFFFFDL -1L; sl_test[i].expected = "-2147483646";
1008  i++; sl_test[i].num = -0x7FFF0000L -1L; sl_test[i].expected = "-2147418113";
1009  i++; sl_test[i].num = -0x00007FFFL -1L; sl_test[i].expected = "-32768";
1010
1011  i++; sl_test[i].num = -0x7F000000L -1L; sl_test[i].expected = "-2130706433";
1012  i++; sl_test[i].num = -0x007F0000L -1L; sl_test[i].expected = "-8323073";
1013  i++; sl_test[i].num = -0x00007F00L -1L; sl_test[i].expected = "-32513";
1014  i++; sl_test[i].num = -0x0000007FL -1L; sl_test[i].expected = "-128";
1015
1016  i++; sl_test[i].num = -0x70000000L -1L; sl_test[i].expected = "-1879048193";
1017  i++; sl_test[i].num = -0x07000000L -1L; sl_test[i].expected = "-117440513";
1018  i++; sl_test[i].num = -0x00700000L -1L; sl_test[i].expected = "-7340033";
1019  i++; sl_test[i].num = -0x00070000L -1L; sl_test[i].expected = "-458753";
1020  i++; sl_test[i].num = -0x00007000L -1L; sl_test[i].expected = "-28673";
1021  i++; sl_test[i].num = -0x00000700L -1L; sl_test[i].expected = "-1793";
1022  i++; sl_test[i].num = -0x00000070L -1L; sl_test[i].expected = "-113";
1023  i++; sl_test[i].num = -0x00000007L -1L; sl_test[i].expected = "-8";
1024
1025  i++; sl_test[i].num = -0x50000000L -1L; sl_test[i].expected = "-1342177281";
1026  i++; sl_test[i].num = -0x05000000L -1L; sl_test[i].expected = "-83886081";
1027  i++; sl_test[i].num = -0x00500000L -1L; sl_test[i].expected = "-5242881";
1028  i++; sl_test[i].num = -0x00050000L -1L; sl_test[i].expected = "-327681";
1029  i++; sl_test[i].num = -0x00005000L -1L; sl_test[i].expected = "-20481";
1030  i++; sl_test[i].num = -0x00000500L -1L; sl_test[i].expected = "-1281";
1031  i++; sl_test[i].num = -0x00000050L -1L; sl_test[i].expected = "-81";
1032  i++; sl_test[i].num = -0x00000005L -1L; sl_test[i].expected = "-6";
1033
1034  i++; sl_test[i].num =  0x00000000L -1L; sl_test[i].expected = "-1";
1035
1036  num_slong_tests = i;
1037
1038#elif (CURL_SIZEOF_LONG == 8)
1039
1040  i=1; sl_test[i].num = 0x7FFFFFFFFFFFFFFFL; sl_test[i].expected = "9223372036854775807";
1041  i++; sl_test[i].num = 0x7FFFFFFFFFFFFFFEL; sl_test[i].expected = "9223372036854775806";
1042  i++; sl_test[i].num = 0x7FFFFFFFFFFFFFFDL; sl_test[i].expected = "9223372036854775805";
1043  i++; sl_test[i].num = 0x7FFFFFFF00000000L; sl_test[i].expected = "9223372032559808512";
1044  i++; sl_test[i].num = 0x000000007FFFFFFFL; sl_test[i].expected = "2147483647";
1045
1046  i++; sl_test[i].num = 0x7FFF000000000000L; sl_test[i].expected = "9223090561878065152";
1047  i++; sl_test[i].num = 0x00007FFF00000000L; sl_test[i].expected = "140733193388032";
1048  i++; sl_test[i].num = 0x000000007FFF0000L; sl_test[i].expected = "2147418112";
1049  i++; sl_test[i].num = 0x0000000000007FFFL; sl_test[i].expected = "32767";
1050
1051  i++; sl_test[i].num = 0x7F00000000000000L; sl_test[i].expected = "9151314442816847872";
1052  i++; sl_test[i].num = 0x007F000000000000L; sl_test[i].expected = "35747322042253312";
1053  i++; sl_test[i].num = 0x00007F0000000000L; sl_test[i].expected = "139637976727552";
1054  i++; sl_test[i].num = 0x0000007F00000000L; sl_test[i].expected = "545460846592";
1055  i++; sl_test[i].num = 0x000000007F000000L; sl_test[i].expected = "2130706432";
1056  i++; sl_test[i].num = 0x00000000007F0000L; sl_test[i].expected = "8323072";
1057  i++; sl_test[i].num = 0x0000000000007F00L; sl_test[i].expected = "32512";
1058  i++; sl_test[i].num = 0x000000000000007FL; sl_test[i].expected = "127";
1059
1060  i++; sl_test[i].num = 0x7000000000000000L; sl_test[i].expected = "8070450532247928832";
1061  i++; sl_test[i].num = 0x0700000000000000L; sl_test[i].expected = "504403158265495552";
1062  i++; sl_test[i].num = 0x0070000000000000L; sl_test[i].expected = "31525197391593472";
1063  i++; sl_test[i].num = 0x0007000000000000L; sl_test[i].expected = "1970324836974592";
1064  i++; sl_test[i].num = 0x0000700000000000L; sl_test[i].expected = "123145302310912";
1065  i++; sl_test[i].num = 0x0000070000000000L; sl_test[i].expected = "7696581394432";
1066  i++; sl_test[i].num = 0x0000007000000000L; sl_test[i].expected = "481036337152";
1067  i++; sl_test[i].num = 0x0000000700000000L; sl_test[i].expected = "30064771072";
1068  i++; sl_test[i].num = 0x0000000070000000L; sl_test[i].expected = "1879048192";
1069  i++; sl_test[i].num = 0x0000000007000000L; sl_test[i].expected = "117440512";
1070  i++; sl_test[i].num = 0x0000000000700000L; sl_test[i].expected = "7340032";
1071  i++; sl_test[i].num = 0x0000000000070000L; sl_test[i].expected = "458752";
1072  i++; sl_test[i].num = 0x0000000000007000L; sl_test[i].expected = "28672";
1073  i++; sl_test[i].num = 0x0000000000000700L; sl_test[i].expected = "1792";
1074  i++; sl_test[i].num = 0x0000000000000070L; sl_test[i].expected = "112";
1075  i++; sl_test[i].num = 0x0000000000000007L; sl_test[i].expected = "7";
1076
1077  i++; sl_test[i].num = 0x0000000000000001L; sl_test[i].expected = "1";
1078  i++; sl_test[i].num = 0x0000000000000000L; sl_test[i].expected = "0";
1079
1080  i++; sl_test[i].num = -0x7FFFFFFFFFFFFFFFL -1L; sl_test[i].expected = "-9223372036854775808";
1081  i++; sl_test[i].num = -0x7FFFFFFFFFFFFFFEL -1L; sl_test[i].expected = "-9223372036854775807";
1082  i++; sl_test[i].num = -0x7FFFFFFFFFFFFFFDL -1L; sl_test[i].expected = "-9223372036854775806";
1083  i++; sl_test[i].num = -0x7FFFFFFF00000000L -1L; sl_test[i].expected = "-9223372032559808513";
1084  i++; sl_test[i].num = -0x000000007FFFFFFFL -1L; sl_test[i].expected = "-2147483648";
1085
1086  i++; sl_test[i].num = -0x7FFF000000000000L -1L; sl_test[i].expected = "-9223090561878065153";
1087  i++; sl_test[i].num = -0x00007FFF00000000L -1L; sl_test[i].expected = "-140733193388033";
1088  i++; sl_test[i].num = -0x000000007FFF0000L -1L; sl_test[i].expected = "-2147418113";
1089  i++; sl_test[i].num = -0x0000000000007FFFL -1L; sl_test[i].expected = "-32768";
1090
1091  i++; sl_test[i].num = -0x7F00000000000000L -1L; sl_test[i].expected = "-9151314442816847873";
1092  i++; sl_test[i].num = -0x007F000000000000L -1L; sl_test[i].expected = "-35747322042253313";
1093  i++; sl_test[i].num = -0x00007F0000000000L -1L; sl_test[i].expected = "-139637976727553";
1094  i++; sl_test[i].num = -0x0000007F00000000L -1L; sl_test[i].expected = "-545460846593";
1095  i++; sl_test[i].num = -0x000000007F000000L -1L; sl_test[i].expected = "-2130706433";
1096  i++; sl_test[i].num = -0x00000000007F0000L -1L; sl_test[i].expected = "-8323073";
1097  i++; sl_test[i].num = -0x0000000000007F00L -1L; sl_test[i].expected = "-32513";
1098  i++; sl_test[i].num = -0x000000000000007FL -1L; sl_test[i].expected = "-128";
1099
1100  i++; sl_test[i].num = -0x7000000000000000L -1L; sl_test[i].expected = "-8070450532247928833";
1101  i++; sl_test[i].num = -0x0700000000000000L -1L; sl_test[i].expected = "-504403158265495553";
1102  i++; sl_test[i].num = -0x0070000000000000L -1L; sl_test[i].expected = "-31525197391593473";
1103  i++; sl_test[i].num = -0x0007000000000000L -1L; sl_test[i].expected = "-1970324836974593";
1104  i++; sl_test[i].num = -0x0000700000000000L -1L; sl_test[i].expected = "-123145302310913";
1105  i++; sl_test[i].num = -0x0000070000000000L -1L; sl_test[i].expected = "-7696581394433";
1106  i++; sl_test[i].num = -0x0000007000000000L -1L; sl_test[i].expected = "-481036337153";
1107  i++; sl_test[i].num = -0x0000000700000000L -1L; sl_test[i].expected = "-30064771073";
1108  i++; sl_test[i].num = -0x0000000070000000L -1L; sl_test[i].expected = "-1879048193";
1109  i++; sl_test[i].num = -0x0000000007000000L -1L; sl_test[i].expected = "-117440513";
1110  i++; sl_test[i].num = -0x0000000000700000L -1L; sl_test[i].expected = "-7340033";
1111  i++; sl_test[i].num = -0x0000000000070000L -1L; sl_test[i].expected = "-458753";
1112  i++; sl_test[i].num = -0x0000000000007000L -1L; sl_test[i].expected = "-28673";
1113  i++; sl_test[i].num = -0x0000000000000700L -1L; sl_test[i].expected = "-1793";
1114  i++; sl_test[i].num = -0x0000000000000070L -1L; sl_test[i].expected = "-113";
1115  i++; sl_test[i].num = -0x0000000000000007L -1L; sl_test[i].expected = "-8";
1116
1117  i++; sl_test[i].num =  0x0000000000000000L -1L; sl_test[i].expected = "-1";
1118
1119  num_slong_tests = i;
1120
1121#endif
1122
1123  for(i=1; i<=num_slong_tests; i++) {
1124
1125    for(j=0; j<BUFSZ; j++)
1126      sl_test[i].result[j] = 'X';
1127    sl_test[i].result[BUFSZ-1] = '\0';
1128
1129    (void)curl_msprintf(sl_test[i].result, "%ld", sl_test[i].num);
1130
1131    if(memcmp(sl_test[i].result,
1132              sl_test[i].expected,
1133              strlen(sl_test[i].expected))) {
1134      printf("signed long test #%.2d: Failed (Expected: %s Got: %s)\n",
1135             i, sl_test[i].expected, sl_test[i].result);
1136      failed++;
1137    }
1138
1139  }
1140
1141  if(!failed)
1142    printf("All curl_mprintf() signed long tests OK!\n");
1143  else
1144    printf("Some curl_mprintf() signed long tests Failed!\n");
1145
1146  return failed;
1147}
1148
1149
1150static int test_curl_off_t_formatting(void)
1151{
1152  int i, j;
1153  int num_cofft_tests;
1154  int failed = 0;
1155
1156#if (CURL_SIZEOF_CURL_OFF_T == 2)
1157
1158  i=1; co_test[i].num = MPRNT_OFF_T_C(0x7FFF); co_test[i].expected = "32767";
1159  i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFE); co_test[i].expected = "32766";
1160  i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFD); co_test[i].expected = "32765";
1161  i++; co_test[i].num = MPRNT_OFF_T_C(0x7F00); co_test[i].expected = "32512";
1162  i++; co_test[i].num = MPRNT_OFF_T_C(0x07F0); co_test[i].expected = "2032";
1163  i++; co_test[i].num = MPRNT_OFF_T_C(0x007F); co_test[i].expected = "127";
1164
1165  i++; co_test[i].num = MPRNT_OFF_T_C(0x7000); co_test[i].expected = "28672";
1166  i++; co_test[i].num = MPRNT_OFF_T_C(0x0700); co_test[i].expected = "1792";
1167  i++; co_test[i].num = MPRNT_OFF_T_C(0x0070); co_test[i].expected = "112";
1168  i++; co_test[i].num = MPRNT_OFF_T_C(0x0007); co_test[i].expected = "7";
1169
1170  i++; co_test[i].num = MPRNT_OFF_T_C(0x5000); co_test[i].expected = "20480";
1171  i++; co_test[i].num = MPRNT_OFF_T_C(0x0500); co_test[i].expected = "1280";
1172  i++; co_test[i].num = MPRNT_OFF_T_C(0x0050); co_test[i].expected = "80";
1173  i++; co_test[i].num = MPRNT_OFF_T_C(0x0005); co_test[i].expected = "5";
1174
1175  i++; co_test[i].num = MPRNT_OFF_T_C(0x0001); co_test[i].expected = "1";
1176  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000); co_test[i].expected = "0";
1177
1178  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32768";
1179  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFE) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32767";
1180  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFD) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32766";
1181  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7F00) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32513";
1182  i++; co_test[i].num = -MPRNT_OFF_T_C(0x07F0) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2033";
1183  i++; co_test[i].num = -MPRNT_OFF_T_C(0x007F) -MPRNT_OFF_T_C(1); co_test[i].expected = "-128";
1184
1185  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-28673";
1186  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0700) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1793";
1187  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0070) -MPRNT_OFF_T_C(1); co_test[i].expected = "-113";
1188  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0007) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8";
1189
1190  i++; co_test[i].num = -MPRNT_OFF_T_C(0x5000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-20481";
1191  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0500) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1281";
1192  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0050) -MPRNT_OFF_T_C(1); co_test[i].expected = "-81";
1193  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0005) -MPRNT_OFF_T_C(1); co_test[i].expected = "-6";
1194
1195  i++; co_test[i].num =  MPRNT_OFF_T_C(0x0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1";
1196
1197  num_cofft_tests = i;
1198
1199#elif (CURL_SIZEOF_CURL_OFF_T == 4)
1200
1201  i=1; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFF); co_test[i].expected = "2147483647";
1202  i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFE); co_test[i].expected = "2147483646";
1203  i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFD); co_test[i].expected = "2147483645";
1204  i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFF0000); co_test[i].expected = "2147418112";
1205  i++; co_test[i].num = MPRNT_OFF_T_C(0x00007FFF); co_test[i].expected = "32767";
1206
1207  i++; co_test[i].num = MPRNT_OFF_T_C(0x7F000000); co_test[i].expected = "2130706432";
1208  i++; co_test[i].num = MPRNT_OFF_T_C(0x007F0000); co_test[i].expected = "8323072";
1209  i++; co_test[i].num = MPRNT_OFF_T_C(0x00007F00); co_test[i].expected = "32512";
1210  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000007F); co_test[i].expected = "127";
1211
1212  i++; co_test[i].num = MPRNT_OFF_T_C(0x70000000); co_test[i].expected = "1879048192";
1213  i++; co_test[i].num = MPRNT_OFF_T_C(0x07000000); co_test[i].expected = "117440512";
1214  i++; co_test[i].num = MPRNT_OFF_T_C(0x00700000); co_test[i].expected = "7340032";
1215  i++; co_test[i].num = MPRNT_OFF_T_C(0x00070000); co_test[i].expected = "458752";
1216  i++; co_test[i].num = MPRNT_OFF_T_C(0x00007000); co_test[i].expected = "28672";
1217  i++; co_test[i].num = MPRNT_OFF_T_C(0x00000700); co_test[i].expected = "1792";
1218  i++; co_test[i].num = MPRNT_OFF_T_C(0x00000070); co_test[i].expected = "112";
1219  i++; co_test[i].num = MPRNT_OFF_T_C(0x00000007); co_test[i].expected = "7";
1220
1221  i++; co_test[i].num = MPRNT_OFF_T_C(0x50000000); co_test[i].expected = "1342177280";
1222  i++; co_test[i].num = MPRNT_OFF_T_C(0x05000000); co_test[i].expected = "83886080";
1223  i++; co_test[i].num = MPRNT_OFF_T_C(0x00500000); co_test[i].expected = "5242880";
1224  i++; co_test[i].num = MPRNT_OFF_T_C(0x00050000); co_test[i].expected = "327680";
1225  i++; co_test[i].num = MPRNT_OFF_T_C(0x00005000); co_test[i].expected = "20480";
1226  i++; co_test[i].num = MPRNT_OFF_T_C(0x00000500); co_test[i].expected = "1280";
1227  i++; co_test[i].num = MPRNT_OFF_T_C(0x00000050); co_test[i].expected = "80";
1228  i++; co_test[i].num = MPRNT_OFF_T_C(0x00000005); co_test[i].expected = "5";
1229
1230  i++; co_test[i].num = MPRNT_OFF_T_C(0x00000001); co_test[i].expected = "1";
1231  i++; co_test[i].num = MPRNT_OFF_T_C(0x00000000); co_test[i].expected = "0";
1232
1233  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147483648";
1234  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFE) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147483647";
1235  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFD) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147483646";
1236  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFF0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147418113";
1237  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007FFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32768";
1238
1239  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7F000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2130706433";
1240  i++; co_test[i].num = -MPRNT_OFF_T_C(0x007F0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8323073";
1241  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007F00) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32513";
1242  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000007F) -MPRNT_OFF_T_C(1); co_test[i].expected = "-128";
1243
1244  i++; co_test[i].num = -MPRNT_OFF_T_C(0x70000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1879048193";
1245  i++; co_test[i].num = -MPRNT_OFF_T_C(0x07000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-117440513";
1246  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00700000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-7340033";
1247  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00070000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-458753";
1248  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-28673";
1249  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000700) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1793";
1250  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000070) -MPRNT_OFF_T_C(1); co_test[i].expected = "-113";
1251  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000007) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8";
1252
1253  i++; co_test[i].num = -MPRNT_OFF_T_C(0x50000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1342177281";
1254  i++; co_test[i].num = -MPRNT_OFF_T_C(0x05000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-83886081";
1255  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00500000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-5242881";
1256  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00050000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-327681";
1257  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00005000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-20481";
1258  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000500) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1281";
1259  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000050) -MPRNT_OFF_T_C(1); co_test[i].expected = "-81";
1260  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000005) -MPRNT_OFF_T_C(1); co_test[i].expected = "-6";
1261
1262  i++; co_test[i].num =  MPRNT_OFF_T_C(0x00000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1";
1263
1264  num_cofft_tests = i;
1265
1266#elif (CURL_SIZEOF_CURL_OFF_T == 8)
1267
1268  i=1; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFF); co_test[i].expected = "9223372036854775807";
1269  i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFE); co_test[i].expected = "9223372036854775806";
1270  i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFD); co_test[i].expected = "9223372036854775805";
1271  i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFFFFFF00000000); co_test[i].expected = "9223372032559808512";
1272  i++; co_test[i].num = MPRNT_OFF_T_C(0x000000007FFFFFFF); co_test[i].expected = "2147483647";
1273
1274  i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFF000000000000); co_test[i].expected = "9223090561878065152";
1275  i++; co_test[i].num = MPRNT_OFF_T_C(0x00007FFF00000000); co_test[i].expected = "140733193388032";
1276  i++; co_test[i].num = MPRNT_OFF_T_C(0x000000007FFF0000); co_test[i].expected = "2147418112";
1277  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000007FFF); co_test[i].expected = "32767";
1278
1279  i++; co_test[i].num = MPRNT_OFF_T_C(0x7F00000000000000); co_test[i].expected = "9151314442816847872";
1280  i++; co_test[i].num = MPRNT_OFF_T_C(0x007F000000000000); co_test[i].expected = "35747322042253312";
1281  i++; co_test[i].num = MPRNT_OFF_T_C(0x00007F0000000000); co_test[i].expected = "139637976727552";
1282  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000007F00000000); co_test[i].expected = "545460846592";
1283  i++; co_test[i].num = MPRNT_OFF_T_C(0x000000007F000000); co_test[i].expected = "2130706432";
1284  i++; co_test[i].num = MPRNT_OFF_T_C(0x00000000007F0000); co_test[i].expected = "8323072";
1285  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000007F00); co_test[i].expected = "32512";
1286  i++; co_test[i].num = MPRNT_OFF_T_C(0x000000000000007F); co_test[i].expected = "127";
1287
1288  i++; co_test[i].num = MPRNT_OFF_T_C(0x7000000000000000); co_test[i].expected = "8070450532247928832";
1289  i++; co_test[i].num = MPRNT_OFF_T_C(0x0700000000000000); co_test[i].expected = "504403158265495552";
1290  i++; co_test[i].num = MPRNT_OFF_T_C(0x0070000000000000); co_test[i].expected = "31525197391593472";
1291  i++; co_test[i].num = MPRNT_OFF_T_C(0x0007000000000000); co_test[i].expected = "1970324836974592";
1292  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000700000000000); co_test[i].expected = "123145302310912";
1293  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000070000000000); co_test[i].expected = "7696581394432";
1294  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000007000000000); co_test[i].expected = "481036337152";
1295  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000700000000); co_test[i].expected = "30064771072";
1296  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000070000000); co_test[i].expected = "1879048192";
1297  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000007000000); co_test[i].expected = "117440512";
1298  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000700000); co_test[i].expected = "7340032";
1299  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000070000); co_test[i].expected = "458752";
1300  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000007000); co_test[i].expected = "28672";
1301  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000700); co_test[i].expected = "1792";
1302  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000070); co_test[i].expected = "112";
1303  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000007); co_test[i].expected = "7";
1304
1305  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000001); co_test[i].expected = "1";
1306  i++; co_test[i].num = MPRNT_OFF_T_C(0x0000000000000000); co_test[i].expected = "0";
1307
1308  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9223372036854775808";
1309  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFE) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9223372036854775807";
1310  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFFFFFFFFFD) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9223372036854775806";
1311  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFFFFFF00000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9223372032559808513";
1312  i++; co_test[i].num = -MPRNT_OFF_T_C(0x000000007FFFFFFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147483648";
1313
1314  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7FFF000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9223090561878065153";
1315  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007FFF00000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-140733193388033";
1316  i++; co_test[i].num = -MPRNT_OFF_T_C(0x000000007FFF0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2147418113";
1317  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000007FFF) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32768";
1318
1319  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7F00000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-9151314442816847873";
1320  i++; co_test[i].num = -MPRNT_OFF_T_C(0x007F000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-35747322042253313";
1321  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00007F0000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-139637976727553";
1322  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000007F00000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-545460846593";
1323  i++; co_test[i].num = -MPRNT_OFF_T_C(0x000000007F000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-2130706433";
1324  i++; co_test[i].num = -MPRNT_OFF_T_C(0x00000000007F0000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8323073";
1325  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000007F00) -MPRNT_OFF_T_C(1); co_test[i].expected = "-32513";
1326  i++; co_test[i].num = -MPRNT_OFF_T_C(0x000000000000007F) -MPRNT_OFF_T_C(1); co_test[i].expected = "-128";
1327
1328  i++; co_test[i].num = -MPRNT_OFF_T_C(0x7000000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8070450532247928833";
1329  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0700000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-504403158265495553";
1330  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0070000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-31525197391593473";
1331  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0007000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1970324836974593";
1332  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000700000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-123145302310913";
1333  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000070000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-7696581394433";
1334  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000007000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-481036337153";
1335  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000700000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-30064771073";
1336  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000070000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1879048193";
1337  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000007000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-117440513";
1338  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000700000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-7340033";
1339  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000070000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-458753";
1340  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000007000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-28673";
1341  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000000700) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1793";
1342  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000000070) -MPRNT_OFF_T_C(1); co_test[i].expected = "-113";
1343  i++; co_test[i].num = -MPRNT_OFF_T_C(0x0000000000000007) -MPRNT_OFF_T_C(1); co_test[i].expected = "-8";
1344
1345  i++; co_test[i].num =  MPRNT_OFF_T_C(0x0000000000000000) -MPRNT_OFF_T_C(1); co_test[i].expected = "-1";
1346
1347  num_cofft_tests = i;
1348
1349#endif
1350
1351  for(i=1; i<=num_cofft_tests; i++) {
1352
1353    for(j=0; j<BUFSZ; j++)
1354      co_test[i].result[j] = 'X';
1355    co_test[i].result[BUFSZ-1] = '\0';
1356
1357    (void)curl_msprintf(co_test[i].result, "%" FORMAT_OFF_T, co_test[i].num);
1358
1359    if(memcmp(co_test[i].result,
1360               co_test[i].expected,
1361               strlen(co_test[i].expected))) {
1362      printf("curl_off_t test #%.2d: Failed (Expected: %s Got: %s)\n",
1363             i, co_test[i].expected, co_test[i].result);
1364      failed++;
1365    }
1366
1367  }
1368
1369  if(!failed)
1370    printf("All curl_mprintf() curl_off_t tests OK!\n");
1371  else
1372    printf("Some curl_mprintf() curl_off_t tests Failed!\n");
1373
1374  return failed;
1375}
1376
1377
1378int test(char *URL)
1379{
1380  int errors = 0;
1381  (void)URL; /* not used */
1382
1383  errors += test_unsigned_short_formatting();
1384
1385  errors += test_signed_short_formatting();
1386
1387  errors += test_unsigned_int_formatting();
1388
1389  errors += test_signed_int_formatting();
1390
1391  errors += test_unsigned_long_formatting();
1392
1393  errors += test_signed_long_formatting();
1394
1395  errors += test_curl_off_t_formatting();
1396
1397  if(errors)
1398    return TEST_ERR_MAJOR_BAD;
1399  else
1400    return 0;
1401}
1402