763e06c127
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
72 lines
2.0 KiB
Python
72 lines
2.0 KiB
Python
"""Tests para trend_slope."""
|
|
|
|
import random
|
|
|
|
from trend_slope import trend_slope
|
|
|
|
|
|
def test_increasing_series_slope_positive_up_significant():
|
|
values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
|
result = trend_slope(values)
|
|
assert result["slope"] is not None
|
|
assert result["slope"] > 0
|
|
assert result["direction"] == "up"
|
|
assert result["significant"] is True
|
|
assert result["n"] == 10
|
|
|
|
|
|
def test_decreasing_series_slope_negative_down_significant():
|
|
values = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
|
|
result = trend_slope(values)
|
|
assert result["slope"] < 0
|
|
assert result["direction"] == "down"
|
|
assert result["significant"] is True
|
|
|
|
|
|
def test_flat_constant_series_not_significant():
|
|
values = [5.0] * 12
|
|
result = trend_slope(values)
|
|
assert result["direction"] == "flat"
|
|
assert result["significant"] is False
|
|
|
|
|
|
def test_random_series_flat_not_significant():
|
|
rng = random.Random(42)
|
|
values = [rng.gauss(0, 1) for _ in range(60)]
|
|
result = trend_slope(values)
|
|
assert result["direction"] == "flat"
|
|
assert result["significant"] is False
|
|
|
|
|
|
def test_custom_x_axis():
|
|
x = [0, 10, 20, 30, 40]
|
|
values = [1, 3, 5, 7, 9]
|
|
result = trend_slope(values, x)
|
|
assert result["slope"] > 0
|
|
assert result["direction"] == "up"
|
|
assert abs(result["r_squared"] - 1.0) < 1e-9
|
|
|
|
|
|
def test_too_few_pairs_returns_none_slope():
|
|
result = trend_slope([1, 2])
|
|
assert result["slope"] is None
|
|
assert result["direction"] == "unknown"
|
|
assert result["significant"] is False
|
|
assert result["n"] == 2
|
|
|
|
|
|
def test_drops_none_and_nan_pairs():
|
|
values = [1, None, 3, float("nan"), 5, 6, 7]
|
|
result = trend_slope(values)
|
|
assert result["n"] == 5
|
|
assert result["slope"] > 0
|
|
assert result["direction"] == "up"
|
|
|
|
|
|
def test_too_few_valid_pairs_after_dropping():
|
|
values = [1, None, None, float("nan"), 5]
|
|
result = trend_slope(values)
|
|
assert result["slope"] is None
|
|
assert result["direction"] == "unknown"
|
|
assert result["n"] == 2
|