xapian-core 1.4.21: 20 tests fail on i686

Vitaly Chikunov vt at altlinux.org
Sun Oct 23 14:37:04 BST 2022


On Sun, Oct 23, 2022 at 03:11:07PM +0300, Vitaly Chikunov wrote:
> (Unable to register on bug tracker, so writing here.)
> While building package for ALT Linux I found that when tests are run on
> i686 (32-bit x86 flavour) with 'make check' for 1.4.21 release, they
> fail with:
> 
>   1 of 4 tests failed
> 
> this is
> 
>   ./apitest backend inmemory: 326 tests passed, 4 failed, 8 skipped.
>   ./apitest backend glass: 423 tests passed, 4 failed, 3 skipped.
>   ./apitest backend singlefile_glass: 261 tests passed, 4 failed, 1 skipped.
>   ./apitest backend multi_glass: 351 tests passed, 2 failed, 4 skipped.
>   ./apitest backend chert: 419 tests passed, 4 failed, 1 expected failures, 3 skipped.
>   ./apitest backend multi_chert: 303 tests passed, 2 failed, 1 expected failures, 4 skipped.
>   ./apitest total: 4036 tests passed, 20 failed, 9 expected failures, 47 skipped.
>   FAIL: apitest
> 
> Detailed failure list:
> 
>   builder at i586:~/RPM/BUILD/xapian-core-1.4.21$ grep FAILED log -A3
>   Running test: checkstatsweight1... FAILED
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight2... FAILED
>   Query((a SYNONYM absolut))
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight3... FAILED
>   Query(WILDCARD SYNONYM a)
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight4... FAILED
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight1... FAILED
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight2... FAILED
>   Query((a SYNONYM absolut))
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight3... FAILED
>   Query(WILDCARD SYNONYM a)
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight4... FAILED
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight1... FAILED
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight2... FAILED
>   Query((a SYNONYM absolut))
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight3... FAILED
>   Query(WILDCARD SYNONYM a)
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight4... FAILED
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight1... FAILED
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight2... FAILED
>   Query((a SYNONYM absolut))
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight1... FAILED
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight2... FAILED
>   Query((a SYNONYM absolut))
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight3... FAILED
>   Query(WILDCARD SYNONYM a)
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight4... FAILED
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight1... FAILED
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
>   --
>   Running test: checkstatsweight2... FAILED
>   Query((a SYNONYM absolut))
>   api_weight.cc:1013: ((get_average_length()) == (db.get_avlength()))
>   Expected 'get_average_length()' and 'db.get_avlength()' to be equal: were 30.8333 and 30.8333
> 
> (Empty lines removed.) On other architectures we build tests succeed (aarch64,
> arm7hf, ppc64le, x86_64). Would appreciate help resolving this.

To add, this is GCC 12.1.1. As a debugging exercise I  printed the
numbers and they shown exactly the same, but subtracting them produces a
value > 0. AFAIK '==' comparison of doubles is unsafe operation in
general (there is GCC warning about that -Wfloat-equal). As a dirty hack
I explicitly cast these doubles to (float) like this

  TEST_EQUAL((float)get_average_length(), (float)db.get_avlength());

This of course is not a solution.

Thanks,

> 
> Thanks,
> 



More information about the Xapian-devel mailing list