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