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