summaryrefslogtreecommitdiff
path: root/libobj/tests/test_obj.c
blob: 89fff6801b37d4c563f47359193a7232e005c262 (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
56
57
58
59
60
61
/* libobj/tests/test_obj.c - Tests for <libobj/obj.h>
 *
 * Copyright (C) 2024-2025  Luke T. Shumaker <lukeshu@lukeshu.com>
 * SPDX-License-Identifier: AGPL-3.0-or-later
 */

#include <libobj/obj.h>

#include "test.h"

/* `lo_inteface frobber` header ***********************************************/

#define frobber_LO_IFACE                        \
	/** Basic function.  */                 \
	LO_FUNC(int, frob)                      \
	/** Function that takes 1 argument.  */ \
	LO_FUNC(int, frob1, int)                \
	/** Function that returns nothing.  */  \
	LO_FUNC(void, frob0)
LO_INTERFACE(frobber)

/* `struct myclass` header ****************************************************/

struct myclass {
	int a;
};
LO_IMPLEMENTATION_H(frobber, struct myclass, myclass)

/* `struct myclass` implementation ********************************************/

LO_IMPLEMENTATION_C(frobber, struct myclass, myclass, static)

static int myclass_frob(struct myclass *self) {
	test_assert(self);
	return self->a;
}

static int myclass_frob1(struct myclass *self, int arg) {
	test_assert(self);
	return arg;
}

static void myclass_frob0(struct myclass *self) {
	test_assert(self);
}

/* main test body *************************************************************/

#define MAGIC1 909837
#define MAGIC2 657441

int main() {
	struct myclass obj = {
		.a = MAGIC1,
	};
	lo_interface frobber iface = lo_box_myclass_as_frobber(&obj);
	test_assert(LO_CALL(iface, frob) == MAGIC1);
	test_assert(LO_CALL(iface, frob1, MAGIC2) == MAGIC2);
	LO_CALL(iface, frob0);
	return 0;
}