bool test_r_queue_zero_size(void) { // Create queue with max size 0. RQueue* queue = r_queue_new (0); mu_assert_eq ((int)(intptr_t)queue, (int)(intptr_t)NULL, "Create queue of size zero."); mu_end; }
static RTaskQueue * r_task_queue_alloc (rsize ctxcount) { RTaskQueue * ret; if ((ret = r_mem_new0 (RTaskQueue)) != NULL) { ruint i; r_ref_init (ret, r_task_queue_free); r_mutex_init (&ret->wait_mutex); r_cond_init (&ret->wait_cond); ret->ctxcount = ctxcount; ret->ctx = r_mem_new_n (RTQCtx, ctxcount); for (i = 0; i < ctxcount; i++) { ret->ctx[i].q = r_queue_new (); ret->ctx[i].running = TRUE; ret->ctx[i].threads = 0; r_mutex_init (&ret->ctx[i].mutex); r_cond_init (&ret->ctx[i].cond); } ret->pool = r_thread_pool_new ("taskqueue", r_task_queue_loop, ret); } return ret; }
R_API bool r_id_pool_kick_id(RIDPool* pool, ut32 kick) { if (!pool || (kick < pool->start_id) || (pool->start_id == pool->next_id)) { return false; } if (kick == (pool->next_id - 1)) { pool->next_id--; return true; } if (!pool->freed_ids) { pool->freed_ids = r_queue_new (2); } r_queue_enqueue (pool->freed_ids, (void*) (size_t) kick); return true; }
bool test_r_queue_add_remove(void) { int i, j; // Create queue with max size 5. RQueue* queue = r_queue_new (5); for (i = 0; i < 5; ++i) { mu_assert ("enqueue to available slot", r_queue_enqueue (queue, (void*)(intptr_t)((i + 1) * 10))); } mu_assert_eq (queue->capacity, 5, "original capacity is 5"); mu_assert ("enqueue but it's full! Increase Capacity!", r_queue_enqueue (queue, (void*)(intptr_t)60)); mu_assert_eq (queue->capacity, 10, "new capacity should be double old"); for (i = 0; i < 6; ++i) { j = (int)(intptr_t)r_queue_dequeue (queue); mu_assert_eq (j, (i + 1) * 10, "front item from queue"); } j = (int)(intptr_t)r_queue_dequeue (queue); mu_assert_eq (j, (int)(intptr_t)NULL, "Empty queue dequeue."); r_queue_free (queue); mu_end; }