Skip to content

Commit 19bc76e

Browse files
committed
refactor: reorganize test mocks and improve test coverage
- Split mocks into separate files by responsibility - Add comprehensive mock implementations for online algorithms - Add edge case mocks (NaN, Inf, constant data, learning period) - Improve test structure with fixtures and parametrization - Enhance test coverage for edge cases and error conditions
1 parent dc82c16 commit 19bc76e

29 files changed

Lines changed: 3181 additions & 1033 deletions

tests/data_providers/test_idata_provider.py

Lines changed: 0 additions & 98 deletions
This file was deleted.

tests/data_providers/test_numpy_data_provider.py

Lines changed: 0 additions & 173 deletions
This file was deleted.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
"""
2+
Mock data providers for testing.
3+
4+
This module provides mock implementations of DataProvider for testing
5+
change-point detection algorithms.
6+
"""
7+
8+
from tests.mocks.data_providers.constant import MockConstantDataProvider
9+
from tests.mocks.data_providers.edge import (
10+
MockInfDataProvider,
11+
MockMultivariateEdgeDataProvider,
12+
MockNaNDataProvider,
13+
MockNegativeDataProvider,
14+
MockZeroDataProvider,
15+
)
16+
from tests.mocks.data_providers.empty import MockEmptyDataProvider
17+
from tests.mocks.data_providers.multivariate import MockMultivariateDataProvider
18+
from tests.mocks.data_providers.single import MockSingleObservationProvider
19+
from tests.mocks.data_providers.univariate import MockUnivariateDataProvider
20+
21+
__all__ = [
22+
"MockUnivariateDataProvider",
23+
"MockMultivariateDataProvider",
24+
"MockEmptyDataProvider",
25+
"MockSingleObservationProvider",
26+
"MockConstantDataProvider",
27+
"MockNaNDataProvider",
28+
"MockInfDataProvider",
29+
"MockNegativeDataProvider",
30+
"MockZeroDataProvider",
31+
"MockMultivariateEdgeDataProvider",
32+
]
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
"""
2+
Mock constant data provider for testing.
3+
"""
4+
5+
from collections.abc import Iterator
6+
7+
from pysatl_cpd._typing import Number
8+
from pysatl_cpd.data_providers import DataProvider
9+
10+
11+
class MockConstantDataProvider(DataProvider[Number]):
12+
"""
13+
Mock data provider that always returns the same value.
14+
15+
Useful for testing algorithms with constant data streams.
16+
17+
Parameters
18+
----------
19+
value : Number
20+
The constant value to return for each observation.
21+
length : int
22+
Number of observations to yield.
23+
"""
24+
25+
def __init__(self, value: Number, length: int) -> None:
26+
self._value = value
27+
self._length = length
28+
self._call_count = 0
29+
30+
def __iter__(self) -> Iterator[Number]:
31+
"""Return iterator yielding constant value `length` times."""
32+
self._call_count += 1
33+
return iter([self._value] * self._length)
34+
35+
def __len__(self) -> int:
36+
"""Return number of observations."""
37+
return self._length
38+
39+
def __getitem__(self, index: int) -> Number:
40+
"""Get observation at specific index."""
41+
if 0 <= index < self._length:
42+
return self._value
43+
raise IndexError("Index out of range")
44+
45+
def get_call_count(self) -> int:
46+
"""Return number of times __iter__ was called."""
47+
return self._call_count
48+
49+
def reset_call_count(self) -> None:
50+
"""Reset the call counter."""
51+
self._call_count = 0
52+
53+
def __repr__(self) -> str:
54+
"""Return string representation."""
55+
return f"MockConstantDataProvider(value={self._value}, length={self._length})"

0 commit comments

Comments
 (0)