Akihiko Odaki <[email protected]> writes:

> A string that represents a double can be long if it is an exponentially
> large number.
>
> Signed-off-by: Akihiko Odaki <[email protected]>
> ---
>  tests/unit/test-qobject-input-visitor.c  | 2 +-
>  tests/unit/test-qobject-output-visitor.c | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/tests/unit/test-qobject-input-visitor.c 
> b/tests/unit/test-qobject-input-visitor.c
> index 84bdcdf702e0..baff9243313c 100644
> --- a/tests/unit/test-qobject-input-visitor.c
> +++ b/tests/unit/test-qobject-input-visitor.c
> @@ -583,7 +583,7 @@ static void 
> test_visitor_in_list_struct(TestInputVisitorData *data,
>  
>      i = 0;
>      for (num_list = arrs->number; num_list; num_list = num_list->next) {
> -        char expected[32], actual[32];
> +        char expected[318], actual[318];

Where does 318 come from?

>  
>          sprintf(expected, "%.6f", (double)i / 3);
>          sprintf(actual, "%.6f", num_list->value);
           g_assert_cmpstr(expected, ==, actual);
           i++;
       }

Existing code is safe, because the numbers run from 0, 1.0/3, ...,
31.0/3.

Its purpose is to check the input visitor parses number arrays
correctly.  Doing it this way is questionable.  Elsewhere in this file,
we get away with the equivalent of

           g_assert_cmpfloat(num_list->value, ==, (double)i / 3);

Yes, double can't represent the fractions exactly, but if we're
concerned about that, we should test the difference is less than
epsilon, or simply use representable values.

> diff --git a/tests/unit/test-qobject-output-visitor.c 
> b/tests/unit/test-qobject-output-visitor.c
> index 407ab9ed505a..ae05a726f775 100644
> --- a/tests/unit/test-qobject-output-visitor.c
> +++ b/tests/unit/test-qobject-output-visitor.c
> @@ -571,7 +571,7 @@ static void 
> test_visitor_out_list_struct(TestOutputVisitorData *data,
>      i = 0;
>      QLIST_FOREACH_ENTRY(qlist, e) {
>          QNum *qvalue = qobject_to(QNum, qlist_entry_obj(e));
> -        char expected[32], actual[32];
> +        char expected[318], actual[318];
>  
>          g_assert(qvalue);
>          sprintf(expected, "%.6f", (double)i / 3);

Likewise.


Reply via email to