diff options
author | Andrea Shepard <andrea@torproject.org> | 2012-10-23 14:28:19 -0700 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2012-10-23 21:35:30 -0400 |
commit | cb693ef56e5fcef2a6d1844cb71c849022628bd8 (patch) | |
tree | c66303ec139da78032be87e9d5f6b86dabe5b5ad | |
parent | 3365def68b91cb2bd9e741df679777155b746cf3 (diff) | |
download | tor-cb693ef56e5fcef2a6d1844cb71c849022628bd8.tar.gz tor-cb693ef56e5fcef2a6d1844cb71c849022628bd8.zip |
Add some unit tests for smartlist_bsearch_idx() on short lists
Conflicts:
src/test/test_containers.c
-rw-r--r-- | src/test/test_containers.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/test/test_containers.c b/src/test/test_containers.c index af9fb1c5c9..46cc82d6c3 100644 --- a/src/test/test_containers.c +++ b/src/test/test_containers.c @@ -16,6 +16,15 @@ _compare_strs(const void **a, const void **b) return strcmp(s1, s2); } +/** Helper: return a tristate based on comparing the strings in <b>a</b> and + * *<b>b</b>. */ +static int +compare_strs_for_bsearch_(const void *a, const void **b) +{ + const char *s1 = a, *s2 = *b; + return strcmp(s1, s2); +} + /** Helper: return a tristate based on comparing the strings in *<b>a</b> and * *<b>b</b>, excluding a's first character, and ignoring case. */ static int @@ -204,6 +213,8 @@ test_container_smartlist_strings(void) /* Test bsearch_idx */ { int f; + smartlist_t *tmp = NULL; + test_eq(0, smartlist_bsearch_idx(sl," aaa",_compare_without_first_ch,&f)); test_eq(f, 0); test_eq(0, smartlist_bsearch_idx(sl," and",_compare_without_first_ch,&f)); @@ -216,6 +227,31 @@ test_container_smartlist_strings(void) test_eq(f, 0); test_eq(7, smartlist_bsearch_idx(sl," zzzz",_compare_without_first_ch,&f)); test_eq(f, 0); + + /* Test trivial cases for list of length 0 or 1 */ + tmp = smartlist_create(); + test_eq(0, smartlist_bsearch_idx(tmp, "foo", + compare_strs_for_bsearch_, &f)); + test_eq(f, 0); + smartlist_insert(tmp, 0, (void *)("bar")); + test_eq(1, smartlist_bsearch_idx(tmp, "foo", + compare_strs_for_bsearch_, &f)); + test_eq(f, 0); + test_eq(0, smartlist_bsearch_idx(tmp, "aaa", + compare_strs_for_bsearch_, &f)); + test_eq(f, 0); + test_eq(0, smartlist_bsearch_idx(tmp, "bar", + compare_strs_for_bsearch_, &f)); + test_eq(f, 1); + /* ... and one for length 2 */ + smartlist_insert(tmp, 1, (void *)("foo")); + test_eq(1, smartlist_bsearch_idx(tmp, "foo", + compare_strs_for_bsearch_, &f)); + test_eq(f, 1); + test_eq(2, smartlist_bsearch_idx(tmp, "goo", + compare_strs_for_bsearch_, &f)); + test_eq(f, 0); + smartlist_free(tmp); } /* Test reverse() and pop_last() */ |