Testing and coverage
The test suite lives in tests/ and uses pytest.
Run locally
pip install -e ".[test]"
pytest
With coverage report:
pytest --cov=loanpy --cov-report=term-missing
HTML report:
pytest --cov=loanpy --cov-report=html
# open htmlcov/index.html
What is covered
Tests exercise the public API end-to-end:
edit — LCS-based distance, DP matrix, shortest path, edit operations
cluster — CV clustering, glide clustering, gap collapsing
uralign — sequential alignment and scorer aggregation
correspondences — alternating-row validation and correspondence mining
phonotactics — template expansion and nearest-template selection
adapt — substitution learning, mapping, and repair
package — version string and
__all__exports
Continuous integration
GitHub Actions runs two install paths: an editable install from the checkout
(pip install -e ".[test]"), and a second job that installs from the latest
main on GitHub (pip install git+https://github.com/loanwordbank/loanpy.git@main)
and runs the same tests. Coverage is measured on Python 3.12 and uploaded to
Codecov (badge in the README).
See .github/workflows/tests.yml.
Coverage expectations
On the current 4.0 test suite, line coverage on loanpy/ is about 99%
(103 tests; run pytest --cov=loanpy locally for an exact figure). Coverage is
informational: linguistic pipelines should still be validated on real CLDF
datasets in downstream projects.