summaryrefslogtreecommitdiff
path: root/test/pkev.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-11-06 16:04:10 -0500
committerJonathan Bradley <jcb@pikum.xyz>2025-11-06 22:13:29 -0500
commit6065c56165743116bf9d4a5a4a1a63ec6d01a067 (patch)
treeb070cefdee45cfe9fb9b2ce32e34bb60f86d40a2 /test/pkev.cpp
parentafe00afd09858cb81eac9ead9197e5e8daf132c4 (diff)
pkev: unregister ev + memory alignment padding
Diffstat (limited to 'test/pkev.cpp')
-rw-r--r--test/pkev.cpp76
1 files changed, 74 insertions, 2 deletions
diff --git a/test/pkev.cpp b/test/pkev.cpp
index 0d39336..61835df 100644
--- a/test/pkev.cpp
+++ b/test/pkev.cpp
@@ -90,9 +90,30 @@ int main(int argc, char *argv[])
(void)stdout;
size_t i, ii;
+ // register, emit
+ {
+ std::packaged_task<void()> handle_ev_one([](){ ev_one.handled = true; });
+ std::packaged_task<void()> handle_ev_two([](){ ev_two.handled = true; });
+ pk_ev_mgr_id_T evmgr = test_setup();
+ ev_one.evid = pk_ev_register_ev(evmgr, NULL);
+ ev_two.evid = pk_ev_register_ev(evmgr, NULL);
+ pk_ev_register_cb(evmgr, ev_one.evid, &invoke_packged_task, NULL);
+ pk_ev_register_cb(evmgr, ev_two.evid, &invoke_packged_task, NULL);
+ pk_ev_emit(evmgr, ev_one.evid, &handle_ev_one);
+ pk_ev_emit(evmgr, ev_two.evid, &handle_ev_two);
+ PK_LOGV_INF("%s: ev_one: %lu, ev_two: %lu\n", __FILE__, ev_one.evid, ev_two.evid);
+ PK_LOGV_INF("%s: ev_one: %s, ev_two: %s\n", __FILE__, ev_one.handled ? "true" : "false", ev_two.handled ? "true" : "false");
+ pk_ev_teardown();
+ fflush(stdout);
+ fflush(stderr);
+ if (ev_one.evid != 0 || ev_two.evid != 1) exit(1);
+ if (ev_one.handled == false || ev_two.handled == false) exit(1);
+ }
- // register, emit, catch
+ // register, emit, clear
{
+ ev_one.handled = false;
+ ev_two.handled = false;
std::packaged_task<void()> handle_ev_one([](){ ev_one.handled = true; });
std::packaged_task<void()> handle_ev_two([](){ ev_two.handled = true; });
pk_ev_mgr_id_T evmgr = test_setup();
@@ -100,16 +121,65 @@ int main(int argc, char *argv[])
ev_two.evid = pk_ev_register_ev(evmgr, NULL);
pk_ev_register_cb(evmgr, ev_one.evid, &invoke_packged_task, NULL);
pk_ev_register_cb(evmgr, ev_two.evid, &invoke_packged_task, NULL);
+ pk_ev_unregister_ev(ev_one.evmgr, ev_one.evid);
pk_ev_emit(evmgr, ev_one.evid, &handle_ev_one);
pk_ev_emit(evmgr, ev_two.evid, &handle_ev_two);
PK_LOGV_INF("%s: ev_one: %s, ev_two: %s\n", __FILE__, ev_one.handled ? "true" : "false", ev_two.handled ? "true" : "false");
pk_ev_teardown();
fflush(stdout);
fflush(stderr);
+ if (ev_one.handled == true || ev_two.handled == false) exit(1);
+ }
+
+ // register, emit, clear, register
+ {
+ ev_one.handled = false;
+ ev_two.handled = false;
+ std::packaged_task<void()> handle_ev_one([](){ ev_one.handled = true; });
+ std::packaged_task<void()> handle_ev_two([](){ ev_two.handled = true; });
+ pk_ev_mgr_id_T evmgr = test_setup();
+ ev_one.evid = pk_ev_register_ev(evmgr, NULL);
+ ev_two.evid = pk_ev_register_ev(evmgr, NULL);
+ pk_ev_register_cb(evmgr, ev_one.evid, &invoke_packged_task, NULL);
+ pk_ev_register_cb(evmgr, ev_two.evid, &invoke_packged_task, NULL);
+ PK_LOGV_INF("%s: ev_one: %lu, ev_two: %lu\n", __FILE__, ev_one.evid, ev_two.evid);
+ fflush(stdout);
+ fflush(stderr);
+ if (ev_one.evid != 0 || ev_two.evid != 1) exit(1);
+ pk_ev_unregister_ev(ev_one.evmgr, ev_one.evid);
+
+ pk_ev_emit(evmgr, ev_one.evid, &handle_ev_one);
+ pk_ev_emit(evmgr, ev_two.evid, &handle_ev_two);
+ PK_LOGV_INF("%s: ev_one: %s, ev_two: %s\n", __FILE__, ev_one.handled ? "true" : "false", ev_two.handled ? "true" : "false");
+ fflush(stdout);
+ fflush(stderr);
+ if (ev_one.handled == true || ev_two.handled == false) exit(1);
+ pk_ev_unregister_ev(ev_two.evmgr, ev_two.evid);
+
+ std::packaged_task<void()> handle_ev_thr([](){ ev_one.handled = true; });
+ std::packaged_task<void()> handle_ev_for([](){ ev_two.handled = true; });
+ ev_one.handled = false;
+ ev_two.handled = false;
+ ev_one.evid = pk_ev_register_ev(evmgr, NULL);
+ ev_two.evid = pk_ev_register_ev(evmgr, NULL);
+ pk_ev_register_cb(evmgr, ev_one.evid, &invoke_packged_task, NULL);
+ pk_ev_register_cb(evmgr, ev_two.evid, &invoke_packged_task, NULL);
+ PK_LOGV_INF("%s: ev_one: %lu, ev_two: %lu\n", __FILE__, ev_one.evid, ev_two.evid);
+ fflush(stdout);
+ fflush(stderr);
+ if (ev_one.evid != 0 || ev_two.evid != 1) exit(1);
+
+ pk_ev_emit(evmgr, ev_one.evid, &handle_ev_thr);
+ pk_ev_emit(evmgr, ev_two.evid, &handle_ev_for);
+ PK_LOGV_INF("%s: ev_one: %s, ev_two: %s\n", __FILE__, ev_one.handled ? "true" : "false", ev_two.handled ? "true" : "false");
+ fflush(stdout);
+ fflush(stderr);
if (ev_one.handled == false || ev_two.handled == false) exit(1);
+
+ pk_ev_teardown();
}
- // threaded register, emit, catch
+ // threaded register, emit
{
std::packaged_task<void()> handle_ev_one([](){ ev_one.handled = true; });
std::packaged_task<void()> handle_ev_two([](){ ev_two.handled = true; });
@@ -126,10 +196,12 @@ int main(int argc, char *argv[])
});
t1.join();
t2.join();
+ PK_LOGV_INF("%s: ev_one: %lu, ev_two: %lu\n", __FILE__, ev_one.evid, ev_two.evid);
PK_LOGV_INF("%s: ev_one: %s, ev_two: %s\n", __FILE__, ev_one.handled ? "true" : "false", ev_two.handled ? "true" : "false");
pk_ev_teardown();
fflush(stdout);
fflush(stderr);
+ if (ev_one.evid != 0 || ev_two.evid != 1) exit(1);
if (ev_one.handled == false || ev_two.handled == false) exit(1);
}