blob: 7a9442d970a153895ef6c667a45a9583f3b1288d [file] [log] [blame]
from pathlib import Path
from typing import Iterator
import pytest
SKIP = frozenset({'algorithm', 'counter'})
ROOT = Path(__file__).parent.parent
def get_algorithms() -> Iterator[str]:
for fpath in (ROOT / 'src' / 'algorithms').iterdir():
alg_name = fpath.stem
if alg_name not in SKIP:
yield alg_name
ALGORITHMS = tuple(get_algorithms())
@pytest.mark.parametrize('alg', ALGORITHMS)
def test_name_is_ascii(alg: str) -> None:
assert alg.replace('_', '').isalnum()
assert alg.isascii()
@pytest.mark.parametrize('alg', ALGORITHMS)
def test_is_in_readme(alg: str) -> None:
text = (ROOT / 'README.md').read_text()
alg = alg.replace('_', '')
assert f'1. `{alg}`' in text.lower()
@pytest.mark.parametrize('alg', ALGORITHMS)
def test_str_shortcut_exists(alg: str) -> None:
fpath = (ROOT / 'src' / 'str.rs')
text = fpath.read_text()
assert f'fn {alg}(' in text
alg = alg.replace('_', '')
assert f'{alg}::default().for_str(s1, s2).' in text.lower()
assert f'/// a wrapper for [`{alg}`].\n' in text.lower()
def test_str_docs_consistency() -> None:
fpath = (ROOT / 'src' / 'str.rs')
text = fpath.read_text()
assert text.count('/// Calculate ') == text.count('pub fn')
@pytest.mark.parametrize('alg', ALGORITHMS)
def test_nstr_shortcut_exists(alg: str) -> None:
fpath = (ROOT / 'src' / 'nstr.rs')
text = fpath.read_text()
assert f'fn {alg}(' in text
alg = alg.replace('_', '')
assert f'{alg}::default().for_str(s1, s2).nval()' in text.lower()
assert f'/// a wrapper for [`{alg}`].\n' in text.lower()
def test_nstr_docs_consistency() -> None:
fpath = (ROOT / 'src' / 'nstr.rs')
text = fpath.read_text()
assert text.count('/// Calculate normalized ') == text.count('pub fn')
@pytest.mark.parametrize('alg', ALGORITHMS)
def test_is_exported(alg: str) -> None:
fpath = (ROOT / 'src' / 'lib.rs')
text = fpath.read_text()
assert f'pub mod {alg}' in text
assert f'pub use self::algorithms::{alg}::' in text
@pytest.mark.parametrize('alg', ALGORITHMS)
def test_is_smoke_tested(alg: str) -> None:
fpath = (ROOT / 'src' / 'lib.rs')
text = fpath.read_text()
assert f'#[case::{alg}(' in text
@pytest.mark.parametrize('alg', ALGORITHMS)
def test_is_tested(alg: str) -> None:
fpath = (ROOT / 'src' / 'algorithms' / f'{alg}.rs')
assert '#[rstest]' in fpath.read_text()