| 29 | } |
| 30 | |
| 31 | int main(void) |
| 32 | { |
| 33 | const char *p = "hi"; |
| 34 | |
| 35 | plan_tests(43); |
| 36 | |
| 37 | /* We can take NULL. */ |
| 38 | ok1(take(NULL) == NULL); |
| 39 | ok1(is_taken(NULL)); |
| 40 | ok1(taken_any()); |
| 41 | ok1(taken(NULL)); /* Undoes take() */ |
| 42 | ok1(!is_taken(NULL)); |
| 43 | ok1(!taken(NULL)); |
| 44 | |
| 45 | /* We can take NULL twice! */ |
| 46 | ok1(take(NULL) == NULL); |
| 47 | ok1(take(NULL) == NULL); |
| 48 | ok1(is_taken(NULL)); |
| 49 | ok1(taken_any()); |
| 50 | ok1(taken(NULL)); /* Undoes take() */ |
| 51 | ok1(is_taken(NULL)); |
| 52 | ok1(taken_any()); |
| 53 | ok1(taken(NULL)); /* Undoes take() */ |
| 54 | ok1(!is_taken(NULL)); |
| 55 | ok1(!taken(NULL)); |
| 56 | ok1(!taken_any()); |
| 57 | |
| 58 | /* We can take a real pointer. */ |
| 59 | ok1(take(p) == p); |
| 60 | ok1(is_taken(p)); |
| 61 | ok1(taken_any()); |
| 62 | ok1(taken(p)); /* Undoes take() */ |
| 63 | ok1(!is_taken(p)); |
| 64 | ok1(!taken(p)); |
| 65 | ok1(!taken_any()); |
| 66 | |
| 67 | /* Force a failure. */ |
| 68 | ok1(!my_allocfail_called); |
| 69 | ok1(take(p) == p); |
| 70 | ok1(take(p+1) == p+1); |
| 71 | |
| 72 | fail_realloc = true; |
| 73 | /* Without a handler, must pass through and leak. */ |
| 74 | ok1(take(p+2) == p+2); |
| 75 | ok1(!taken(p+2)); |
| 76 | |
| 77 | /* Now, with a handler. */ |
| 78 | take_allocfail(my_allocfail); |
| 79 | ok1(take(p+2) == NULL); |
| 80 | |
| 81 | ok1(my_allocfail_called == 1); |
| 82 | ok1(taken_any()); |
| 83 | ok1(taken(p)); |
| 84 | ok1(taken(p+1)); |
| 85 | ok1(is_taken(NULL)); |
| 86 | ok1(taken(NULL)); |
| 87 | ok1(!taken(NULL)); |
| 88 | ok1(!taken_any()); |
nothing calls this directly
no test coverage detected