All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v2 11/14] qlit: improve QLit dict vs qdict comparison
Date: Wed, 30 Aug 2017 14:35:44 +0200	[thread overview]
Message-ID: <874lspgrmn.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <20170825105913.4060-12-marcandre.lureau@redhat.com> ("Marc-André Lureau"'s message of "Fri, 25 Aug 2017 12:59:10 +0200")

Marc-André Lureau <marcandre.lureau@redhat.com> writes:

> Verify that all qdict values are covered.
>
> (a previous iteration of this patch created a copy of qdict to remove
> all checked elements, verifying no duplicates exist in the literal
> qdict, however this is a programming error, and a size comparison
> should be enough)

The parenthesis confused me, because I wasn't sure about the exact
meaning of "a previous iteration of this patch".  I tried to find a
prior commit, but it looks like you're really talking about v1.
Confused me, because I don't expect commit messages discussing previous
iterations.

What about:

    qlit: Tighten QLit dict vs qdict comparison

    We check that all members of the QLit dictionary are also in the
    QDict.  We neglect to check the other direction.

    Comparing the number of members suffices, because QDict can't
    contain duplicate members, and putting duplicates in a QLit is a
    programming error.

> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  qobject/qlit.c     | 37 +++++++++++++++++++++++--------------
>  tests/check-qlit.c |  7 +++++++
>  2 files changed, 30 insertions(+), 14 deletions(-)
>
> diff --git a/qobject/qlit.c b/qobject/qlit.c
> index b1d9146220..dc0015f76c 100644
> --- a/qobject/qlit.c
> +++ b/qobject/qlit.c
> @@ -41,6 +41,27 @@ static void compare_helper(QObject *obj, void *opaque)
>          qlit_equal_qobject(&helper->objs[helper->index++], obj);
>  }
>  
> +static bool qlit_equal_qdict(const QLitObject *lhs, const QDict *qdict)
> +{
> +    int i;
> +
> +    for (i = 0; lhs->value.qdict[i].key; i++) {
> +        QObject *obj = qdict_get(qdict, lhs->value.qdict[i].key);
> +
> +        if (!qlit_equal_qobject(&lhs->value.qdict[i].value, obj)) {
> +            return false;
> +        }
> +    }
> +
> +    /* Note: the literal qdict must not contain duplicates, this is
> +     * considered a programming error and it isn't checked here. */
> +    if (qdict_size(qdict) != i) {
> +        return false;
> +    }
> +
> +    return true;
> +}
> +
>  bool qlit_equal_qobject(const QLitObject *lhs, const QObject *rhs)
>  {
>      if (!rhs || lhs->type != qobject_type(rhs)) {
> @@ -55,20 +76,8 @@ bool qlit_equal_qobject(const QLitObject *lhs, const QObject *rhs)
>      case QTYPE_QSTRING:
>          return (strcmp(lhs->value.qstr,
>                         qstring_get_str(qobject_to_qstring(rhs))) == 0);
> -    case QTYPE_QDICT: {
> -        int i;
> -
> -        for (i = 0; lhs->value.qdict[i].key; i++) {
> -            QObject *obj = qdict_get(qobject_to_qdict(rhs),
> -                                     lhs->value.qdict[i].key);
> -
> -            if (!qlit_equal_qobject(&lhs->value.qdict[i].value, obj)) {
> -                return false;
> -            }
> -        }
> -
> -        return true;
> -    }
> +    case QTYPE_QDICT:
> +        return qlit_equal_qdict(lhs, qobject_to_qdict(rhs));
>      case QTYPE_QLIST: {
>          QListCompareHelper helper;
>  
> diff --git a/tests/check-qlit.c b/tests/check-qlit.c
> index 47fde92a46..5d9558dfd9 100644
> --- a/tests/check-qlit.c
> +++ b/tests/check-qlit.c
> @@ -28,6 +28,11 @@ static QLitObject qlit = QLIT_QDICT(((QLitDictEntry[]) {
>      { },
>  }));
>  
> +static QLitObject qlit_foo = QLIT_QDICT(((QLitDictEntry[]) {
> +    { "foo", QLIT_QNUM(42) },
> +    { },
> +}));
> +
>  static QObject *make_qobject(void)
>  {
>      QDict *qdict = qdict_new();
> @@ -51,6 +56,8 @@ static void qlit_equal_qobject_test(void)
>  
>      g_assert(qlit_equal_qobject(&qlit, qobj));
>  
> +    g_assert(!qlit_equal_qobject(&qlit_foo, qobj));
> +
>      qobject_decref(qobj);
>  }

Ah, you do have negative test cases, just not in the patch creating the
test.

When you leave gaps in that will be filled in later patches, I recomend
pointing out the gaps in the commit message, with a promise they'll be
filled shortly.  Your reviewers will thank you.

With am improved commit message,
Reviewed-by: Markus Armbruster <armbru@redhat.com>

  reply	other threads:[~2017-08-30 12:36 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-25 10:58 [Qemu-devel] [PATCH v2 00/14] Generate a literal qobject for introspection Marc-André Lureau
2017-08-25 10:59 ` [Qemu-devel] [PATCH v2 01/14] qdict: add qdict_put_null() helper Marc-André Lureau
2017-08-25 12:58   ` Eduardo Habkost
2017-08-25 15:31   ` Eric Blake
2017-08-30 12:01     ` Markus Armbruster
2017-08-30 13:54       ` Eric Blake
2017-08-31 13:58       ` Markus Armbruster
2017-08-25 10:59 ` [Qemu-devel] [PATCH v2 02/14] qlit: move qlit from check-qjson to qobject/ Marc-André Lureau
2017-08-25 10:59 ` [Qemu-devel] [PATCH v2 03/14] qlit: use QLit prefix consistently Marc-André Lureau
2017-08-25 10:59 ` [Qemu-devel] [PATCH v2 04/14] qlit: remove compound literals Marc-André Lureau
2017-08-30 12:00   ` Markus Armbruster
2017-08-30 12:11     ` Marc-André Lureau
2017-08-30 13:02       ` Markus Armbruster
2017-08-30 13:19         ` Marc-André Lureau
2017-08-31  8:42           ` Markus Armbruster
2017-08-31  9:14             ` Marc-André Lureau
2017-08-31 13:50               ` Markus Armbruster
2017-08-31 15:28             ` Laszlo Ersek
2017-09-01  9:51               ` Markus Armbruster
2017-08-25 10:59 ` [Qemu-devel] [PATCH v2 05/14] qlit: rename compare_litqobj_to_qobj() to qlit_equal_qobject() Marc-André Lureau
2017-08-25 10:59 ` [Qemu-devel] [PATCH v2 06/14] qlit: make qlit_equal_qobject return a bool Marc-André Lureau
2017-08-25 10:59 ` [Qemu-devel] [PATCH v2 07/14] qlit: make qlit_equal_qobject() take const arguments Marc-André Lureau
2017-08-25 10:59 ` [Qemu-devel] [PATCH v2 08/14] qlit: add QLIT_QNULL and QLIT_BOOL Marc-André Lureau
2017-08-25 10:59 ` [Qemu-devel] [PATCH v2 09/14] qlit: Replace open-coded qnum_get_int() by call Marc-André Lureau
2017-08-25 10:59 ` [Qemu-devel] [PATCH v2 10/14] tests: add qlit tests Marc-André Lureau
2017-08-30 12:15   ` Markus Armbruster
2017-08-30 12:23     ` Marc-André Lureau
2017-08-25 10:59 ` [Qemu-devel] [PATCH v2 11/14] qlit: improve QLit dict vs qdict comparison Marc-André Lureau
2017-08-30 12:35   ` Markus Armbruster [this message]
2017-08-30 13:05     ` Marc-André Lureau
2017-08-25 10:59 ` [Qemu-devel] [PATCH v2 12/14] qlit: improve QLit list vs qlist comparison Marc-André Lureau
2017-08-30 12:36   ` Markus Armbruster
2017-08-31 14:20     ` Markus Armbruster
2017-08-31 14:37       ` Marc-André Lureau
2017-08-25 10:59 ` [Qemu-devel] [PATCH v2 13/14] qlit: add qobject_form_qlit() Marc-André Lureau
2017-08-25 15:35   ` Eric Blake
2017-08-30 12:53   ` Markus Armbruster
2017-08-30 13:00     ` Marc-André Lureau
2017-08-25 10:59 ` [Qemu-devel] [PATCH v2 14/14] qapi: generate a literal qobject for introspection Marc-André Lureau
2017-09-01 12:06 ` [Qemu-devel] [PATCH v2 00/14] Generate " Markus Armbruster

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=874lspgrmn.fsf@dusky.pond.sub.org \
    --to=armbru@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=qemu-devel@nongnu.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.