diff mbox series

test_macros: TST_EXP_EXPR() add auto stringification

Message ID 20220217142730.19726-1-chrubis@suse.cz
State Superseded
Headers show
Series test_macros: TST_EXP_EXPR() add auto stringification | expand

Commit Message

Cyril Hrubis Feb. 17, 2022, 2:27 p.m. UTC
This unifies the behavior with the rest of the TST_EXP_*() macros that
auto-stringify their parameters in case that no format string is
supplied.

It's actually useful in cases where there is clear from the variables
what has been asserted such as:

static void run(void)
{
	siginfo_t infop;

	...

	TST_EXP_EXPR(infop.si_pid == child_pid);

	...
}

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
 include/tst_test_macros.h | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

Comments

Petr Vorel Feb. 17, 2022, 4:39 p.m. UTC | #1
Hi Cyril,

Reviewed-by: Petr Vorel <pvorel@suse.cz>
Good idea.

BTW I'm thinking to add some comments to "top level" macros.
because it's getting hard to read these macros.

Kind regards,
Petr
Cyril Hrubis Feb. 18, 2022, 9:54 a.m. UTC | #2
Hi!
> Reviewed-by: Petr Vorel <pvorel@suse.cz>
> Good idea.

It occured to me that this is probably not the best result though, since
in the case of the failure it does not print the expected and actual
value. So maybe it would be better to add TST_EXP_EQ() macro instead. I
will send a patch later on.

> BTW I'm thinking to add some comments to "top level" macros.
> because it's getting hard to read these macros.

Well yes, it's getting a bit hard to read indeed.
Petr Vorel Feb. 18, 2022, 10:31 a.m. UTC | #3
Hi Cyril,

> Hi!
> > Reviewed-by: Petr Vorel <pvorel@suse.cz>
> > Good idea.

> It occured to me that this is probably not the best result though, since
> in the case of the failure it does not print the expected and actual
> value. So maybe it would be better to add TST_EXP_EQ() macro instead. I
> will send a patch later on.

I wonder can't we have both - print stringified parameters and also their
values? Would it be too confusing?

> > BTW I'm thinking to add some comments to "top level" macros.
> > because it's getting hard to read these macros.

> Well yes, it's getting a bit hard to read indeed.
I mean it's good to have documented in our wiki. But even we document all
macros most of us will endup reading the header, thus why useful to document
at least end user ("top level") macros.

Kind regards,
Petr
Cyril Hrubis Feb. 18, 2022, 10:35 a.m. UTC | #4
Hi!
> > It occured to me that this is probably not the best result though, since
> > in the case of the failure it does not print the expected and actual
> > value. So maybe it would be better to add TST_EXP_EQ() macro instead. I
> > will send a patch later on.
> 
> I wonder can't we have both - print stringified parameters and also their
> values? Would it be too confusing?

Couldn't be done unless you know the types beforehand. I've send another
patch that adds TST_EXP_EQ_*() macros please have a look at that one
instead.
diff mbox series

Patch

diff --git a/include/tst_test_macros.h b/include/tst_test_macros.h
index 8893dbf0e..3b3b1b17e 100644
--- a/include/tst_test_macros.h
+++ b/include/tst_test_macros.h
@@ -211,7 +211,10 @@  extern void *TST_RET_PTR;
 #define TST_EXP_FAIL2_SILENT(SCALL, ERRNO, ...) \
 	TST_EXP_FAIL_SILENT_(TST_RET >= 0, SCALL, #SCALL, ERRNO, ##__VA_ARGS__)
 
-#define TST_EXP_EXPR(EXPR, FMT, ...)						\
-	tst_res_(__FILE__, __LINE__, (EXPR) ? TPASS : TFAIL, "Expect: " FMT, ##__VA_ARGS__);
+#define TST_EXP_EXPR_(EXPR, SEXPR, ...) \
+	tst_res_(__FILE__, __LINE__, (EXPR) ? TPASS : TFAIL, \
+		TST_FMT_("Expect: " TST_2_(dummy, ##__VA_ARGS__, SEXPR), __VA_ARGS__))
+
+#define TST_EXP_EXPR(EXPR, ...) TST_EXP_EXPR_(EXPR, #EXPR, ##__VA_ARGS__)
 
 #endif	/* TST_TEST_MACROS_H__ */