/* libobj/tests/test_obj.c - Tests for * * Copyright (C) 2024-2025 Luke T. Shumaker * SPDX-License-Identifier: AGPL-3.0-or-later */ #include #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; }