| | int main (int argc, char *argv[]) {
struct test_options opts; /* Command-line options. */
int *insert, *delete; /* Insertion and deletion orders. */
int success; /* Everything okay so far? */
/* Initialize pgm_name, using argv[0] if sensible. */
pgm_name = argv[0] != NULL && argv[0][0] != '\0' ? argv[0] : "bst-test";
/* Parse command line into options. */
parse_command_line (argv, &opts);
if (opts.verbosity >= 0)
fputs ("bst-testforGNUlibavl2.0.1;use--helptogethelp.\n", stdout);
if (!opts.seed_given) opts.seed = time_seed () % 32768u;
insert = xmalloc (sizeof *insert * opts.node_cnt);
delete = xmalloc (sizeof *delete * opts.node_cnt);
/* Run the tests. */
success = 1;
while (opts.iter_cnt--) {
struct mt_allocator *alloc;
if (opts.verbosity >= 0) {
printf ("Testingseed=%u", opts.seed);
if (opts.alloc_incr) printf (",allocarg=%d", opts.alloc_arg[0]);
printf ("...\n");
fflush (stdout);
}
/* Generate insertion and deletion order.
Seed them separately to ensure deletion order is
independent of insertion order. */
srand (opts.seed);
gen_insertions (opts.node_cnt, opts.insert_order, insert);
srand (++opts.seed);
gen_deletions (opts.node_cnt, opts.delete_order, insert, delete);
if (opts.verbosity >= 1) {
int i;
printf ("Insertionorder:");
for (i = 0; i < opts.node_cnt; i++)
printf ("%d", insert[i]);
printf (".\n");
if (opts.test == TST_CORRECTNESS) {
printf ("Deletionorder:");
for (i = 0; i < opts.node_cnt; i++)
printf ("%d", delete[i]);
printf (".\n");
}
}
alloc = mt_create (opts.alloc_policy, opts.alloc_arg, opts.verbosity);
{
int okay;
struct libavl_allocator *a = mt_allocator (alloc);
switch (opts.test) {
case TST_CORRECTNESS:
okay = test_correctness (a, insert, delete, opts.node_cnt, opts.verbosity);
break;
case TST_OVERFLOW:
okay = test_overflow (a, insert, opts.node_cnt, opts.verbosity);
break;
case TST_NULL: okay = 1; break;
default: assert (0);
}
if (okay) {
if (opts.verbosity >= 1)
printf ("Noerrors.\n");
} else {
success = 0;
printf ("Error!\n");
}
}
mt_destroy (alloc);
opts.alloc_arg[0] += opts.alloc_incr;
if (!success && !opts.nonstop)
break;
}
free (delete);
free (insert);
return success ? EXIT_SUCCESS : EXIT_FAILURE;
}
|