xref: /aosp_15_r20/external/ltp/lib/newlib_tests/test_macros02.c (revision 49cdfc7efb34551c7342be41a7384b9c40d7cab7)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Copyright (c) 2020 Cyril Hrubis <[email protected]>
4  * Copyright (c) Linux Test Project, 2021-2024
5  */
6 
7 /*
8  * Test macros:
9  *
10  * - TST_EXP_FAIL
11  * - TST_EXP_FAIL_ARR
12  * - TST_EXP_FAIL2
13  * - TST_EXP_FAIL2_ARR
14  * - TST_EXP_FAIL_PTR_NULL
15  * - TST_EXP_FAIL_PTR_NULL_ARR
16  * - TST_EXP_FAIL_PTR_VOID
17  * - TST_EXP_FAIL_PTR_VOID_ARR
18  */
19 
20 #include "tst_test.h"
21 
fail_fn(void)22 static int fail_fn(void)
23 {
24 	errno = EINVAL;
25 	return -1;
26 }
27 
pass_fn(void)28 static int pass_fn(void)
29 {
30 	return 0;
31 }
32 
inval_ret_fn(void)33 static int inval_ret_fn(void)
34 {
35 	return 42;
36 }
37 
fail_fn_null(void)38 static char *fail_fn_null(void)
39 {
40 	errno = EINVAL;
41 	return NULL;
42 }
43 
fail_fn_void(void)44 static char *fail_fn_void(void)
45 {
46 	errno = EINVAL;
47 	return (void *)-1;
48 }
49 
inval_ret_fn_char(void)50 static char *inval_ret_fn_char(void)
51 {
52 	return (void *)-1;
53 }
54 
pass_fn_char(void)55 static char *pass_fn_char(void)
56 {
57 	return "pass";
58 }
59 
60 #define TEST_MACRO(macro, macro_arr, fail_fn, pass_fn, inval_fn) \
61 	do { \
62 		tst_res(TINFO, "Testing " #macro " macro"); \
63 		macro(fail_fn(), EINVAL, #fail_fn"()"); \
64 		tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
65 		macro(fail_fn(), ENOTTY); /* skip msg parameter */ \
66 		tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
67 		macro(pass_fn(), ENOTTY, #pass_fn"()"); \
68 		tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
69 		macro(inval_fn(), ENOTTY, #inval_fn"()"); \
70 		tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
71 		macro_arr(fail_fn(), exp_errs_pass, ARRAY_SIZE(exp_errs_pass), #fail_fn"()"); \
72 		tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
73 		macro_arr(fail_fn(), exp_errs_fail, ARRAY_SIZE(exp_errs_fail)); /* skip msg parameter */ \
74 		tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
75 	} while (0)
76 
do_test(void)77 static void do_test(void)
78 {
79 	const int exp_errs_pass[] = {ENOTTY, EINVAL};
80 	const int exp_errs_fail[] = {ENOTTY, EISDIR};
81 
82 	TEST_MACRO(TST_EXP_FAIL, TST_EXP_FAIL_ARR, fail_fn, pass_fn, inval_ret_fn);
83 	TEST_MACRO(TST_EXP_FAIL2, TST_EXP_FAIL2_ARR, fail_fn, pass_fn, inval_ret_fn);
84 	TEST_MACRO(TST_EXP_FAIL_PTR_NULL, TST_EXP_FAIL_PTR_NULL_ARR, fail_fn_null,
85 			   pass_fn_char, inval_ret_fn_char);
86 	TEST_MACRO(TST_EXP_FAIL_PTR_VOID, TST_EXP_FAIL_PTR_VOID_ARR, fail_fn_void,
87 			   pass_fn_char, inval_ret_fn_char);
88 }
89 
90 static struct tst_test test = {
91 	.test_all = do_test,
92 };
93