Changeset 4007


Ignore:
Timestamp:
Nov 22, 2009, 7:54:49 PM (11 years ago)
Author:
Sam Hocevar
Message:

Improve the zzcat test suite with more unlocked IO functions.

Location:
zzuf/trunk/test
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • zzuf/trunk/test/check-utils

    r4002 r4007  
    2121            check "$ZZOPTS" "< $file" "zzuf"
    2222        fi
    23         for n in 0 20 21 22 23 24 25 30 31 40 41 42; do
     23        for n in 100 \
     24                 200 201 202 203 204 205 206 207 208 \
     25                 300 301 302 303 304 305 306 307 \
     26                 400 \
     27                 500 \
     28                 600; do
    2429            check "$ZZOPTS" "$ZZCAT $n $file" "zzcat $n"
    2530        done
  • zzuf/trunk/test/zzcat.c

    r4004 r4007  
    4141static int zzcat_fread(char const *, unsigned char *, int64_t);
    4242static int zzcat_getc(char const *, unsigned char *, int64_t, int);
    43 static int zzcat_fgetc(char const *, unsigned char *, int64_t);
    4443#if defined HAVE_GETLINE
    4544static int zzcat_getdelim_getc(char const *, unsigned char *, int64_t, int);
    4645#endif
     46static int zzcat_fseek_getc(char const *, unsigned char *, int64_t, int);
    4747static int zzcat_fread_getc(char const *, unsigned char *, int64_t, int);
    4848static int zzcat_random_socket(char const *, unsigned char *, int64_t);
     
    6262}
    6363
     64static inline int mygetc(FILE *stream, int getc_method)
     65{
     66    switch (getc_method)
     67    {
     68#if defined HAVE_GETC_UNLOCKED
     69        case 3: return fgetc_unlocked(stream);
     70        case 2: return getc_unlocked(stream);
     71#endif
     72        case 1: return fgetc(stream);
     73        default: return getc(stream);
     74    }
     75}
     76
    6477int main(int argc, char *argv[])
    6578{
     
    89102    switch((cmd = atoi(argv[1])))
    90103    {
    91         case 0: ret = zzcat_read(name, data, len); break;
    92         case 20: ret = zzcat_fread(name, data, len); break;
    93         case 21: ret = zzcat_getc(name, data, len, 0); break;
     104        /* Simple socket calls */
     105        case 100: ret = zzcat_read(name, data, len); break;
     106        /* Simple stream calls */
     107        case 200: ret = zzcat_fread(name, data, len); break;
     108        case 201: ret = zzcat_getc(name, data, len, 0); break;
     109        case 202: ret = zzcat_getc(name, data, len, 1); break;
     110        case 203: ret = zzcat_fseek_getc(name, data, len, 0); break;
     111        case 204: ret = zzcat_fseek_getc(name, data, len, 1); break;
     112        case 205: ret = zzcat_fread_getc(name, data, len, 0); break;
     113        case 206: ret = zzcat_fread_getc(name, data, len, 1); break;
     114#if defined HAVE_GETLINE
     115        case 207: ret = zzcat_getdelim_getc(name, data, len, 0); break;
     116        case 208: ret = zzcat_getdelim_getc(name, data, len, 1); break;
     117#endif
     118        /* Simple unlocked stream calls */
    94119#if defined HAVE_GETC_UNLOCKED
    95         case 22: ret = zzcat_getc(name, data, len, 1); break;
    96 #endif
    97         case 23: ret = zzcat_fgetc(name, data, len); break;
    98 #if defined HAVE_GETLINE
    99         case 24: ret = zzcat_getdelim_getc(name, data, len, 0); break;
    100 #   if defined HAVE_GETC_UNLOCKED
    101         case 25: ret = zzcat_getdelim_getc(name, data, len, 1); break;
     120        case 300: ret = zzcat_getc(name, data, len, 2); break;
     121        case 301: ret = zzcat_getc(name, data, len, 3); break;
     122        case 302: ret = zzcat_fseek_getc(name, data, len, 2); break;
     123        case 303: ret = zzcat_fseek_getc(name, data, len, 3); break;
     124        case 304: ret = zzcat_fread_getc(name, data, len, 2); break;
     125        case 305: ret = zzcat_fread_getc(name, data, len, 3); break;
     126#   if defined HAVE_GETLINE
     127        case 306: ret = zzcat_getdelim_getc(name, data, len, 2); break;
     128        case 307: ret = zzcat_getdelim_getc(name, data, len, 3); break;
    102129#   endif
    103130#endif
    104         case 30: ret = zzcat_fread_getc(name, data, len, 0); break;
    105         case 31: ret = zzcat_fread_getc(name, data, len, 1); break;
    106         case 40: ret = zzcat_random_socket(name, data, len); break;
    107         case 41: ret = zzcat_random_stream(name, data, len); break;
     131        /* Complex socket calls */
     132        case 400: ret = zzcat_random_socket(name, data, len); break;
     133        /* Complex stream calls */
     134        case 500: ret = zzcat_random_stream(name, data, len); break;
     135        /* Misc */
    108136#if defined HAVE_MMAP
    109         case 42: ret = zzcat_random_mmap(name, data, len); break;
     137        case 600: ret = zzcat_random_mmap(name, data, len); break;
    110138#endif
    111139        default: ret = EXIT_SUCCESS;
     
    144172}
    145173
    146 /* Only getc() or getc_unlocked() calls */
     174/* Only getc() or fgetc() calls */
    147175static int zzcat_getc(char const *name, unsigned char *data, int64_t len,
    148                       int unlocked)
     176                      int getc_method)
    149177{
    150178    FILE *stream = fopen(name, "r");
     
    153181        return EXIT_FAILURE;
    154182    for(i = 0; i < len; i++)
    155 #if defined HAVE_GETC_UNLOCKED
    156         data[i] = unlocked ? getc_unlocked(stream)
    157                            : getc(stream);
    158 #else
    159         data[i] = getc(stream);
    160 #endif
    161     fclose(stream);
    162     return EXIT_SUCCESS;
    163 }
    164 
    165 /* Only fgetc() calls */
    166 static int zzcat_fgetc(char const *name, unsigned char *data, int64_t len)
    167 {
    168     FILE *stream = fopen(name, "r");
    169     int i;
    170     if(!stream)
    171         return EXIT_FAILURE;
    172     for(i = 0; i < len; i++)
    173         data[i] = fgetc(stream);
     183        data[i] = mygetc(stream, getc_method);
    174184    fclose(stream);
    175185    return EXIT_SUCCESS;
     
    179189/* getdelim() and getc() calls */
    180190static int zzcat_getdelim_getc(char const *name, unsigned char *data,
    181                                int64_t len, int unlocked)
     191                               int64_t len, int getc_method)
    182192{
    183193    FILE *stream = fopen(name, "r");
     
    187197        return EXIT_FAILURE;
    188198    (void)len;
    189 #if defined HAVE_GETC_UNLOCKED
    190     while ((c = (unlocked ? getc_unlocked(stream) : getc(stream))) != EOF)
    191 #else
    192     while ((c = getc(stream)) != EOF)
    193 #endif
     199    while ((c = mygetc(stream, getc_method)) != EOF)
    194200    {
    195201        char *line;
     
    208214#endif
    209215
     216/* One fseek(), then only getc() or fgetc() calls */
     217static int zzcat_fseek_getc(char const *name, unsigned char *data,
     218                            int64_t len, int getc_method)
     219{
     220    FILE *stream = fopen(name, "r");
     221    int i;
     222    if(!stream)
     223        return EXIT_FAILURE;
     224    fseek(stream, len / 2, SEEK_CUR);
     225    for(i = len / 2; i < len; i++)
     226        data[i] = mygetc(stream, getc_method);
     227    fclose(stream);
     228    return EXIT_SUCCESS;
     229}
     230
    210231/* One fread(), then only getc() or fgetc() calls */
    211232static int zzcat_fread_getc(char const *name, unsigned char *data,
    212                             int64_t len, int use_fgetc)
     233                            int64_t len, int getc_method)
    213234{
    214235    FILE *stream = fopen(name, "r");
     
    216237    if(!stream)
    217238        return EXIT_FAILURE;
    218     fread(data, 1, 10, stream);
    219     for(i = 10; i < len; i++)
    220         data[i] = use_fgetc ? fgetc(stream) : getc(stream);
     239    fread(data, 1, len / 2, stream);
     240    for(i = len / 2; i < len; i++)
     241        data[i] = mygetc(stream, getc_method);
    221242    fclose(stream);
    222243    return EXIT_SUCCESS;
Note: See TracChangeset for help on using the changeset viewer.