67 #define NUM_PRODUCERS (4) 68 #define NUM_CONSUMERS (4) 69 #define NUM_ITEMS_PER_PRODUCER (1*1000) 91 item = gw_malloc(
sizeof(
Item));
107 index =
info->start_index;
168 error(0,
"Not received: producer=%ld " 169 "item=%ld index=%ld",
170 tab[p].
id, n, index);
177 panic(0,
"Not all messages were received.");
185 return strcmp(item, pat) == 0;
190 static char *items[] = {
195 int num_items =
sizeof(items) /
sizeof(items[0]);
203 for (j = 0; j < num_repeats; ++j)
204 for (i = 0; i < num_items; ++i)
209 if (strcmp(p, items[0]) == 0)
210 panic(0,
"list contains `%s' after deleting it!",
214 for (i = 0; i < num_items; ++i)
217 panic(0,
"list is not empty after deleting everything");
224 static char *items[] = {
229 int num_items =
sizeof(items) /
sizeof(items[0]);
237 for (j = 0; j < num_repeats; ++j)
238 for (i = 0; i < num_items; ++i)
241 for (j = 0; j < num_items; ++j) {
244 if (extracted == NULL)
245 panic(0,
"no extracted elements, should have!");
248 if (strcmp(p, items[j]) == 0)
249 panic(0,
"list contains `%s' after " 255 if (strcmp(p, items[j]) != 0)
257 "extraction returned wrong element!");
263 panic(0,
"list is not empty after extracting everything");
void error(int err, const char *fmt,...)
void info(int err, const char *fmt,...)
void gwlist_append(List *list, void *item)
void gwlist_produce(List *list, void *item)
long gwlist_len(List *list)
static Item * new_item(long producer, long num, long index)
void * gwlist_get(List *list, long pos)
static void producer(void *arg)
List * gwlist_extract_matching(List *list, void *pat, gwlist_item_matches_t *cmp)
void gwthread_join_every(gwthread_func_t *func)
static char received[NUM_PRODUCERS *NUM_ITEMS_PER_PRODUCER]
#define NUM_ITEMS_PER_PRODUCER
static void main_for_list_add_and_delete(void)
void log_set_output_level(enum output_level level)
void gwlist_delete(List *list, long pos, long count)
static void main_for_extract(void)
void gwlist_remove_producer(List *list)
long gwlist_delete_equal(List *list, void *item)
void warning(int err, const char *fmt,...)
#define gwthread_create(func, arg)
static void init_received(void)
static void consumer(void *arg)
long gwlist_delete_matching(List *list, void *pat, gwlist_item_matches_t *matches)
void * gwlist_consume(List *list)
static int compare_cstr(void *item, void *pat)
void gwlib_shutdown(void)
static void main_for_producer_and_consumer(void)
void gwlist_add_producer(List *list)
void gwlist_destroy(List *list, gwlist_item_destructor_t *destructor)