qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 08/45] tests: add more int/number ranges chec


From: Markus Armbruster
Subject: Re: [Qemu-devel] [PATCH v2 08/45] tests: add more int/number ranges checks
Date: Tue, 06 Jun 2017 21:08:31 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)

Marc-André Lureau <address@hidden> writes:

> Hi
>
> On Thu, Jun 1, 2017 at 6:10 PM Markus Armbruster <address@hidden> wrote:
>
>> Marc-André Lureau <address@hidden> 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 <address@hidden>
[...]
>> > @@ -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?
>>
>>
> Is the precision loss during conversion  going to be the same on all archs?

Yes.  Precision is 53 bits on all hosts that matter, because double is
IEEE 754 / IEC 60559 double precision on all hosts that matter.

For pedantic portability, you may guard with #ifdef __STDC_IEC_559__.
ISO/IEC 9899 §6.8.10 Predefined macro names:

       __STDC_IEC_559__ The   integer   constant   1,  intended  to
                indicate conformance to the specifications in annex
                F (IEC 60559 floating-point arithmetic).

Annex F (normative) section F.2 Types:

         -- The double type matches the IEC 60559 double format.

I wouldn't bother.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]