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 08/45] tests: add more int/number ranges checks
Date: Thu, 01 Jun 2017 16:09:55 +0200	[thread overview]
Message-ID: <87o9u7re8c.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <20170531135709.345-9-marcandre.lureau@redhat.com> (=?utf-8?Q?=22Marc-Andr=C3=A9?= Lureau"'s message of "Wed, 31 May 2017 17:56:32 +0400")

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

> Suggested by Markus Armbruster:
>
> We should systematically cover the integers, in particular the
> boundaries (because that's where bugs like to hide):
>
> * Integers in [-2^63,0) can be visited with visit_type_int() and
>   visit_type_number().
>
> * Integers in [0,2^63) can be visited with visit_type_int(),
>   visit_type_uint64() and visit_type_number().
>
> * Integers in [2^63,2^64) can be visited with visit_type_uint64() and
>   visit_type_number().
>
> * Integers outside [-2^63,2^53) can be visited with visit_type_number().
>
> In any case, visit_type_number() loses precision beyond 53 bits.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  tests/test-qobject-input-visitor.c | 38 ++++++++++++++++++++++++++++++++++++--
>  1 file changed, 36 insertions(+), 2 deletions(-)
>
> diff --git a/tests/test-qobject-input-visitor.c b/tests/test-qobject-input-visitor.c
> index 83d663d11d..f2ed3161af 100644
> --- a/tests/test-qobject-input-visitor.c
> +++ b/tests/test-qobject-input-visitor.c
> @@ -102,11 +102,11 @@ static Visitor *visitor_input_test_init_raw(TestInputVisitorData *data,
>  {
>      return visitor_input_test_init_internal(data, false, json_string, NULL);
>  }
> -

Whoops.

>  static void test_visitor_in_int(TestInputVisitorData *data,
>                                  const void *unused)
>  {
>      int64_t res = 0;
> +    double dbl;
>      int value = -42;
>      Visitor *v;
>  
> @@ -114,6 +114,9 @@ static void test_visitor_in_int(TestInputVisitorData *data,
>  
>      visit_type_int(v, NULL, &res, &error_abort);
>      g_assert_cmpint(res, ==, value);
> +
> +    visit_type_number(v, NULL, &dbl, &error_abort);
> +    g_assert_cmpfloat(dbl, ==, -42.0);
>  }
>  
>  static void test_visitor_in_uint(TestInputVisitorData *data,
> @@ -121,6 +124,8 @@ static void test_visitor_in_uint(TestInputVisitorData *data,
>  {
>      Error *err = NULL;
>      uint64_t res = 0;
> +    int64_t i64;
> +    double dbl;
>      int value = 42;
>      Visitor *v;
>  
> @@ -129,8 +134,13 @@ static void test_visitor_in_uint(TestInputVisitorData *data,
>      visit_type_uint64(v, NULL, &res, &error_abort);
>      g_assert_cmpuint(res, ==, (uint64_t)value);
>  
> -    /* BUG: value between INT64_MIN and -1 accepted modulo 2^64 */
> +    visit_type_int(v, NULL, &i64, &error_abort);
> +    g_assert_cmpint(i64, ==, value);
>  
> +    visit_type_number(v, NULL, &dbl, &error_abort);
> +    g_assert_cmpfloat(dbl, ==, value);
> +
> +    /* BUG: value between INT64_MIN and -1 accepted modulo 2^64 */
>      v = visitor_input_test_init(data, "%d", -value);
>  
>      visit_type_uint64(v, NULL, &res, &error_abort);
> @@ -142,6 +152,8 @@ static void test_visitor_in_uint(TestInputVisitorData *data,
>  
>      visit_type_uint64(v, NULL, &res, &err);
>      error_free_or_abort(&err);
> +
> +    visit_type_number(v, NULL, &dbl, &error_abort);
>  }
>  
>  static void test_visitor_in_int_overflow(TestInputVisitorData *data,
> @@ -260,6 +272,26 @@ static void test_visitor_in_number(TestInputVisitorData *data,
>      g_assert_cmpfloat(res, ==, value);
>  }
>  
> +static void test_visitor_in_large_number(TestInputVisitorData *data,
> +                                         const void *unused)
> +{
> +    Error *err = NULL;
> +    double res = 0;
> +    int64_t i64;
> +    uint64_t u64;
> +    Visitor *v;
> +
> +    v = visitor_input_test_init(data, "-18446744073709551616"); /* -2^64 */
> +
> +    visit_type_number(v, NULL, &res, &error_abort);

Shouldn't we check res has the expected value?

> +
> +    visit_type_int(v, NULL, &i64, &err);
> +    error_free_or_abort(&err);
> +
> +    visit_type_uint64(v, NULL, &u64, &err);
> +    error_free_or_abort(&err);
> +}

Not sure this is worth its own test.  But then I'm never sure whether to
write heaps of small tests, or few larger ones.  You decide.

> +
>  static void test_visitor_in_number_keyval(TestInputVisitorData *data,
>                                            const void *unused)
>  {
> @@ -1253,6 +1285,8 @@ int main(int argc, char **argv)
>                             NULL, test_visitor_in_bool_str_fail);
>      input_visitor_test_add("/visitor/input/number",
>                             NULL, test_visitor_in_number);
> +    input_visitor_test_add("/visitor/input/large_number",
> +                           NULL, test_visitor_in_large_number);
>      input_visitor_test_add("/visitor/input/number_keyval",
>                             NULL, test_visitor_in_number_keyval);
>      input_visitor_test_add("/visitor/input/number_str_keyval",

The new tests are welcome, but they don't "systematically cover the
integers".  The easiest fix is to adjust the commit message's claims
down:

    tests: Add more int/number ranges checks

    Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

  reply	other threads:[~2017-06-01 14:10 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-31 13:56 [Qemu-devel] [PATCH v2 00/45] qobject/qapi: add uint type Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 01/45] qobject-input-visitor: Reject non-finite numbers with keyval Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 02/45] qapi: Document visit_type_any() issues with keyval input Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 03/45] tests/qapi-schema: Avoid 'str' in alternate test cases Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 04/45] qapi: Reject alternates that can't work with keyval_parse() Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 05/45] qdev: remove PropertyInfo.qtype field Marc-André Lureau
2017-06-01 11:19   ` Markus Armbruster
2017-06-07 12:31     ` Peter Maydell
2017-06-07 13:09       ` Markus Armbruster
2017-06-07 13:44         ` Peter Maydell
2017-06-07 17:37           ` Markus Armbruster
2017-06-09 14:04             ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 06/45] object: fix potential leak in getters Marc-André Lureau
2017-06-01 11:32   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 07/45] tests: remove alt num-int cases Marc-André Lureau
2017-06-01 11:58   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 08/45] tests: add more int/number ranges checks Marc-André Lureau
2017-06-01 14:09   ` Markus Armbruster [this message]
2017-06-06 16:14     ` Marc-André Lureau
2017-06-06 19:08       ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 09/45] qapi: merge QInt and QFloat in QNum Marc-André Lureau
2017-06-02  7:03   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 10/45] qapi: Remove visit_start_alternate() parameter promote_int Marc-André Lureau
2017-06-02  7:57   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 11/45] tests: remove /qnum/destroy test Marc-André Lureau
2017-06-02  8:00   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 12/45] qnum: add uint type Marc-André Lureau
2017-06-02  8:05   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 13/45] json: learn to parse uint64 numbers Marc-André Lureau
2017-06-02  8:24   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 14/45] qapi: update the qobject visitor to use QNUM_U64 Marc-André Lureau
2017-06-02 11:18   ` Markus Armbruster
2017-06-02 11:20   ` Markus Armbruster
2017-06-02 11:34     ` Marc-André Lureau
2017-06-02 12:36       ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 15/45] object: add uint property setter/getter Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 16/45] q35: fix get_mmcfg_size to use uint64 visitor Marc-André Lureau
2017-06-02 11:34   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 17/45] object: use more specific property type names Marc-André Lureau
2017-06-02 13:38   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 18/45] qdev: make default property int Marc-André Lureau
2017-06-02 13:49   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 19/45] qdev: add unsigned properties Marc-André Lureau
2017-06-02 13:55   ` Markus Armbruster
2017-06-02 14:00     ` Marc-André Lureau
2017-06-02 14:05       ` Marc-André Lureau
2017-06-06 12:33         ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 20/45] apic-common: make "id" property a uint32 Marc-André Lureau
2017-06-02 14:05   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 21/45] qdev: use appropriate getter/setters type Marc-André Lureau
2017-06-02 14:51   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 22/45] isa: use get_uint() for "io-base" Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 23/45] pc-dimm: use get_uint() for dimm properties Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 24/45] pc-dimm: make "size" property uint64 Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 25/45] pcihp: use get_uint() for "bsel" property Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 26/45] aspeed: use {set, get}_uint() for "ram-size" property Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 27/45] bcm2835_fb: use {get, set}_uint() for "vcram-size" and "vcram-base" Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 28/45] platform-bus: use get_uint() for "addr" property Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 29/45] acpi: use get_uint() for "acpi-pcihp-io*" properties Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 30/45] acpi: use get_uint() for various acpi properties Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 31/45] acpi: use get_uint() for "pci-hole*" properties Marc-André Lureau
2017-06-06 12:24   ` Markus Armbruster
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 32/45] pc: use get_uint() for "iobase" property Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 33/45] pc: use get_uint() for "apic-id" property Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 34/45] pc: use get_uint() for "hpet-intcap" property Marc-André Lureau
2017-05-31 13:56 ` [Qemu-devel] [PATCH v2 35/45] xen: use get_uint() for "max-ram-below-4g" property Marc-André Lureau
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 36/45] arm: use get_uint() for "mp-affinity" property Marc-André Lureau
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 37/45] auxbus: use get_uint() for "addr" property Marc-André Lureau
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 38/45] pvpanic: use get_uint() for "ioport" property Marc-André Lureau
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 39/45] pnv-core: use get_uint() for "core-pir" property Marc-André Lureau
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 40/45] numa: use get_uint() for "size" property Marc-André Lureau
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 41/45] i386/cpu: use get_uint() for "min-level"/"min-xlevel" properties Marc-André Lureau
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 42/45] console: use get_uint() for "head" property Marc-André Lureau
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 43/45] tests/qdict: check more get_try_int() cases Marc-André Lureau
2017-06-06 12:26   ` Markus Armbruster
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 44/45] RFC: qdict: add uint Marc-André Lureau
2017-06-06 12:28   ` Markus Armbruster
2017-05-31 13:57 ` [Qemu-devel] [PATCH v2 45/45] qobject: move dump_qobject() from block/ to qobject/ Marc-André Lureau
2017-05-31 20:06 ` [Qemu-devel] [PATCH v2 00/45] qobject/qapi: add uint type no-reply
2017-06-06 12:36 ` 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=87o9u7re8c.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.