| """Stance must degrade gracefully and score in the intuitive direction.""" |
| import numpy as np |
|
|
| from witnessbox import stance |
| from witnessbox.stance import analyze, _score |
|
|
|
|
| def test_silence_is_neutral_low_certainty(): |
| y = np.zeros(16000, dtype=np.float32) |
| r = analyze(y, 16000) |
| assert r.tier == "NEUTRAL" and r.certainty < 0.5 |
|
|
|
|
| def test_empty_and_none_are_neutral(): |
| assert analyze(np.array([], dtype=np.float32), 16000).tier == "NEUTRAL" |
| assert analyze(None, 16000).tier == "NEUTRAL" |
|
|
|
|
| def test_always_returns_valid_result(): |
| y = (0.2 * np.random.RandomState(0).randn(16000)).astype(np.float32) |
| r = analyze(y, 16000) |
| assert r.tier in {"CONFIDENT", "NEUTRAL", "HESITANT"} |
| assert 0.0 <= r.confidence <= 100.0 |
|
|
|
|
| def test_score_direction(): |
| |
| fluent, _ = _score(pause_ratio=0.10, rate_hz=4.2, pitch_std_semitones=1.0) |
| halting, _ = _score(pause_ratio=0.60, rate_hz=1.5, pitch_std_semitones=5.5) |
| assert fluent > halting |
| assert stance._tier(fluent) == "CONFIDENT" |
| assert stance._tier(halting) == "HESITANT" |
|
|