Add data_analysis_script/tests/test_core.py
This commit is contained in:
parent
d1c13ecae8
commit
ee9853b0c1
1 changed files with 54 additions and 0 deletions
54
data_analysis_script/tests/test_core.py
Normal file
54
data_analysis_script/tests/test_core.py
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
import pytest
|
||||
import math
|
||||
import numpy as np
|
||||
|
||||
from data_analysis_script import core
|
||||
|
||||
|
||||
def example_data():
|
||||
# Representative measurement records
|
||||
return [
|
||||
{"condition_name": "A", "amplitude": 1.0, "timestamp": 0.1},
|
||||
{"condition_name": "A", "amplitude": 2.0, "timestamp": 0.2},
|
||||
{"condition_name": "B", "amplitude": 5.0, "timestamp": 0.3},
|
||||
{"condition_name": "B", "amplitude": 7.0, "timestamp": 0.4},
|
||||
{"condition_name": "B", "amplitude": 20.0, "timestamp": 0.5}, # outlier
|
||||
]
|
||||
|
||||
|
||||
def test_analyze_data_returns_expected_structure():
|
||||
data = example_data()
|
||||
result = core.analyze_data(data)
|
||||
assert isinstance(result, dict)
|
||||
assert set(result.keys()) == {"median_amplitude", "outlier_rate", "statistical_significance"}
|
||||
assert isinstance(result["median_amplitude"], (float, int))
|
||||
assert isinstance(result["outlier_rate"], (float, int))
|
||||
assert isinstance(result["statistical_significance"], (float, int, np.floating))
|
||||
|
||||
|
||||
def test_median_and_outlier_logic():
|
||||
data = example_data()
|
||||
result = core.analyze_data(data)
|
||||
median_manual = np.median([d["amplitude"] for d in data])
|
||||
assert math.isclose(result["median_amplitude"], median_manual, rel_tol=1e-6)
|
||||
|
||||
# For outlier rate, expect roughly one outlier (20 vs lower values)
|
||||
total = len(data)
|
||||
outlier_estimate = 1 / total
|
||||
assert abs(result["outlier_rate"] - outlier_estimate) < 0.3
|
||||
|
||||
|
||||
def test_statistical_significance_between_conditions():
|
||||
data = example_data()
|
||||
result = core.analyze_data(data)
|
||||
# p-value should be between 0 and 1
|
||||
assert 0.0 <= result["statistical_significance"] <= 1.0
|
||||
|
||||
|
||||
def test_handles_empty_or_invalid_input():
|
||||
with pytest.raises(ValueError):
|
||||
core.analyze_data([])
|
||||
|
||||
invalid = [{"condition_name": "A", "amplitude": "x", "timestamp": 0.1}]
|
||||
with pytest.raises(ValueError):
|
||||
core.analyze_data(invalid)
|
||||
Loading…
Reference in a new issue