X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2539fff313cbd67c45b8490f7961e45e358d9ba2..16a493020852a67f5e16f96f33734ef84d5de1df:/testsuite/xbt/dict_usage.c diff --git a/testsuite/xbt/dict_usage.c b/testsuite/xbt/dict_usage.c index 1ca353b8b3..feae8e2d99 100644 --- a/testsuite/xbt/dict_usage.c +++ b/testsuite/xbt/dict_usage.c @@ -2,29 +2,29 @@ /* dict_usage - A test of normal usage of a dictionnary */ -/* Authors: Martin Quinson */ -/* Copyright (C) 2003 the OURAGAN project. */ +/* Copyright (c) 2003,2004 Martin Quinson. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it - under the terms of the license (GNU LGPL) which comes with this package. */ + * under the terms of the license (GNU LGPL) which comes with this package. */ #include -#include -#include +#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); -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) { - printf("%s",(char*)str); + printf("%s",(char*)PRINTF_STR(str)); } static void fill(xbt_dict_t *head) { @@ -47,7 +47,7 @@ static void debuged_add(xbt_dict_t head,const char*key) { char *data=xbt_strdup(key); - printf(" - Add %s\n",key); + printf(" - Add %s\n",PRINTF_STR(key)); xbt_dict_set(head,key,data,&free); if (XBT_LOG_ISENABLED(dict,xbt_log_priority_debug)) { xbt_dict_dump(head,(void (*)(void*))&printf); @@ -55,61 +55,93 @@ 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; - xbt_error_t errcode; - - errcode=xbt_dict_get(head,key,&data); - printf(" - Search %s. Found %s\n",key,data?(char*)data:"(null)");fflush(stdout); - if (strcmp((char*)data,key)) - return mismatch_error; - return errcode; + data=xbt_dict_get(head,key); + printf(" - Search %s. Found %s\n",PRINTF_STR(key),(char*) PRINTF_STR(data));fflush(stdout); + 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",key);fflush(stdout); - errcode=xbt_dict_remove(head,key); + printf(" Remove '%s'\n",PRINTF_STR(key));fflush(stdout); + xbt_dict_remove(head,key); /* 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_foreach(head,cursor,key,data) { - printf(" - Seen: %s->%s\n",key,data); - xbt_assert2(!strcmp(key,data), + printf(" - Seen: %s->%s\n",PRINTF_STR(key),PRINTF_STR(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 != not_found_error) + RETHROW; + xbt_ex_free(e); + } } int main(int argc,char **argv) { - xbt_error_t errcode; + xbt_ex_t e; xbt_dict_t head=NULL; char *data; - xbt_init_defaultlog(&argc,argv,"dict.thresh=verbose"); + xbt_init(&argc,argv); 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); + 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); fill(&head); + /* xbt_dict_dump(head,(void (*)(void*))&printf);*/ + printf(" - Test that it works with NULL data\n"); + printf(" - Store NULL under 'null'\n");fflush(stdout); + xbt_dict_set(head,"null",NULL,NULL); + search(head,"null"); + /* xbt_dict_dump(head,(void (*)(void*))&printf); */ + printf(" Check whether I see it while traversing...\n");fflush(stdout); + { + xbt_dict_cursor_t cursor=NULL; + char *key; + int found=0; + + xbt_dict_foreach(head,cursor,key,data) { + printf(" - Seen: %s->%s\n",PRINTF_STR(key),PRINTF_STR(data));fflush(stdout); + if (!strcmp(key,"null")) + found = 1; + } + 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); @@ -122,26 +154,26 @@ int main(int argc,char **argv) { /* xbt_dict_dump(head,(void (*)(void*))&printf); */ printf(" - Traverse the resulting dictionnary\n"); - TRYFAIL(traverse(head)); + traverse(head); printf(" - Retrive values\n"); - TRYFAIL(xbt_dict_get(head,"123",(void**)&data)); - assert(data); - TRYFAIL(strcmp("123",data)); + data = xbt_dict_get(head,"123"); + xbt_assert(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"); - TRYFAIL(traverse(head)); + traverse(head); /* xbt_dict_dump(head,(void (*)(void*))&printf); */ @@ -150,30 +182,54 @@ int main(int argc,char **argv) { 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"); - TRYEXPECT(debuged_remove(head,"Does not exist"),mismatch_error); - TRYFAIL(traverse(head)); + TRY { + debuged_remove(head,"Does not exist"); + } CATCH(e) { + if (e.category != not_found_error) + RETHROW; + xbt_ex_free(e); + } + traverse(head); 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); - 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 != not_found_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 != not_found_error) + RETHROW; + xbt_ex_free(e); + } traverse(head); printf(" - Free the dictionnary twice\n"); xbt_dict_free(&head);