xref: /openbsd-src/regress/lib/libevent/test-time.c (revision 5f15e431a5acc5d9dc3a8fff95a7f84c6c2bd8d9)
1*5f15e431Snicm /*
2*5f15e431Snicm  * Compile with:
3*5f15e431Snicm  * cc -I/usr/local/include -o time-test time-test.c -L/usr/local/lib -levent
4*5f15e431Snicm  */
5*5f15e431Snicm #ifdef HAVE_CONFIG_H
6*5f15e431Snicm #include "config.h"
7*5f15e431Snicm #endif
8*5f15e431Snicm 
9*5f15e431Snicm #ifdef WIN32
10*5f15e431Snicm #include <winsock2.h>
11*5f15e431Snicm #endif
12*5f15e431Snicm 
13*5f15e431Snicm #include <sys/types.h>
14*5f15e431Snicm #include <sys/stat.h>
15*5f15e431Snicm #ifdef HAVE_SYS_TIME_H
16*5f15e431Snicm #include <sys/time.h>
17*5f15e431Snicm #endif
18*5f15e431Snicm #include <fcntl.h>
19*5f15e431Snicm #include <stdlib.h>
20*5f15e431Snicm #include <stdio.h>
21*5f15e431Snicm #include <string.h>
22*5f15e431Snicm #ifdef HAVE_UNISTD_H
23*5f15e431Snicm #include <unistd.h>
24*5f15e431Snicm #endif
25*5f15e431Snicm #include <errno.h>
26*5f15e431Snicm 
27*5f15e431Snicm #include <event.h>
28*5f15e431Snicm 
29*5f15e431Snicm int called = 0;
30*5f15e431Snicm 
31*5f15e431Snicm #define NEVENT	20000
32*5f15e431Snicm 
33*5f15e431Snicm struct event *ev[NEVENT];
34*5f15e431Snicm 
35*5f15e431Snicm static int
rand_int(int n)36*5f15e431Snicm rand_int(int n)
37*5f15e431Snicm {
38*5f15e431Snicm #ifdef WIN32
39*5f15e431Snicm 	return (int)(rand() * n);
40*5f15e431Snicm #else
41*5f15e431Snicm 	return (int)(random() % n);
42*5f15e431Snicm #endif
43*5f15e431Snicm }
44*5f15e431Snicm 
45*5f15e431Snicm static void
time_cb(int fd,short event,void * arg)46*5f15e431Snicm time_cb(int fd, short event, void *arg)
47*5f15e431Snicm {
48*5f15e431Snicm 	struct timeval tv;
49*5f15e431Snicm 	int i, j;
50*5f15e431Snicm 
51*5f15e431Snicm 	called++;
52*5f15e431Snicm 
53*5f15e431Snicm 	if (called < 10*NEVENT) {
54*5f15e431Snicm 		for (i = 0; i < 10; i++) {
55*5f15e431Snicm 			j = rand_int(NEVENT);
56*5f15e431Snicm 			tv.tv_sec = 0;
57*5f15e431Snicm 			tv.tv_usec = rand_int(50000);
58*5f15e431Snicm 			if (tv.tv_usec % 2)
59*5f15e431Snicm 				evtimer_add(ev[j], &tv);
60*5f15e431Snicm 			else
61*5f15e431Snicm 				evtimer_del(ev[j]);
62*5f15e431Snicm 		}
63*5f15e431Snicm 	}
64*5f15e431Snicm }
65*5f15e431Snicm 
66*5f15e431Snicm int
main(int argc,char ** argv)67*5f15e431Snicm main (int argc, char **argv)
68*5f15e431Snicm {
69*5f15e431Snicm 	struct timeval tv;
70*5f15e431Snicm 	int i;
71*5f15e431Snicm 
72*5f15e431Snicm 	/* Initalize the event library */
73*5f15e431Snicm 	event_init();
74*5f15e431Snicm 
75*5f15e431Snicm 	for (i = 0; i < NEVENT; i++) {
76*5f15e431Snicm 		ev[i] = malloc(sizeof(struct event));
77*5f15e431Snicm 
78*5f15e431Snicm 		/* Initalize one event */
79*5f15e431Snicm 		evtimer_set(ev[i], time_cb, ev[i]);
80*5f15e431Snicm 		tv.tv_sec = 0;
81*5f15e431Snicm 		tv.tv_usec = rand_int(50000);
82*5f15e431Snicm 		evtimer_add(ev[i], &tv);
83*5f15e431Snicm 	}
84*5f15e431Snicm 
85*5f15e431Snicm 	event_dispatch();
86*5f15e431Snicm 
87*5f15e431Snicm 	return (called < NEVENT);
88*5f15e431Snicm }
89*5f15e431Snicm 
90