diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2023-02-15 18:28:12 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2023-02-15 18:28:12 -0500 |
commit | 8855656626202e541bd2c95bc023e820a022322f (patch) | |
tree | 9ab6972e392f51d53c23c10098ce7a7e1a1ee679 | |
parent | 59d357b8ea23ce645747b5f3f221365b76504d8c (diff) | |
download | sqlalchemy-8855656626202e541bd2c95bc023e820a022322f.tar.gz |
prevent float tests from running on asyncmy
asyncmy 0.2.7 has had a loss in float precision for even
very low numbers of significant digits.
Change-Id: Iec6d2650943eeaa8e854f21990f6565d73331f8c
References: https://github.com/long2ice/asyncmy/issues/56
-rw-r--r-- | lib/sqlalchemy/testing/requirements.py | 14 | ||||
-rw-r--r-- | lib/sqlalchemy/testing/suite/test_types.py | 6 | ||||
-rw-r--r-- | test/dialect/mysql/test_types.py | 2 | ||||
-rw-r--r-- | test/requirements.py | 4 |
4 files changed, 22 insertions, 4 deletions
diff --git a/lib/sqlalchemy/testing/requirements.py b/lib/sqlalchemy/testing/requirements.py index 6e325ea66..9bfc94e78 100644 --- a/lib/sqlalchemy/testing/requirements.py +++ b/lib/sqlalchemy/testing/requirements.py @@ -1179,6 +1179,20 @@ class SuiteRequirements(Requirements): return exclusions.open() @property + def literal_float_coercion(self): + """target backend will return the exact float value 15.7563 + with only four significant digits from this statement: + + SELECT :param + + where :param is the Python float 15.7563 + + i.e. it does not return 15.75629997253418 + + """ + return exclusions.open() + + @property def floats_to_four_decimals(self): """target backend can return a floating-point number with four significant digits (such as 15.7563) accurately diff --git a/lib/sqlalchemy/testing/suite/test_types.py b/lib/sqlalchemy/testing/suite/test_types.py index 36fd7f247..d6a74b220 100644 --- a/lib/sqlalchemy/testing/suite/test_types.py +++ b/lib/sqlalchemy/testing/suite/test_types.py @@ -945,6 +945,7 @@ class NumericTest(_LiteralRoundTripFixture, fixtures.TestBase): filter_=lambda n: n is not None and round(n, 5) or None, ) + @testing.requires.literal_float_coercion def test_float_coerce_round_trip(self, connection): expr = 15.7563 @@ -1199,10 +1200,7 @@ class JSONTest(_LiteralRoundTripFixture, fixtures.TablesTest): ("integer", None), ("float", 28.5), ("float", None), - ( - "float", - 1234567.89, - ), + ("float", 1234567.89, testing.requires.literal_float_coercion), ("numeric", 1234567.89), # this one "works" because the float value you see here is # lost immediately to floating point stuff diff --git a/test/dialect/mysql/test_types.py b/test/dialect/mysql/test_types.py index eca1051e2..989d50d49 100644 --- a/test/dialect/mysql/test_types.py +++ b/test/dialect/mysql/test_types.py @@ -471,6 +471,8 @@ class TypeRoundTripTest(fixtures.TestBase, AssertsExecutionResults): # fixed in mysql-connector as of 2.0.1, # see https://bugs.mysql.com/bug.php?id=73266 + + @testing.requires.literal_float_coercion def test_precision_float_roundtrip(self, metadata, connection): t = Table( "t", diff --git a/test/requirements.py b/test/requirements.py index d91f05673..923d98b46 100644 --- a/test/requirements.py +++ b/test/requirements.py @@ -1334,6 +1334,10 @@ class DefaultRequirements(SuiteRequirements): ) @property + def literal_float_coercion(self): + return skip_if("+asyncmy") + + @property def infinity_floats(self): return fails_on_everything_except( "sqlite", |