[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