[PATCH v3 4/4] test_macros*.c: Simplify with macros macros

Petr Vorel <[email protected]>
Newsgroups gmane.linux.ltp
Message-ID <[email protected]>
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 <[email protected]>
---
 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 <[email protected]>
+ * Copyright (c) 2021 Yang Xu <[email protected]>
+ * 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 <[email protected]>
+ * 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 <[email protected]>
- */
-
-/*
- * 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-xX5NlYq76+e1Z/[email protected]>
+ * 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


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.