aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDavid Yip <yipdw@member.fsf.org>2011-12-08 13:44:30 -0600
committerDavid Yip <yipdw@member.fsf.org>2011-12-21 01:10:42 -0600
commitd3420a1866a45a296ea9782fc8a35b08966277d6 (patch)
tree1fd419390e4af221e81a0913899aada9ee3803a0 /tests
parentbae448ef2619fffb90021c96546cbccadc39ed20 (diff)
An implementation of bsearch(3).
Diffstat (limited to 'tests')
-rw-r--r--tests/runner.py51
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>