diff options
author | Seth M Morton <seth.m.morton@gmail.com> | 2018-04-10 22:33:59 -0700 |
---|---|---|
committer | Seth M Morton <seth.m.morton@gmail.com> | 2018-04-10 22:33:59 -0700 |
commit | 322f52ef8c84c43d2930575f74d4753f103bf62a (patch) | |
tree | af77fe983c08ae50e7279d073b7fc59e5d422c8b | |
parent | d001af85e65a7071acb627a360751096824e3f77 (diff) | |
download | natsort-322f52ef8c84c43d2930575f74d4753f103bf62a.tar.gz |
Tests are updated to reflect new number definitions.
-rw-r--r-- | test_natsort/slow_splitters.py | 20 | ||||
-rw-r--r-- | test_natsort/test_unicode_numbers.py | 20 |
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) |