Re: xapian-core 1.4.21: 20 tests fail on i686
Vitaly Chikunov <[email protected]> Sun, 23 Oct 2022 16:37:04 +0300
| Newsgroups | gmane.comp.search.xapian.devel |
|---|---|
| Message-ID | <[email protected]> |
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@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, >