Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
ONGOING work on exceptions plus minor cleanups.
[simgrid.git] / testsuite / xbt / dict_usage.c
index f3ae427..04f4680 100644 (file)
 
 #include "gras.h"
 #include "portable.h"
 
 #include "gras.h"
 #include "portable.h"
+#include "xbt/ex.h"
 
 XBT_LOG_EXTERNAL_CATEGORY(dict);
 XBT_LOG_NEW_DEFAULT_CATEGORY(test,"Logging specific to this test");
 
 static void fill(xbt_dict_t *head);
 static void debuged_add(xbt_dict_t head,const char*key);
 
 XBT_LOG_EXTERNAL_CATEGORY(dict);
 XBT_LOG_NEW_DEFAULT_CATEGORY(test,"Logging specific to this test");
 
 static void fill(xbt_dict_t *head);
 static void debuged_add(xbt_dict_t head,const char*key);
-static xbt_error_t search(xbt_dict_t head,const char*key);
-static xbt_error_t debuged_remove(xbt_dict_t head,const char*key);
-static xbt_error_t traverse(xbt_dict_t head);
+static void search(xbt_dict_t head,const char*key);
+static void debuged_remove(xbt_dict_t head,const char*key);
+static void traverse(xbt_dict_t head);
 
 static void print_str(void *str);
 static void print_str(void *str) {
 
 static void print_str(void *str);
 static void print_str(void *str) {
@@ -54,32 +55,24 @@ static void debuged_add(xbt_dict_t head,const char*key)
   }
 }
 
   }
 }
 
-static xbt_error_t search(xbt_dict_t head,const char*key) {
+static void search(xbt_dict_t head,const char*key) {
   void *data;
   void *data;
-  xbt_error_t errcode;
-
   
   
-  errcode=xbt_dict_get(head,key,&data);
+  data=xbt_dict_get(head,key);
   printf("   - Search %s. Found %s\n",PRINTF_STR(key),(char*) PRINTF_STR(data));fflush(stdout);
   printf("   - Search %s. Found %s\n",PRINTF_STR(key),(char*) PRINTF_STR(data));fflush(stdout);
-  if (!data)
-     return errcode;
-  if (strcmp((char*)data,key)) 
-    return mismatch_error;
-  return errcode;
+  if (data && strcmp((char*)data,key)) 
+    THROW2(mismatch_error,0,"Found %s while looking for %s",(char*)data,key);
 }
 
 }
 
-static xbt_error_t debuged_remove(xbt_dict_t head,const char*key)
-{
-  xbt_error_t errcode;
+static void debuged_remove(xbt_dict_t head,const char*key) {
 
   printf("   Remove '%s'\n",PRINTF_STR(key));fflush(stdout);
 
   printf("   Remove '%s'\n",PRINTF_STR(key));fflush(stdout);
-  errcode=xbt_dict_remove(head,key);
+  xbt_dict_remove(head,key);
   /*  xbt_dict_dump(head,(void (*)(void*))&printf); */
   /*  xbt_dict_dump(head,(void (*)(void*))&printf); */
-  return errcode;
 }
 
 
 }
 
 
-static xbt_error_t traverse(xbt_dict_t head) {
+static void traverse(xbt_dict_t head) {
   xbt_dict_cursor_t cursor=NULL;
   char *key;
   char *data;
   xbt_dict_cursor_t cursor=NULL;
   char *key;
   char *data;
@@ -89,11 +82,25 @@ static xbt_error_t traverse(xbt_dict_t head) {
     xbt_assert2(!data || !strcmp(key,data),
                 "Key(%s) != value(%s). Abording\n",key,data);
   }
     xbt_assert2(!data || !strcmp(key,data),
                 "Key(%s) != value(%s). Abording\n",key,data);
   }
-  return no_error;
+}
+
+static void search_not_found(xbt_dict_t head, const char *data) {
+  xbt_ex_t e;
+
+  TRY {    
+    data = xbt_dict_get(head,"Can't be found");
+    THROW1(unknown_error,0,"Found something which shouldn't be there (%s)",data);
+  } CATCH(e) {
+    if (e.category == mismatch_error) {
+      xbt_ex_free(e);
+    } else {
+      RETHROW;
+    }
+  }
 }
 
 int main(int argc,char **argv) {
 }
 
 int main(int argc,char **argv) {
-  xbt_error_t errcode;
+  xbt_ex_t e;
   xbt_dict_t head=NULL;
   char *data;
 
   xbt_dict_t head=NULL;
   char *data;
 
@@ -102,9 +109,14 @@ int main(int argc,char **argv) {
   printf("\nGeneric dictionnary: USAGE test:\n");
 
   printf(" Traverse the empty dictionnary\n");
   printf("\nGeneric dictionnary: USAGE test:\n");
 
   printf(" Traverse the empty dictionnary\n");
-  TRYFAIL(traverse(head));
+  traverse(head);
 
 
+  printf(" Traverse the full dictionnary\n");
   fill(&head);
   fill(&head);
+  search(head,"12a");
+xbt_dict_dump(head,(void (*)(void*))&printf);
+  traverse(head);
+
   printf(" Free the dictionnary (twice)\n");
   xbt_dict_free(&head);
   xbt_dict_free(&head);
   printf(" Free the dictionnary (twice)\n");
   xbt_dict_free(&head);
   xbt_dict_free(&head);
@@ -115,9 +127,9 @@ int main(int argc,char **argv) {
   printf(" - Test that it works with NULL data\n");
   printf("   - Store NULL under 'null'\n");fflush(stdout);
   xbt_dict_set(head,"null",NULL,NULL);
   printf(" - Test that it works with NULL data\n");
   printf("   - Store NULL under 'null'\n");fflush(stdout);
   xbt_dict_set(head,"null",NULL,NULL);
-  TRYFAIL(search(head,"null"));
+  search(head,"null");
   /* xbt_dict_dump(head,(void (*)(void*))&printf); */
   /* xbt_dict_dump(head,(void (*)(void*))&printf); */
-  printf("   Check whether I see it while traversing\n");fflush(stdout);
+  printf("   Check whether I see it while traversing...\n");fflush(stdout);
   {
      xbt_dict_cursor_t cursor=NULL;
      char *key;
   {
      xbt_dict_cursor_t cursor=NULL;
      char *key;
@@ -130,7 +142,8 @@ int main(int argc,char **argv) {
      }
      xbt_assert0(found,"the key 'null', associated to NULL is not found");
   }
      }
      xbt_assert0(found,"the key 'null', associated to NULL is not found");
   }
-   
+  printf("   OK, I did found the searched NULL\n");
+
   printf(" - Change some values\n");
   printf("   - Change 123 to 'Changed 123'\n");
   xbt_dict_set(head,"123",strdup("Changed 123"),&free);
   printf(" - Change some values\n");
   printf("   - Change 123 to 'Changed 123'\n");
   xbt_dict_set(head,"123",strdup("Changed 123"),&free);
@@ -143,26 +156,26 @@ int main(int argc,char **argv) {
 
   /*  xbt_dict_dump(head,(void (*)(void*))&printf); */
   printf(" - Traverse the resulting dictionnary\n");
 
   /*  xbt_dict_dump(head,(void (*)(void*))&printf); */
   printf(" - Traverse the resulting dictionnary\n");
-  TRYFAIL(traverse(head));
+  traverse(head);
 
   printf(" - Retrive values\n");
 
   printf(" - Retrive values\n");
-  TRYFAIL(xbt_dict_get(head,"123",(void**)&data));
+  data = xbt_dict_get(head,"123");
   xbt_assert(data);
   xbt_assert(data);
-  TRYFAIL(strcmp("123",data));
+  strcmp("123",data);
 
 
-  TRYEXPECT(xbt_dict_get(head,"Can't be found",(void**)&data),mismatch_error);
-  TRYEXPECT(xbt_dict_get(head,"123 Can't be found",(void**)&data),mismatch_error);
-  TRYEXPECT(xbt_dict_get(head,"12345678 NOT",(void**)&data),mismatch_error);
+  search_not_found(head,"Can't be found");
+  search_not_found(head,"123 Can't be found");
+  search_not_found(head,"12345678 NOT");
 
 
-  TRYFAIL(search(head,"12a"));
-  TRYFAIL(search(head,"12b"));
-  TRYFAIL(search(head,"12"));
-  TRYFAIL(search(head,"123456"));
-  TRYFAIL(search(head,"1234"));
-  TRYFAIL(search(head,"123457"));
+  search(head,"12a");
+  search(head,"12b");
+  search(head,"12");
+  search(head,"123456");
+  search(head,"1234");
+  search(head,"123457");
 
   printf(" - Traverse the resulting dictionnary\n");
 
   printf(" - Traverse the resulting dictionnary\n");
-  TRYFAIL(traverse(head));
+  traverse(head);
 
   /*  xbt_dict_dump(head,(void (*)(void*))&printf); */
 
 
   /*  xbt_dict_dump(head,(void (*)(void*))&printf); */
 
@@ -171,30 +184,54 @@ int main(int argc,char **argv) {
   xbt_dict_free(&head);
 
   printf(" - Traverse the resulting dictionnary\n");
   xbt_dict_free(&head);
 
   printf(" - Traverse the resulting dictionnary\n");
-  TRYFAIL(traverse(head));
+  traverse(head);
 
   printf("\n");
   fill(&head);
   printf(" - Remove the data (traversing the resulting dictionnary each time)\n");
 
   printf("\n");
   fill(&head);
   printf(" - Remove the data (traversing the resulting dictionnary each time)\n");
-  TRYEXPECT(debuged_remove(head,"Does not exist"),mismatch_error);
-  TRYFAIL(traverse(head));
+  TRY {
+    debuged_remove(head,"Does not exist");
+  } CATCH(e) {
+    if (e.category != mismatch_error) 
+      RETHROW;
+    xbt_ex_free(e);
+  }
+  traverse(head);
 
   xbt_dict_free(&head);
 
   printf(" - Remove data from the NULL dict (error message expected)\n");
 
   xbt_dict_free(&head);
 
   printf(" - Remove data from the NULL dict (error message expected)\n");
-  TRYCATCH(debuged_remove(head,"12345"),mismatch_error);
+  TRY {
+    debuged_remove(head,"12345");
+  } CATCH(e) {
+    if (e.category != arg_error) 
+      RETHROW;
+    xbt_ex_free(e);
+  } 
 
   printf(" - Remove each data manually (traversing the resulting dictionnary each time)\n");
   fill(&head);
 
   printf(" - Remove each data manually (traversing the resulting dictionnary each time)\n");
   fill(&head);
-  TRYFAIL(debuged_remove(head,"12a"));    TRYFAIL(traverse(head));
-  TRYFAIL(debuged_remove(head,"12b"));    TRYFAIL(traverse(head));
-  TRYFAIL(debuged_remove(head,"12"));     TRYFAIL(traverse(head));
-  TRYFAIL(debuged_remove(head,"123456")); TRYFAIL(traverse(head));
-  TRYEXPECT(debuged_remove(head,"12346"),mismatch_error);  TRYFAIL(traverse(head));
-  TRYFAIL(debuged_remove(head,"1234"));   TRYFAIL(traverse(head));
-  TRYFAIL(debuged_remove(head,"123457")); TRYFAIL(traverse(head));
-  TRYFAIL(debuged_remove(head,"123"));    TRYFAIL(traverse(head));
-  TRYEXPECT(debuged_remove(head,"12346"),mismatch_error);  TRYFAIL(traverse(head));
+  debuged_remove(head,"12a");    traverse(head);
+  debuged_remove(head,"12b");    traverse(head);
+  debuged_remove(head,"12");     traverse(head);
+  debuged_remove(head,"123456"); traverse(head);
+  TRY {
+    debuged_remove(head,"12346");
+  } CATCH(e) {
+    if (e.category != mismatch_error) 
+      RETHROW;
+    xbt_ex_free(e);              traverse(head);
+  } 
+  debuged_remove(head,"1234");   traverse(head);
+  debuged_remove(head,"123457"); traverse(head);
+  debuged_remove(head,"123");    traverse(head);
+  TRY {
+    debuged_remove(head,"12346");
+  } CATCH(e) {
+    if (e.category != mismatch_error) 
+      RETHROW;
+    xbt_ex_free(e);              traverse(head);
+  } 
   
   printf(" - Free the dictionnary twice\n");
   xbt_dict_free(&head);
   
   printf(" - Free the dictionnary twice\n");
   xbt_dict_free(&head);