1#ifdef TEST_TIMER_DEFER
2
3#include <mem/alloc.h>
4#include <sch/sched.h>
5#include <stdbool.h>
6#include <stddef.h>
7#include <stdint.h>
8#include <string.h>
9#include <test.h>
10#include <thread/workqueue.h>
11#include <time/spin_sleep.h>
12#include <time/time.h>
13
14static bool defer_worked = false;
15static uint64_t enqueue_ms;
16static uint64_t finish_ms;
17char msg[100] = {0};
18
19static void defer_func(void *boo, void *unused) {
20 (void) boo, (void) unused;
21 finish_ms = time_get_ms();
22
23 snprintf(buffer: msg, buffer_len: 100, format: "Start ms was %d, end ms was %d, took %d ms", enqueue_ms,
24 finish_ms, finish_ms - enqueue_ms);
25
26 test_info("Defer complete");
27 test_info(msg);
28 defer_worked = true;
29}
30
31TEST_DECLARE(defer_test, .tier = TEST_TIER_UNIT) {
32 return TEST_SUCCESS;
33 defer_enqueue(func: defer_func, WORK_ARGS(NULL, NULL), delay_ms: 5);
34 enqueue_ms = time_get_ms();
35 sleep_spin_ms(msec: 100);
36}
37
38#endif
39