Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update now that multidicts are reimplemented
[simgrid.git] / testsuite / xbt / multidict_crash.c
1 /* $Id$ */
2
3 /* multidict_crash - A crash test for multi-level dictionnaries             */
4
5 /* Copyright (c) 2003-2005 Martin Quinson. All rights reserved.             */
6
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. */
9
10 #include <stdio.h>
11
12 #include "xbt.h"
13
14 XBT_LOG_NEW_DEFAULT_CATEGORY(Test,"this test");
15
16 #define NB_ELM 10/*00*/
17 #define DEPTH 5
18 #define KEY_SIZE 6 /*512*/
19 #define NB_TEST 20
20 int verbose=1;
21
22 static void str_free(void *s) {
23   char *c=*(char**)s;
24   free(c);
25 }
26
27 int main(int argc, char *argv[]) {
28   xbt_error_t errcode;
29   xbt_dict_t mdict=xbt_dict_new();
30   int i,j,k,l;
31   xbt_dynar_t keys = xbt_dynar_new(sizeof(char*),str_free);
32   void *data;
33   char *key;
34
35   xbt_init(&argc,argv);
36
37   printf("\nGeneric multicache: CRASH test:\n");
38   printf(" Fill the struct and frees it %d times, using %d elements, depth of multicache=%d\n",NB_TEST,NB_ELM,DEPTH);
39   printf(" with %d chars long randomized keys. (a point is a test)\n",KEY_SIZE);
40
41   for (i=0;i<NB_TEST;i++) {
42     if (verbose) {
43       printf("Test %d\n",i);
44     } else {
45       if (i%10) printf("."); else printf("%d",i/10);
46     }
47     fflush(stdout);
48     
49     for (j=0;j<NB_ELM;j++) {
50       if (verbose) printf ("  Add {");
51       
52       for (l=0 ; l<DEPTH ; l++) {
53         key=xbt_malloc(KEY_SIZE);
54         
55         for (k=0;k<KEY_SIZE-1;k++) 
56           key[k]=rand() % ('z' - 'a') + 'a';
57           
58         key[k]='\0';
59         
60         if (verbose) printf("%p=%s %s ",key, key,(l<DEPTH-1?";":"}"));
61         xbt_dynar_push(keys,&key);
62       }
63       if (verbose) printf("in multitree %p.\n",mdict);
64                                                         
65       TRYFAIL(xbt_multidict_set(mdict,keys,xbt_strdup(key),&str_free));
66
67       TRYFAIL(xbt_multidict_get(mdict,keys,&data));
68
69       xbt_assert2(data && !strcmp((char*)data,key),
70                   "Retrieved value (%s) does not match the entrered one (%s)\n",
71                   (char*)data,key);
72     }
73   }
74
75 /*  if (verbose)
76     xbt_dict_dump(mdict,&xbt_dict_print);*/
77     
78   xbt_dict_free(&mdict);
79   xbt_dynar_free(&keys);
80   printf("\n");
81
82   xbt_exit();
83   return 0;
84 }