diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2024-11-05 14:29:38 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2024-11-05 14:29:38 -0500 |
| commit | 97ebed50299030af9930413f8abed7a5f52e8d68 (patch) | |
| tree | 8a3f751b2baed282ff9d3d9b790371ee418d909f /test/pkev.c | |
| parent | 5b7f401e9f6478f21208f842d6acd3fecffed712 (diff) | |
pkev: pk_ev_emit user_data + ev grow cpp test
Diffstat (limited to 'test/pkev.c')
| -rw-r--r-- | test/pkev.c | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/test/pkev.c b/test/pkev.c index c3bfeb9..a738e70 100644 --- a/test/pkev.c +++ b/test/pkev.c @@ -6,6 +6,8 @@ #include <stdio.h> struct ev { + pk_ev_mgr_id_T evmgr; + pk_ev_id_T evid; bool handled; }; @@ -13,17 +15,31 @@ struct ev ev_one = {0}; struct ev ev_two = {0}; void -handle_ev_one() +handle_ev_one(void *) { ev_one.handled = true; } void -handle_ev_two() +handle_ev_two(void *) { ev_two.handled = true; } +int +thrd_ev_emit_one(void *) +{ + pk_ev_emit(ev_one.evmgr, ev_one.evid, NULL); + return 0; +} + +int +thrd_ev_emit_two(void *) +{ + pk_ev_emit(ev_two.evmgr, ev_two.evid, NULL); + return 0; +} + const pk_ev_mgr_id_T test_setup() { @@ -35,6 +51,8 @@ test_setup() PK_LOGV_ERR("%s: failed to create pk_ev_mgr\n", __FILE__); exit(1); } + ev_one.evmgr = evmgr; + ev_two.evmgr = evmgr; return evmgr; } @@ -43,18 +61,34 @@ int main(int argc, char *argv[]) (void)argc; (void)argv; (void)stdout; - pk_ev_id_T custom_ev_one; - pk_ev_id_T custom_ev_two; + int i; // register, emit, catch { const pk_ev_mgr_id_T evmgr = test_setup(); - custom_ev_one = pk_ev_register_ev(evmgr); - custom_ev_two = pk_ev_register_ev(evmgr); - pk_ev_register_cb(evmgr, custom_ev_one, handle_ev_one); - pk_ev_register_cb(evmgr, custom_ev_two, handle_ev_two); - pk_ev_emit(evmgr, custom_ev_one); - pk_ev_emit(evmgr, custom_ev_two); + ev_one.evid = pk_ev_register_ev(evmgr); + ev_two.evid = pk_ev_register_ev(evmgr); + pk_ev_register_cb(evmgr, ev_one.evid, handle_ev_one); + pk_ev_register_cb(evmgr, ev_two.evid, handle_ev_two); + pk_ev_emit(evmgr, ev_one.evid, NULL); + pk_ev_emit(evmgr, ev_two.evid, NULL); + PK_LOGV_INF("%s: ev_one: %b, ev_two: %b\n", __FILE__, ev_one.handled, ev_two.handled); + pk_ev_teardown(); + if (ev_one.handled == false || ev_two.handled == false) exit(1); + } + + // threaded register, emit, catch + { + thrd_t t1, t2; + const pk_ev_mgr_id_T evmgr = test_setup(); + ev_one.evid = pk_ev_register_ev(evmgr); + ev_two.evid = pk_ev_register_ev(evmgr); + pk_ev_register_cb(evmgr, ev_one.evid, handle_ev_one); + pk_ev_register_cb(evmgr, ev_two.evid, handle_ev_two); + thrd_create(&t1, thrd_ev_emit_one, NULL); + thrd_create(&t2, thrd_ev_emit_two, NULL); + thrd_join(t1, &i); + thrd_join(t2, &i); PK_LOGV_INF("%s: ev_one: %b, ev_two: %b\n", __FILE__, ev_one.handled, ev_two.handled); pk_ev_teardown(); if (ev_one.handled == false || ev_two.handled == false) exit(1); |
