xref: /freebsd/sys/contrib/openzfs/tests/unit/unit.h (revision d9497217456002b0ddad3cd319570d0b098daa29)
1*d9497217SMartin Matuska // SPDX-License-Identifier: CDDL-1.0
2*d9497217SMartin Matuska /*
3*d9497217SMartin Matuska  * This file and its contents are supplied under the terms of the
4*d9497217SMartin Matuska  * Common Development and Distribution License ("CDDL"), version 1.0.
5*d9497217SMartin Matuska  * You may only use this file in accordance with the terms of version
6*d9497217SMartin Matuska  * 1.0 of the CDDL.
7*d9497217SMartin Matuska  *
8*d9497217SMartin Matuska  * A full copy of the text of the CDDL should have accompanied this
9*d9497217SMartin Matuska  * source.  A copy of the CDDL is also available via the Internet at
10*d9497217SMartin Matuska  * http://www.illumos.org/license/CDDL.
11*d9497217SMartin Matuska  */
12*d9497217SMartin Matuska 
13*d9497217SMartin Matuska /*
14*d9497217SMartin Matuska  * Copyright (c) 2026, TrueNAS.
15*d9497217SMartin Matuska  */
16*d9497217SMartin Matuska 
17*d9497217SMartin Matuska #ifndef UNIT_H
18*d9497217SMartin Matuska #define	UNIT_H
19*d9497217SMartin Matuska 
20*d9497217SMartin Matuska #include "munit.h"
21*d9497217SMartin Matuska 
22*d9497217SMartin Matuska /* test/suite definition helpers */
23*d9497217SMartin Matuska 
24*d9497217SMartin Matuska /* single element in a MunitTest array */
25*d9497217SMartin Matuska #define	_UNIT_TEST(name, func, params, ...)				\
26*d9497217SMartin Matuska 	{ (name), (func), NULL, NULL, MUNIT_TEST_OPTION_NONE,	\
27*d9497217SMartin Matuska 	(MunitParameterEnum*)(params)  }
28*d9497217SMartin Matuska #define	UNIT_TEST(name, func, ...)				\
29*d9497217SMartin Matuska 	_UNIT_TEST(name, func, ##__VA_ARGS__, NULL)
30*d9497217SMartin Matuska 
31*d9497217SMartin Matuska /* single element in a MunitParameterEnum array */
32*d9497217SMartin Matuska #define	UNIT_PARAM(name, ...)	\
33*d9497217SMartin Matuska 	{ (char *)(name), (char **)(const char *[]) { __VA_ARGS__, NULL } }
34*d9497217SMartin Matuska 
35*d9497217SMartin Matuska /* shortcut for truthy tests */
36*d9497217SMartin Matuska #define	unit_true(a)	munit_assert_true(a)
37*d9497217SMartin Matuska #define	unit_false(a)	munit_assert_false(a)
38*d9497217SMartin Matuska 
39*d9497217SMartin Matuska /* shortcut for zero test */
40*d9497217SMartin Matuska #define	unit_zero(a)	munit_assert_uint64((a), ==, 0)
41*d9497217SMartin Matuska 
42*d9497217SMartin Matuska /* shortcuts for integer comparisons */
43*d9497217SMartin Matuska #define	_unit_op(a, op, b)	munit_assert_uint64((a), op, (b))
44*d9497217SMartin Matuska 
45*d9497217SMartin Matuska #define	unit_eq(a, b)	_unit_op((a), ==, (b))
46*d9497217SMartin Matuska #define	unit_ne(a, b)	_unit_op((a), !=, (b))
47*d9497217SMartin Matuska #define	unit_le(a, b)	_unit_op((a), <=, (b))
48*d9497217SMartin Matuska #define	unit_ge(a, b)	_unit_op((a), >=, (b))
49*d9497217SMartin Matuska #define	unit_lt(a, b)	_unit_op((a), <,  (b))
50*d9497217SMartin Matuska #define	unit_gt(a, b)	_unit_op((a), >,  (b))
51*d9497217SMartin Matuska 
52*d9497217SMartin Matuska /* shortcuts for string comparisons */
53*d9497217SMartin Matuska #define	unit_str_eq(a, b)	munit_assert_string_equal(a, b)
54*d9497217SMartin Matuska #define	unit_str_ne(a, b)	munit_assert_string_not_equal(a, b)
55*d9497217SMartin Matuska 
56*d9497217SMartin Matuska /* shortcuts for error-returning function call */
57*d9497217SMartin Matuska #define	unit_ok(a)	munit_assert_int((a), ==, 0)
58*d9497217SMartin Matuska #define	unit_err(a, e)	munit_assert_int((a), ==, (e))
59*d9497217SMartin Matuska 
60*d9497217SMartin Matuska /* helpers to generate useful random data */
61*d9497217SMartin Matuska extern uint64_t unit_rand_uint64(void);
62*d9497217SMartin Matuska extern char *unit_rand_str(char *buf, size_t bufsz);
63*d9497217SMartin Matuska 
64*d9497217SMartin Matuska #endif /* UNIT_H */
65