Message ID | 20220207211144.1948690-1-ribalda@chromium.org (mailing list archive) |
---|---|
State | New |
Delegated to: | Brendan Higgins |
Headers | show |
Series | [v3,1/6] kunit: Introduce _NULL and _NOT_NULL macros | expand |
On Mon, Feb 7, 2022 at 1:11 PM Ricardo Ribalda <ribalda@chromium.org> wrote: > > Today, when we want to check if a pointer is NULL and not ERR we have > two options: > > KUNIT_EXPECT_TRUE(test, ptr == NULL); > > or > > KUNIT_EXPECT_PTR_NE(test, ptr, (struct mystruct *)NULL); > > Create a new set of macros that take care of NULL checks. > > Reviewed-by: Daniel Latypov <dlatypov@google.com> > Signed-off-by: Ricardo Ribalda <ribalda@chromium.org> > --- > include/kunit/test.h | 88 ++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 88 insertions(+) > > diff --git a/include/kunit/test.h b/include/kunit/test.h > index 00b9ff7783ab..340169723669 100644 > --- a/include/kunit/test.h > +++ b/include/kunit/test.h > @@ -1218,6 +1218,50 @@ do { \ > fmt, \ > ##__VA_ARGS__) > > +/** > + * KUNIT_EXPECT_NULL() - Expects that @ptr is null. > + * @test: The test context object. > + * @ptr: an arbitrary pointer. > + * > + * Sets an expectation that the value that @ptr evaluates to is null. This is > + * semantically equivalent to KUNIT_EXPECT_PTR_EQ(@test, ptr, NULL). > + * See KUNIT_EXPECT_TRUE() for more information. > + */ > +#define KUNIT_EXPECT_NULL(test, ptr) \ > + KUNIT_EXPECT_PTR_EQ_MSG(test, \ > + ptr, \ > + NULL, \ > + NULL) > + > +#define KUNIT_EXPECT_NULL_MSG(test, ptr, fmt, ...) \ > + KUNIT_BINARY_PTR_ASSERTION(test, \ > + KUNIT_EXPECTATION, \ > + ptr, ==, NULL, \ > + fmt, \ > + ##__VA_ARGS__) Sorry, I mentally skipped over this even while reading over it several times. Not sure how. My brain just mentally rewrote it to what I was expecting. I see you copy-pasted KUNIT_EXPECT_PTR_EQ() and then did s/right/NULL. It works, but... These macros would be more in line with their counterparts if we instead did #define KUNIT_EXPECT_NULL(test, ptr) \ KUNIT_EXPECT_NULL_MSG(test, ptr, NULL) instead of having it go through *PTR_EQ_MSG() > + > +/** > + * KUNIT_EXPECT_NOT_NULL() - Expects that @ptr is not null. > + * @test: The test context object. > + * @ptr: an arbitrary pointer. > + * > + * Sets an expectation that the value that @ptr evaluates to is not null. This > + * is semantically equivalent to KUNIT_EXPECT_PTR_NE(@test, ptr, NULL). > + * See KUNIT_EXPECT_TRUE() for more information. > + */ > +#define KUNIT_EXPECT_NOT_NULL(test, ptr) \ > + KUNIT_EXPECT_PTR_NE_MSG(test, \ > + ptr, \ > + NULL, \ > + NULL) ditto here, KUNIT_EXPECT_NOT_NULL_MSG(test, ptr, NULL) would be more consistent. > + > +#define KUNIT_EXPECT_NOT_NULL_MSG(test, ptr, fmt, ...) \ > + KUNIT_BINARY_PTR_ASSERTION(test, \ > + KUNIT_EXPECTATION, \ > + ptr, !=, NULL, \ > + fmt, \ > + ##__VA_ARGS__) > + > /** > * KUNIT_EXPECT_NOT_ERR_OR_NULL() - Expects that @ptr is not null and not err. > * @test: The test context object. > @@ -1485,6 +1529,50 @@ do { \ > fmt, \ > ##__VA_ARGS__) > > +/** > + * KUNIT_ASSERT_NULL() - Asserts that pointers @ptr is null. > + * @test: The test context object. > + * @ptr: an arbitrary pointer. > + * > + * Sets an assertion that the values that @ptr evaluates to is null. This is > + * the same as KUNIT_EXPECT_NULL(), except it causes an assertion > + * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met. > + */ > +#define KUNIT_ASSERT_NULL(test, ptr) \ > + KUNIT_ASSERT_PTR_EQ_MSG(test, \ > + ptr, \ > + NULL, \ > + NULL) > + > +#define KUNIT_ASSERT_NULL_MSG(test, ptr, fmt, ...) \ > + KUNIT_BINARY_PTR_ASSERTION(test, \ > + KUNIT_ASSERTION, \ > + ptr, ==, NULL, \ > + fmt, \ > + ##__VA_ARGS__) > + > +/** > + * KUNIT_ASSERT_NOT_NULL() - Asserts that pointers @ptr is not null. > + * @test: The test context object. > + * @ptr: an arbitrary pointer. > + * > + * Sets an assertion that the values that @ptr evaluates to is not null. This > + * is the same as KUNIT_EXPECT_NOT_NULL(), except it causes an assertion > + * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met. > + */ > +#define KUNIT_ASSERT_NOT_NULL(test, ptr) \ > + KUNIT_ASSERT_PTR_NE_MSG(test, \ > + ptr, \ > + NULL, \ > + NULL) > + > +#define KUNIT_ASSERT_NOT_NULL_MSG(test, ptr, fmt, ...) \ > + KUNIT_BINARY_PTR_ASSERTION(test, \ > + KUNIT_ASSERTION, \ > + ptr, !=, NULL, \ > + fmt, \ > + ##__VA_ARGS__) > + > /** > * KUNIT_ASSERT_NOT_ERR_OR_NULL() - Assertion that @ptr is not null and not err. > * @test: The test context object. > -- > 2.35.0.263.gb82422642f-goog >
diff --git a/include/kunit/test.h b/include/kunit/test.h index 00b9ff7783ab..340169723669 100644 --- a/include/kunit/test.h +++ b/include/kunit/test.h @@ -1218,6 +1218,50 @@ do { \ fmt, \ ##__VA_ARGS__) +/** + * KUNIT_EXPECT_NULL() - Expects that @ptr is null. + * @test: The test context object. + * @ptr: an arbitrary pointer. + * + * Sets an expectation that the value that @ptr evaluates to is null. This is + * semantically equivalent to KUNIT_EXPECT_PTR_EQ(@test, ptr, NULL). + * See KUNIT_EXPECT_TRUE() for more information. + */ +#define KUNIT_EXPECT_NULL(test, ptr) \ + KUNIT_EXPECT_PTR_EQ_MSG(test, \ + ptr, \ + NULL, \ + NULL) + +#define KUNIT_EXPECT_NULL_MSG(test, ptr, fmt, ...) \ + KUNIT_BINARY_PTR_ASSERTION(test, \ + KUNIT_EXPECTATION, \ + ptr, ==, NULL, \ + fmt, \ + ##__VA_ARGS__) + +/** + * KUNIT_EXPECT_NOT_NULL() - Expects that @ptr is not null. + * @test: The test context object. + * @ptr: an arbitrary pointer. + * + * Sets an expectation that the value that @ptr evaluates to is not null. This + * is semantically equivalent to KUNIT_EXPECT_PTR_NE(@test, ptr, NULL). + * See KUNIT_EXPECT_TRUE() for more information. + */ +#define KUNIT_EXPECT_NOT_NULL(test, ptr) \ + KUNIT_EXPECT_PTR_NE_MSG(test, \ + ptr, \ + NULL, \ + NULL) + +#define KUNIT_EXPECT_NOT_NULL_MSG(test, ptr, fmt, ...) \ + KUNIT_BINARY_PTR_ASSERTION(test, \ + KUNIT_EXPECTATION, \ + ptr, !=, NULL, \ + fmt, \ + ##__VA_ARGS__) + /** * KUNIT_EXPECT_NOT_ERR_OR_NULL() - Expects that @ptr is not null and not err. * @test: The test context object. @@ -1485,6 +1529,50 @@ do { \ fmt, \ ##__VA_ARGS__) +/** + * KUNIT_ASSERT_NULL() - Asserts that pointers @ptr is null. + * @test: The test context object. + * @ptr: an arbitrary pointer. + * + * Sets an assertion that the values that @ptr evaluates to is null. This is + * the same as KUNIT_EXPECT_NULL(), except it causes an assertion + * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met. + */ +#define KUNIT_ASSERT_NULL(test, ptr) \ + KUNIT_ASSERT_PTR_EQ_MSG(test, \ + ptr, \ + NULL, \ + NULL) + +#define KUNIT_ASSERT_NULL_MSG(test, ptr, fmt, ...) \ + KUNIT_BINARY_PTR_ASSERTION(test, \ + KUNIT_ASSERTION, \ + ptr, ==, NULL, \ + fmt, \ + ##__VA_ARGS__) + +/** + * KUNIT_ASSERT_NOT_NULL() - Asserts that pointers @ptr is not null. + * @test: The test context object. + * @ptr: an arbitrary pointer. + * + * Sets an assertion that the values that @ptr evaluates to is not null. This + * is the same as KUNIT_EXPECT_NOT_NULL(), except it causes an assertion + * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met. + */ +#define KUNIT_ASSERT_NOT_NULL(test, ptr) \ + KUNIT_ASSERT_PTR_NE_MSG(test, \ + ptr, \ + NULL, \ + NULL) + +#define KUNIT_ASSERT_NOT_NULL_MSG(test, ptr, fmt, ...) \ + KUNIT_BINARY_PTR_ASSERTION(test, \ + KUNIT_ASSERTION, \ + ptr, !=, NULL, \ + fmt, \ + ##__VA_ARGS__) + /** * KUNIT_ASSERT_NOT_ERR_OR_NULL() - Assertion that @ptr is not null and not err. * @test: The test context object.