0682ed38a804db86617addf9407bc2e4d1999bb0
[akaros.git] / tests / old / proctests.c
1 #include <parlib/parlib.h>
2 #include <stdio.h>
3
4 /* This runs a variety of process tests.  For now, it just tests single-core
5  * yielding among a bunch of processes (which it creates).  It needs the
6  * manager() to call schedule repeatedly (not panic at some weird point) for it
7  * to make progress. */
8 int main(int argc, char** argv)
9 {
10         int pid = sys_getpid();
11         /* first instance.  this is ghetto, since it relies on being the first proc
12          * ever.  fix this when we can pass arguments.  (TODO) */
13         #define NUM_KIDS 5
14         #define FILENAME "/bin/proctests"
15         int child_pid[NUM_KIDS];
16         if (pid == 0x1000) {
17                 for (int i = 0; i < NUM_KIDS; i++)
18                         child_pid[i] = sys_proc_create(FILENAME, strlen(FILENAME), 0, 0);
19                 for (int i = 0; i < NUM_KIDS; i++) {
20                         printf("U: attempting to spawn yielders (pid: %d)\n", child_pid[i]);
21                         sys_proc_run(child_pid[i]);
22                 }
23         }
24         printf("Process %x, Started and yielding.\n", pid);
25         sys_yield(0);
26         printf("Process %x, Return from yield1, starting yield2.\n", pid);
27         sys_yield(0);
28         printf("Process %x, Return from yield2, starting yield3.\n", pid);
29         sys_yield(0);
30         printf("Process %x, Return from yield3, exiting.\n", pid);
31         return 0;
32 }