summaryrefslogtreecommitdiff
path: root/libhw_cr/tests/test_alarmclock.c
blob: 28bcd14e68bcdf84799fa3897ec40965e14499e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/* libhw_cr/tests/test_alarmclock.c - Tests for host_alarmclock.c
 *
 * Copyright (C) 2025  Luke T. Shumaker <lukeshu@lukeshu.com>
 * SPDX-License-Identifier: AGPL-3.0-or-later
 */

#define IMPLEMENTATION_FOR_LIBHW_GENERIC_ALARMCLOCK_H YES
#include <libhw/generic/alarmclock.h>

#define IMPLEMENTATION_FOR_LIBHW_HOST_ALARMCLOCK_H YES
#include <libhw/host_alarmclock.h>

#include "test.h"

static void intrhandler(void *) {}

int main() {
	struct hostclock alarmclock = {
		.clock_id = CLOCK_MONOTONIC,
	};

	int arg1 = 42;
	int arg2 = 67;

	struct alarmclock_trigger trig1 = {};
	struct alarmclock_trigger trig2 = {};

	uint64_t now = hostclock_get_time_ns(&alarmclock);

	hostclock_add_trigger(&alarmclock, &trig1, now+(20*NS_PER_S), intrhandler, &arg1);
	test_assert(alarmclock.queue.front == &trig1);
	test_assert(trig1.front == NULL);
	test_assert(trig1.rear == NULL);
	test_assert(alarmclock.queue.rear == &trig1);

	hostclock_add_trigger(&alarmclock, &trig2, now+(30*NS_PER_S), intrhandler, &arg2);
	test_assert(alarmclock.queue.front == &trig1);
	test_assert(trig1.front == NULL);
	test_assert(trig1.rear == &trig2);
	test_assert(trig2.front == &trig1);
	test_assert(trig2.rear == NULL);
	test_assert(alarmclock.queue.rear == &trig2);

	hostclock_del_trigger(&alarmclock, &trig2);
	test_assert(alarmclock.queue.front == &trig1);
	test_assert(trig1.front == NULL);
	test_assert(trig1.rear == NULL);
	test_assert(alarmclock.queue.rear == &trig1);

	hostclock_del_trigger(&alarmclock, &trig1);
	test_assert(alarmclock.queue.front == NULL);
	test_assert(alarmclock.queue.rear == NULL);

	return 0;
}