6 #define ASSERT_TRUE(p) \
12 #define ASSERT_FALSE(p) ASSERT_TRUE(!(p))
13 #define ASSERT_EQ(lhs, rhs) ASSERT_TRUE((lhs) == (rhs))
16 pthread_mutex_t mutex;
21 void fn(void *opaque) {
22 struct data *data = (struct data *)opaque;
23 pthread_mutex_lock(&data->mutex);
24 data->data[data->i] = data->i;
26 pthread_mutex_unlock(&data->mutex);
29 int testOrder(size_t numThreads, size_t queueSize) {
31 POOL_ctx *ctx = POOL_create(numThreads, queueSize);
34 pthread_mutex_init(&data.mutex, NULL);
37 for (i = 0; i < 16; ++i) {
38 POOL_add(ctx, &fn, &data);
42 ASSERT_EQ(16, data.i);
45 for (i = 0; i < data.i; ++i) {
46 ASSERT_EQ(i, data.data[i]);
49 pthread_mutex_destroy(&data.mutex);
53 int main(int argc, const char **argv) {
55 for (numThreads = 1; numThreads <= 4; ++numThreads) {
57 for (queueSize = 1; queueSize <= 2; ++queueSize) {
58 if (testOrder(numThreads, queueSize)) {
59 printf("FAIL: testOrder\n");
64 printf("PASS: testOrder\n");
67 return (POOL_create(0, 1) || POOL_create(1, 0)) ? printf("FAIL: testInvalid\n"), 1
68 : printf("PASS: testInvalid\n"), 0;