diff options
Diffstat (limited to 'test/ttbbt.c')
-rw-r--r-- | test/ttbbt.c | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/test/ttbbt.c b/test/ttbbt.c new file mode 100644 index 0000000..c8006e0 --- /dev/null +++ b/test/ttbbt.c @@ -0,0 +1,146 @@ +/**************************************************************************** + * NCSA HDF * + * Software Development Group * + * National Center for Supercomputing Applications * + * University of Illinois at Urbana-Champaign * + * 605 E. Springfield, Champaign IL 61820 * + * * + * For conditions of distribution and use, see the accompanying * + * hdf/COPYING file. * + * * + ****************************************************************************/ + +#ifdef RCSID +static char RcsId[] = "@(#)$Revision$"; +#endif + +/* $Id$ */ + +/* + FILE + tbbt.c + Test HDF Threaded-Balanced-Binary Tree (tbbt) routines. + + REMARKS + + DESIGN + + BUGS/LIMITATIONS + + EXPORTED ROUTINES + + AUTHOR + Quincey Koziol + + MODIFICATION HISTORY + 4/22/00 - Converted from HDF4 test routine. + */ + +#include <time.h> +#include "testhdf5.h" +#include "H5TBprivate.h" + +#define MAX_TEST_SIZE 31 /* maximum number of elements to insert */ +#define NUM_TEST_RUNS 100 /* number of times to insert & remove each size */ + +#define RandInt(a,b) ((rand()%(((b)-(a))+1))+(a)) + +intn tcompare (void * k1, void * k2, intn cmparg); + +static void swap_arr(int *arr, intn a, intn b) +{ + int t; + + if (a != b) + { + t = arr[a]; + arr[a] = arr[b]; + arr[b] = t; + } /* end if */ +} /* end swap_arr() */ + +intn +tcompare(void * k1, void * k2, intn cmparg) +{ + /* shut compiler up */ + cmparg=cmparg; + return ((intn) ((*(int *) k1) - (*(int *) k2))); +} + +void +test_tbbt(void) +{ + intn test_size; + intn i, j; + int ins_arr[MAX_TEST_SIZE]; + int rem_arr[MAX_TEST_SIZE]; + intn t; + TBBT_TREE *tree; + void * *r; + + t = (intn)time(NULL); + srand((uintn)t); + + for (test_size = 3; test_size <= MAX_TEST_SIZE; test_size++) + { + MESSAGE(7, ("\nTesting trees with %d elements\n", test_size)); + MESSAGE(8, ("Testing tree #:")); + for (j = 0; j < NUM_TEST_RUNS; j++) + { + MESSAGE(8, (" %d", j)); + for (i = 0; i < test_size; i++) + { /* initialize the arrays */ + ins_arr[i] = i; + rem_arr[i] = i; + } /* end for */ + for (i = 0; i < test_size; i++) + { /* shuffle the arrays */ + t = RandInt(i, test_size - 1); + swap_arr(ins_arr, i, t); + t = RandInt(i, test_size - 1); + swap_arr(rem_arr, i, t); + } /* end for */ + + if (Verbosity > 9) + { + printf("ins_arr: \n"); + for (i = 0; i < test_size; i++) /* print the arrays */ + printf("%d \n", (int) ins_arr[i]); + printf("\nrem_arr: \n"); + for (i = 0; i < test_size; i++) /* print the arrays */ + printf("%d \n", (int) rem_arr[i]); + printf("\n"); + } /* end if */ + + tree = H5TB_dmake(tcompare, sizeof(int),0); + for (i = 0; i < test_size; i++) + { + MESSAGE(9, ("inserting %d\n", (int) ins_arr[i])); + H5TB_dins(tree, (void *) &ins_arr[i], NULL); +#ifdef H5TB_DEBUG + if(Verbosity>9) + H5TB_dump(tree, -1); +#endif /* H5TB_DEBUG */ + } +#ifdef H5TB_DEBUG + if(Verbosity>9) + H5TB_dump(tree, -1); +#endif /* H5TB_DEBUG */ + for (i = 0; i < test_size; i++) + { + int key; + + key = rem_arr[i]; + r = (void * *) H5TB_dfind(tree, (void *) &key, NULL); + MESSAGE(9, ("removing %d\n", (int) key)); + H5TB_rem((TBBT_NODE **) tree, (TBBT_NODE *) r, NULL); +#ifdef H5TB_DEBUG + if(Verbosity>9) + H5TB_dump(tree, -1); +#endif /* H5TB_DEBUG */ + } /* end for */ + H5TB_dfree(tree, NULL, NULL); + } /* end for */ + } /* end for */ +} /* end test_tbbt() */ + |