diff options
author | Seth M Morton <seth.m.morton@gmail.com> | 2018-02-10 13:21:39 -0800 |
---|---|---|
committer | Seth M Morton <seth.m.morton@gmail.com> | 2018-02-10 13:21:39 -0800 |
commit | 2e474460d65998dd72f1db56556b03cb3f69f806 (patch) | |
tree | ed2671479c4fb3c195581c7583c2cb82e53efcac | |
parent | c56cf6d9d7ef1a4781756852d5bb2b98d5d09f58 (diff) | |
download | natsort-2e474460d65998dd72f1db56556b03cb3f69f806.tar.gz |
Fix OSX-related bugs in cmp testing.
Because OSX is a "dumb sorting" OS when locale is turned on, the
method by which "dumb sorting" was being tested for natcmp worked
on non-OSX OSs, but failed on OSX. This is addressed by using patch
for both True and False returns of dumb_sort.
For the test of using natcmp with an alg, if hypothesis yields very
extreme integers then conversion of those integers into a float
(due to alg.REAL) can cause the sorting to give unexpected results.
Switching to alg.SIGNED fixes this.
-rw-r--r-- | natsort/natsort.py | 1 | ||||
-rw-r--r-- | test_natsort/test_natsort_cmp.py | 19 |
2 files changed, 9 insertions, 11 deletions
diff --git a/natsort/natsort.py b/natsort/natsort.py index 85c1637..be887c7 100644 --- a/natsort/natsort.py +++ b/natsort/natsort.py @@ -677,6 +677,7 @@ def order_by_index(seq, index, iter=False): """ return (seq[i] for i in index) if iter else [seq[i] for i in index] + if float(sys.version[:3]) < 3: # pylint: disable=unused-variable class natcmp(object): diff --git a/test_natsort/test_natsort_cmp.py b/test_natsort/test_natsort_cmp.py index a434d13..6c6d87b 100644 --- a/test_natsort/test_natsort_cmp.py +++ b/test_natsort/test_natsort_cmp.py @@ -49,21 +49,18 @@ def test__keys_are_being_cached(): assert len(natcmp.cached_keys) == 1 natcmp(0, 0) assert len(natcmp.cached_keys) == 1 - natcmp(0, 0, alg=ns.L) - assert len(natcmp.cached_keys) == 2 - natcmp(0, 0, alg=ns.L) - assert len(natcmp.cached_keys) == 2 - - with patch('natsort.compat.locale.dumb_sort', return_value=True): + with patch('natsort.compat.locale.dumb_sort', return_value=False): natcmp(0, 0, alg=ns.L) - - assert len(natcmp.cached_keys) == 3 + assert len(natcmp.cached_keys) == 2 + natcmp(0, 0, alg=ns.L) + assert len(natcmp.cached_keys) == 2 with patch('natsort.compat.locale.dumb_sort', return_value=True): natcmp(0, 0, alg=ns.L) - - assert len(natcmp.cached_keys) == 3 + assert len(natcmp.cached_keys) == 3 + natcmp(0, 0, alg=ns.L) + assert len(natcmp.cached_keys) == 3 @pytest.mark.skipif(PY_VERSION >= 3.0, reason='cmp() deprecated in Python 3') @@ -103,6 +100,6 @@ def test__natcmp_works_the_same_for_floats_as_cmp(x, y): @given(lists(elements=integers())) def test_sort_strings_with_numbers(a_list): strings = [str(var) for var in a_list] - natcmp_sorted = sorted(strings, cmp=partial(natcmp, alg=ns.REAL)) + natcmp_sorted = sorted(strings, cmp=partial(natcmp, alg=ns.SIGNED)) assert sorted(a_list) == [int(var) for var in natcmp_sorted] |