summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeth M Morton <seth.m.morton@gmail.com>2018-02-10 13:21:39 -0800
committerSeth M Morton <seth.m.morton@gmail.com>2018-02-10 13:21:39 -0800
commit2e474460d65998dd72f1db56556b03cb3f69f806 (patch)
treeed2671479c4fb3c195581c7583c2cb82e53efcac
parentc56cf6d9d7ef1a4781756852d5bb2b98d5d09f58 (diff)
downloadnatsort-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.py1
-rw-r--r--test_natsort/test_natsort_cmp.py19
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]