Messages in this thread | | | From | Daniel Latypov <> | Date | Tue, 2 Aug 2022 11:15:30 -0700 | Subject | Re: [PATCH 2/3] kunit: add KUnit array assertions to the example_all_expect_macros_test |
| |
On Tue, Aug 2, 2022 at 9:19 AM André Almeida <andrealmeid@riseup.net> wrote: > Às 13:12 de 02/08/22, Maíra Canal escreveu: > > Increament the example_all_expect_macros_test with the > > KUNIT_EXPECT_ARREQ and KUNIT_EXPECT_ARRNEQ macros by creating a test > > with array assertions. > > > > Signed-off-by: Maíra Canal <mairacanal@riseup.net> > > --- > > lib/kunit/kunit-example-test.c | 7 +++++++ > > 1 file changed, 7 insertions(+) > > > > diff --git a/lib/kunit/kunit-example-test.c b/lib/kunit/kunit-example-test.c > > index f8fe582c9e36..fc81a45d9cbc 100644 > > --- a/lib/kunit/kunit-example-test.c > > +++ b/lib/kunit/kunit-example-test.c > > @@ -86,6 +86,9 @@ static void example_mark_skipped_test(struct kunit *test) > > */ > > static void example_all_expect_macros_test(struct kunit *test) > > { > > + const u32 array[] = { 0x0F, 0xFF }; > > + const u32 expected[] = { 0x1F, 0xFF };
Given the distance between the definition and their use, perhaps we can give them clearer names. E.g. array + diff_array, or array1 + array2, etc.
I think something to indicate they're arrays and that they're different. The current name `expected` is a bit unclear.
> > + > > /* Boolean assertions */ > > KUNIT_EXPECT_TRUE(test, true); > > KUNIT_EXPECT_FALSE(test, false); > > @@ -109,6 +112,10 @@ static void example_all_expect_macros_test(struct kunit *test) > > KUNIT_EXPECT_STREQ(test, "hi", "hi"); > > KUNIT_EXPECT_STRNEQ(test, "hi", "bye"); > > > > + /* Array assertions */ > > + KUNIT_EXPECT_ARREQ(test, expected, expected, 2); > > + KUNIT_EXPECT_ARRNEQ(test, array, expected, 2); > > ARRAY_SIZE() is usually better than constants is this case.
Note: that's actually incorrect!
Ah right, this was the other blocker I had in mind. I wasn't sure how we'd handle the size parameter.
Users might think ARRAY_SIZE() is fine and copy-paste it. But the size parameter is in units of bytes, not array elements! If the element types are not 1 byte, it'll silently not compare the full array.
We'd want people to use KUNIT_EXPECT_ARREQ(test, expected, expected, sizeof(expected));
But this doesn't work for `u32 *array`, since it'll silently just compare 1 byte if people get them mixed up.
I don't know how we make a maximally fool-proof version of this macro :\
| |