Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#30967 closed Bug (fixed)

Test suite fails on Postgres 12

Reported by: Hannes Ljungberg Owned by: Hannes Ljungberg
Component: contrib.postgres Version: dev
Severity: Normal Keywords: tests
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

The test suite is broken on Postgres 12.

postgres_tests.test_trigram.TrigramTest.test_trigram_similarity fails with the following output:

======================================================================
FAIL [0.013s]: test_trigram_similarity (postgres_tests.test_trigram.TrigramTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/tests/django/tests/postgres_tests/test_trigram.py", line 35, in test_trigram_similarity
    ordered=True,
  File "/tests/django/django/test/testcases.py", line 1043, in assertQuerysetEqual
    return self.assertEqual(list(items), values, msg=msg)
AssertionError: Lists differ: [('Cat sat on mat.', 0.625), ('Dog sat on rug.', 0.33333334)] != [('Cat sat on mat.', 0.625), ('Dog sat on rug.', 0.333333)]

First differing element 1:
('Dog sat on rug.', 0.33333334)
('Dog sat on rug.', 0.333333)

- [('Cat sat on mat.', 0.625), ('Dog sat on rug.', 0.33333334)]
?                                                          --

+ [('Cat sat on mat.', 0.625), ('Dog sat on rug.', 0.333333)]

postgres_tests.test_trigram.TrigramTest.test_trigram_similarity_alternate fails with the following output:

======================================================================
FAIL [0.008s]: test_trigram_similarity_alternate (postgres_tests.test_trigram.TrigramTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/tests/django/tests/postgres_tests/test_trigram.py", line 45, in test_trigram_similarity_alternate
    ordered=True,
  File "/tests/django/django/test/testcases.py", line 1043, in assertQuerysetEqual
    return self.assertEqual(list(items), values, msg=msg)
AssertionError: Lists differ: [('Cat sat on mat.', 0.375), ('Dog sat on rug.', 0.6666666)] != [('Cat sat on mat.', 0.375), ('Dog sat on rug.', 0.666667)]

First differing element 1:
('Dog sat on rug.', 0.6666666)
('Dog sat on rug.', 0.666667)

- [('Cat sat on mat.', 0.375), ('Dog sat on rug.', 0.6666666)]
?                                                         ^^

+ [('Cat sat on mat.', 0.375), ('Dog sat on rug.', 0.666667)]
?                                                         ^

This is caused by changes made to how floats are rounded in Postgres 12:

Improve performance by using a new algorithm for output of real and double precision values (Andrew Gierth)
Previously, displayed floating-point values were rounded to 6 (for real) or 15 (for double precision) digits by default, adjusted by the value of extra_float_digits. Now, whenever extra_float_digits is more than zero (as it now is by default), only the minimum number of digits required to preserve the exact binary value are output. The behavior is the same as before when extra_float_digits is set to zero or less.
Also, formatting of floating-point exponents is now uniform across platforms: two digits are used unless three are necessary. In previous releases, Windows builds always printed three digits.

https://www.postgresql.org/docs/release/12.0/

To have consistent behaviour on all Postgres versions my suggestion is to set extra_float_digits to 0 on these tests.

Change History (6)

comment:1 by Hannes Ljungberg, 4 years ago

Owner: set to Hannes Ljungberg

comment:3 by Hannes Ljungberg, 4 years ago

Has patch: set

comment:4 by Mariusz Felisiak, 4 years ago

Triage Stage: UnreviewedAccepted

Failed tests:

  • postgres_tests.test_trigram.TrigramTest.test_trigram_similarity
  • postgres_tests.test_trigram.TrigramTest.test_trigram_similarity_alternate
  • postgres_tests.test_trigram.TrigramTextFieldTest.test_trigram_similarity
  • postgres_tests.test_trigram.TrigramTextFieldTest.test_trigram_similarity_alternate

comment:5 by Mariusz Felisiak <felisiak.mariusz@…>, 4 years ago

Resolution: fixed
Status: assignedclosed

In 8d3f43f7:

[3.0.x] Fixed #30967 -- Fixed TrigramTest failures on PostgreSQL 12+.

Backport of 6e2f05b2e33a6c80c7a411ce76af7b5a08acb835 from master

comment:6 by Mariusz Felisiak <felisiak.mariusz@…>, 4 years ago

In 6e2f05b2:

Fixed #30967 -- Fixed TrigramTest failures on PostgreSQL 12+.

Note: See TracTickets for help on using tickets.
Back to Top