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