X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c0b1cd463d680c1690999e7066fcc75b2c903752..0f04e364d7fbc468666a577249d3520794930d1b:/testsuite/xbt/ex_test.c diff --git a/testsuite/xbt/ex_test.c b/testsuite/xbt/ex_test.c index 7302ad3388..0053beeab8 100644 --- a/testsuite/xbt/ex_test.c +++ b/testsuite/xbt/ex_test.c @@ -225,3 +225,73 @@ int main(int argc, char *argv[]) return n; } + +/* + * The following is the example included in the documentation. It's a good + * idea to check its syntax even if we don't try to run it. + * And actually, it allows to put comments in the code despite doxygen. + */ +static char *mallocex(int size) { + return NULL; +} +#define SMALLAMOUNT 10 +#define TOOBIG 100000000 + +#if 0 /* this contains syntax errors, actually */ +static void bad_example(void) { + struct {char*first;} *globalcontext; + ex_t ex; + + /* BAD_EXAMPLE */ + xbt_try { + char *cp1, *cp2, *cp3; + + cp1 = mallocex(SMALLAMOUNT); + globalcontext->first = cp1; + cp2 = mallocex(TOOBIG); + cp3 = mallocex(SMALLAMOUNT); + strcpy(cp1, "foo"); + strcpy(cp2, "bar"); + } xbt_cleanup { + if (cp3 != NULL) free(cp3); + if (cp2 != NULL) free(cp2); + if (cp1 != NULL) free(cp1); + } xbt_catch(ex) { + printf("cp3=%s", cp3); + xbt_rethrow; + } + /* end_of_bad_example */ +} +#endif + +static void good_example(void) { + struct {char*first;} *globalcontext; + ex_t ex; + + /* GOOD_EXAMPLE */ + { /*01*/ + char * volatile /*03*/ cp1 = NULL /*02*/; + char * volatile /*03*/ cp2 = NULL /*02*/; + char * volatile /*03*/ cp3 = NULL /*02*/; + xbt_try { + cp1 = mallocex(SMALLAMOUNT); + globalcontext->first = cp1; + cp1 = NULL /*05 give away*/; + cp2 = mallocex(TOOBIG); + cp3 = mallocex(SMALLAMOUNT); + strcpy(cp1, "foo"); + strcpy(cp2, "bar"); + } xbt_cleanup { /*04*/ + printf("cp3=%s", cp3 == NULL /*02*/ ? "" : cp3); + if (cp3 != NULL) + free(cp3); + if (cp2 != NULL) + free(cp2); + /*05 cp1 was given away */ + } xbt_catch(ex) { + /*05 global context untouched */ + xbt_rethrow; + } + } + /* end_of_good_example */ +}