diff options
author | David Yip <yipdw@member.fsf.org> | 2011-12-08 13:44:30 -0600 |
---|---|---|
committer | David Yip <yipdw@member.fsf.org> | 2011-12-21 01:10:42 -0600 |
commit | d3420a1866a45a296ea9782fc8a35b08966277d6 (patch) | |
tree | 1fd419390e4af221e81a0913899aada9ee3803a0 /tests | |
parent | bae448ef2619fffb90021c96546cbccadc39ed20 (diff) |
An implementation of bsearch(3).
Diffstat (limited to 'tests')
-rw-r--r-- | tests/runner.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/runner.py b/tests/runner.py index 75436530..49339f51 100644 --- a/tests/runner.py +++ b/tests/runner.py @@ -2178,6 +2178,57 @@ if 'benchmark' not in str(sys.argv) and 'sanity' not in str(sys.argv): ''' self.do_run(src) + def test_bsearch(self): + src = ''' + #include <stdlib.h> + #include <stdio.h> + + int cmp(const void* key, const void* member) { + return *(int *)key - *(int *)member; + } + + void printResult(int* needle, int* haystack, unsigned int len) { + void *result = bsearch(needle, haystack, len, sizeof(unsigned int), cmp); + + if (result == NULL) { + printf("null\\n"); + } else { + printf("%d\\n", *(unsigned int *)result); + } + } + + int main() { + int a[] = { -2, -1, 0, 6, 7, 9 }; + int b[] = { 0, 1 }; + + /* Find all keys that exist. */ + for(int i = 0; i < 6; i++) { + int val = a[i]; + + printResult(&val, a, 6); + } + + /* Keys that are covered by the range of the array but aren't in + * the array cannot be found. + */ + int v1 = 3; + int v2 = 8; + printResult(&v1, a, 6); + printResult(&v2, a, 6); + + /* Keys outside the range of the array cannot be found. */ + int v3 = -1; + int v4 = 2; + + printResult(&v3, b, 2); + printResult(&v4, b, 2); + + return 0; + } + ''' + + self.do_run(src, '-2\n-1\n0\n6\n7\n9\nnull\nnull\nnull\nnull') + def test_nestedstructs(self): src = ''' #include <stdio.h> |