Commit Diff


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 <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <poll.h>
+
+#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);
+}