From 038314368968b7955d9a9b82b95cf51b983e2ccc Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 28 Sep 2011 19:57:19 +0000 Subject: More glib like interface for ZixTree. Move ZixTree debug stuff to tree_debug.h. Support reverse iteration over ZixTree. git-svn-id: http://svn.drobilla.net/zix/trunk@40 df6676b4-ccc9-40e5-b5d6-7c4628a128e3 --- test/tree_bench.c | 11 ++++++----- test/tree_test.c | 36 +++++++++++++++++++++++++++--------- 2 files changed, 33 insertions(+), 14 deletions(-) (limited to 'test') diff --git a/test/tree_bench.c b/test/tree_bench.c index 84d31a8..d0e2611 100644 --- a/test/tree_bench.c +++ b/test/tree_bench.c @@ -60,7 +60,7 @@ bench_zix_tree(size_t n_elems, FILE* insert_dat, FILE* search_dat, FILE* iter_dat, FILE* del_dat) { intptr_t r; - ZixTreeIter ti; + ZixTreeIter* ti; ZixTree* t = zix_tree_new(true, int_cmp, NULL); @@ -86,7 +86,7 @@ bench_zix_tree(size_t n_elems, if (zix_tree_find(t, (void*)r, &ti)) { return test_fail("Failed to find %zu\n", r); } - if ((intptr_t)zix_tree_get_data(ti) != r) { + if ((intptr_t)zix_tree_get(ti) != r) { return test_fail("Failed to get %zu\n", r); } } @@ -96,10 +96,10 @@ bench_zix_tree(size_t n_elems, // Iterate over all elements struct timespec iter_start = bench_start(); - for (ZixTreeIter iter = zix_tree_begin(t); + for (ZixTreeIter* iter = zix_tree_begin(t); !zix_tree_iter_is_end(iter); iter = zix_tree_iter_next(iter)) { - zix_tree_get_data(iter); + zix_tree_get(iter); } fprintf(iter_dat, "\t%lf", bench_end(&iter_start)); @@ -109,7 +109,8 @@ bench_zix_tree(size_t n_elems, struct timespec del_start = bench_start(); for (size_t i = 0; i < n_elems; i++) { r = rand(); - ZixTreeIter item; + ZixTreeIter* + item; if (zix_tree_find(t, (void*)r, &item)) { return test_fail("Failed to find %zu to delete\n", r); } diff --git a/test/tree_test.c b/test/tree_test.c index c352fc0..943dca7 100644 --- a/test/tree_test.c +++ b/test/tree_test.c @@ -57,8 +57,8 @@ test_fail() static int stress(int test_num, size_t n_elems) { - intptr_t r; - ZixTreeIter ti; + intptr_t r; + ZixTreeIter* ti; ZixTree* t = zix_tree_new(true, int_cmp, NULL); @@ -72,9 +72,9 @@ stress(int test_num, size_t n_elems) fprintf(stderr, "Insert failed\n"); return test_fail(); } - if ((intptr_t)zix_tree_get_data(ti) != r) { + if ((intptr_t)zix_tree_get(ti) != r) { fprintf(stderr, "Data corrupt (saw %" PRIdPTR ", expected %zu)\n", - (intptr_t)zix_tree_get_data(ti), r); + (intptr_t)zix_tree_get(ti), r); return test_fail(); } } @@ -88,9 +88,9 @@ stress(int test_num, size_t n_elems) fprintf(stderr, "Find failed\n"); return test_fail(); } - if ((intptr_t)zix_tree_get_data(ti) != r) { + if ((intptr_t)zix_tree_get(ti) != r) { fprintf(stderr, "Data corrupt (saw %" PRIdPTR ", expected %zu)\n", - (intptr_t)zix_tree_get_data(ti), r); + (intptr_t)zix_tree_get(ti), r); return test_fail(); } } @@ -100,11 +100,11 @@ stress(int test_num, size_t n_elems) // Iterate over all elements size_t i = 0; intptr_t last = -1; - for (ZixTreeIter iter = zix_tree_begin(t); + for (ZixTreeIter* iter = zix_tree_begin(t); !zix_tree_iter_is_end(iter); iter = zix_tree_iter_next(iter), ++i) { r = ith_elem(test_num, n_elems, i); - const intptr_t iter_data = (intptr_t)zix_tree_get_data(iter); + const intptr_t iter_data = (intptr_t)zix_tree_get(iter); if (iter_data < last) { fprintf(stderr, "Iter corrupt (%" PRIdPTR " < %zu)\n", iter_data, last); @@ -115,10 +115,28 @@ stress(int test_num, size_t n_elems) srand(seed); + // Iterate over all elements backwards + i = 0; + last = INTPTR_MAX; + for (ZixTreeIter* iter = zix_tree_rbegin(t); + !zix_tree_iter_is_rend(iter); + iter = zix_tree_iter_prev(iter), ++i) { + r = ith_elem(test_num, n_elems, i); + const intptr_t iter_data = (intptr_t)zix_tree_get(iter); + if (iter_data > last) { + fprintf(stderr, "Iter corrupt (%" PRIdPTR " < %zu)\n", + iter_data, last); + return test_fail(); + } + last = iter_data; + } + + srand(seed); + // Delete all elements for (size_t i = 0; i < n_elems; i++) { r = ith_elem(test_num, n_elems, i); - ZixTreeIter item; + ZixTreeIter* item; if (zix_tree_find(t, (void*)r, &item) != ZIX_STATUS_SUCCESS) { fprintf(stderr, "Failed to find item to remove\n"); return test_fail(); -- cgit v1.2.1