commit 8fbe3fd5647baf286acfadbc6712f3166622deca from: Omar Polo date: Sat Feb 17 23:09:14 2024 UTC add some tests for multiple timers in ev commit - f436aa54ddf3e9824f825a23aeb42cbc147d7fcc commit + 8fbe3fd5647baf286acfadbc6712f3166622deca blob - 09c25fbabf0a9fff3e66578020a3604c579e2edd blob + 6e21f96ddc3bb3a86a4b85a6067032d23ffb9caf --- test/Makefile.am +++ test/Makefile.am @@ -1,4 +1,4 @@ -check_PROGRAMS = gmparser gmiparser iritest +check_PROGRAMS = gmparser gmiparser iritest evtest gmparser_SOURCES = gmparser.c \ $(top_srcdir)/compat.h \ @@ -22,9 +22,14 @@ iritest_SOURCES = iritest.c \ $(top_srcdir)/iri.c \ $(top_srcdir)/iri.h +evtest_SOURCES = evtest.c \ + $(top_srcdir)/ev.c \ + $(top_srcdir)/ev.h + gmparser_CFLAGS = -I$(top_srcdir) gmiparser_CFLAGS = -I$(top_srcdir) iritest_CFLAGS = -I$(top_srcdir) +evtest_CFLAGS = -I$(top_srcdir) EXTRA_DIST = test-gmparser \ gm-00 \ @@ -33,4 +38,4 @@ EXTRA_DIST = test-gmparser \ CLEANFILES = serialized.* -TESTS = test-gmparser iritest +TESTS = test-gmparser iritest evtest blob - /dev/null blob + cd154c950244c7c18f08692bc33a7a2e9e65e810 (mode 644) --- /dev/null +++ test/evtest.c @@ -0,0 +1,108 @@ +/* + * This is free and unencumbered software released into the public domain. + * + * Anyone is free to copy, modify, publish, use, compile, sell, or + * distribute this software, either in source code form or as a compiled + * binary, for any purpose, commercial or non-commercial, and by any + * means. + * + * In jurisdictions that recognize copyright laws, the author or authors + * of this software dedicate any and all copyright interest in the + * software to the public domain. We make this dedication for the benefit + * of the public at large and to the detriment of our heirs and + * successors. We intend this dedication to be an overt act of + * relinquishment in perpetuity of all present and future rights to this + * software under copyright law. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "compat.h" + +#include +#include +#include +#include + +#include + +#include "ev.h" + +int fired_a; +int fired_b; +int fired_c; + +struct timeval tv_a = { 0, 250000 }; +struct timeval tv_b = { 0, 300000 }; +struct timeval tv_c = { 0, 350000 }; + +unsigned long tout_a; +unsigned long tout_b; +unsigned long tout_c; + +static void +pipe_ev(int fd, int ev, void *data) +{ + warn("shouldn't have happened!"); + abort(); +} + +static void +timeout_cb(int fd, int ev, void *data) +{ + int *d = data; + + assert(fd == -1); + *d = 1; +} + +static void +timeout_cancel_b(int fd, int ev, void *data) +{ + timeout_cb(fd, ev, data); + ev_timer_cancel(tout_b); +} + +static void +timeout_quit(int fd, int ev, void *data) +{ + timeout_cb(fd, ev, data); + ev_break(); +} + +int +main(void) +{ + int p[2]; + + alarm(2); /* safety net */ + + /* the ev subsystem needs at least a file descriptor */ + if (pipe(p) == -1) + err(1, "pipe"); + + if (ev_init() == -1) + err(1, "ev_init"); + + if (ev_add(p[0], POLLIN, pipe_ev, NULL) == -1) + err(1, "ev_add"); + + if ((tout_a = ev_timer(&tv_a, timeout_cancel_b, &fired_a)) == 0 || + (tout_b = ev_timer(&tv_b, timeout_cb, &fired_b)) == 0 || + (tout_c = ev_timer(&tv_c, timeout_quit, &fired_c)) == 0) + err(1, "ev_timer"); + + ev_loop(); + + if (fired_a && !fired_b && fired_c) + return 0; + + errx(1, "events fired not as expected: a:%d b:%d c:%d", + fired_a, fired_b, fired_c); +}