diff --git a/ir_gain_test/tests/test_core.py b/ir_gain_test/tests/test_core.py new file mode 100644 index 0000000..b1fc2c9 --- /dev/null +++ b/ir_gain_test/tests/test_core.py @@ -0,0 +1,55 @@ +import pytest +import pandas as pd +from ir_gain_test import core + +@pytest.fixture +def sample_intensity_data(): + return [ + {"timestamp": "2024-06-12T20:00:00", "gain_value": 1.0, "intensity": 200.0}, + {"timestamp": "2024-06-12T20:00:01", "gain_value": 2.0, "intensity": 400.0}, + {"timestamp": "2024-06-12T20:00:02", "gain_value": 3.0, "intensity": 380.0}, + {"timestamp": "2024-06-12T20:00:03", "gain_value": 4.0, "intensity": 390.0} + ] + + +def test_analyze_ir_gain_basic(sample_intensity_data): + gains = [1.0, 2.0, 3.0, 4.0] + report = core.analyze_ir_gain(gains, sample_intensity_data) + + assert isinstance(report, dict) + assert set(report.keys()) == {"mean_intensity", "signal_to_noise_ratio", "optimal_gain"} + assert pytest.approx(report["mean_intensity"], rel=1e-3) == 342.5 + assert report["signal_to_noise_ratio"] > 0 + assert 1.0 <= report["optimal_gain"] <= 4.0 + + +def test_analyze_ir_gain_missing_data(): + gains = [1.0, 2.0] + data = [ + {"timestamp": "2024-06-12T20:00:00", "gain_value": 1.0, "intensity": 150.0}, + # Missing gain 2.0 intentionally + ] + report = core.analyze_ir_gain(gains, data) + + assert isinstance(report, dict) + assert report["mean_intensity"] == pytest.approx(150.0) + assert report["signal_to_noise_ratio"] >= 0 + + +def test_analyze_ir_gain_edge_zero_intensity(): + gains = [1.0, 2.0, 3.0] + data = [ + {"timestamp": "2024-06-12T20:00:00", "gain_value": 1.0, "intensity": 0.0}, + {"timestamp": "2024-06-12T20:00:01", "gain_value": 2.0, "intensity": 0.0}, + {"timestamp": "2024-06-12T20:00:02", "gain_value": 3.0, "intensity": 0.0}, + ] + report = core.analyze_ir_gain(gains, data) + + assert report["mean_intensity"] == 0.0 + assert report["signal_to_noise_ratio"] == 0.0 + assert report["optimal_gain"] == pytest.approx(1.0) + + +def test_analyze_ir_gain_invalid_input(): + with pytest.raises((TypeError, ValueError)): + core.analyze_ir_gain([], []) \ No newline at end of file