commit 7b2167973db0b16b79be5496779be841579a7b27aaf8694b9654ae525f06cd9c Author: Tomáš Chvátal Date: Mon May 20 07:43:27 2019 +0000 Accepting request 703991 from home:jayvdb:coala:test-rig - Initial spec for v1.3.0 OBS-URL: https://build.opensuse.org/request/show/703991 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-pylev?expand=0&rev=1 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2aabc9b --- /dev/null +++ b/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2012, Daniel Lindsley +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the pylev nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL pylev BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/pylev-1.3.0.tar.gz b/pylev-1.3.0.tar.gz new file mode 100644 index 0000000..6296aad --- /dev/null +++ b/pylev-1.3.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:063910098161199b81e453025653ec53556c1be7165a9b7c50be2f4d57eae1c3 +size 3193 diff --git a/python-pylev.changes b/python-pylev.changes new file mode 100644 index 0000000..02597cd --- /dev/null +++ b/python-pylev.changes @@ -0,0 +1,4 @@ +------------------------------------------------------------------- +Sun May 19 01:44:08 AM UTC 2019 - John Vandenberg + +- Initial spec for v1.3.0 diff --git a/python-pylev.spec b/python-pylev.spec new file mode 100644 index 0000000..979ae09 --- /dev/null +++ b/python-pylev.spec @@ -0,0 +1,58 @@ +# +# spec file for package python-pylev +# +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ + + +%{?!python_module:%define python_module() python-%{**} python3-%{**}} +Name: python-pylev +Version: 1.3.0 +Release: 0 +License: BSD-3-Clause +Summary: A pure Python Levenshtein implementation +Url: http://github.com/toastdriven/pylev +Group: Development/Languages/Python +Source: https://files.pythonhosted.org/packages/source/p/pylev/pylev-%{version}.tar.gz +Source1: https://raw.githubusercontent.com/toastdriven/pylev/master/LICENSE +Source2: https://raw.githubusercontent.com/toastdriven/pylev/master/tests.py +BuildRequires: python-rpm-macros +BuildRequires: %{python_module setuptools} +BuildRequires: fdupes +BuildArch: noarch + +%python_subpackages + +%description +A pure Python Levenshtein implementation. + +%prep +%setup -q -n pylev-%{version} +cp %{SOURCE1} %{SOURCE2} . + +%build +%python_build + +%install +%python_install +%python_expand %fdupes %{buildroot}%{$python_sitelib} + +%check +%python_exec setup.py test + +%files %{python_files} +%license LICENSE +%doc README.rst +%{python_sitelib}/* + +%changelog diff --git a/tests.py b/tests.py new file mode 100644 index 0000000..af99d05 --- /dev/null +++ b/tests.py @@ -0,0 +1,45 @@ +import itertools +import unittest +import pylev + +test_data = [ + ('classic', "kitten", "sitting", 3), + ('same', "kitten", "kitten", 0), + ('empty', "", "", 0), + ('a', "meilenstein", "levenshtein", 4), + ('b', "levenshtein", "frankenstein", 6), + ('c', "confide", "deceit", 6), + ('d', "CUNsperrICY", "conspiracy", 8), +] + +test_functions = [ + # pylev.classic_levenshtein, # disabled because it is so slow + pylev.recursive_levenshtein, + pylev.wf_levenshtein, + pylev.wfi_levenshtein +] + +class Tests(unittest.TestCase): + + def test_damerau_levenshtein(seld): + assert pylev.damerau_levenshtein("ba", "abc") == 2 + assert pylev.damerau_levenshtein("foobar", "foobra") == 1 + assert pylev.damerau_levenshtein("fee", "deed") == 2 + + +def _mk_test_fn(fn, a, b, expected): + def _test_fn(self): + self.assertEqual(fn(a, b), expected) + self.assertEqual(fn(b, a), expected) + + return _test_fn + + +for lev_fn, data in itertools.product(test_functions, test_data): + name, a, b, expected = data + test_fn = _mk_test_fn(lev_fn, a, b, expected) + setattr(Tests, "test_%s_%s" % (name, lev_fn.__name__), test_fn) + + +if __name__ == '__main__': + unittest.main()