From 847364f5123f108884f8c59fb05d7ff941693dfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 21 Dec 2018 22:49:53 +0100 Subject: [PATCH] test-json: check absolute and relative difference in floating point test The test fails under valgrind, so there was an exception for valgrind. Unfortunately that check only works when valgrind-devel headers are available during build. But it is possible to have just valgrind installed, or simply install it after the build, and then "valgrind test-json" would fail. It also seems that even without valgrind, this fails on some arm32 CPUs. Let's do the usual-style test for absolute and relative differences. --- src/test/test-json.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/test/test-json.c b/src/test/test-json.c index 5aa4d19dbe..cd6269f798 100644 --- a/src/test/test-json.c +++ b/src/test/test-json.c @@ -1,9 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1+ */ #include -#if HAVE_VALGRIND_VALGRIND_H -#include -#endif #include "alloc-util.h" #include "fd-util.h" @@ -45,12 +42,13 @@ static void test_tokenizer(const char *data, ...) { d = va_arg(ap, long double); -#if HAVE_VALGRIND_VALGRIND_H - if (!RUNNING_ON_VALGRIND) -#endif - /* Valgrind doesn't support long double calculations and automatically downgrades to 80bit: - * http://www.valgrind.org/docs/manual/manual-core.html#manual-core.limits */ - assert_se(fabsl(d - v.real) < 0.001L); + /* Valgrind doesn't support long double calculations and automatically downgrades to 80bit: + * http://www.valgrind.org/docs/manual/manual-core.html#manual-core.limits. + * Some architectures might not support long double either. + */ + + assert_se(fabsl(d - v.real) < 1e-10 || + fabsl((d - v.real) / v.real) < 1e-10); } else if (t == JSON_TOKEN_INTEGER) { intmax_t i; -- 2.19.2