[LTP] [PATCH v3 4/4] test_macros*.c: Simplify with macros macros
Petr Vorel
pvorel@suse.cz
Tue Aug 11 17:52:02 CEST 2026
Use similar macros as is used in test_macros02.c in other tests
to reduce duplicity (and slightly degrease readability).
Also
* Merge test_macros04.c into test_macros01.c
* Increase coverage by skipping msg parameter
* Test also TST_EXP_FD_OR_FAIL()
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
lib/newlib_tests/test_macros01.c | 57 +++++++++++++++++++------------
lib/newlib_tests/test_macros03.c | 43 ++++++++++++-----------
lib/newlib_tests/test_macros04.c | 58 --------------------------------
lib/newlib_tests/test_macros06.c | 32 +++++++++++-------
4 files changed, 76 insertions(+), 114 deletions(-)
delete mode 100644 lib/newlib_tests/test_macros04.c
diff --git a/lib/newlib_tests/test_macros01.c b/lib/newlib_tests/test_macros01.c
index c04c943637..d6fdac7bd9 100644
--- a/lib/newlib_tests/test_macros01.c
+++ b/lib/newlib_tests/test_macros01.c
@@ -1,21 +1,30 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (c) 2020 Cyril Hrubis <chrubis@suse.cz>
+ * Copyright (c) 2021 Yang Xu <xuyang2018.jy@fujitsu.com>
+ * Copyright (c) Linux Test Project, 2026
*/
/*
- * Test TST_EXP_FD and TST_EXP_FD_SILENT macro.
+ * Test macros:
+ *
+ * - TST_EXP_PASS
+ * - TST_EXP_PASS_SILENT
+ * - TST_EXP_FD
+ * - TST_EXP_FD_SILENT
+ * - TST_EXP_PID
+ * - TST_EXP_PID_SILENT
*/
#include "tst_test.h"
-static int fail_fd(void)
+static int fail_fn(void)
{
errno = EINVAL;
return -1;
}
-static int pass_fd(void)
+static int pass_fn(void)
{
return 42;
}
@@ -30,27 +39,31 @@ static int zero_val(void)
return 0;
}
+#define TEST_MACRO(macro, fail_fn, pass_fn, inval_fn, zero_val_fn) \
+ do { \
+ tst_res(TINFO, "* Testing " #macro "() macro"); \
+ macro(fail_fn(), #fail_fn"()"); \
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
+ macro(fail_fn()); /* skip msg parameter */ \
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
+ macro(pass_fn(), #pass_fn"()"); \
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
+ macro(inval_fn(), #inval_fn"()"); \
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
+ macro(zero_val_fn(), #zero_val_fn"()"); \
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
+ } while (0)
+
static void do_test(void)
{
- tst_res(TINFO, "Testing TST_EXP_FD macro");
- TST_EXP_FD(fail_fd(), "fail_fd()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_FD(pass_fd(), "pass_fd()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_FD(inval_val(), "inval_val()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_FD(zero_val(), "zero_val()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
-
- tst_res(TINFO, "Testing TST_EXP_FD_SILENT macro");
- TST_EXP_FD_SILENT(fail_fd(), "fail_fd()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_FD_SILENT(pass_fd(), "%s", "pass_fd()");
- tst_res(TINFO, "TST_PASS = %i from TST_EXP_FD_SILENT(pass_fd, ...)", TST_PASS);
- TST_EXP_FD_SILENT(inval_val(), "inval_val()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_FD_SILENT(zero_val(), "zero_val()");
- tst_res(TINFO, "TST_PASS = %i from TST_EXP_FD_SILENT(zero_val, ...)", TST_PASS);
+ TEST_MACRO(TST_EXP_PASS, fail_fn, pass_fn, inval_val, zero_val);
+ TEST_MACRO(TST_EXP_PASS_SILENT, fail_fn, pass_fn, inval_val, zero_val);
+
+ TEST_MACRO(TST_EXP_FD, fail_fn, pass_fn, inval_val, zero_val);
+ TEST_MACRO(TST_EXP_FD_SILENT, fail_fn, pass_fn, inval_val, zero_val);
+
+ TEST_MACRO(TST_EXP_PID, fail_fn, pass_fn, inval_val, zero_val);
+ TEST_MACRO(TST_EXP_PID_SILENT, fail_fn, pass_fn, inval_val, zero_val);
}
static struct tst_test test = {
diff --git a/lib/newlib_tests/test_macros03.c b/lib/newlib_tests/test_macros03.c
index 2a281bafcd..536240620d 100644
--- a/lib/newlib_tests/test_macros03.c
+++ b/lib/newlib_tests/test_macros03.c
@@ -1,10 +1,14 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (c) 2020 Cyril Hrubis <chrubis@suse.cz>
+ * Copyright (c) Linux Test Project, 2026
*/
/*
- * Test TST_EXP_PASS and TST_EXP_PASS_SILENT macro.
+ * Test macros:
+ *
+ * - TST_EXP_PASS_OR_FAIL
+ * - TST_EXP_FD_OR_FAIL
*/
#include "tst_test.h"
@@ -22,33 +26,28 @@ static int pass_fn(void)
return 0;
}
-static int inval_ret_fn(void)
+static int pass_fd(void)
{
return 42;
}
+#define TEST_MACRO(macro, fail_fn, pass_fn, fail_err) \
+ do { \
+ tst_res(TINFO, "* Testing " #macro "() macro"); \
+ macro(fail_fn(), fail_err, #fail_fn"()"); \
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
+ macro(fail_fn(), fail_err); /* skip msg parameter */ \
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
+ macro(pass_fn(), 0, #pass_fn"()"); \
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
+ macro(fail_fn(), 0); /* skip msg parameter */ \
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
+ } while (0)
+
static void do_test(void)
{
- tst_res(TINFO, "Testing TST_EXP_PASS macro");
- TST_EXP_PASS(fail_fn(), "fail_fn()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_PASS(pass_fn(), "pass_fn()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_PASS(inval_ret_fn(), "inval_ret_fn()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
-
- tst_res(TINFO, "Testing TST_EXP_PASS_SILENT macro");
- TST_EXP_PASS_SILENT(fail_fn(), "fail_fn()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_PASS_SILENT(pass_fn(), "pass_fn()");
- tst_res(TINFO, "TST_PASS = %i from TST_EXP_PASS_SILENT(pass_fn, ...)", TST_PASS);
- TST_EXP_PASS_SILENT(inval_ret_fn(), "inval_ret_fn()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
-
- tst_res(TINFO, "Testing TST_EXP_PASS_OR_FAIL() macro (pass)");
- TST_EXP_PASS_OR_FAIL(pass_fn(), 0, "pass_fn()");
- tst_res(TINFO, "Testing TST_EXP_PASS_OR_FAIL() macro (fail)");
- TST_EXP_PASS_OR_FAIL(fail_fn(), ERR_ERRNO, "fail_fn()");
+ TEST_MACRO(TST_EXP_PASS_OR_FAIL, fail_fn, pass_fn, ERR_ERRNO);
+ TEST_MACRO(TST_EXP_FD_OR_FAIL, fail_fn, pass_fd, ERR_ERRNO);
}
static struct tst_test test = {
diff --git a/lib/newlib_tests/test_macros04.c b/lib/newlib_tests/test_macros04.c
deleted file mode 100644
index e0111807fe..0000000000
--- a/lib/newlib_tests/test_macros04.c
+++ /dev/null
@@ -1,58 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * Copyright (c) 2021 Yang Xu <xuyang2018.jy@fujitsu.com>
- */
-
-/*
- * Test TST_EXP_PID and TST_EXP_PID_SILENT macro.
- */
-
-#include "tst_test.h"
-
-static int fail_pid(void)
-{
- errno = EINVAL;
- return -1;
-}
-
-static int pass_pid(void)
-{
- return 42;
-}
-
-static int inval_val(void)
-{
- return -42;
-}
-
-static int zero_val(void)
-{
- return 0;
-}
-
-static void do_test(void)
-{
- tst_res(TINFO, "Testing TST_EXP_PID macro");
- TST_EXP_PID(fail_pid(), "fail_pid()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_PID(pass_pid(), "pass_pid()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_PID(inval_val(), "inval_val()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_PID(zero_val(), "zero_val()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
-
- tst_res(TINFO, "Testing TST_EXP_PID_SILENT macro");
- TST_EXP_PID_SILENT(fail_pid(), "fail_pid()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_PID_SILENT(pass_pid(), "%s", "pass_pid()");
- tst_res(TINFO, "TST_PASS = %i from TST_EXP_PID_SILENT(pass_pid, ...)", TST_PASS);
- TST_EXP_PID_SILENT(inval_val(), "inval_val()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_PID_SILENT(zero_val(), "zero_val()");
- tst_res(TINFO, "TST_PASS = %i from TST_EXP_PID_SILENT(zero_val, ...)", TST_PASS);
-}
-
-static struct tst_test test = {
- .test_all = do_test,
-};
diff --git a/lib/newlib_tests/test_macros06.c b/lib/newlib_tests/test_macros06.c
index 4d300d7977..621014a72a 100644
--- a/lib/newlib_tests/test_macros06.c
+++ b/lib/newlib_tests/test_macros06.c
@@ -1,10 +1,14 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (c) 2021 zhanglianjie <zhanglianjie@uniontech.com>
+ * Copyright (c) Linux Test Project, 2026
*/
/*
- * Test TST_EXP_VAL and TST_EXP_VAL_SILENT macro.
+ * Test macros:
+ *
+ * - TST_EXP_VAL
+ * - TST_EXP_VAL_SILENT
*/
#include "tst_test.h"
@@ -20,19 +24,23 @@ static int pass_val(void)
return 42;
}
+#define TEST_MACRO(macro, fail_fn, pass_fn, pass_val, fail_err) \
+ do { \
+ tst_res(TINFO, "* Testing " #macro "() macro"); \
+ macro(fail_fn(), fail_err, #fail_fn"()"); \
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
+ macro(fail_fn(), fail_err); /* skip msg parameter */ \
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
+ macro(pass_fn(), pass_val, #pass_fn"()"); \
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
+ macro(fail_fn(), pass_val); /* skip msg parameter */ \
+ tst_res(TINFO, "TST_PASS = %i", TST_PASS); \
+ } while (0)
+
static void do_test(void)
{
- tst_res(TINFO, "Testing TST_EXP_VAL macro");
- TST_EXP_VAL(fail_val(), 40, "fail_val()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
- TST_EXP_VAL(pass_val(), 42, "pass_val()");
- tst_res(TINFO, "TST_PASS = %i", TST_PASS);
-
- tst_res(TINFO, "Testing TST_EXP_VAL_SILENT macro");
- TST_EXP_VAL_SILENT(fail_val(), 40, "fail_val()");
- tst_res(TINFO, "TST_PASS = %i from TST_EXP_VAL_SILENT(fail_val, ...)", TST_PASS);
- TST_EXP_VAL_SILENT(pass_val(), 42, "pass_val()");
- tst_res(TINFO, "TST_PASS = %i from TST_EXP_VAL_SILENT(pass_val, ...)", TST_PASS);
+ TEST_MACRO(TST_EXP_VAL, fail_val, pass_val, 42, 40);
+ TEST_MACRO(TST_EXP_VAL_SILENT, fail_val, pass_val, 42, 40);
}
static struct tst_test test = {
--
2.55.0
More information about the ltp
mailing list