3 /* multidict_crash - A crash test for multi-level dictionnaries */
5 /* Copyright (c) 2003-2005 Martin Quinson. All rights reserved. */
7 /* This program is free software; you can redistribute it and/or modify it
8 * under the terms of the license (GNU LGPL) which comes with this package. */
14 XBT_LOG_NEW_DEFAULT_CATEGORY(Test,"this test");
16 #define NB_ELM 100 /*00*/
19 #define NB_TEST 20 /*20*/
22 static void str_free(void *s) {
27 int main(int argc, char *argv[]) {
28 xbt_dict_t mdict = NULL;
30 xbt_dynar_t keys = xbt_dynar_new(sizeof(char*),str_free);
36 printf("\nGeneric multicache: CRASH test:\n");
37 printf(" Fill the struct and frees it %d times, using %d elements, depth of multicache=%d\n",NB_TEST,NB_ELM,DEPTH);
38 printf(" with %d chars long randomized keys. (a point is a test)\n",KEY_SIZE);
40 for (l=0 ; l<DEPTH ; l++) {
41 key=xbt_malloc(KEY_SIZE);
42 xbt_dynar_push(keys,&key);
46 for (i=0;i<NB_TEST;i++) {
47 mdict = xbt_dict_new();
48 VERB1("mdict=%p",mdict);
50 printf("Test %d\n",i);
51 } else if (verbose==0) {
52 if (i%10) printf("."); else printf("%d",i/10);
56 for (j=0;j<NB_ELM;j++) {
57 if (verbose>0) printf (" Add {");
59 for (l=0 ; l<DEPTH ; l++) {
60 key=*(char**)xbt_dynar_get_ptr(keys,l);
62 for (k=0;k<KEY_SIZE-1;k++)
63 key[k]=rand() % ('z' - 'a') + 'a';
67 if (verbose>0) printf("%p=%s %s ",key, key,(l<DEPTH-1?";":"}"));
69 if (verbose>0) printf("in multitree %p.\n",mdict);
71 xbt_multidict_set(mdict,keys,xbt_strdup(key),free);
73 data = xbt_multidict_get(mdict,keys);
75 xbt_assert2(data && !strcmp((char*)data,key),
76 "Retrieved value (%s) does not match the entrered one (%s)\n",
79 xbt_dict_free(&mdict);
82 xbt_dynar_free(&keys);
85 xbt_dict_dump(mdict,&xbt_dict_print);*/
87 xbt_dict_free(&mdict);
88 xbt_dynar_free(&keys);