File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / curl / tests / libtest / lib557.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Jun 3 10:01:16 2020 UTC (5 years ago) by misho
Branches: curl, MAIN
CVS tags: v7_70_0p4, HEAD
curl

    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>