+#define PROC_TEST(num) static void proc_test##num(void) \
+{ \
+ for (int i = 0; i < INC_PROC_T##num; ++i) \
+ { \
+ t##num##_count++; \
+ kprintf("> Process[%d]: count[%d]\n", num, t##num##_count); \
+ timer_delay(DELAY_PROC_T##num); \
+ } \
+} \
+
+#define PROC_TEST_STACK(num) static cpu_stack_t proc_test##num##_stack[700 / sizeof(cpu_stack_t)];
+#define PROC_TEST_INIT(num) proc_new(proc_test##num, NULL, sizeof(proc_test##num##_stack), proc_test##num##_stack);
+
+// Define process
+PROC_TEST(1)
+PROC_TEST(2)
+PROC_TEST(3)
+PROC_TEST(4)
+PROC_TEST(5)
+PROC_TEST(6)
+PROC_TEST(7)
+PROC_TEST(8)
+
+// Define process stacks for test.
+PROC_TEST_STACK(1)
+PROC_TEST_STACK(2)
+PROC_TEST_STACK(3)
+PROC_TEST_STACK(4)
+PROC_TEST_STACK(5)
+PROC_TEST_STACK(6)
+PROC_TEST_STACK(7)
+PROC_TEST_STACK(8)
+
+// Define params to test priority
+#define PROC_PRI_TEST(num) static void proc_pri_test##num(void) \
+{ \
+ struct Process *main_proc = (struct Process *) proc_currentUserData(); \
+ sig_signal(main_proc, SIG_USER##num); \
+} \
+
+// Default priority is 0
+#define PROC_PRI_TEST_INIT(num, proc) \
+do { \
+ struct Process *p = proc_new(proc_pri_test##num, (proc), sizeof(proc_test##num##_stack), proc_test##num##_stack); \
+ proc_setPri(p, num + 1); \
+} while (0)
+
+PROC_TEST_STACK(0)
+PROC_PRI_TEST(0)
+PROC_PRI_TEST(1)
+PROC_PRI_TEST(2)
+
+
+/**
+ * Process scheduling test
+ */
+int proc_testRun(void)