Changeset 434

Show
Ignore:
Timestamp:
07/01/10 07:47:17 (2 months ago)
Author:
solar
Message:

Improved unified tests.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/functions/stdio/fscan_sources.incl

    r433 r434  
    4141 
    4242/* fscan */ 
    43 #define TESTSCAN( result, count, source, offset, format, ... ) \ 
     43#define TESTSCAN( result, count, source, offset, ... ) \ 
    4444    do \ 
    4545    { \ 
    4646        int n = -1; \ 
    4747        TESTCASE( fseek( source, offset, SEEK_SET ) == 0 ); \ 
    48         TESTCASE( SCANFUNC( source, format "%n", __VA_ARGS__, &n ) == result ); \ 
    49         TESTCASE( n == count ); \ 
     48        int res = SCANFUNC( source, __VA_ARGS__ ); \ 
     49        if ( res != result ) \ 
     50        { \ 
     51            rc += 1; \ 
     52            printf( "FAILED: " __FILE__ ", line %d - expected result %d, got %d\n", __LINE__, result, res ); \ 
     53        } \ 
     54        if ( n != count ) \ 
     55        { \ 
     56            rc += 1; \ 
     57            printf( "FAILED: " __FILE__ ", line %d - expected count %d, got %d\n", __LINE__, count, n ); \ 
     58        } \ 
    5059    } while ( 0 ) 
    5160 
     61#define SCAN( format )           format "%n",              &n 
     62#define SCANPARMS( format, ... ) format "%n", __VA_ARGS__, &n 
     63 
     64#define _PDCLIB_FSCAN 
     65 
  • trunk/functions/stdio/scanf_testcases.incl

    r433 r434  
    55    // matching six characters literally 
    66    // should report six characters read 
    7     TESTSCAN( 0, 6, general, 0, "123456" ); 
     7    TESTSCAN( 0, 6, general, 0, SCAN( "123456" ) ); 
    88    } 
    99    { 
    1010    // matching a character, three whitespace chars, and another character 
    1111    // should report five characters read 
    12     TESTSCAN( 0, 5, general, 30, "1 5" ); 
     12    TESTSCAN( 0, 5, general, 30, SCAN( "1 5" ) ); 
    1313    } 
    1414    { 
    1515    // matching three characters, not matching whitespaces, and matching another three characters 
    1616    // should report six characters matched 
    17     TESTSCAN( 0, 6, general, 0, "123  456" ); 
     17    TESTSCAN( 0, 6, general, 0, SCAN( "123  456" ) ); 
    1818    } 
    1919    { 
    2020    // matching a character, two '%' characters, and two whitespaces 
    2121    // should report five characters matched 
    22     TESTSCAN( 0, 5, general, 34, "5%%%% " ); 
     22    TESTSCAN( 0, 5, general, 34, SCAN( "5%%%% " ) ); 
    2323    } 
    2424    { 
    2525    // seeking to last character in file, trying to match that char and a whitespace 
    2626    // should report one character matched and EOF 
    27     TESTSCAN( 0, 1, general, 39, "0 " ); 
     27    TESTSCAN( 0, 1, general, 39, SCAN( "0 " ) ); 
    2828    } 
    2929    { 
    3030    // seeking to end of file, trying to match a -1 
    3131    // should report error, not executing %n 
    32     TESTSCAN( 0, 1, general, 40, "\377" ); 
     32    TESTSCAN( -1, -1, general, 40, SCAN( "\377" ) ); /* FIXME */ 
    3333    } 
    3434 
     
    4040    // should report the characters read up to first zero 
    4141    char buffer[ 8 ]; 
     42#ifdef _PDCLIB_SSCAN 
     43    int count = 1; 
     44    char expected[] = "1\177\177\177\177\177\177\177"; 
     45#else  
     46    int count = 7; 
     47    char expected[] = "1\0003-5+7"; 
     48#endif 
    4249    memset( buffer, '\177', 8 ); 
    43     TESTSCAN( 1, 1, general, 10, "%7c", buffer ); 
    44     CHECK_FALSE( memcmp( buffer, "1\177\177", 3 ) ); 
     50    TESTSCAN( 1, count, general, 10, SCANPARMS( "%7c", buffer ) ); 
     51    CHECK_FALSE( memcmp( buffer, expected, 7 ) ); 
    4552    } 
    4653    { 
     
    4956    char buffer[ 2 ]; 
    5057    memset( buffer, '\177', 2 ); 
    51     TESTSCAN( 1, 1, general, 19, "%c", buffer ); 
     58    TESTSCAN( 1, 1, general, 19, SCANPARMS( "%c", buffer ) ); 
    5259    CHECK_FALSE( memcmp( buffer, "\377\177", 2 ) ); 
    5360    } 
     
    5764    char buffer[ 2 ]; 
    5865    memset( buffer, '\177', 2 ); 
    59     TESTSCAN( 1, 1, general, 32, "%1c", buffer ); 
     66    TESTSCAN( 1, 1, general, 32, SCANPARMS( "%1c", buffer ) ); 
    6067    CHECK_FALSE( memcmp( buffer, "\011\177", 2 ) ); 
    6168    } 
     
    6572    char buffer[ 2 ]; 
    6673    memset( buffer, '\177', 2 ); 
    67     TESTSCAN( 1, 1, general, 39, "%2c", buffer ); 
     74    TESTSCAN( 1, 1, general, 39, SCANPARMS( "%2c", buffer ) ); 
    6875    CHECK_FALSE( memcmp( buffer, "0\177", 2 ) ); 
    6976    } 
     
    7380    char buffer[ 2 ]; 
    7481    memset( buffer, '\177', 2 ); 
    75     TESTSCAN( 1, 1, general, 39, "%1c", buffer ); 
     82    TESTSCAN( 1, 1, general, 39, SCANPARMS( "%1c", buffer ) ); 
    7683    CHECK_FALSE( memcmp( buffer, "0\177", 2 ) ); 
    7784    } 
     
    8188    char buffer[ 2 ]; 
    8289    memset( buffer, '\177', 2 ); 
    83     TESTSCAN( -1, -1, general, 40, "%1c", buffer ); 
     90    TESTSCAN( -1, -1, general, 40, SCANPARMS( "%1c", buffer ) ); 
    8491    CHECK_FALSE( memcmp( buffer, "\177\177", 2 ) ); 
    8592    } 
     
    9198    // reading a whitespace-terminated integer 
    9299    int i; 
    93     TESTSCAN( 1, 1, general, 20, "%d", &i ); 
     100    TESTSCAN( 1, 1, general, 20, SCANPARMS( "%d", &i ) ); 
    94101    CHECK_EQUAL( i, 2 ); 
    95102    } 
     
    97104    // reading a -1 terminated integer 
    98105    int i; 
    99     TESTSCAN( 1, 1, general, 18, "%d", &i ); 
     106    TESTSCAN( 1, 1, general, 18, SCANPARMS( "%d", &i ) ); 
    100107    CHECK_EQUAL( i, 9 ); 
    101108    } 
     
    103110    // reading a EOF terminated integer 
    104111    int i = -1; 
    105     TESTSCAN( 1, 1, general, 39, "%d", &i ); 
     112    TESTSCAN( 1, 1, general, 39, SCANPARMS( "%d", &i ) ); 
    106113    CHECK_EQUAL( i, 0 ); 
    107114    } 
     
    110117    // should skip whitespaces 
    111118    int i = -1; 
    112     TESTSCAN( 1, 3, general, 32, "%d", &i ); 
     119    TESTSCAN( 1, 3, general, 32, SCANPARMS( "%d", &i ) ); 
    113120    CHECK_EQUAL( i, 5 ); 
    114121    } 
     
    117124    // should report matching failure 
    118125    int i = 0; 
    119     TESTSCAN( 0, -1, general, 19, "%d", &i, &n ), 0 ); 
     126    TESTSCAN( 0, -1, general, 19, SCANPARMS( "%d", &i ) ); 
    120127    CHECK_EQUAL( i, 0 ); 
    121128    } 
     
    124131    // should report reading failure 
    125132    int i = 0; 
    126     TESTSCAN( -1, -1, general, 40, "%d", &i, &n ), -1 ); 
     133    TESTSCAN( -1, -1, general, 40, SCANPARMS( "%d", &i ) ); 
    127134    CHECK_EQUAL( i, 0 ); 
    128135    } 
     
    130137    // reading a '-'-prefixed integer 
    131138    int i; 
    132     TESTSCAN( 1, 2, general, 13, "%d", &i ); 
     139    TESTSCAN( 1, 2, general, 13, SCANPARMS( "%d", &i ) ); 
    133140    CHECK_EQUAL( i, -5 ); 
    134141    } 
     
    136143    // reading a '+'-prefixed integer 
    137144    int i; 
    138     TESTSCAN( 1, 2, general, 15, "%d", &i ); 
     145    TESTSCAN( 1, 2, general, 15, SCANPARMS( "%d", &i ) ); 
    139146    CHECK_EQUAL( i, 7 ); 
    140147    } 
     
    144151    // reading 0, d 
    145152    signed char i = -1; 
    146     TESTSCAN( 1, 1, decimal, 1, "%hhd", &i ); 
     153    TESTSCAN( 1, 1, decimal, 1, SCANPARMS( "%hhd", &i ) ); 
    147154    CHECK_EQUAL( i, 0 ); 
    148155    } 
     
    150157    // reading -0, d 
    151158    signed char i = -1; 
    152     TESTSCAN( 1, 2, decimal, 0, "%hhd", &i ); 
     159    TESTSCAN( 1, 2, decimal, 0, SCANPARMS( "%hhd", &i ) ); 
    153160    CHECK_EQUAL( i, 0 ); 
    154161    } 
     
    156163    // reading +0, d 
    157164    signed char i = -1; 
    158     TESTSCAN( 1, 2, decimal, 3, "%hhd", &i ); 
     165    TESTSCAN( 1, 2, decimal, 3, SCANPARMS( "%hhd", &i ) ); 
    159166    CHECK_EQUAL( i, 0 ); 
    160167    } 
     
    162169    // reading -128, d 
    163170    signed char i = -1; 
    164     TESTSCAN( 1, 4, decimal, 6, "%hhd", &i ); 
     171    TESTSCAN( 1, 4, decimal, 6, SCANPARMS( "%hhd", &i ) ); 
    165172    CHECK_EQUAL( i, -128 ); 
    166173    } 
     
    168175    // reading 127, d 
    169176    signed char i = -1; 
    170     TESTSCAN( 1, 3, decimal, 12, "%hhd", &i ); 
     177    TESTSCAN( 1, 3, decimal, 12, SCANPARMS( "%hhd", &i ) ); 
    171178    CHECK_EQUAL( i, 127 ); 
    172179    } 
     
    174181    // reading +127, d 
    175182    signed char i = -1; 
    176     TESTSCAN( 1, 4, decimal, 11, "%hhd", &i ); 
     183    TESTSCAN( 1, 4, decimal, 11, SCANPARMS( "%hhd", &i ) ); 
    177184    CHECK_EQUAL( i, 127 ); 
    178185    } 
     
    180187    // reading 0, u 
    181188    unsigned char i = -1; 
    182     TESTSCAN( 1, 1, decimal, 1, "%hhu", &i ); 
     189    TESTSCAN( 1, 1, decimal, 1, SCANPARMS( "%hhu", &i ) ); 
    183190    CHECK_EQUAL( i, 0 ); 
    184191    } 
     
    186193    // reading -0, u 
    187194    unsigned char i = -1; 
    188     TESTSCAN( 1, 2, decimal, 0, "%hhu", &i ); 
     195    TESTSCAN( 1, 2, decimal, 0, SCANPARMS( "%hhu", &i ) ); 
    189196    CHECK_EQUAL( i, 0 ); 
    190197    } 
     
    192199    // reading +0, u 
    193200    unsigned char i = -1; 
    194     TESTSCAN( 1, 2, decimal, 3, "%hhu", &i ); 
     201    TESTSCAN( 1, 2, decimal, 3, SCANPARMS( "%hhu", &i ) ); 
    195202    CHECK_EQUAL( i, 0 ); 
    196203    } 
     
    198205    // reading 127, u 
    199206    unsigned char i = -1; 
    200     TESTSCAN( 1, 3, decimal, 12, "%hhu", &i ); 
     207    TESTSCAN( 1, 3, decimal, 12, SCANPARMS( "%hhu", &i ) ); 
    201208    CHECK_EQUAL( i, 127 ); 
    202209    } 
     
    204211    // reading +127, u 
    205212    unsigned char i = -1; 
    206     TESTSCAN( 1, 4, decimal, 11, "%hhu", &i ); 
     213    TESTSCAN( 1, 4, decimal, 11, SCANPARMS( "%hhu", &i ) ); 
    207214    CHECK_EQUAL( i, 127 ); 
    208215    } 
     
    210217    // reading 255, u 
    211218    unsigned char i = 0; 
    212     TESTSCAN( 1, 3, decimal, 17, "%hhu", &i ); 
     219    TESTSCAN( 1, 3, decimal, 17, SCANPARMS( "%hhu", &i ) ); 
    213220    CHECK_EQUAL( i, 255 ); 
    214221    } 
     
    216223    // reading +255, u 
    217224    unsigned char i = 0; 
    218     TESTSCAN( 1, 4, decimal, 16, "%hhu", &i ); 
     225    TESTSCAN( 1, 4, decimal, 16, SCANPARMS( "%hhu", &i ) ); 
    219226    CHECK_EQUAL( i, 255 ); 
    220227    } 
     
    222229    // reading 0, i 
    223230    signed char i = -1; 
    224     TESTSCAN( 1, 1, decimal, 1, "%hhi", &i ); 
     231    TESTSCAN( 1, 1, decimal, 1, SCANPARMS( "%hhi", &i ) ); 
    225232    CHECK_EQUAL( i, 0 ); 
    226233    } 
     
    228235    // reading -0, i 
    229236    signed char i = -1; 
    230     TESTSCAN( 1, 2, decimal, 0, "%hhi", &i ); 
     237    TESTSCAN( 1, 2, decimal, 0, SCANPARMS( "%hhi", &i ) ); 
    231238    CHECK_EQUAL( i, 0 ); 
    232239    } 
     
    234241    // reading +0, i 
    235242    signed char i = -1; 
    236     TESTSCAN( 1, 2, decimal, 3, "%hhi", &i ); 
     243    TESTSCAN( 1, 2, decimal, 3, SCANPARMS( "%hhi", &i ) ); 
    237244    CHECK_EQUAL( i, 0 ); 
    238245    } 
     
    240247    // reading -128, i 
    241248    signed char i = -1; 
    242     TESTSCAN( 1, 4, decimal, 6, "%hhi", &i ); 
     249    TESTSCAN( 1, 4, decimal, 6, SCANPARMS( "%hhi", &i ) ); 
    243250    CHECK_EQUAL( i, -128 ); 
    244251    } 
     
    246253    // reading 127, i 
    247254    signed char i = -1; 
    248     TESTSCAN( 1, 3, decimal, 12, "%hhi", &i ); 
     255    TESTSCAN( 1, 3, decimal, 12, SCANPARMS( "%hhi", &i ) ); 
    249256    CHECK_EQUAL( i, 127 ); 
    250257    } 
     
    252259    // reading +127, i 
    253260    signed char i = -1; 
    254     TESTSCAN( 1, 4, decimal, 11, "%hhi", &i ); 
     261    TESTSCAN( 1, 4, decimal, 11, SCANPARMS( "%hhi", &i ) ); 
    255262    CHECK_EQUAL( i, 127 ); 
    256263    } 
     
    258265    // reading 0, d 
    259266    signed short i = -1; 
    260     TESTSCAN( 1, 1, decimal, 1, "%hd", &i ); 
     267    TESTSCAN( 1, 1, decimal, 1, SCANPARMS( "%hd", &i ) ); 
    261268    CHECK_EQUAL( i, 0 ); 
    262269    } 
     
    264271    // reading -0, d 
    265272    signed short i = -1; 
    266     TESTSCAN( 1, 2, decimal, 0, "%hd", &i ); 
     273    TESTSCAN( 1, 2, decimal, 0, SCANPARMS( "%hd", &i ) ); 
    267274    CHECK_EQUAL( i, 0 ); 
    268275    } 
     
    270277    // reading +0, d 
    271278    signed short i = -1; 
    272     TESTSCAN( 1, 2, decimal, 3, "%hd", &i ); 
     279    TESTSCAN( 1, 2, decimal, 3, SCANPARMS( "%hd", &i ) ); 
    273280    CHECK_EQUAL( i, 0 ); 
    274281    } 
     
    276283    // reading -32768, d 
    277284    signed short i = -1; 
    278     TESTSCAN( 1, 6, decimal, 21, "%hd", &i ); 
     285    TESTSCAN( 1, 6, decimal, 21, SCANPARMS( "%hd", &i ) ); 
    279286    CHECK_EQUAL( i, -32768 ); 
    280287    } 
     
    282289    // reading 32767, d 
    283290    signed short i = -1; 
    284     TESTSCAN( 1, 5, decimal, 29, "%hd", &i ); 
     291    TESTSCAN( 1, 5, decimal, 29, SCANPARMS( "%hd", &i ) ); 
    285292    CHECK_EQUAL( i, 32767 ); 
    286293    } 
     
    288295    // reading +32767, d 
    289296    signed short i = -1; 
    290     TESTSCAN( 1, 6, decimal, 28, "%hd", &i ); 
     297    TESTSCAN( 1, 6, decimal, 28, SCANPARMS( "%hd", &i ) ); 
    291298    CHECK_EQUAL( i, 32767 ); 
    292299    } 
     
    294301    // reading 0, u 
    295302    unsigned short i = -1; 
    296     TESTSCAN( 1, 1, decimal, 1, "%hu", &i ); 
     303    TESTSCAN( 1, 1, decimal, 1, SCANPARMS( "%hu", &i ) ); 
    297304    CHECK_EQUAL( i, 0 ); 
    298305    } 
     
    300307    // reading -0, u 
    301308    unsigned short i = -1; 
    302     TESTSCAN( 1, 2, decimal, 0, "%hu", &i ); 
     309    TESTSCAN( 1, 2, decimal, 0, SCANPARMS( "%hu", &i ) ); 
    303310    CHECK_EQUAL( i, 0 ); 
    304311    } 
     
    306313    // reading +0, u 
    307314    unsigned short i = -1; 
    308     TESTSCAN( 1, 2, decimal, 3, "%hu", &i ); 
     315    TESTSCAN( 1, 2, decimal, 3, SCANPARMS( "%hu", &i ) ); 
    309316    CHECK_EQUAL( i, 0 ); 
    310317    } 
     
    312319    // reading 32767, u 
    313320    unsigned short i = -1; 
    314     TESTSCAN( 1, 5, decimal, 29, "%hu", &i ); 
     321    TESTSCAN( 1, 5, decimal, 29, SCANPARMS( "%hu", &i ) ); 
    315322    CHECK_EQUAL( i, 32767 ); 
    316323    } 
     
    318325    // reading +32767, u 
    319326    unsigned short i = -1; 
    320     TESTSCAN( 1, 6, decimal, 28, "%hu", &i ); 
     327    TESTSCAN( 1, 6, decimal, 28, SCANPARMS( "%hu", &i ) ); 
    321328    CHECK_EQUAL( i, 32767 ); 
    322329    } 
     
    324331    // reading 65535, u 
    325332    unsigned short i = 0; 
    326     TESTSCAN( 1, 5, decimal, 36, "%hu", &i ); 
     333    TESTSCAN( 1, 5, decimal, 36, SCANPARMS( "%hu", &i ) ); 
    327334    CHECK_EQUAL( i, 65535 ); 
    328335    } 
     
    330337    // reading +65535, u 
    331338    unsigned short i = 0; 
    332     TESTSCAN( 1, 6, decimal, 35, "%hu", &i ); 
     339    TESTSCAN( 1, 6, decimal, 35, SCANPARMS( "%hu", &i ) ); 
    333340    CHECK_EQUAL( i, 65535 ); 
    334341    } 
     
    336343    // reading 0, i 
    337344    signed short i = -1; 
    338     TESTSCAN( 1, 1, decimal, 1, "%hi", &i ); 
     345    TESTSCAN( 1, 1, decimal, 1, SCANPARMS( "%hi", &i ) ); 
    339346    CHECK_EQUAL( i, 0 ); 
    340347    } 
     
    342349    // reading -0, i 
    343350    signed short i = -1; 
    344     TESTSCAN( 1, 2, decimal, 0, "%hi", &i ); 
     351    TESTSCAN( 1, 2, decimal, 0, SCANPARMS( "%hi", &i ) ); 
    345352    CHECK_EQUAL( i, 0 ); 
    346353    } 
     
    348355    // reading +0, i 
    349356    signed short i = -1; 
    350     TESTSCAN( 1, 2, decimal, 3, "%hi", &i ); 
     357    TESTSCAN( 1, 2, decimal, 3, SCANPARMS( "%hi", &i ) ); 
    351358    CHECK_EQUAL( i, 0 ); 
    352359    } 
     
    354361    // reading -32768, i 
    355362    signed short i = -1; 
    356     TESTSCAN( 1, 6, decimal, 21, "%hi", &i ); 
     363    TESTSCAN( 1, 6, decimal, 21, SCANPARMS( "%hi", &i ) ); 
    357364    CHECK_EQUAL( i, -32768 ); 
    358365    } 
     
    360367    // reading 32767, i 
    361368    signed short i = -1; 
    362     TESTSCAN( 1, 5, decimal, 29, "%hi", &i ); 
     369    TESTSCAN( 1, 5, decimal, 29, SCANPARMS( "%hi", &i ) ); 
    363370    CHECK_EQUAL( i, 32767 ); 
    364371    } 
     
    366373    // reading +32767, i 
    367374    signed short i = -1; 
    368     TESTSCAN( 1, 6, decimal, 28, "%hi", &i ); 
     375    TESTSCAN( 1, 6, decimal, 28, SCANPARMS( "%hi", &i ) ); 
    369376    CHECK_EQUAL( i, 32767 ); 
    370377    } 
     
    372379    // reading 0, d 
    373380    signed int i = -1; 
    374     TESTSCAN( 1, 1, decimal, 1, "%d", &i ); 
     381    TESTSCAN( 1, 1, decimal, 1, SCANPARMS( "%d", &i ) ); 
    375382    CHECK_EQUAL( i, 0 ); 
    376383    } 
     
    378385    // reading -0, d 
    379386    signed int i = -1; 
    380     TESTSCAN( 1, 2, decimal, 0, "%d", &i ); 
     387    TESTSCAN( 1, 2, decimal, 0, SCANPARMS( "%d", &i ) ); 
    381388    CHECK_EQUAL( i, 0 ); 
    382389    } 
     
    384391    // reading +0, d 
    385392    signed int i = -1; 
    386     TESTSCAN( 1, 2, decimal, 3, "%d", &i ); 
     393    TESTSCAN( 1, 2, decimal, 3, SCANPARMS( "%d", &i ) ); 
    387394    CHECK_EQUAL( i, 0 ); 
    388395    } 
     
    390397    // reading -2147483648, d 
    391398    signed int i = -1; 
    392     TESTSCAN( 1, 11, decimal, 42, "%d", &i ); 
     399    TESTSCAN( 1, 11, decimal, 42, SCANPARMS( "%d", &i ) ); 
    393400    CHECK_EQUAL( i, -2147483648 ); 
    394401    } 
     
    396403    // reading 2147483647, d 
    397404    signed int i = -1; 
    398     TESTSCAN( 1, 10, decimal, 55, "%d", &i ); 
     405    TESTSCAN( 1, 10, decimal, 55, SCANPARMS( "%d", &i ) ); 
    399406    CHECK_EQUAL( i, 2147483647 ); 
    400407    } 
     
    402409    // reading +2147483647, d 
    403410    signed int i = -1; 
    404     TESTSCAN( 1, 11, decimal, 54, "%d", &i ); 
     411    TESTSCAN( 1, 11, decimal, 54, SCANPARMS( "%d", &i ) ); 
    405412    CHECK_EQUAL( i, 2147483647 ); 
    406413    } 
     
    408415    // reading 0, u 
    409416    unsigned int i = -1; 
    410     TESTSCAN( 1, 1, decimal, 1, "%u", &i ); 
     417    TESTSCAN( 1, 1, decimal, 1, SCANPARMS( "%u", &i ) ); 
    411418    CHECK_EQUAL( i, 0 ); 
    412419    } 
     
    414421    // reading -0, u 
    415422    unsigned int i = -1; 
    416     TESTSCAN( 1, 2, decimal, 0, "%u", &i ); 
     423    TESTSCAN( 1, 2, decimal, 0, SCANPARMS( "%u", &i ) ); 
    417424    CHECK_EQUAL( i, 0 ); 
    418425    } 
     
    420427    // reading +0, u 
    421428    unsigned int i = -1; 
    422     TESTSCAN( 1, 2, decimal, 3, "%u", &i ); 
     429    TESTSCAN( 1, 2, decimal, 3, SCANPARMS( "%u", &i ) ); 
    423430    CHECK_EQUAL( i, 0 ); 
    424431    } 
     
    426433    // reading 2147483647, u 
    427434    unsigned int i = -1; 
    428     TESTSCAN( 1, 10, decimal, 55, "%u", &i ); 
     435    TESTSCAN( 1, 10, decimal, 55, SCANPARMS( "%u", &i ) ); 
    429436    CHECK_EQUAL( i, 2147483647 ); 
    430437    } 
     
    432439    // reading +2147483647, u 
    433440    unsigned int i = -1; 
    434     TESTSCAN( 1, 11, decimal, 54, "%u", &i ); 
     441    TESTSCAN( 1, 11, decimal, 54, SCANPARMS( "%u", &i ) ); 
    435442    CHECK_EQUAL( i, 2147483647 ); 
    436443    } 
     
    438445    // reading 4294967295, u 
    439446    unsigned int i = 0; 
    440     TESTSCAN( 1, 10, decimal, 67, "%u", &i ); 
     447    TESTSCAN( 1, 10, decimal, 67, SCANPARMS( "%u", &i ) ); 
    441448    CHECK_FEQUAL( i, 4294967295, unsigned int, "%u" ); 
    442449    } 
     
    444451    // reading +4294967295, u 
    445452    unsigned int i = 0; 
    446     TESTSCAN( 1, 11, decimal, 66, "%u", &i ); 
     453    TESTSCAN( 1, 11, decimal, 66, SCANPARMS( "%u", &i ) ); 
    447454    CHECK_FEQUAL( i, 4294967295, unsigned int, "%u" ); 
    448455    } 
     
    450457    // reading 0, i 
    451458    signed int i = -1; 
    452     TESTSCAN( 1, 1, decimal, 1, "%i", &i ); 
     459    TESTSCAN( 1, 1, decimal, 1, SCANPARMS( "%i", &i ) ); 
    453460    CHECK_EQUAL( i, 0 ); 
    454461    } 
     
    456463    // reading -0, i 
    457464    signed int i = -1; 
    458     TESTSCAN( 1, 2, decimal, 0, "%i", &i ); 
     465    TESTSCAN( 1, 2, decimal, 0, SCANPARMS( "%i", &i ) ); 
    459466    CHECK_EQUAL( i, 0 ); 
    460467    } 
     
    462469    // reading +0, i 
    463470    signed int i = -1; 
    464     TESTSCAN( 1, 2, decimal, 3, "%i", &i ); 
     471    TESTSCAN( 1, 2, decimal, 3, SCANPARMS( "%i", &i ) ); 
    465472    CHECK_EQUAL( i, 0 ); 
    466473    } 
     
    468475    // reading -2147483648, i 
    469476    signed int i = -1; 
    470     TESTSCAN( 1, 11, decimal, 42, "%i", &i ); 
     477    TESTSCAN( 1, 11, decimal, 42, SCANPARMS( "%i", &i ) ); 
    471478    CHECK_EQUAL( i, -2147483648 ); 
    472479    } 
     
    474481    // reading 2147483647, i 
    475482    signed int i = -1; 
    476     TESTSCAN( 1, 10, decimal, 55, "%i", &i ); 
     483    TESTSCAN( 1, 10, decimal, 55, SCANPARMS( "%i", &i ) ); 
    477484    CHECK_EQUAL( i, 2147483647 ); 
    478485    } 
     
    480487    // reading +2147483647, i 
    481488    signed int i = -1; 
    482     TESTSCAN( 1, 11, decimal, 54, "%i", &i ); 
     489    TESTSCAN( 1, 11, decimal, 54, SCANPARMS( "%i", &i ) ); 
    483490    CHECK_EQUAL( i, 2147483647 ); 
    484491    } 
     
    486493    // reading 0, d 
    487494    signed long i = -1; 
    488     TESTSCAN( 1, 1, decimal, 1, "%ld", &i ); 
     495    TESTSCAN( 1, 1, decimal, 1, SCANPARMS( "%ld", &i ) ); 
    489496    CHECK_EQUAL( i, 0l ); 
    490497    } 
     
    492499    // reading -0, d 
    493500    signed long i = -1; 
    494     TESTSCAN( 1, 2, decimal, 0, "%ld", &i ); 
     501    TESTSCAN( 1, 2, decimal, 0, SCANPARMS( "%ld", &i ) ); 
    495502    CHECK_EQUAL( i, 0l ); 
    496503    } 
     
    498505    // reading +0, d 
    499506    signed long i = -1; 
    500     TESTSCAN( 1, 2, decimal, 3, "%ld", &i ); 
     507    TESTSCAN( 1, 2, decimal, 3, SCANPARMS( "%ld", &i ) ); 
    501508    CHECK_EQUAL( i, 0l ); 
    502509    } 
     
    504511    // reading -2147483648, d 
    505512    signed long i = -1; 
    506     TESTSCAN( 1, 11, decimal, 42, "%ld", &i ); 
     513    TESTSCAN( 1, 11, decimal, 42, SCANPARMS( "%ld", &i ) ); 
    507514    CHECK_EQUAL( i, -2147483648l ); 
    508515    } 
     
    510517    // reading 2147483647, d 
    511518    signed long i = -1; 
    512     TESTSCAN( 1, 10, decimal, 55, "%ld", &i ); 
     519    TESTSCAN( 1, 10, decimal, 55, SCANPARMS( "%ld", &i ) ); 
    513520    CHECK_EQUAL( i, 2147483647l ); 
    514521    } 
     
    516523    // reading +2147483647, d 
    517524    signed long i = -1; 
    518     TESTSCAN( 1, 11, decimal, 54, "%ld", &i ); 
     525    TESTSCAN( 1, 11, decimal, 54, SCANPARMS( "%ld", &i ) ); 
    519526    CHECK_EQUAL( i, 2147483647l ); 
    520527    } 
     
    522529    // reading 0, u 
    523530    unsigned long i = -1; 
    524     TESTSCAN( 1, 1, decimal, 1, "%lu", &i ); 
     531    TESTSCAN( 1, 1, decimal, 1, SCANPARMS( "%lu", &i ) ); 
    525532    CHECK_EQUAL( i, 0ul ); 
    526533    } 
     
    528535    // reading -0, u 
    529536    unsigned long i = -1; 
    530     TESTSCAN( 1, 2, decimal, 0, "%lu", &i ); 
     537    TESTSCAN( 1, 2, decimal, 0, SCANPARMS( "%lu", &i ) ); 
    531538    CHECK_EQUAL( i, 0ul ); 
    532539    } 
     
    534541    // reading +0, u 
    535542    unsigned long i = -1; 
    536     TESTSCAN( 1, 2, decimal, 3, "%lu", &i ); 
     543    TESTSCAN( 1, 2, decimal, 3, SCANPARMS( "%lu", &i ) ); 
    537544    CHECK_EQUAL( i, 0ul ); 
    538545    } 
     
    540547    // reading 2147483647, u 
    541548    unsigned long i = -1; 
    542     TESTSCAN( 1, 10, decimal, 55, "%lu", &i ); 
     549    TESTSCAN( 1, 10, decimal, 55, SCANPARMS( "%lu", &i ) ); 
    543550    CHECK_EQUAL( i, 2147483647ul ); 
    544551    } 
     
    546553    // reading +2147483647, u 
    547554    unsigned long i = -1; 
    548     TESTSCAN( 1, 11, decimal, 54, "%lu", &i ); 
     555    TESTSCAN( 1, 11, decimal, 54, SCANPARMS( "%lu", &i ) ); 
    549556    CHECK_EQUAL( i, 2147483647ul ); 
    550557    } 
     
    552559    // reading 4294967295, u 
    553560    unsigned long i = 0; 
    554     TESTSCAN( 1, 10, decimal, 67, "%lu", &i ); 
     561    TESTSCAN( 1, 10, decimal, 67, SCANPARMS( "%lu", &i ) ); 
    555562    CHECK_FEQUAL( i, 4294967295ul, unsigned long, "%lu" ); 
    556563    } 
     
    558565    // reading +4294967295, u 
    559566    unsigned long i = 0; 
    560     TESTSCAN( 1, 11, decimal, 66, "%lu", &i ); 
     567    TESTSCAN( 1, 11, decimal, 66, SCANPARMS( "%lu", &i ) ); 
    561568    CHECK_FEQUAL( i, 4294967295ul, unsigned long, "%lu" ); 
    562569    } 
     
    564571    // reading 0, i 
    565572    signed long i = -1; 
    566     TESTSCAN( 1, 1, decimal, 1, "%li", &i ); 
     573    TESTSCAN( 1, 1, decimal, 1, SCANPARMS( "%li", &i ) ); 
    567574    CHECK_EQUAL( i, 0l ); 
    568575    } 
     
    570577    // reading -0, i 
    571578    signed long i = -1; 
    572     TESTSCAN( 1, 2, decimal, 0, "%li", &i ); 
     579    TESTSCAN( 1, 2, decimal, 0, SCANPARMS( "%li", &i ) ); 
    573580    CHECK_EQUAL( i, 0l ); 
    574581    } 
     
    576583    // reading +0, i 
    577584    signed long i = -1; 
    578     TESTSCAN( 1, 2, decimal, 3, "%li", &i ); 
     585    TESTSCAN( 1, 2, decimal, 3, SCANPARMS( "%li", &i ) ); 
    579586    CHECK_EQUAL( i, 0l ); 
    580587    } 
     
    582589    // reading -2147483648, i 
    583590    signed long i = -1; 
    584     TESTSCAN( 1, 11, decimal, 42, "%li", &i ); 
     591    TESTSCAN( 1, 11, decimal, 42, SCANPARMS( "%li", &i ) ); 
    585592    CHECK_EQUAL( i, -2147483648l ); 
    586593    } 
     
    588595    // reading 2147483647, i 
    589596    signed long i = -1; 
    590     TESTSCAN( 1, 10, decimal, 55, "%li", &i ); 
     597    TESTSCAN( 1, 10, decimal, 55, SCANPARMS( "%li", &i ) ); 
    591598    CHECK_EQUAL( i, 2147483647l ); 
    592599    } 
     
    594601    // reading +2147483647, i 
    595602    signed long i = -1; 
    596     TESTSCAN( 1, 11, decimal, 54, "%li", &i ); 
     603    TESTSCAN( 1, 11, decimal, 54, SCANPARMS( "%li", &i ) ); 
    597604    CHECK_EQUAL( i, 2147483647l ); 
    598605    } 
     
    600607    // reading 0, d 
    601608    signed long long i = -1; 
    602     TESTSCAN( 1, 1, decimal, 1, "%lld", &i ); 
     609    TESTSCAN( 1, 1, decimal, 1, SCANPARMS( "%lld", &i ) ); 
    603610    CHECK_EQUAL( i, 0ll ); 
    604611    } 
     
    606613    // reading -0, d 
    607614    signed long long i = -1; 
    608     TESTSCAN( 1, 2, decimal, 0, "%lld", &i ); 
     615    TESTSCAN( 1, 2, decimal, 0, SCANPARMS( "%lld", &i ) ); 
    609616    CHECK_EQUAL( i, 0ll ); 
    610617    } 
     
    612619    // reading +0, d 
    613620    signed long long i = -1; 
    614     TESTSCAN( 1, 2, decimal, 3, "%lld", &i ); 
     621    TESTSCAN( 1, 2, decimal, 3, SCANPARMS( "%lld", &i ) ); 
    615622    CHECK_EQUAL( i, 0ll ); 
    616623    } 
     
    618625    // reading -9223372036854775808, d 
    619626    signed long long i = -1; 
    620     TESTSCAN( 1, 20, decimal, 78, "%lli", &i ); 
     627    TESTSCAN( 1, 20, decimal, 78, SCANPARMS( "%lli", &i ) ); 
    621628    CHECK_FEQUAL( i, LLONG_MIN, signed long long, "%lli" ); // should be literal -9223372036854775808ll but GCC balks. 
    622629    CHECK_EQUAL( i < 0ll, 1 ); 
     
    625632    // reading +9223372036854775807, d 
    626633    signed long long i = -1; 
    627     TESTSCAN( 1, 20, decimal, 99, "%lld", &i ); 
     634    TESTSCAN( 1, 20, decimal, 99, SCANPARMS( "%lld", &i ) ); 
    628635    CHECK_FEQUAL( i, 9223372036854775807ll, signed long long, "%lld" ); 
    629636    } 
     
    631638    // reading 0, u 
    632639    unsigned long long i = -1; 
    633     TESTSCAN( 1, 1, decimal, 1, "%llu", &i ); 
     640    TESTSCAN( 1, 1, decimal, 1, SCANPARMS( "%llu", &i ) ); 
    634641    CHECK_EQUAL( i, 0ull ); 
    635642    } 
     
    637644    // reading -0, u 
    638645    unsigned long long i = -1; 
    639     TESTSCAN( 1, 2, decimal, 0, "%llu", &i ); 
     646    TESTSCAN( 1, 2, decimal, 0, SCANPARMS( "%llu", &i ) ); 
    640647    CHECK_EQUAL( i, 0ull ); 
    641648    } 
     
    643650    // reading +0, u 
    644651    unsigned long long i = -1; 
    645     TESTSCAN( 1, 2, decimal, 3, "%llu", &i ); 
     652    TESTSCAN( 1, 2, decimal, 3, SCANPARMS( "%llu", &i ) ); 
    646653    CHECK_EQUAL( i, 0ull ); 
    647654    } 
     
    649656    // reading 9223372036854775807, u 
    650657    unsigned long long i = -1; 
    651     TESTSCAN( 1, 19, decimal, 100, "%llu", &i ); 
     658    TESTSCAN( 1, 19, decimal, 100, SCANPARMS( "%llu", &i ) ); 
    652659    CHECK_FEQUAL( i, 9223372036854775807ull, unsigned long long, "%llu" ); 
    653660    } 
     
    655662    // reading +9223372036854775807, u 
    656663    unsigned long long i = -1; 
    657     TESTSCAN( 1, 20, decimal, 99, "%llu", &i ); 
     664    TESTSCAN( 1, 20, decimal, 99, SCANPARMS( "%llu", &i ) ); 
    658665    CHECK_FEQUAL( i, 9223372036854775807ull, unsigned long long, "%llu" ); 
    659666    } 
     
    661668    // reading 18446744073709551615, u 
    662669    unsigned long long i = 0; 
    663     TESTSCAN( 1, 20, decimal, 121, "%llu", &i ); 
     670    TESTSCAN( 1, 20, decimal, 121, SCANPARMS( "%llu", &i ) ); 
    664671    CHECK_FEQUAL( i, 18446744073709551615ull, unsigned long long, "%llu" ); 
    665672    } 
     
    667674    // reading +18446744073709551615, u 
    668675    unsigned long long i = 0; 
    669     TESTSCAN( 1, 21, decimal, 120, "%llu", &i ); 
     676    TESTSCAN( 1, 21, decimal, 120, SCANPARMS( "%llu", &i ) ); 
    670677    CHECK_FEQUAL( i, 18446744073709551615ull, unsigned long long, "%llu" ); 
    671678    } 
     
    673680    // reading 0, i 
    674681    signed long long i = -1; 
    675     TESTSCAN( 1, 1, decimal, 1, "%lli", &i ); 
     682    TESTSCAN( 1, 1, decimal, 1, SCANPARMS( "%lli", &i ) ); 
    676683    CHECK_EQUAL( i, 0ll ); 
    677684    } 
     
    679686    // reading -0, i 
    680687    signed long long i = -1; 
    681     TESTSCAN( 1, 2, decimal, 0, "%lli", &i ); 
     688    TESTSCAN( 1, 2, decimal, 0, SCANPARMS( "%lli", &i ) ); 
    682689    CHECK_EQUAL( i, 0ll ); 
    683690    } 
     
    685692    // reading +0, i 
    686693    signed long long i = -1; 
    687     TESTSCAN( 1, 2, decimal, 3, "%lli", &i ); 
     694    TESTSCAN( 1, 2, decimal, 3, SCANPARMS( "%lli", &i ) ); 
    688695    CHECK_EQUAL( i, 0ll ); 
    689696    } 
     
    691698    // reading -9223372036854775808, i 
    692699    signed long long i = -1; 
    693     TESTSCAN( 1, 20, decimal, 78, "%lli", &i ); 
     700    TESTSCAN( 1, 20, decimal, 78, SCANPARMS( "%lli", &i ) ); 
    694701    CHECK_FEQUAL( i, LLONG_MIN, signed long long, "%lli" ); // should be literal -9223372036854775808ll but GCC balks. 
    695702    CHECK_EQUAL( i < 0ll, 1 ); 
     
    698705    // reading 9223372036854775807, i 
    699706    signed long long i = -1; 
    700     TESTSCAN( 1, 19, decimal, 100, "%lli", &i ); 
     707    TESTSCAN( 1, 19, decimal, 100, SCANPARMS( "%lli", &i ) ); 
    701708    CHECK_FEQUAL( i, 9223372036854775807ll, signed long long, "%lli" ); 
    702709    } 
     
    704711    // reading +9223372036854775807, i 
    705712    signed long long i = -1; 
    706     TESTSCAN( 1, 20, decimal, 99, "%lli", &i ); 
     713    TESTSCAN( 1, 20, decimal, 99, SCANPARMS( "%lli", &i ) ); 
    707714    CHECK_FEQUAL( i, 9223372036854775807ll, signed long long, "%lli" ); 
    708715    } 
     
    712719    // reading 0, x 
    713720    unsigned char i = -1; 
    714     TESTSCAN( 1, 1, hexadecimal, 3, "%hhx", &i ); 
     721    TESTSCAN( 1, 1, hexadecimal, 3, SCANPARMS( "%hhx", &i ) ); 
    715722    CHECK_EQUAL( i, 0 ); 
    716723    } 
     
    718725    // reading -0x0, x 
    719726    unsigned char i = -1; 
    720     TESTSCAN( 1, 4, hexadecimal, 0, "%hhx", &i ); 
     727    TESTSCAN( 1, 4, hexadecimal, 0, SCANPARMS( "%hhx", &i ) ); 
    721728    CHECK_EQUAL( i, 0 ); 
    722729    } 
     
    724731    // reading 0x000, x 
    725732    unsigned char i = -1; 
    726     TESTSCAN( 1, 6, hexadecimal, 5, "%hhx", &i ); 
     733    TESTSCAN( 1, 6, hexadecimal, 5, SCANPARMS( "%hhx", &i ) ); 
    727734    CHECK_EQUAL( i, 0 ); 
    728735    } 
     
    730737    // reading 0x0, i 
    731738    signed char i = -1; 
    732     TESTSCAN( 1, 4, hexadecimal, 0, "%hhi", &i ); 
     739    TESTSCAN( 1, 4, hexadecimal, 0, SCANPARMS( "%hhi", &i ) ); 
    733740    CHECK_EQUAL( i, 0 ); 
    734741    } 
     
    736743    // reading 7f, x 
    737744    unsigned char i = -1; 
    738     TESTSCAN( 1, 2, hexadecimal, 15, "%hhx", &i ); 
     745    TESTSCAN( 1, 2, hexadecimal, 15, SCANPARMS( "%hhx", &i ) ); 
    739746    CHECK_EQUAL( i, 127 ); 
    740747    } 
     
    742749    // reading -0x7f, x 
    743750    unsigned char i = -1; 
    744     TESTSCAN( 1, 5, hexadecimal, 12, "%hhx", &i ); 
     751    TESTSCAN( 1, 5, hexadecimal, 12, SCANPARMS( "%hhx", &i ) ); 
    745752    CHECK_FEQUAL( i, -127, unsigned char, "%hhu" ); 
    746753    } 
     
    748755    // reading 0x80, i 
    749756    signed char i = -1; 
    750     TESTSCAN( 1, 4, hexadecimal, 18, "%hhi", &i ); 
     757    TESTSCAN( 1, 4, hexadecimal, 18, SCANPARMS( "%hhi", &i ) ); 
    751758    CHECK_FEQUAL( i, -128, signed char, "%hhd" ); 
    752759    } 
     
    754761    // reading ff, x 
    755762    unsigned char i = -1; 
    756     TESTSCAN( 1, 2, hexadecimal, 25, "%hhx", &i ); 
     763    TESTSCAN( 1, 2, hexadecimal, 25, SCANPARMS( "%hhx", &i ) ); 
    757764    CHECK_EQUAL( i, 0xff ); 
    758765    } 
     
    760767    // reading 0xff, x 
    761768    unsigned char i = -1; 
    762     TESTSCAN( 1, 4, hexadecimal, 23, "%hhx", &i ); 
     769    TESTSCAN( 1, 4, hexadecimal, 23, SCANPARMS( "%hhx", &i ) ); 
    763770    CHECK_EQUAL( i, 255 ); 
    764771    } 
     
    766773    // reading 0xff, i 
    767774    signed char i = 0; 
    768     TESTSCAN( 1, 4, hexadecimal, 23, "%hhi", &i ); 
     775    TESTSCAN( 1, 4, hexadecimal, 23, SCANPARMS( "%hhi", &i ) ); 
    769776    CHECK_EQUAL( i, -1 ); 
    770777    } 
     
    772779    // reading 0, x 
    773780    unsigned short i = -1; 
    774     TESTSCAN( 1, 1, hexadecimal, 3, "%hx", &i ); 
     781    TESTSCAN( 1, 1, hexadecimal, 3, SCANPARMS( "%hx", &i ) ); 
    775782    CHECK_EQUAL( i, 0 ); 
    776783    } 
     
    778785    // reading -0x0, x 
    779786    unsigned short i = -1; 
    780     TESTSCAN( 1, 4, hexadecimal, 0, "%hx", &i ); 
     787    TESTSCAN( 1, 4, hexadecimal, 0, SCANPARMS( "%hx", &i ) ); 
    781788    CHECK_EQUAL( i, 0 ); 
    782789    } 
     
    784791    // reading 0x000, x 
    785792    unsigned short i = -1; 
    786     TESTSCAN( 1, 6, hexadecimal, 5, "%hx", &i ); 
     793    TESTSCAN( 1, 6, hexadecimal, 5, SCANPARMS( "%hx", &i ) ); 
    787794    CHECK_EQUAL( i, 0 ); 
    788795    } 
     
    790797    // reading 0x0, i 
    791798    signed short i = -1; 
    792     TESTSCAN( 1, 4, hexadecimal, 0, "%hi", &i ); 
     799    TESTSCAN( 1, 4, hexadecimal, 0, SCANPARMS( "%hi", &i ) ); 
    793800    CHECK_EQUAL( i, 0 ); 
    794801    } 
     
    796803    // reading 7fff, x 
    797804    unsigned short i = -1; 
    798     TESTSCAN( 1, 4, hexadecimal, 31, "%hx", &i ); 
     805    TESTSCAN( 1, 4, hexadecimal, 31, SCANPARMS( "%hx", &i ) ); 
    799806    CHECK_EQUAL( i, 32767 ); 
    800807    } 
     
    802809    // reading -0x7fff, x 
    803810    unsigned short i = -1; 
    804     TESTSCAN( 1, 7, hexadecimal, 28, "%hx", &i ); 
     811    TESTSCAN( 1, 7, hexadecimal, 28, SCANPARMS( "%hx", &i ) ); 
    805812    CHECK_FEQUAL( i, -32767, unsigned short, "%hu" ); 
    806813    } 
     
    808815    // reading 0x8000, i 
    809816    signed short i = -1; 
    810     TESTSCAN( 1, 6, hexadecimal, 36, "%hi", &i ); 
     817    TESTSCAN( 1, 6, hexadecimal, 36, SCANPARMS( "%hi", &i ) ); 
    811818    CHECK_FEQUAL( i, -32768, signed short, "%hd" ); 
    812819    } 
     
    814821    // reading ffff, x 
    815822    unsigned short i = -1; 
    816     TESTSCAN( 1, 4, hexadecimal, 45, "%hx", &i ); 
     823    TESTSCAN( 1, 4, hexadecimal, 45, SCANPARMS( "%hx", &i ) ); 
    817824    CHECK_EQUAL( i, 65535 ); 
    818825    } 
     
    820827    // reading 0xffff, x 
    821828    unsigned short i = -1; 
    822     TESTSCAN( 1, 6, hexadecimal, 43, "%hx", &i ); 
     829    TESTSCAN( 1, 6, hexadecimal, 43, SCANPARMS( "%hx", &i ) ); 
    823830    CHECK_EQUAL( i, 65535 ); 
    824831    } 
     
    826833    // reading 0xffff, i 
    827834    signed short i = 0; 
    828     TESTSCAN( 1, 6, hexadecimal, 43, "%hi", &i ); 
     835    TESTSCAN( 1, 6, hexadecimal, 43, SCANPARMS( "%hi", &i ) ); 
    829836    CHECK_FEQUAL( i, -1, signed short, "%hd" ); 
    830837    } 
     
    832839    // reading 0, x 
    833840    unsigned int i = -1; 
    834     TESTSCAN( 1, 1, hexadecimal, 3, "%x", &i ); 
     841    TESTSCAN( 1, 1, hexadecimal, 3, SCANPARMS( "%x", &i ) ); 
    835842    CHECK_EQUAL( i, 0 ); 
    836843    } 
     
    838845    // reading -0x0, x 
    839846    unsigned int i = -1; 
    840     TESTSCAN( 1, 4, hexadecimal, 0, "%x", &i ); 
     847    TESTSCAN( 1, 4, hexadecimal, 0, SCANPARMS( "%x", &i ) ); 
    841848    CHECK_EQUAL( i, 0 ); 
    842849    } 
     
    844851    // reading 0x000, x 
    845852    unsigned int i = -1; 
    846     TESTSCAN( 1, 6, hexadecimal, 5, "%x", &i ); 
     853    TESTSCAN( 1, 6, hexadecimal, 5, SCANPARMS( "%x", &i ) ); 
    847854    CHECK_EQUAL( i, 0 ); 
    848855    } 
     
    850857    // reading 0x0, i 
    851858    signed int i = -1; 
    852     TESTSCAN( 1, 4, hexadecimal, 0, "%i", &i ); 
     859    TESTSCAN( 1, 4, hexadecimal, 0, SCANPARMS( "%i", &i ) ); 
    853860    CHECK_EQUAL( i, 0 ); 
    854861    } 
     
    856863    // reading 7fffffff, x 
    857864    unsigned int i = -1; 
    858     TESTSCAN( 1, 8, hexadecimal, 53, "%x", &i ); 
     865    TESTSCAN( 1, 8, hexadecimal, 53, SCANPARMS( "%x", &i ) ); 
    859866    CHECK_EQUAL( i, 2147483647 ); 
    860867    } 
     
    862869    // reading -0x7fffffff, x 
    863870    unsigned int i = -1; 
    864     TESTSCAN( 1, 11, hexadecimal, 50, "%x", &i ); 
     871    TESTSCAN( 1, 11, hexadecimal, 50, SCANPARMS( "%x", &i ) ); 
    865872    CHECK_FEQUAL( i, -2147483647, unsigned int, "%u" ); 
    866873    } 
     
    868875    // reading 0x80000000, i 
    869876    signed int i = -1; 
    870     //TESTSCAN( 1, 11, hexadecimal, 62, "%i", &i ); 
    871     CHECK_EQUAL( sscanf( "-0x80000000", "%i", &i ); 
    872     CHECK_FEQUAL( i, -2147483648, signed int, "%d" ); 
     877    TESTSCAN( 1, 10, hexadecimal, 62, SCANPARMS( "%i", &i ) ); 
     878    printf( "found %d, expected -2147483648\n", i ); 
     879    CHECK_FEQUAL( i, -2147483648, signed int, "%d" ); /* FIXME */ 
    873880    } 
    874881    { 
    875882    // reading ffffffff, x 
    876883    unsigned int i = -1; 
    877     TESTSCAN( 1, 8, hexadecimal, 75, "%x", &i ); 
     884    TESTSCAN( 1, 8, hexadecimal, 75, SCANPARMS( "%x", &i ) ); 
    878885    CHECK_FEQUAL( i, 4294967295, unsigned int, "%d" ); 
    879886    } 
     
    881888    // reading 0xffffffff, x 
    882889    unsigned int i = -1; 
    883     TESTSCAN( 1, 10, hexadecimal, 73, "%x", &i ); 
     890    TESTSCAN( 1, 10, hexadecimal, 73, SCANPARMS( "%x", &i ) ); 
    884891    CHECK_FEQUAL( i, 4294967295, unsigned int, "%d" ); 
    885892    } 
     
    889896    // reading 0, o 
    890897    unsigned char i = -1; 
    891     TESTSCAN( 1, 1, octal, 4, "%hho", &i ); 
     898    TESTSCAN( 1, 1, octal, 4, SCANPARMS( "%hho", &i ) ); 
    892899    CHECK_EQUAL( i, 0u ); 
    893900    } 
     
    895902    // reading +0000, o 
    896903    unsigned char i = -1; 
    897     TESTSCAN( 1, 5, octal, 0, "%hho", &i ); 
     904    TESTSCAN( 1, 5, octal, 0, SCANPARMS( "%hho", &i ) ); 
    898905    CHECK_EQUAL( i, 0u ); 
    899906    } 
     
    901908    // reading -0000, o 
    902909    unsigned char i = -1; 
    903     TESTSCAN( 1, 5, octal, 6, "%hho", &i ); 
     910    TESTSCAN( 1, 5, octal, 6, SCANPARMS( "%hho", &i ) ); 
    904911    CHECK_EQUAL( i, 0u ); 
    905912    } 
     
    907914    // reading 0177, o 
    908915    unsigned char i = -1; 
    909     TESTSCAN( 1, 4, octal, 13, "%hho", &i ); 
     916    TESTSCAN( 1, 4, octal, 13, SCANPARMS( "%hho", &i ) ); 
    910917    CHECK_EQUAL( i, 127u ); 
    911918    } 
     
    913920    // reading +0177, o 
    914921    unsigned char i = -1; 
    915     TESTSCAN( 1, 5, octal, 12, "%hho", &i ); 
     922    TESTSCAN( 1, 5, octal, 12, SCANPARMS( "%hho", &i ) ); 
    916923    CHECK_EQUAL( i, 127u ); 
    917924    } 
     
    919926    // reading 0377, o 
    920927    unsigned char i = -1; 
    921     TESTSCAN( 1, 4, octal, 19, "%hho", &i ); 
     928    TESTSCAN( 1, 4, octal, 19, SCANPARMS( "%hho", &i ) ); 
    922929    CHECK_FEQUAL( i, 255u, unsigned char, "%hhu" ); 
    923930    } 
     
    925932    // reading +0377, o 
    926933    unsigned char i = -1; 
    927     TESTSCAN( 1, 5, octal, 18, "%hho", &i ); 
     934    TESTSCAN( 1, 5, octal, 18, SCANPARMS( "%hho", &i ) ); 
    928935    CHECK_FEQUAL( i, 255u, unsigned char, "%hhu" ); 
    929936    } 
     
    931938    // reading -0377, o 
    932939    unsigned char i = -1; 
    933     TESTSCAN( 1, 5, octal, 24, "%hho", &i ); 
     940    TESTSCAN( 1, 5, octal, 24, SCANPARMS( "%hho", &i ) ); 
    934941    CHECK_FEQUAL( i, 1u, unsigned char, "%hhu" ); 
    935942    } 
     
    937944    // reading 077777, o 
    938945    unsigned short i = -1; 
    939     TESTSCAN( 1, 6, octal, 31, "%ho", &i ); 
     946    TESTSCAN( 1, 6, octal, 31, SCANPARMS( "%ho", &i ) ); 
    940947    CHECK_EQUAL( i, 32767u ); 
    941948    } 
     
    943950    // reading +077777, o 
    944951    unsigned short i = -1; 
    945     TESTSCAN( 1, 7, octal, 30, "%ho", &i ); 
     952    TESTSCAN( 1, 7, octal, 30, SCANPARMS( "%ho", &i ) ); 
    946953    CHECK_EQUAL( i, 32767u ); 
    947954    } 
     
    949956    // reading 0177777, o 
    950957    unsigned short i = -1; 
    951     TESTSCAN( 1, 7, octal, 39, "%ho", &i ); 
     958    TESTSCAN( 1, 7, octal, 39, SCANPARMS( "%ho", &i ) ); 
    952959    CHECK_FEQUAL( i, 65535u, unsigned short, "%hu" ); 
    953960    } 
     
    955962    // reading +0177777, o 
    956963    unsigned short i = -1; 
    957     TESTSCAN( 1, 8, octal, 38, "%ho", &i ); 
     964    TESTSCAN( 1, 8, octal, 38, SCANPARMS( "%ho", &i ) ); 
    958965    CHECK_FEQUAL( i, 65535u, unsigned short, "%hu" ); 
    959966    } 
     
    961968    // reading -0177777, o 
    962969    unsigned short i = -1; 
    963     TESTSCAN( 1, 8, octal, 47, "%ho", &i ); 
     970    TESTSCAN( 1, 8, octal, 47, SCANPARMS( "%ho", &i ) ); 
    964971    CHECK_FEQUAL( i, 1u, unsigned short, "%hu" ); 
    965972    } 
     
    967974    // reading 017777777777, o 
    968975    unsigned int i = -1; 
    969     TESTSCAN( 1, 12, octal, 57, "%o", &i ); 
     976    TESTSCAN( 1, 12, octal, 57, SCANPARMS( "%o", &i ) ); 
    970977    CHECK_EQUAL( i, 2147483647u ); 
    971978    } 
     
    973980    // reading +017777777777, o 
    974981    unsigned int i = -1; 
    975     TESTSCAN( 1, 13, octal, 56, "%o", &i ); 
     982    TESTSCAN( 1, 13, octal, 56, SCANPARMS( "%o", &i ) ); 
    976983    CHECK_EQUAL( i, 2147483647u ); 
    977984    } 
     
    979986    // reading 037777777777, o 
    980987    unsigned int i = -1; 
    981     TESTSCAN( 1, 12, octal, 71, "%o", &i ); 
     988    TESTSCAN( 1, 12, octal, 71, SCANPARMS( "%o", &i ) ); 
    982989    CHECK_FEQUAL( i, 4294967295u, unsigned int, "%u" ); 
    983990    } 
     
    985992    // reading +037777777777, o 
    986993    unsigned int i = -1; 
    987     TESTSCAN( 1, 13, octal, 70, "%o", &i ); 
     994    TESTSCAN( 1, 13, octal, 70, SCANPARMS( "%o", &i ) ); 
    988995    CHECK_FEQUAL( i, 4294967295u, unsigned int, "%u" ); 
    989996    } 
     
    991998    // reading -037777777777, o 
    992999    unsigned int i = -1; 
    993     TESTSCAN( 1, 13, octal, 84, "%o", &i ); 
     1000    TESTSCAN( 1, 13, octal, 84, SCANPARMS( "%o", &i ) ); 
    9941001    CHECK_FEQUAL( i, 1u, unsigned int, "%u" ); 
    9951002    } 
     
    9971004    // reading 017777777777, o 
    9981005    unsigned long i = -1; 
    999     TESTSCAN( 1, 12, octal, 57, "%lo", &i ); 
     1006    TESTSCAN( 1, 12, octal, 57, SCANPARMS( "%lo", &i ) ); 
    10001007    CHECK_EQUAL( i, 2147483647lu ); 
    10011008    } 
     
    10031010    // reading +017777777777, o 
    10041011    unsigned long i = -1; 
    1005     TESTSCAN( 1, 13, octal, 56, "%lo", &i ); 
     1012    TESTSCAN( 1, 13, octal, 56, SCANPARMS( "%lo", &i ) ); 
    10061013    CHECK_EQUAL( i, 2147483647lu ); 
    10071014    } 
     
    10091016    // reading 037777777777, o 
    10101017    unsigned long i = -1; 
    1011     TESTSCAN( 1, 12, octal, 71, "%lo", &i ); 
     1018    TESTSCAN( 1, 12, octal, 71, SCANPARMS( "%lo", &i ) ); 
    10121019    CHECK_FEQUAL( i, 4294967295lu, unsigned long, "%lu" ); 
    10131020    } 
     
    10151022    // reading +037777777777, o 
    10161023    unsigned long i = -1; 
    1017     TESTSCAN( 1, 13, octal, 70, "%lo", &i ); 
     1024    TESTSCAN( 1, 13, octal, 70, SCANPARMS( "%lo", &i ) ); 
    10181025    CHECK_FEQUAL( i, 4294967295lu, unsigned long, "%lu" ); 
    10191026    } 
     
    10211028    // reading -037777777777, o 
    10221029    unsigned long i = -1; 
    1023     TESTSCAN( 1, 13, octal, 84, "%lo", &i ); 
     1030    TESTSCAN( 1, 13, octal, 84, SCANPARMS( "%lo", &i ) ); 
    10241031    CHECK_FEQUAL( i, 1lu, unsigned long, "%lu" ); 
    10251032    } 
     
    10271034    // reading 0777777777777777777777, o 
    10281035    unsigned long long i = -1; 
    1029     TESTSCAN( 1, 22, octal, 99, "%llo", &i ); 
     1036    TESTSCAN( 1, 22, octal, 99, SCANPARMS( "%llo", &i ) ); 
    10301037    CHECK_FEQUAL( i, 9223372036854775807llu, unsigned long long, "%llu" ); 
    10311038    } 
     
    10331040    // reading +0777777777777777777777, o 
    10341041    unsigned long long i = -1; 
    1035     TESTSCAN( 1, 23, octal, 98, "%llo", &i ); 
     1042    TESTSCAN( 1, 23, octal, 98, SCANPARMS( "%llo", &i ) ); 
    10361043    CHECK_FEQUAL( i, 9223372036854775807llu, unsigned long long, "%llu" ); 
    10371044    } 
     
    10391046    // reading 01777777777777777777777, o 
    10401047    unsigned long long i = -1; 
    1041     TESTSCAN( 1, 23, octal, 123, "%llo", &i ); 
     1048    TESTSCAN( 1, 23, octal, 123, SCANPARMS( "%llo", &i ) ); 
    10421049    CHECK_FEQUAL( i, 18446744073709551615llu, unsigned long long, "%llu" ); 
    10431050    } 
     
    10451052    // reading +01777777777777777777777, o 
    10461053    unsigned long long i = -1; 
    1047     TESTSCAN( 1, 24, octal, 122, "%llo", &i ); 
     1054    TESTSCAN( 1, 24, octal, 122, SCANPARMS( "%llo", &i ) ); 
    10481055    CHECK_FEQUAL( i, 18446744073709551615llu, unsigned long long, "%llu" ); 
    10491056    } 
     
    10511058    // reading -01777777777777777777777, o 
    10521059    unsigned long long i = -1; 
    1053     TESTSCAN( 1, 24, octal, 147, "%llo", &i ); 
     1060    TESTSCAN( 1, 24, octal, 147, SCANPARMS( "%llo", &i ) ); 
    10541061    CHECK_FEQUAL( i, 1llu, unsigned long long, "%llu" ); 
    10551062    } 
     
    10611068    // reading abc 
    10621069    memset( buffer, '\0', BUFSIZE ); 
    1063     TESTSCAN( 1, 3, alpha, 0, "%[abc]", buffer ); 
     1070    TESTSCAN( 1, 3, alpha, 0, SCANPARMS( "%[abc]", buffer ) ); 
    10641071    CHECK_FALSE( memcmp( buffer, "abc", 4 ) ); 
    10651072    } 
     
    10671074    // reading a-c 
    10681075    memset( buffer, '\0', BUFSIZE ); 
    1069     TESTSCAN( 1, 3, alpha, 0, "%[a-c]", buffer ); 
     1076    TESTSCAN( 1, 3, alpha, 0, SCANPARMS( "%[a-c]", buffer ) ); 
    10701077    CHECK_FALSE( memcmp( buffer, "abc", 4 ) ); 
    10711078    } 
     
    10731080    // reading a-h 
    10741081    memset( buffer, '\0', BUFSIZE ); 
    1075     TESTSCAN( 1, 8, alpha, 0, "%[a-h]", buffer ); 
     1082    TESTSCAN( 1, 8, alpha, 0, SCANPARMS( "%[a-h]", buffer ) ); 
    10761083    CHECK_FALSE( memcmp( buffer, "abcdefgh", 9 ) ); 
    10771084    } 
     
    10791086    // reading o-r, including [, seperate char 
    10801087    memset( buffer, '\0', BUFSIZE ); 
    1081     TESTSCAN( 1, 5, alpha, 15, "%[[o-qr]", buffer ); 
     1088    TESTSCAN( 1, 5, alpha, 15, SCANPARMS( "%[[o-qr]", buffer ) ); 
    10821089    CHECK_FALSE( memcmp( buffer, "op[qr", 6 ) ); 
    10831090    } 
     
    10851092    // reading v-y, including ], two groups 
    10861093    memset( buffer, '\0', BUFSIZE ); 
    1087     TESTSCAN( 1, 5, alpha, 23, "%[]v-wx-y]", buffer ); 
     1094    TESTSCAN( 1, 5, alpha, 23, SCANPARMS( "%[]v-wx-y]", buffer ) ); 
    10881095    CHECK_FALSE( memcmp( buffer, "vw]xy", 6 ) ); 
    10891096    } 
     
    10911098    // missing on first character 
    10921099    memset( buffer, '\0', BUFSIZE ); 
    1093     TESTSCAN( 0, -1, alpha, 0, "%[b]", buffer ); 
     1100    TESTSCAN( 0, -1, alpha, 0, SCANPARMS( "%[b]", buffer ) ); 
    10941101    CHECK_FALSE( memcmp( buffer, "", 1 ) ); 
    10951102    } 
     
    10971104    // eof while reading, two groups 
    10981105    memset( buffer, '\0', BUFSIZE ); 
    1099     TESTSCAN( 1, 2, alpha, 27, "%[a-zA-Z]", buffer ); 
     1106    TESTSCAN( 1, 2, alpha, 27, SCANPARMS( "%[a-zA-Z]", buffer ) ); 
    11001107    CHECK_FALSE( memcmp( buffer, "yz", 3 ) ); 
    11011108    } 
     
    11031110    // eof before reading 
    11041111    memset( buffer, '\0', BUFSIZE ); 
    1105     TESTSCAN( -1, -1, alpha, 29, "%[a-z]", buffer ) ); 
     1112    TESTSCAN( -1, -1, alpha, 29, SCANPARMS( "%[a-z]", buffer ) ); 
    11061113    CHECK_FALSE( memcmp( buffer, "", 1 ) ); 
    11071114    } 
     
    11091116    // negation - [^...] 
    11101117    memset( buffer, '\0', BUFSIZE ); 
    1111     TESTSCAN( 1, 3, alpha, 0, "%[^d-f]", buffer ); 
     1118    TESTSCAN( 1, 3, alpha, 0, SCANPARMS( "%[^d-f]", buffer ) ); 
    11121119    CHECK_FALSE( memcmp( buffer, "abc", 4 ) ); 
    11131120    } 
     
    11571164         according to 7.19.6.2 paragraph 10. 
    11581165    */ 
    1159     TESTSCAN( 0, -1, special, 0, "%hhx", &i ); 
    1160     CHECK_EQUAL( i, 1 ); 
     1166    TESTSCAN( 0, -1, special, 0, SCANPARMS( "%hhx", &i ) ); /* May fail on regtest */ 
     1167    CHECK_EQUAL( i, 1 ); /* FIXME */ 
    11611168    } 
    11621169    { 
    11631170    // reading -0x, x 
    11641171    unsigned short i = 1; 
    1165     TESTSCAN( 0, -1, special, 0, "%hx", &i ); 
    1166     CHECK_EQUAL( i, 1 ); 
     1172    TESTSCAN( 0, -1, special, 0, SCANPARMS( "%hx", &i ) ); /* May fail on regtest */ 
     1173    CHECK_EQUAL( i, 1 ); /* FIXME */ 
    11671174    } 
    11681175    { 
    11691176    // reading -0x, x 
    11701177    unsigned int i = 1; 
    1171     TESTSCAN( 0, -1, special, 0, "%x", &i ); 
    1172     CHECK_EQUAL( i, 1 ); 
    1173     } 
     1178    TESTSCAN( 0, -1, special, 0, SCANPARMS( "%x", &i ) ); /* May fail on regtest */ 
     1179    CHECK_EQUAL( i, 1 ); /* FIXME */ 
     1180    } 
  • trunk/functions/stdio/sscan_sources.incl

    r433 r434  
    1818 
    1919/* sscan */ 
    20 #define TESTSCAN( result, count, source, offset, format, ... ) \ 
     20#define TESTSCAN( result, count, source, offset, ... ) \ 
    2121    do \ 
    2222    { \ 
    2323        int n = -1; \ 
    24         TESTCASE( SCANFUNC( source + offset, format "%n", __VA_ARGS__, &n ) == result ); \ 
    25         TESTCASE( n == count ); \ 
     24        int res = SCANFUNC( source + offset, __VA_ARGS__ ); \ 
     25        if ( res != result ) \ 
     26        { \ 
     27            rc += 1; \ 
     28            printf( "FAILED: " __FILE__ ", line %d - expected result %d, got %d\n", __LINE__, result, res ); \ 
     29        } \ 
     30        if ( n != count ) \ 
     31        { \ 
     32            rc += 1; \ 
     33            printf( "FAILED: " __FILE__ ", line %d - expected count %d, got %d\n", __LINE__, count, n ); \ 
     34        } \ 
    2635    } while ( 0 ) 
    2736 
     37#define SCAN( format )           format "%n",              &n 
     38#define SCANPARMS( format, ... ) format "%n", __VA_ARGS__, &n 
     39 
     40#define _PDCLIB_SSCAN 
     41