All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Latypov <dlatypov@google.com>
To: David Gow <davidgow@google.com>
Cc: Brendan Higgins <brendanhiggins@google.com>,
	Shuah Khan <skhan@linuxfoundation.org>,
	KUnit Development <kunit-dev@googlegroups.com>,
	"open list:KERNEL SELFTEST FRAMEWORK" 
	<linux-kselftest@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 2/2] kunit: Assign strings to 'const char*' in STREQ assertions
Date: Fri, 7 May 2021 00:28:10 -0700	[thread overview]
Message-ID: <CAGS_qxqOCUAKx7+0DBnsThVWskqPejq6oHzr4F+nvJALU+F1zw@mail.gmail.com> (raw)
In-Reply-To: <20210507050908.1008686-2-davidgow@google.com>

On Thu, May 6, 2021 at 10:09 PM David Gow <davidgow@google.com> wrote:
>
> Currently, the KUNIT_EXPECT_STREQ() and related macros assign both
> string arguments to variables of their own type (via typeof()). This
> seems to be to prevent the macro argument from being evaluated multiple
> times.
>
> However, yhis doesn't work if one of these is a fixed-length character
nit: if you ever send a v2 of this patch, s/yhis/this

> array, rather than a character pointer, as (for example) char[16] will
> always allocate a new string.
>
> By always using 'const char*' (the type strcmp expects), we're always
> just taking a pointer to the string, which works even with character
> arrays.
>
> Signed-off-by: David Gow <davidgow@google.com>

Reviewed-by: Daniel Latypov <dlatypov@google.com>

I'm very happy to see this patch.
This makes code that looks obviously correct actually work.

Somewhat tangential: there are several casts that are no longer needed
after this in the docs.
I think the following gets rid of all of them. Should it perhaps go in
a chain with this patch?
I.e. if the first one is too controversial and we want to go ahead
split this patch off from it.

diff --git a/Documentation/dev-tools/kunit/usage.rst
b/Documentation/dev-tools/kunit/usage.rst
index 650f99590df5..756747417a19 100644
--- a/Documentation/dev-tools/kunit/usage.rst
+++ b/Documentation/dev-tools/kunit/usage.rst
@@ -465,10 +465,9 @@ fictitious example for ``sha1sum(1)``

 .. code-block:: c

-       /* Note: the cast is to satisfy overly strict type-checking. */
        #define TEST_SHA1(in, want) \
                sha1sum(in, out); \
-               KUNIT_EXPECT_STREQ_MSG(test, (char *)out, want,
"sha1sum(%s)", in);
+               KUNIT_EXPECT_STREQ_MSG(test, out, want, "sha1sum(%s)", in);

        char out[40];
        TEST_SHA1("hello world",  "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed");
@@ -507,7 +506,7 @@ In some cases, it can be helpful to write a
*table-driven test* instead, e.g.
        };
        for (i = 0; i < ARRAY_SIZE(cases); ++i) {
                sha1sum(cases[i].str, out);
-               KUNIT_EXPECT_STREQ_MSG(test, (char *)out, cases[i].sha1,
+               KUNIT_EXPECT_STREQ_MSG(test, out, cases[i].sha1,
                                      "sha1sum(%s)", cases[i].str);
        }

@@ -568,7 +567,7 @@ Reusing the same ``cases`` array from above, we
can write the test as a
                struct sha1_test_case *test_param = (struct
sha1_test_case *)(test->param_value);

                sha1sum(test_param->str, out);
-               KUNIT_EXPECT_STREQ_MSG(test, (char *)out, test_param->sha1,
+               KUNIT_EXPECT_STREQ_MSG(test, out, test_param->sha1,
                                      "sha1sum(%s)", test_param->str);

        }

> ---
>  include/kunit/test.h | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/include/kunit/test.h b/include/kunit/test.h
> index 4c56ffcb7403..b68c61348121 100644
> --- a/include/kunit/test.h
> +++ b/include/kunit/test.h
> @@ -1128,8 +1128,8 @@ do {                                                                             \
>                                    fmt,                                        \
>                                    ...)                                        \
>  do {                                                                          \
> -       typeof(left) __left = (left);                                          \
> -       typeof(right) __right = (right);                                       \
> +       const char *__left = (left);                                           \
> +       const char *__right = (right);                                 \
>                                                                                \
>         KUNIT_ASSERTION(test,                                                  \
>                         strcmp(__left, __right) op 0,                          \
> --
> 2.31.1.607.g51e8a6a459-goog
>

  reply	other threads:[~2021-05-07  7:28 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-07  5:09 [PATCH 1/2] kunit: Do not typecheck binary assertions David Gow
2021-05-07  5:09 ` [PATCH 2/2] kunit: Assign strings to 'const char*' in STREQ assertions David Gow
2021-05-07  7:28   ` Daniel Latypov [this message]
2021-05-07 20:07   ` Brendan Higgins
2021-05-07  7:25 ` [PATCH 1/2] kunit: Do not typecheck binary assertions Daniel Latypov
2021-05-07 20:05 ` Brendan Higgins
2021-05-08  5:56   ` David Gow

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAGS_qxqOCUAKx7+0DBnsThVWskqPejq6oHzr4F+nvJALU+F1zw@mail.gmail.com \
    --to=dlatypov@google.com \
    --cc=brendanhiggins@google.com \
    --cc=davidgow@google.com \
    --cc=kunit-dev@googlegroups.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=skhan@linuxfoundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.