diff options
author | Seth Morton <seth.m.morton@gmail.com> | 2023-02-26 23:32:02 -0800 |
---|---|---|
committer | Seth Morton <seth.m.morton@gmail.com> | 2023-02-26 23:32:02 -0800 |
commit | 4ae64aa2ee7f254c82ab4700147f7480eff807d7 (patch) | |
tree | 2b85e3998d77349a1f5d54394c6e7333f55642d0 /tests | |
parent | 24f1ba6573e837732f5c410c9b1e0f2e214cd7fb (diff) | |
download | natsort-4ae64aa2ee7f254c82ab4700147f7480eff807d7.tar.gz |
Enable new, more performant fastnumbers
The new version can convert the entire mapping internally, so we use
that if possible. A new wrapper for this new function is introduced to
make the calling code consistent.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_fake_fastnumbers.py | 18 | ||||
-rw-r--r-- | tests/test_parse_string_function.py | 4 | ||||
-rw-r--r-- | tests/test_string_component_transform_factory.py | 25 |
3 files changed, 24 insertions, 23 deletions
diff --git a/tests/test_fake_fastnumbers.py b/tests/test_fake_fastnumbers.py index 574f7cf..6324c64 100644 --- a/tests/test_fake_fastnumbers.py +++ b/tests/test_fake_fastnumbers.py @@ -4,7 +4,7 @@ Test the fake fastnumbers module. """ import unicodedata -from math import isnan +from math import isinf from typing import Union, cast from hypothesis import given @@ -62,10 +62,10 @@ def test_fast_float_returns_nan_alternate_if_nan_option_is_given() -> None: def test_fast_float_converts_float_string_to_float_example() -> None: assert fast_float("45.8") == 45.8 assert fast_float("-45") == -45.0 - assert fast_float("45.8e-2", key=len) == 45.8e-2 - assert isnan(cast(float, fast_float("nan"))) - assert isnan(cast(float, fast_float("+nan"))) - assert isnan(cast(float, fast_float("-NaN"))) + assert fast_float("45.8e-2", key=lambda x: x.upper()) == 45.8e-2 + assert isinf(cast(float, fast_float("nan"))) + assert isinf(cast(float, fast_float("+nan"))) + assert isinf(cast(float, fast_float("-NaN"))) assert fast_float("۱۲.۱۲") == 12.12 assert fast_float("-۱۲.۱۲") == -12.12 @@ -85,12 +85,12 @@ def test_fast_float_leaves_string_as_is(x: str) -> None: def test_fast_float_with_key_applies_to_string_example() -> None: - assert fast_float("invalid", key=len) == len("invalid") + assert fast_float("invalid", key=lambda x: x.upper()) == "INVALID" @given(text().filter(not_a_float).filter(bool)) def test_fast_float_with_key_applies_to_string(x: str) -> None: - assert fast_float(x, key=len) == len(x) + assert fast_float(x, key=lambda x: x.upper()) == x.upper() def test_fast_int_leaves_float_string_as_is_example() -> None: @@ -126,9 +126,9 @@ def test_fast_int_leaves_string_as_is(x: str) -> None: def test_fast_int_with_key_applies_to_string_example() -> None: - assert fast_int("invalid", key=len) == len("invalid") + assert fast_int("invalid", key=lambda x: x.upper()) == "INVALID" @given(text().filter(not_an_int).filter(bool)) def test_fast_int_with_key_applies_to_string(x: str) -> None: - assert fast_int(x, key=len) == len(x) + assert fast_int(x, key=lambda x: x.upper()) == x.upper() diff --git a/tests/test_parse_string_function.py b/tests/test_parse_string_function.py index 653a065..d2d33a4 100644 --- a/tests/test_parse_string_function.py +++ b/tests/test_parse_string_function.py @@ -7,7 +7,7 @@ from typing import Any, Callable, Iterable, List, Tuple, Union import pytest from hypothesis import given from hypothesis.strategies import floats, integers, lists, text -from natsort.compat.fastnumbers import fast_float +from natsort.compat.fastnumbers import try_float from natsort.ns_enum import NSType, NS_DUMB, ns from natsort.utils import ( FinalTransform, @@ -46,7 +46,7 @@ def parse_string_func_factory(alg: NSType) -> StrParser: sep, NumRegex.int_nosign().split, input_transform, - fast_float, + lambda x: try_float(x, map=True), final_transform, ) diff --git a/tests/test_string_component_transform_factory.py b/tests/test_string_component_transform_factory.py index 99df7ea..78d37bf 100644 --- a/tests/test_string_component_transform_factory.py +++ b/tests/test_string_component_transform_factory.py @@ -7,7 +7,7 @@ from typing import Any, Callable, FrozenSet, Union import pytest from hypothesis import example, given from hypothesis.strategies import floats, integers, text -from natsort.compat.fastnumbers import fast_float, fast_int +from natsort.compat.fastnumbers import try_float, try_int from natsort.compat.locale import get_strxfrm from natsort.ns_enum import NSType, NS_DUMB, ns from natsort.utils import groupletters, string_component_transform_factory @@ -35,25 +35,25 @@ def no_null(x: str) -> bool: @pytest.mark.parametrize( "alg, example_func", [ - (ns.INT, fast_int), - (ns.DEFAULT, fast_int), - (ns.FLOAT, partial(fast_float, nan=float("-inf"))), - (ns.FLOAT | ns.NANLAST, partial(fast_float, nan=float("+inf"))), - (ns.GROUPLETTERS, partial(fast_int, key=groupletters)), - (ns.LOCALE, partial(fast_int, key=lambda x: get_strxfrm()(x))), + (ns.INT, partial(try_int, map=True)), + (ns.DEFAULT, partial(try_int, map=True)), + (ns.FLOAT, partial(try_float, map=True, nan=float("-inf"))), + (ns.FLOAT | ns.NANLAST, partial(try_float, map=True, nan=float("+inf"))), + (ns.GROUPLETTERS, partial(try_int, map=True, on_fail=groupletters)), + (ns.LOCALE, partial(try_int, map=True, on_fail=lambda x: get_strxfrm()(x))), ( ns.GROUPLETTERS | ns.LOCALE, - partial(fast_int, key=lambda x: get_strxfrm()(groupletters(x))), + partial(try_int, map=True, on_fail=lambda x: get_strxfrm()(groupletters(x))), ), ( NS_DUMB | ns.LOCALE, - partial(fast_int, key=lambda x: get_strxfrm()(groupletters(x))), + partial(try_int, map=True, on_fail=lambda x: get_strxfrm()(groupletters(x))), ), ( ns.GROUPLETTERS | ns.LOCALE | ns.FLOAT | ns.NANLAST, partial( - fast_float, - key=lambda x: get_strxfrm()(groupletters(x)), + try_float, map=True, + on_fail=lambda x: get_strxfrm()(groupletters(x)), nan=float("+inf"), ), ), @@ -70,8 +70,9 @@ def test_string_component_transform_factory( x: Union[str, float, int], alg: NSType, example_func: Callable[[str], Any] ) -> None: string_component_transform_func = string_component_transform_factory(alg) + x = str(x) try: - assert string_component_transform_func(str(x)) == example_func(str(x)) + assert list(string_component_transform_func(x)) == list(example_func(x)) except ValueError as e: # handle broken locale lib on BSD. if "is not in range" not in str(e): raise |