diff options
Diffstat (limited to 'test/pkev.cpp')
| -rw-r--r-- | test/pkev.cpp | 76 |
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); } |
