summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeth M Morton <seth.m.morton@gmail.com>2018-04-10 22:33:59 -0700
committerSeth M Morton <seth.m.morton@gmail.com>2018-04-10 22:33:59 -0700
commit322f52ef8c84c43d2930575f74d4753f103bf62a (patch)
treeaf77fe983c08ae50e7279d073b7fc59e5d422c8b
parentd001af85e65a7071acb627a360751096824e3f77 (diff)
downloadnatsort-322f52ef8c84c43d2930575f74d4753f103bf62a.tar.gz
Tests are updated to reflect new number definitions.
-rw-r--r--test_natsort/slow_splitters.py20
-rw-r--r--test_natsort/test_unicode_numbers.py20
2 files changed, 31 insertions, 9 deletions
diff --git a/test_natsort/slow_splitters.py b/test_natsort/slow_splitters.py
index aef329e..f3cd76e 100644
--- a/test_natsort/slow_splitters.py
+++ b/test_natsort/slow_splitters.py
@@ -6,6 +6,7 @@ import unicodedata
import collections
import itertools
import functools
+from natsort.unicode_numbers import decimals
from natsort.compat.py23 import PY_VERSION, py23_zip
if PY_VERSION >= 3.0:
@@ -20,9 +21,9 @@ SplitElement = collections.namedtuple('SplitElement',
def int_splitter(iterable, signed, sep):
"""Alternate (slow) method to split a string into numbers."""
iterable = unicodedata.normalize('NFD', iterable)
- split_by_digits = itertools.groupby(iterable, lambda a: a.isdigit())
- split_by_digits = refine_split_grouping(split_by_digits)
- split = int_splitter_iter(split_by_digits, signed)
+ split_by_decimal = itertools.groupby(iterable, lambda a: a.isdigit())
+ split_by_decimal = refine_split_grouping(split_by_decimal)
+ split = int_splitter_iter(split_by_decimal, signed)
split = sep_inserter(split, sep)
return tuple(add_leading_space_if_first_is_num(split, sep))
@@ -31,12 +32,12 @@ def float_splitter(iterable, signed, exp, sep):
"""Alternate (slow) method to split a string into numbers."""
def number_tester(x):
- return x.isdigit() or unicodedata.numeric(x, None) is not None
+ return x.isdecimal() or unicodedata.numeric(x, None) is not None
iterable = unicodedata.normalize('NFD', iterable)
- split_by_digits = itertools.groupby(iterable, number_tester)
- split_by_digits = peekable(refine_split_grouping(split_by_digits))
- split = float_splitter_iter(split_by_digits, signed, exp)
+ split_by_decimal = itertools.groupby(iterable, number_tester)
+ split_by_decimal = peekable(refine_split_grouping(split_by_decimal))
+ split = float_splitter_iter(split_by_decimal, signed, exp)
split = sep_inserter(split, sep)
return tuple(add_leading_space_if_first_is_num(split, sep))
@@ -64,8 +65,9 @@ def refine_split_grouping(iterable):
yield SplitElement(False, val, False)
-def group_unicode_and_ascii_numbers(iterable,
- ascii_digits=frozenset('0123456789')):
+def group_unicode_and_ascii_numbers(
+ iterable, ascii_digits=frozenset(decimals + '0123456789')
+):
"""
Use groupby to group ASCII and unicode numeric characters.
Assumes all input is already all numeric characters.
diff --git a/test_natsort/test_unicode_numbers.py b/test_natsort/test_unicode_numbers.py
index 1b897eb..e257914 100644
--- a/test_natsort/test_unicode_numbers.py
+++ b/test_natsort/test_unicode_numbers.py
@@ -11,6 +11,10 @@ from natsort.unicode_numbers import (
numeric,
digit_chars,
digits,
+ decimal_chars,
+ decimals,
+ digits_no_decimals,
+ numeric_no_decimals,
)
@@ -24,10 +28,16 @@ def test_digit_chars_contains_only_valid_unicode_digit_characters():
assert unicodedata.digit(a, None) is not None
+def test_decimal_chars_contains_only_valid_unicode_decimal_characters():
+ for a in decimal_chars:
+ assert unicodedata.decimal(a, None) is not None
+
+
def test_numeric_chars_contains_all_valid_unicode_numeric_and_digit_characters():
set_numeric_hex = set(numeric_hex)
set_numeric_chars = set(numeric_chars)
set_digit_chars = set(digit_chars)
+ set_decimal_chars = set(decimal_chars)
for i in py23_range(0X110000):
try:
a = py23_unichr(i)
@@ -41,8 +51,18 @@ def test_numeric_chars_contains_all_valid_unicode_numeric_and_digit_characters()
if unicodedata.digit(a, None) is not None:
assert i in set_numeric_hex
assert a in set_digit_chars
+ if unicodedata.decimal(a, None) is not None:
+ assert i in set_numeric_hex
+ assert a in set_decimal_chars
+
+ assert set_decimal_chars.isdisjoint(digits_no_decimals)
+ assert set_digit_chars.issuperset(digits_no_decimals)
+
+ assert set_decimal_chars.isdisjoint(numeric_no_decimals)
+ assert set_numeric_chars.issuperset(numeric_no_decimals)
def test_combined_string_contains_all_characters_in_list():
assert numeric == ''.join(numeric_chars)
assert digits == ''.join(digit_chars)
+ assert decimals == ''.join(decimal_chars)