From 6db8f534450d50ff70c3d5a46ac32ccfbac4da46 Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Sun, 26 Oct 2008 03:03:29 +0000 Subject: test #558 verifies loop operation using malloc() and free() --- tests/libtest/lib558.c | 127 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 tests/libtest/lib558.c (limited to 'tests/libtest/lib558.c') diff --git a/tests/libtest/lib558.c b/tests/libtest/lib558.c new file mode 100644 index 000000000..d5d1d146a --- /dev/null +++ b/tests/libtest/lib558.c @@ -0,0 +1,127 @@ +/***************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * $Id$ + */ + + + +#include "test.h" + +#include "memdebug.h" + +#define TABLE_SIZE 10 + + +struct element_st { + int idx; + int dummy; +}; + + +struct root_st { + struct element_st **table; + int size; +}; + + +static +struct root_st * new_root(void) +{ + struct root_st *r; + + r = malloc(sizeof(struct root_st)); + if(r != NULL) + printf("malloc of root struct OK\n"); + else { + printf("malloc of root struct failed\n"); + return NULL; + } + + r->size = TABLE_SIZE; + r->table = malloc(r->size * sizeof(struct element_st *)); + if(r->table != NULL) + printf("malloc of pointer table OK\n"); + else { + printf("malloc of pointer table failed\n"); + free(r); + return NULL; + } + + return r; +} + + +static +struct element_st * new_element(int idx) +{ + struct element_st *e; + + e = malloc(sizeof(struct element_st)); + if(e != NULL) + printf("malloc of pointed element (idx %d) OK\n", idx); + else { + printf("malloc of pointed element (idx %d) failed\n", idx); + return NULL; + } + + e->idx = e->dummy = idx; + + return e; +} + + +int test(char *URL) +{ + struct root_st *root; + int error; + int i; + (void)URL; /* not used */ + + root = new_root(); + if(!root) + return TEST_ERR_MAJOR_BAD; + + printf("initializing table...\n"); + for (i = 0; i < root->size; ++i) { + root->table[i] = NULL; + } + printf("table initialized OK\n"); + + printf("filling pointer table...\n"); + error = 0; + for (i = 0; i < root->size; ++i) { + root->table[i] = new_element(i); + if(!root->table[i]) { + error = 1; + break; + } + } + if(error) { + printf("pointer table filling failed\n"); + return TEST_ERR_MAJOR_BAD; + } + else + printf("pointer table filling OK\n"); + + printf("freeing pointers in table...\n"); + for (i = 0; i < root->size; ++i) { + if(root->table[i]) + free(root->table[i]); + } + printf("freeing pointers in table OK\n"); + + printf("freeing table...\n"); + free(root->table); + printf("freeing table OK\n"); + + printf("freeing root struct...\n"); + free(root); + printf("freeing root struct OK\n"); + + return 0; /* OK */ +} -- cgit v1.2.3