Skip to content

Commit f01f37e

Browse files
committed
Add tests for window method in ring buffer
Test for expected copy behavior on missing values does not work as documented. Signed-off-by: cwasicki <[email protected]>
1 parent a8f3d62 commit f01f37e

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

tests/timeseries/test_ringbuffer.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from frequenz.sdk.timeseries import Sample
1717
from frequenz.sdk.timeseries._quantities import Quantity
1818
from frequenz.sdk.timeseries._ringbuffer import Gap, OrderedRingBuffer
19+
from frequenz.sdk.timeseries._ringbuffer.buffer import FloatArray
1920

2021
FIVE_MINUTES = timedelta(minutes=5)
2122
ONE_MINUTE = timedelta(minutes=1)
@@ -412,3 +413,42 @@ def test_delete_oudated_gap() -> None:
412413
buffer.update(Sample(datetime.fromtimestamp(202, tz=timezone.utc), Quantity(2)))
413414

414415
assert len(buffer.gaps) == 0
416+
417+
418+
def dt(i: int) -> datetime: # pylint: disable=invalid-name
419+
"""Create datetime objects from indices.
420+
421+
Args:
422+
i: Index to create datetime from.
423+
424+
Returns:
425+
Datetime object.
426+
"""
427+
return datetime.fromtimestamp(i, tz=timezone.utc)
428+
429+
430+
def get_orb(data: FloatArray) -> OrderedRingBuffer[FloatArray]:
431+
"""Get OrderedRingBuffer with data.
432+
433+
Args:
434+
data: Data to fill the buffer with.
435+
436+
Returns:
437+
OrderedRingBuffer with data.
438+
"""
439+
buffer = OrderedRingBuffer(data, ONE_SECOND)
440+
for i, d in enumerate(data): # pylint: disable=invalid-name
441+
buffer.update(Sample(dt(i), Quantity(d) if d is not None else None))
442+
return buffer
443+
444+
445+
def test_window() -> None:
446+
"""Test the window function."""
447+
buffer = get_orb(np.array([0, None, 2, 3, 4]))
448+
win = buffer.window(dt(0), dt(3), force_copy=False)
449+
assert [0, np.nan, 2] == list(win)
450+
buffer._buffer[1] = 1 # pylint: disable=protected-access
451+
# Test whether the window is a view or a copy
452+
assert [0, 1, 2] == list(win) # NB: second element should be NaN according to docs
453+
win = buffer.window(dt(0), dt(3), force_copy=False)
454+
assert [0, 1, 2] == list(win)

0 commit comments

Comments
 (0)