[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.