Added SILC Server library.
[silc.git] / lib / silcutil / tests / test_silcschedule.c
1 /* SilcSchedule tests */
2
3 #include "silc.h"
4
5 typedef void (*Callback)(void *context);
6
7 #define NUM_TTASK 200
8 #ifdef FD_SETSIZE
9 #define NUM_FTASK FD_SETSIZE
10 #else
11 #define NUM_FTASK 250
12 #endif
13
14 SilcSchedule schedule;
15
16 SILC_TASK_CALLBACK(foo)
17 {
18
19 }
20
21 SILC_TASK_CALLBACK(cont)
22 {
23   int i;
24
25   SILC_LOG_DEBUG(("Adding %d fd tasks", NUM_FTASK - 10));
26
27 #if 0
28   for (i = 0; i < NUM_FTASK - 10; i++)
29     silc_schedule_task_add_fd(schedule, i + 5, foo, (void *)(i + 5));
30 #endif
31 }
32
33 SILC_TASK_CALLBACK(timeout)
34 {
35   int i = (int)context;
36   SILC_LOG_DEBUG(("Timeout task %d", i));
37 }
38
39 SILC_TASK_CALLBACK(start)
40 {
41   int i;
42
43   SILC_LOG_DEBUG(("Adding %d timeout tasks", NUM_TTASK));
44
45 #if 0
46   for (i = 0; i < NUM_TTASK; i++)
47     silc_schedule_task_add_timeout(schedule, timeout, (void *)i,
48         i + (i & 9999), (i * 720391) & 999999);
49 #endif
50
51   for (i = 0; i < NUM_TTASK; i++)
52     silc_schedule_task_add_timeout(schedule, timeout, (void *)i, 0, 1);
53
54   silc_schedule_task_add_timeout(schedule, cont, (void *)i, 0, 100);
55 }
56
57 int main(int argc, char **argv)
58 {
59   SilcBool success = FALSE;
60
61   if (argc > 1 && !strcmp(argv[1], "-d")) {
62     silc_log_debug(TRUE);
63     silc_log_quick(TRUE);
64     silc_log_debug_hexdump(TRUE);
65     silc_log_set_debug_string("*sched*,*hash*");
66   }
67
68   SILC_LOG_DEBUG(("Allocating scheduler"));
69   schedule = silc_schedule_init(NUM_FTASK, NULL);
70   if (!schedule)
71     goto err;
72
73   silc_schedule_task_add_timeout(schedule, start, NULL, 0, 1);
74
75   SILC_LOG_DEBUG(("Running scheduler"));
76   silc_schedule(schedule);
77
78   silc_schedule_uninit(schedule);
79
80   success = TRUE;
81
82  err:
83   SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
84   fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");
85
86   return success;
87 }