updates.
[crypto.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(timeout)
22 {
23   int i = (int)context;
24   SILC_LOG_DEBUG(("Timeout task %d", i));
25 }
26
27 SILC_TASK_CALLBACK(cont2)
28 {
29 #ifdef SILC_DEBUG
30   silc_schedule_stats(schedule);
31 #endif /* SILC_DEBUG */
32
33   SILC_LOG_DEBUG(("Adding %d fd tasks", NUM_FTASK - 10));
34
35 #if 0
36   for (i = 0; i < NUM_FTASK - 10; i++)
37     silc_schedule_task_add_fd(schedule, i + 5, foo, (void *)(i + 5));
38 #endif
39 }
40
41 SILC_TASK_CALLBACK(cont)
42 {
43   int i;
44
45 #ifdef SILC_DEBUG
46   silc_schedule_stats(schedule);
47 #endif /* SILC_DEBUG */
48
49   SILC_LOG_DEBUG(("Adding %d timeout tasks", NUM_TTASK / 3));
50   for (i = 0; i < NUM_TTASK / 3; i++)
51     silc_schedule_task_add_timeout(schedule, timeout, (void *)i, 0, 1);
52
53   silc_schedule_task_add_timeout(schedule, cont2, (void *)i, 0, 100);
54 }
55
56 SILC_TASK_CALLBACK(start)
57 {
58   int i;
59
60   SILC_LOG_DEBUG(("Adding %d timeout tasks", NUM_TTASK));
61
62 #if 0
63   for (i = 0; i < NUM_TTASK; i++)
64     silc_schedule_task_add_timeout(schedule, timeout, (void *)i,
65         i + (i & 9999), (i * 720391) & 999999);
66 #endif
67
68   for (i = 0; i < NUM_TTASK; i++)
69     silc_schedule_task_add_timeout(schedule, timeout, (void *)i, 0, 1);
70
71   silc_schedule_task_add_timeout(schedule, cont, (void *)i, 0, 100);
72 }
73
74 int main(int argc, char **argv)
75 {
76   SilcBool success = FALSE;
77
78   if (argc > 1 && !strcmp(argv[1], "-d")) {
79     silc_log_debug(TRUE);
80     silc_log_quick(TRUE);
81     silc_log_debug_hexdump(TRUE);
82     silc_log_set_debug_string("*sched*,*hash*");
83   }
84
85   SILC_LOG_DEBUG(("Allocating scheduler"));
86   schedule = silc_schedule_init(NUM_FTASK, NULL);
87   if (!schedule)
88     goto err;
89
90   silc_schedule_task_add_timeout(schedule, start, NULL, 0, 1);
91
92   SILC_LOG_DEBUG(("Running scheduler"));
93   silc_schedule(schedule);
94
95   silc_schedule_uninit(schedule);
96
97   success = TRUE;
98
99  err:
100   SILC_LOG_DEBUG(("Testing was %s", success ? "SUCCESS" : "FAILURE"));
101   fprintf(stderr, "Testing was %s\n", success ? "SUCCESS" : "FAILURE");
102
103   return success;
104 }