diff --git a/tests/lib/test_ts_operators.py b/tests/lib/test_ts_operators.py index 369c8f35c44afe8fef4567ddb9e356546f2f82f9..4b6afaa81914648017c20ccc410d6e36e3ec2642 100644 --- a/tests/lib/test_ts_operators.py +++ b/tests/lib/test_ts_operators.py @@ -6,6 +6,7 @@ import pytest import saqc.lib.ts_operators as tsops import pandas as pd +from pandas.testing import assert_series_equal def test_butterFilter(): @@ -45,3 +46,62 @@ F = False def test__exceedConsecutiveNanLimit(arr, maxc, expected): result = tsops._exceedConsecutiveNanLimit(arr, maxc) assert result is expected + + +def dtSeries(data, freq="1d"): + index = pd.date_range(start="2020", periods=len(data), freq=freq) + return pd.Series(data=data, index=index, dtype=float) + + +@pytest.mark.parametrize( + "func,data,expected", + [ + ("identity", dtSeries([1, 2]), dtSeries([1, 2])), + ("count", dtSeries([0, 0]), dtSeries([2])), + pytest.param( + "first", + dtSeries([1, 2]), + dtSeries([1, 1]), + marks=pytest.mark.xfail(reason="BUG (the inner ts.first need an argument)"), + ), + pytest.param( + "last", + dtSeries([1, 2]), + dtSeries([1, 1]), + marks=pytest.mark.xfail(reason="BUG (the inner ts.last need an argument)"), + ), + ( + "zeroLog", + dtSeries([1, 2, np.inf, np.nan]), + dtSeries([np.log(1), np.log(2), np.inf, np.nan]), + ), + pytest.param( + "zeroLog", + dtSeries( + [ + # 0, + -2, + -1, + -np.inf, + ] + ), + dtSeries([np.nan, np.nan, np.nan]), + marks=pytest.mark.xfail(reason="zeroLog(0) did not return NaN"), + ), + ], +) +def test_tsop_functions(func, data, expected): + f = getattr(tsops, func) + + resampler = data.resample("2d") + + result = resampler.apply(f) + assert isinstance(result, pd.Series) + + print() + print(result) + print() + print(expected) + assert_series_equal( + result, expected, check_names=False, check_freq=False, check_dtype=False + )