|  | @@ -4,55 +4,53 @@
 | 
	
		
			
				|  |  |  #include "test_helpers.h"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  int int_cmp(const void* a, const void* b) {
 | 
	
		
			
				|  |  | -  return *(const int*) a - *(const int*) b;
 | 
	
		
			
				|  |  | +    return *(const int*) a - *(const int*) b;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #define BSEARCH_TEST_INT(key, arr, len, expect) \
 | 
	
		
			
				|  |  | -  do { \
 | 
	
		
			
				|  |  | -    void* res = bsearch((const void*) &key, (void*) arr, len, sizeof(int), int_cmp); \
 | 
	
		
			
				|  |  | -    if (res != expect) { \
 | 
	
		
			
				|  |  | -      printf("FAIL bsearch for %d in [", key); \
 | 
	
		
			
				|  |  | -      size_t i = 0; \
 | 
	
		
			
				|  |  | -      for (; i < len; ++i) printf("%d,", arr[i]); \
 | 
	
		
			
				|  |  | -      printf("] expected %p but got %p\n", (void*) expect, res); \
 | 
	
		
			
				|  |  | -      exit(EXIT_FAILURE); \
 | 
	
		
			
				|  |  | -    } \
 | 
	
		
			
				|  |  | -  } while (0);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +    do { \
 | 
	
		
			
				|  |  | +        void* res = bsearch((const void*) &key, (void*) arr, len, sizeof(int), int_cmp); \
 | 
	
		
			
				|  |  | +        if (res != expect) { \
 | 
	
		
			
				|  |  | +            printf("FAIL bsearch for %d in [", key); \
 | 
	
		
			
				|  |  | +            size_t i = 0; \
 | 
	
		
			
				|  |  | +            for (; i < len; ++i) printf("%d,", arr[i]); \
 | 
	
		
			
				|  |  | +            printf("] expected %p but got %p\n", (void*) expect, res); \
 | 
	
		
			
				|  |  | +            exit(EXIT_FAILURE); \
 | 
	
		
			
				|  |  | +        } \
 | 
	
		
			
				|  |  | +    } while (0)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  int main(void) {
 | 
	
		
			
				|  |  | -  int x = 0;
 | 
	
		
			
				|  |  | -  int y = 1024;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  // TODO: Zero sized arrays are a non-standard GNU extension
 | 
	
		
			
				|  |  | -  //int empty[] = {};
 | 
	
		
			
				|  |  | -  //BSEARCH_TEST_INT(x, empty, 0, NULL);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  int singleton[] = {42};
 | 
	
		
			
				|  |  | -  printf("%p\n%p\n", singleton, &singleton[1]);
 | 
	
		
			
				|  |  | -  BSEARCH_TEST_INT(x, singleton, 1, NULL);
 | 
	
		
			
				|  |  | -  BSEARCH_TEST_INT(singleton[0], singleton, 1, &singleton[0]);
 | 
	
		
			
				|  |  | -  BSEARCH_TEST_INT(y, singleton, 1, NULL);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  int two[] = {14, 42};
 | 
	
		
			
				|  |  | -  BSEARCH_TEST_INT(x, two, 2, NULL);
 | 
	
		
			
				|  |  | -  BSEARCH_TEST_INT(y, two, 2, NULL);
 | 
	
		
			
				|  |  | -  BSEARCH_TEST_INT(two[0], two, 2, &two[0]);
 | 
	
		
			
				|  |  | -  BSEARCH_TEST_INT(two[0], two, 1, &two[0]);
 | 
	
		
			
				|  |  | -  BSEARCH_TEST_INT(two[1], two, 2, &two[1]);
 | 
	
		
			
				|  |  | -  BSEARCH_TEST_INT(two[1], two, 1, NULL);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  int three[] = {-5, -1, 4};
 | 
	
		
			
				|  |  | -  BSEARCH_TEST_INT(three[0], three, 3, &three[0]);
 | 
	
		
			
				|  |  | -  BSEARCH_TEST_INT(three[1], three, 3, &three[1]);
 | 
	
		
			
				|  |  | -  BSEARCH_TEST_INT(three[2], three, 3, &three[2]);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  int big[] = {-19, -13, -7, -3, 2, 5, 11};
 | 
	
		
			
				|  |  | -  BSEARCH_TEST_INT(big[0], big, 7, big);
 | 
	
		
			
				|  |  | -  BSEARCH_TEST_INT(big[6], big, 7, &big[6]);
 | 
	
		
			
				|  |  | -  BSEARCH_TEST_INT(big[3], big, 7, &big[3]);
 | 
	
		
			
				|  |  | -  BSEARCH_TEST_INT(x, big, 7, NULL);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  printf("PASS bsearch\n");
 | 
	
		
			
				|  |  | +    int x = 0;
 | 
	
		
			
				|  |  | +    int y = 1024;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // TODO: Zero sized arrays are a non-standard GNU extension
 | 
	
		
			
				|  |  | +    //int empty[] = {};
 | 
	
		
			
				|  |  | +    //BSEARCH_TEST_INT(x, empty, 0, NULL);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    int singleton[] = {42};
 | 
	
		
			
				|  |  | +    printf("%p\n%p\n", singleton, &singleton[1]);
 | 
	
		
			
				|  |  | +    BSEARCH_TEST_INT(x, singleton, 1, NULL);
 | 
	
		
			
				|  |  | +    BSEARCH_TEST_INT(singleton[0], singleton, 1, &singleton[0]);
 | 
	
		
			
				|  |  | +    BSEARCH_TEST_INT(y, singleton, 1, NULL);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    int two[] = {14, 42};
 | 
	
		
			
				|  |  | +    BSEARCH_TEST_INT(x, two, 2, NULL);
 | 
	
		
			
				|  |  | +    BSEARCH_TEST_INT(y, two, 2, NULL);
 | 
	
		
			
				|  |  | +    BSEARCH_TEST_INT(two[0], two, 2, &two[0]);
 | 
	
		
			
				|  |  | +    BSEARCH_TEST_INT(two[0], two, 1, &two[0]);
 | 
	
		
			
				|  |  | +    BSEARCH_TEST_INT(two[1], two, 2, &two[1]);
 | 
	
		
			
				|  |  | +    BSEARCH_TEST_INT(two[1], two, 1, NULL);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    int three[] = {-5, -1, 4};
 | 
	
		
			
				|  |  | +    BSEARCH_TEST_INT(three[0], three, 3, &three[0]);
 | 
	
		
			
				|  |  | +    BSEARCH_TEST_INT(three[1], three, 3, &three[1]);
 | 
	
		
			
				|  |  | +    BSEARCH_TEST_INT(three[2], three, 3, &three[2]);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    int big[] = {-19, -13, -7, -3, 2, 5, 11};
 | 
	
		
			
				|  |  | +    BSEARCH_TEST_INT(big[0], big, 7, big);
 | 
	
		
			
				|  |  | +    BSEARCH_TEST_INT(big[6], big, 7, &big[6]);
 | 
	
		
			
				|  |  | +    BSEARCH_TEST_INT(big[3], big, 7, &big[3]);
 | 
	
		
			
				|  |  | +    BSEARCH_TEST_INT(x, big, 7, NULL);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    printf("PASS bsearch\n");
 | 
	
		
			
				|  |  |  }
 |