On Sun, May 4, 2025 at 8:23 PM Tamir Duberstein tamird@gmail.com wrote:
I see. Up to you, obviously, but ISTM that this degree of freedom is unnecessary, but perhaps there's a benefit I'm underappreciating?
Well, having this allows one to write code like the rest of the kernel code, instead of, say, `.unwrap()`ing or `assert!`ing everywhere.
So easier to read, easier to copy-paste from normal code, and people (especially those learning) wouldn't get accustomed to seeing `.unwrap()`s etc. everywhere.
Having said that, C KUnit uses the macros for things that require stopping the test, even if "unrelated" to the actual test, and it does not look like normal code, of course. They do have `->init()` which can return a failure, but not the test cases themselves.
David perhaps has some advice here. Perhaps test functions being fallible (like returning `int`) were considered (or asserts for "unrelated" things) for C at some point and discarded.
The custom `?` is quite tempting, to get the best of both worlds, assuming we could make it work well.
Even without this change, couldn't you apply
macro_rules! format { ($($f:tt)*) => ({
&*String::from_fmt(kernel::fmt!($($f)*))
}CString::try_from_fmt(kernel::fmt!($($f)*)).unwrap().to_str().unwrap() })
and achieve roughly the same reduction in line count in the test module?
Sure, the line would need to change again later, but that is fine too, we can do a separate commit.
Cheers, Miguel