Blame testdict.c

Packit Service a31ea6
#include <string.h>
Packit Service a31ea6
#include <libxml/parser.h>
Packit Service a31ea6
#include <libxml/dict.h>
Packit Service a31ea6
Packit Service a31ea6
/* #define WITH_PRINT */
Packit Service a31ea6
Packit Service a31ea6
static const char *seeds1[] = {
Packit Service a31ea6
   "a", "b", "c",
Packit Service a31ea6
   "d", "e", "f",
Packit Service a31ea6
   "g", "h", "i",
Packit Service a31ea6
   "j", "k", "l",
Packit Service a31ea6
Packit Service a31ea6
   NULL
Packit Service a31ea6
};
Packit Service a31ea6
Packit Service a31ea6
static const char *seeds2[] = {
Packit Service a31ea6
   "m", "n", "o",
Packit Service a31ea6
   "p", "q", "r",
Packit Service a31ea6
   "s", "t", "u",
Packit Service a31ea6
   "v", "w", "x",
Packit Service a31ea6
Packit Service a31ea6
   NULL
Packit Service a31ea6
};
Packit Service a31ea6
Packit Service a31ea6
#define NB_STRINGS_NS 100
Packit Service a31ea6
#define NB_STRINGS_MAX 10000
Packit Service a31ea6
#define NB_STRINGS_MIN 10
Packit Service a31ea6
Packit Service a31ea6
static xmlChar *strings1[NB_STRINGS_MAX];
Packit Service a31ea6
static xmlChar *strings2[NB_STRINGS_MAX];
Packit Service a31ea6
static const xmlChar *test1[NB_STRINGS_MAX];
Packit Service a31ea6
static const xmlChar *test2[NB_STRINGS_MAX];
Packit Service a31ea6
static int nbErrors = 0;
Packit Service a31ea6
Packit Service a31ea6
static void fill_strings(void) {
Packit Service a31ea6
    int i, j, k;
Packit Service a31ea6
Packit Service a31ea6
    /*
Packit Service a31ea6
     * That's a bit nasty but the output is fine and it doesn't take hours
Packit Service a31ea6
     * there is a small but sufficient number of duplicates, and we have
Packit Service a31ea6
     * ":xxx" and full QNames in the last NB_STRINGS_NS values
Packit Service a31ea6
     */
Packit Service a31ea6
    for (i = 0; seeds1[i] != NULL; i++) {
Packit Service a31ea6
        strings1[i] = xmlStrdup((const xmlChar *) seeds1[i]);
Packit Service a31ea6
	if (strings1[i] == NULL) {
Packit Service a31ea6
	    fprintf(stderr, "Out of memory while generating strings1\n");
Packit Service a31ea6
	    exit(1);
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
    for (j = 0, k = 0;i < NB_STRINGS_MAX - NB_STRINGS_NS;i++,j++) {
Packit Service a31ea6
        strings1[i] = xmlStrncatNew(strings1[j], strings1[k], -1);
Packit Service a31ea6
	if (strings1[i] == NULL) {
Packit Service a31ea6
	    fprintf(stderr, "Out of memory while generating strings1\n");
Packit Service a31ea6
	    exit(1);
Packit Service a31ea6
	}
Packit Service a31ea6
	if (j >= 50) {
Packit Service a31ea6
	    j = 0;
Packit Service a31ea6
	    k++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
    for (j = 0; (j < 50) && (i < NB_STRINGS_MAX); i++, j+=2) {
Packit Service a31ea6
        strings1[i] = xmlStrncatNew(strings1[j], (const xmlChar *) ":", -1);
Packit Service a31ea6
	if (strings1[i] == NULL) {
Packit Service a31ea6
	    fprintf(stderr, "Out of memory while generating strings1\n");
Packit Service a31ea6
	    exit(1);
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
    for (j = NB_STRINGS_MAX - NB_STRINGS_NS, k = 0;
Packit Service a31ea6
         i < NB_STRINGS_MAX;i++,j++) {
Packit Service a31ea6
        strings1[i] = xmlStrncatNew(strings1[j], strings1[k], -1);
Packit Service a31ea6
	if (strings1[i] == NULL) {
Packit Service a31ea6
	    fprintf(stderr, "Out of memory while generating strings1\n");
Packit Service a31ea6
	    exit(1);
Packit Service a31ea6
	}
Packit Service a31ea6
	k += 3;
Packit Service a31ea6
	if (k >= 50) k = 0;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /*
Packit Service a31ea6
     * Now do the same with the second pool of strings
Packit Service a31ea6
     */
Packit Service a31ea6
    for (i = 0; seeds2[i] != NULL; i++) {
Packit Service a31ea6
        strings2[i] = xmlStrdup((const xmlChar *) seeds2[i]);
Packit Service a31ea6
	if (strings2[i] == NULL) {
Packit Service a31ea6
	    fprintf(stderr, "Out of memory while generating strings2\n");
Packit Service a31ea6
	    exit(1);
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
    for (j = 0, k = 0;i < NB_STRINGS_MAX - NB_STRINGS_NS;i++,j++) {
Packit Service a31ea6
        strings2[i] = xmlStrncatNew(strings2[j], strings2[k], -1);
Packit Service a31ea6
	if (strings2[i] == NULL) {
Packit Service a31ea6
	    fprintf(stderr, "Out of memory while generating strings2\n");
Packit Service a31ea6
	    exit(1);
Packit Service a31ea6
	}
Packit Service a31ea6
	if (j >= 50) {
Packit Service a31ea6
	    j = 0;
Packit Service a31ea6
	    k++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
    for (j = 0; (j < 50) && (i < NB_STRINGS_MAX); i++, j+=2) {
Packit Service a31ea6
        strings2[i] = xmlStrncatNew(strings2[j], (const xmlChar *) ":", -1);
Packit Service a31ea6
	if (strings2[i] == NULL) {
Packit Service a31ea6
	    fprintf(stderr, "Out of memory while generating strings2\n");
Packit Service a31ea6
	    exit(1);
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
    for (j = NB_STRINGS_MAX - NB_STRINGS_NS, k = 0;
Packit Service a31ea6
         i < NB_STRINGS_MAX;i++,j++) {
Packit Service a31ea6
        strings2[i] = xmlStrncatNew(strings2[j], strings2[k], -1);
Packit Service a31ea6
	if (strings2[i] == NULL) {
Packit Service a31ea6
	    fprintf(stderr, "Out of memory while generating strings2\n");
Packit Service a31ea6
	    exit(1);
Packit Service a31ea6
	}
Packit Service a31ea6
	k += 3;
Packit Service a31ea6
	if (k >= 50) k = 0;
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
#ifdef WITH_PRINT
Packit Service a31ea6
static void print_strings(void) {
Packit Service a31ea6
    int i;
Packit Service a31ea6
Packit Service a31ea6
    for (i = 0; i < NB_STRINGS_MAX;i++) {
Packit Service a31ea6
        printf("%s\n", strings1[i]);
Packit Service a31ea6
    }
Packit Service a31ea6
    for (i = 0; i < NB_STRINGS_MAX;i++) {
Packit Service a31ea6
        printf("%s\n", strings2[i]);
Packit Service a31ea6
    }
Packit Service a31ea6
}
Packit Service a31ea6
#endif
Packit Service a31ea6
Packit Service a31ea6
static void clean_strings(void) {
Packit Service a31ea6
    int i;
Packit Service a31ea6
Packit Service a31ea6
    for (i = 0; i < NB_STRINGS_MAX; i++) {
Packit Service a31ea6
        if (strings1[i] != NULL) /* really should not happen */
Packit Service a31ea6
	    xmlFree(strings1[i]);
Packit Service a31ea6
    }
Packit Service a31ea6
    for (i = 0; i < NB_STRINGS_MAX; i++) {
Packit Service a31ea6
        if (strings2[i] != NULL) /* really should not happen */
Packit Service a31ea6
	    xmlFree(strings2[i]);
Packit Service a31ea6
    }
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/*
Packit Service a31ea6
 * This tests the sub-dictionary support
Packit Service a31ea6
 */
Packit Service a31ea6
static int run_test2(xmlDictPtr parent) {
Packit Service a31ea6
    int i, j;
Packit Service a31ea6
    xmlDictPtr dict;
Packit Service a31ea6
    int ret = 0;
Packit Service a31ea6
    xmlChar prefix[40];
Packit Service a31ea6
    xmlChar *cur, *pref;
Packit Service a31ea6
    const xmlChar *tmp;
Packit Service a31ea6
Packit Service a31ea6
    dict = xmlDictCreateSub(parent);
Packit Service a31ea6
    if (dict == NULL) {
Packit Service a31ea6
	fprintf(stderr, "Out of memory while creating sub-dictionary\n");
Packit Service a31ea6
	exit(1);
Packit Service a31ea6
    }
Packit Service a31ea6
    memset(test2, 0, sizeof(test2));
Packit Service a31ea6
Packit Service a31ea6
    /*
Packit Service a31ea6
     * Fill in NB_STRINGS_MIN, at this point the dictionary should not grow
Packit Service a31ea6
     * and we allocate all those doing the fast key computations
Packit Service a31ea6
     * All the strings are based on a different seeds subset so we know
Packit Service a31ea6
     * they are allocated in the main dictionary, not coming from the parent
Packit Service a31ea6
     */
Packit Service a31ea6
    for (i = 0;i < NB_STRINGS_MIN;i++) {
Packit Service a31ea6
        test2[i] = xmlDictLookup(dict, strings2[i], -1);
Packit Service a31ea6
	if (test2[i] == NULL) {
Packit Service a31ea6
	    fprintf(stderr, "Failed lookup for '%s'\n", strings2[i]);
Packit Service a31ea6
	    ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
    j = NB_STRINGS_MAX - NB_STRINGS_NS;
Packit Service a31ea6
    /* ":foo" like strings2 */
Packit Service a31ea6
    for (i = 0;i < NB_STRINGS_MIN;i++, j++) {
Packit Service a31ea6
        test2[j] = xmlDictLookup(dict, strings2[j], xmlStrlen(strings2[j]));
Packit Service a31ea6
	if (test2[j] == NULL) {
Packit Service a31ea6
	    fprintf(stderr, "Failed lookup for '%s'\n", strings2[j]);
Packit Service a31ea6
	    ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
    /* "a:foo" like strings2 */
Packit Service a31ea6
    j = NB_STRINGS_MAX - NB_STRINGS_MIN;
Packit Service a31ea6
    for (i = 0;i < NB_STRINGS_MIN;i++, j++) {
Packit Service a31ea6
        test2[j] = xmlDictLookup(dict, strings2[j], xmlStrlen(strings2[j]));
Packit Service a31ea6
	if (test2[j] == NULL) {
Packit Service a31ea6
	    fprintf(stderr, "Failed lookup for '%s'\n", strings2[j]);
Packit Service a31ea6
	    ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /*
Packit Service a31ea6
     * At this point allocate all the strings
Packit Service a31ea6
     * the dictionary will grow in the process, reallocate more string tables
Packit Service a31ea6
     * and switch to the better key generator
Packit Service a31ea6
     */
Packit Service a31ea6
    for (i = 0;i < NB_STRINGS_MAX;i++) {
Packit Service a31ea6
        if (test2[i] != NULL)
Packit Service a31ea6
	    continue;
Packit Service a31ea6
	test2[i] = xmlDictLookup(dict, strings2[i], -1);
Packit Service a31ea6
	if (test2[i] == NULL) {
Packit Service a31ea6
	    fprintf(stderr, "Failed lookup for '%s'\n", strings2[i]);
Packit Service a31ea6
	    ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /*
Packit Service a31ea6
     * Now we can start to test things, first that all strings2 belongs to
Packit Service a31ea6
     * the dict, and that none of them was actually allocated in the parent
Packit Service a31ea6
     */
Packit Service a31ea6
    for (i = 0;i < NB_STRINGS_MAX;i++) {
Packit Service a31ea6
        if (!xmlDictOwns(dict, test2[i])) {
Packit Service a31ea6
	    fprintf(stderr, "Failed ownership failure for '%s'\n",
Packit Service a31ea6
	            strings2[i]);
Packit Service a31ea6
	    ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
        if (xmlDictOwns(parent, test2[i])) {
Packit Service a31ea6
	    fprintf(stderr, "Failed parent ownership failure for '%s'\n",
Packit Service a31ea6
	            strings2[i]);
Packit Service a31ea6
	    ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /*
Packit Service a31ea6
     * Also verify that all strings from the parent are seen from the subdict
Packit Service a31ea6
     */
Packit Service a31ea6
    for (i = 0;i < NB_STRINGS_MAX;i++) {
Packit Service a31ea6
        if (!xmlDictOwns(dict, test1[i])) {
Packit Service a31ea6
	    fprintf(stderr, "Failed sub-ownership failure for '%s'\n",
Packit Service a31ea6
	            strings1[i]);
Packit Service a31ea6
	    ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /*
Packit Service a31ea6
     * Then that another lookup to the string in sub will return the same
Packit Service a31ea6
     */
Packit Service a31ea6
    for (i = 0;i < NB_STRINGS_MAX;i++) {
Packit Service a31ea6
        if (xmlDictLookup(dict, strings2[i], -1) != test2[i]) {
Packit Service a31ea6
	    fprintf(stderr, "Failed re-lookup check for %d, '%s'\n",
Packit Service a31ea6
	            i, strings2[i]);
Packit Service a31ea6
	    ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
    /*
Packit Service a31ea6
     * But also that any lookup for a string in the parent will be provided
Packit Service a31ea6
     * as in the parent
Packit Service a31ea6
     */
Packit Service a31ea6
    for (i = 0;i < NB_STRINGS_MAX;i++) {
Packit Service a31ea6
        if (xmlDictLookup(dict, strings1[i], -1) != test1[i]) {
Packit Service a31ea6
	    fprintf(stderr, "Failed parent string lookup check for %d, '%s'\n",
Packit Service a31ea6
	            i, strings1[i]);
Packit Service a31ea6
	    ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /*
Packit Service a31ea6
     * check the QName lookups
Packit Service a31ea6
     */
Packit Service a31ea6
    for (i = NB_STRINGS_MAX - NB_STRINGS_NS;i < NB_STRINGS_MAX;i++) {
Packit Service a31ea6
        cur = strings2[i];
Packit Service a31ea6
	pref = &prefix[0];
Packit Service a31ea6
	while (*cur != ':') *pref++ = *cur++;
Packit Service a31ea6
	cur++;
Packit Service a31ea6
	*pref = 0;
Packit Service a31ea6
	tmp = xmlDictQLookup(dict, &prefix[0], cur);
Packit Service a31ea6
	if (tmp != test2[i]) {
Packit Service a31ea6
	    fprintf(stderr, "Failed lookup check for '%s':'%s'\n",
Packit Service a31ea6
	            &prefix[0], cur);
Packit Service a31ea6
            ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
    /*
Packit Service a31ea6
     * check the QName lookups for strings from the parent
Packit Service a31ea6
     */
Packit Service a31ea6
    for (i = NB_STRINGS_MAX - NB_STRINGS_NS;i < NB_STRINGS_MAX;i++) {
Packit Service a31ea6
        cur = strings1[i];
Packit Service a31ea6
	pref = &prefix[0];
Packit Service a31ea6
	while (*cur != ':') *pref++ = *cur++;
Packit Service a31ea6
	cur++;
Packit Service a31ea6
	*pref = 0;
Packit Service a31ea6
	tmp = xmlDictQLookup(dict, &prefix[0], cur);
Packit Service a31ea6
	if (xmlDictQLookup(dict, &prefix[0], cur) != test1[i]) {
Packit Service a31ea6
	    fprintf(stderr, "Failed parent lookup check for '%s':'%s'\n",
Packit Service a31ea6
	            &prefix[0], cur);
Packit Service a31ea6
            ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    xmlDictFree(dict);
Packit Service a31ea6
    return(ret);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
/*
Packit Service a31ea6
 * Test a single dictionary
Packit Service a31ea6
 */
Packit Service a31ea6
static int run_test1(void) {
Packit Service a31ea6
    int i, j;
Packit Service a31ea6
    xmlDictPtr dict;
Packit Service a31ea6
    int ret = 0;
Packit Service a31ea6
    xmlChar prefix[40];
Packit Service a31ea6
    xmlChar *cur, *pref;
Packit Service a31ea6
    const xmlChar *tmp;
Packit Service a31ea6
Packit Service a31ea6
    dict = xmlDictCreate();
Packit Service a31ea6
    if (dict == NULL) {
Packit Service a31ea6
	fprintf(stderr, "Out of memory while creating dictionary\n");
Packit Service a31ea6
	exit(1);
Packit Service a31ea6
    }
Packit Service a31ea6
    memset(test1, 0, sizeof(test1));
Packit Service a31ea6
Packit Service a31ea6
    /*
Packit Service a31ea6
     * Fill in NB_STRINGS_MIN, at this point the dictionary should not grow
Packit Service a31ea6
     * and we allocate all those doing the fast key computations
Packit Service a31ea6
     */
Packit Service a31ea6
    for (i = 0;i < NB_STRINGS_MIN;i++) {
Packit Service a31ea6
        test1[i] = xmlDictLookup(dict, strings1[i], -1);
Packit Service a31ea6
	if (test1[i] == NULL) {
Packit Service a31ea6
	    fprintf(stderr, "Failed lookup for '%s'\n", strings1[i]);
Packit Service a31ea6
	    ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
    j = NB_STRINGS_MAX - NB_STRINGS_NS;
Packit Service a31ea6
    /* ":foo" like strings1 */
Packit Service a31ea6
    for (i = 0;i < NB_STRINGS_MIN;i++, j++) {
Packit Service a31ea6
        test1[j] = xmlDictLookup(dict, strings1[j], xmlStrlen(strings1[j]));
Packit Service a31ea6
	if (test1[j] == NULL) {
Packit Service a31ea6
	    fprintf(stderr, "Failed lookup for '%s'\n", strings1[j]);
Packit Service a31ea6
	    ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
    /* "a:foo" like strings1 */
Packit Service a31ea6
    j = NB_STRINGS_MAX - NB_STRINGS_MIN;
Packit Service a31ea6
    for (i = 0;i < NB_STRINGS_MIN;i++, j++) {
Packit Service a31ea6
        test1[j] = xmlDictLookup(dict, strings1[j], xmlStrlen(strings1[j]));
Packit Service a31ea6
	if (test1[j] == NULL) {
Packit Service a31ea6
	    fprintf(stderr, "Failed lookup for '%s'\n", strings1[j]);
Packit Service a31ea6
	    ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /*
Packit Service a31ea6
     * At this point allocate all the strings
Packit Service a31ea6
     * the dictionary will grow in the process, reallocate more string tables
Packit Service a31ea6
     * and switch to the better key generator
Packit Service a31ea6
     */
Packit Service a31ea6
    for (i = 0;i < NB_STRINGS_MAX;i++) {
Packit Service a31ea6
        if (test1[i] != NULL)
Packit Service a31ea6
	    continue;
Packit Service a31ea6
	test1[i] = xmlDictLookup(dict, strings1[i], -1);
Packit Service a31ea6
	if (test1[i] == NULL) {
Packit Service a31ea6
	    fprintf(stderr, "Failed lookup for '%s'\n", strings1[i]);
Packit Service a31ea6
	    ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /*
Packit Service a31ea6
     * Now we can start to test things, first that all strings1 belongs to
Packit Service a31ea6
     * the dict
Packit Service a31ea6
     */
Packit Service a31ea6
    for (i = 0;i < NB_STRINGS_MAX;i++) {
Packit Service a31ea6
        if (!xmlDictOwns(dict, test1[i])) {
Packit Service a31ea6
	    fprintf(stderr, "Failed ownership failure for '%s'\n",
Packit Service a31ea6
	            strings1[i]);
Packit Service a31ea6
	    ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /*
Packit Service a31ea6
     * Then that another lookup to the string will return the same
Packit Service a31ea6
     */
Packit Service a31ea6
    for (i = 0;i < NB_STRINGS_MAX;i++) {
Packit Service a31ea6
        if (xmlDictLookup(dict, strings1[i], -1) != test1[i]) {
Packit Service a31ea6
	    fprintf(stderr, "Failed re-lookup check for %d, '%s'\n",
Packit Service a31ea6
	            i, strings1[i]);
Packit Service a31ea6
	    ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    /*
Packit Service a31ea6
     * More complex, check the QName lookups
Packit Service a31ea6
     */
Packit Service a31ea6
    for (i = NB_STRINGS_MAX - NB_STRINGS_NS;i < NB_STRINGS_MAX;i++) {
Packit Service a31ea6
        cur = strings1[i];
Packit Service a31ea6
	pref = &prefix[0];
Packit Service a31ea6
	while (*cur != ':') *pref++ = *cur++;
Packit Service a31ea6
	cur++;
Packit Service a31ea6
	*pref = 0;
Packit Service a31ea6
	tmp = xmlDictQLookup(dict, &prefix[0], cur);
Packit Service a31ea6
	if (tmp != test1[i]) {
Packit Service a31ea6
	    fprintf(stderr, "Failed lookup check for '%s':'%s'\n",
Packit Service a31ea6
	            &prefix[0], cur);
Packit Service a31ea6
            ret = 1;
Packit Service a31ea6
	    nbErrors++;
Packit Service a31ea6
	}
Packit Service a31ea6
    }
Packit Service a31ea6
Packit Service a31ea6
    run_test2(dict);
Packit Service a31ea6
Packit Service a31ea6
    xmlDictFree(dict);
Packit Service a31ea6
    return(ret);
Packit Service a31ea6
}
Packit Service a31ea6
Packit Service a31ea6
int main(void)
Packit Service a31ea6
{
Packit Service a31ea6
    int ret;
Packit Service a31ea6
Packit Service a31ea6
    LIBXML_TEST_VERSION
Packit Service a31ea6
    fill_strings();
Packit Service a31ea6
#ifdef WITH_PRINT
Packit Service a31ea6
    print_strings();
Packit Service a31ea6
#endif
Packit Service a31ea6
    ret = run_test1();
Packit Service a31ea6
    if (ret == 0) {
Packit Service a31ea6
        printf("dictionary tests succeeded %d strings\n", 2 * NB_STRINGS_MAX);
Packit Service a31ea6
    } else {
Packit Service a31ea6
        printf("dictionary tests failed with %d errors\n", nbErrors);
Packit Service a31ea6
    }
Packit Service a31ea6
    clean_strings();
Packit Service a31ea6
    xmlCleanupParser();
Packit Service a31ea6
    xmlMemoryDump();
Packit Service a31ea6
    return(ret);
Packit Service a31ea6
}