summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSeth Morton <seth.m.morton@gmail.com>2023-02-26 23:32:02 -0800
committerSeth Morton <seth.m.morton@gmail.com>2023-02-26 23:32:02 -0800
commit4ae64aa2ee7f254c82ab4700147f7480eff807d7 (patch)
tree2b85e3998d77349a1f5d54394c6e7333f55642d0 /tests
parent24f1ba6573e837732f5c410c9b1e0f2e214cd7fb (diff)
downloadnatsort-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.py18
-rw-r--r--tests/test_parse_string_function.py4
-rw-r--r--tests/test_string_component_transform_factory.py25
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