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