On 8/2/22 15:15, 'Daniel Latypov' via KUnit Development wrote: > On Tue, Aug 2, 2022 at 9:19 AM André Almeida <andrealmeid@xxxxxxxxxx> 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@xxxxxxxxxx> >>> --- >>> 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. Thank you for the note, I'll address it at v2. > >>> + >>> /* 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! > Yep, that's my bad! > 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 :\ This is a hard one also. I believe that use KUNIT_EXPECT_ARREQ(test, expected, expected, sizeof(expected)); is more compliant to the memcpy/memset/memcmp signature. Moreover, this problem also occur for the KUNIT_EXPECT_EQ(test, memcmp(expected, expected, sizeof(expected)), 0); I believe that the number of array elements will make it easier for users to avoid mistakes. I'll change it internally for size_bytes = (size) * sizeof((left)[0]) on v2. Best Regards, - Maíra Canal >