From: "Marc-André Lureau" <marcandre.lureau@redhat.com>
To: Markus Armbruster <armbru@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 09:05:08 -0400 (EDT) [thread overview]
Message-ID: <1949447918.6049001.1504098308093.JavaMail.zimbra@redhat.com> (raw)
In-Reply-To: <874lspgrmn.fsf@dusky.pond.sub.org>
Hi
----- Original Message -----
> 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.
Looks good to me
>
> > 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>
>
Thanks
next prev parent reply other threads:[~2017-08-30 13:05 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
2017-08-30 13:05 ` Marc-André Lureau [this message]
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=1949447918.6049001.1504098308093.JavaMail.zimbra@redhat.com \
--to=marcandre.lureau@redhat.com \
--cc=armbru@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).