intl/icu/source/tools/gentest/genres32.c

Wed, 31 Dec 2014 07:22:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:22:50 +0100
branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
permissions
-rw-r--r--

Correct previous dual key logic pending first delivery installment.

     1 /*
     2 *******************************************************************************
     3 *
     4 *   Copyright (C) 2003-2006, International Business Machines
     5 *   Corporation and others.  All Rights Reserved.
     6 *
     7 *******************************************************************************
     8 *   file name:  genres32.c
     9 *   encoding:   US-ASCII
    10 *   tab size:   8 (not used)
    11 *   indentation:4
    12 *
    13 *   created on: 2003sep10
    14 *   created by: Markus W. Scherer
    15 *
    16 *   Write an ICU resource bundle with a table whose
    17 *   number of key characters and number of items both exceed 64k.
    18 *   Writing it as the root table tests also that
    19 *   the new table type is recognized for the root resource by the reader code.
    20 */
    21 #include <stdio.h>
    22 #include "unicode/putil.h"
    23 #include "cstring.h"
    24 #include "gentest.h"
    26 static void
    27 incKey(char *key, char *limit) {
    28     char c;
    30     while(limit>key) {
    31         c=*--limit;
    32         if(c=='o') {
    33             *limit='1';
    34             break;
    35         } else {
    36             *limit='o';
    37         }
    38     }
    39 }
    41 U_CFUNC int
    42 genres32(const char *prog, const char *path) {
    43     /*
    44      * key string, gets incremented binary numbers
    45      * letter 'o'=0 and digit '1'=1 so that data swapping can be tested
    46      * with reordering (ASCII: '1'<'o' EBCDIC: '1'>'o')
    47      *
    48      * need 17 digits for >64k unique items
    49      */
    50     char key[20]="ooooooooooooooooo";
    51     char *limit;
    52     int i;
    53     char file[512];
    54     FILE *out;
    56     uprv_strcpy(file,path);
    57     if(file[strlen(file)-1]!=U_FILE_SEP_CHAR) {
    58         uprv_strcat(file,U_FILE_SEP_STRING);
    59     }
    60     uprv_strcat(file,"testtable32.txt");
    61     out = fopen(file, "w");
    62     /*puts(file);*/
    63     puts("Generating testtable32.txt");
    64     if(out == NULL) {
    65         fprintf(stderr, "%s: Couldn't create resource test file %s\n",
    66                 prog, file);
    67         return 1;
    68     }
    70     /* find the limit of the key string */
    71     for(limit=key; *limit!=0; ++limit) {
    72     }
    74     /* output the beginning of the bundle */
    75     fputs(
    76           "testtable32 {", out
    77     );
    79     /* output the table entries */
    80     for(i=0; i<66000; ++i) {
    81         if(i%10==0) {
    82             /*
    83              * every 10th entry contains a string with
    84              * the entry index as its code point
    85              */
    86             fprintf(out, "%s{\"\\U%08x\"}\n", key, i);
    87         } else {
    88             /* other entries contain their index as an integer */
    89             fprintf(out, "%s:int{%d}\n", key, i);
    90         }
    92         incKey(key, limit);
    93     }
    95     /* output the end of the bundle */
    96     fputs(
    97           "}", out
    98     );
   100     fclose(out);
   101     return 0;
   102 }

mercurial