]>
git.proxmox.com Git - rustc.git/blob - src/jemalloc/test/unit/mq.c
1 #include "test/jemalloc_test.h"
6 typedef struct mq_msg_s mq_msg_t
;
10 mq_gen(static, mq_
, mq_t
, mq_msg_t
, link
)
12 TEST_BEGIN(test_mq_basic
)
17 assert_false(mq_init(&mq
), "Unexpected mq_init() failure");
18 assert_u_eq(mq_count(&mq
), 0, "mq should be empty");
19 assert_ptr_null(mq_tryget(&mq
),
20 "mq_tryget() should fail when the queue is empty");
23 assert_u_eq(mq_count(&mq
), 1, "mq should contain one message");
24 assert_ptr_eq(mq_tryget(&mq
), &msg
, "mq_tryget() should return msg");
27 assert_ptr_eq(mq_get(&mq
), &msg
, "mq_get() should return msg");
34 thd_receiver_start(void *arg
)
36 mq_t
*mq
= (mq_t
*)arg
;
39 for (i
= 0; i
< (NSENDERS
* NMSGS
); i
++) {
40 mq_msg_t
*msg
= mq_get(mq
);
41 assert_ptr_not_null(msg
, "mq_get() should never return NULL");
48 thd_sender_start(void *arg
)
50 mq_t
*mq
= (mq_t
*)arg
;
53 for (i
= 0; i
< NMSGS
; i
++) {
56 p
= mallocx(sizeof(mq_msg_t
), 0);
57 assert_ptr_not_null(p
, "Unexpected mallocx() failure");
64 TEST_BEGIN(test_mq_threaded
)
68 thd_t senders
[NSENDERS
];
71 assert_false(mq_init(&mq
), "Unexpected mq_init() failure");
73 thd_create(&receiver
, thd_receiver_start
, (void *)&mq
);
74 for (i
= 0; i
< NSENDERS
; i
++)
75 thd_create(&senders
[i
], thd_sender_start
, (void *)&mq
);
77 thd_join(receiver
, NULL
);
78 for (i
= 0; i
< NSENDERS
; i
++)
79 thd_join(senders
[i
], NULL
);