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