@@ -192,6 +192,67 @@ def test_timestamp_ringbuffer_missing_parameter(
192192 assert len (buffer .gaps ) == 1
193193
194194
195+ def dt (i : int ) -> datetime : # pylint: disable=invalid-name
196+ """Create datetime objects from indices.
197+
198+ Args:
199+ i: Index to create datetime from.
200+
201+ Returns:
202+ Datetime object.
203+ """
204+ return datetime .fromtimestamp (i , tz = timezone .utc )
205+
206+
207+ def test_gaps () -> None :
208+ """Test gap treatment in ordered ring buffer."""
209+ buffer = OrderedRingBuffer ([0.0 ] * 5 , ONE_SECOND )
210+ assert len (buffer ) == 0
211+ assert len (buffer .gaps ) == 0
212+
213+ buffer .update (Sample (dt (0 ), Quantity (0 )))
214+ assert len (buffer ) == 1
215+ assert len (buffer .gaps ) == 1
216+
217+ buffer .update (Sample (dt (6 ), Quantity (0 )))
218+ assert len (buffer ) == 1
219+ assert len (buffer .gaps ) == 1
220+
221+ buffer .update (Sample (dt (2 ), Quantity (2 )))
222+ buffer .update (Sample (dt (3 ), Quantity (3 )))
223+ buffer .update (Sample (dt (4 ), Quantity (4 )))
224+ assert len (buffer ) == 4
225+ assert len (buffer .gaps ) == 1
226+
227+ buffer .update (Sample (dt (3 ), None ))
228+ assert len (buffer ) == 3
229+ assert len (buffer .gaps ) == 2
230+
231+ buffer .update (Sample (dt (3 ), Quantity (np .nan )))
232+ assert len (buffer ) == 4 # should be 3
233+ assert len (buffer .gaps ) == 1 # should be 2
234+
235+ buffer .update (Sample (dt (2 ), Quantity (np .nan )))
236+ assert len (buffer ) == 4 # should be 2
237+ assert len (buffer .gaps ) == 1 # should be 2
238+
239+ buffer .update (Sample (dt (3 ), Quantity (3 )))
240+ assert len (buffer ) == 4 # should be 3
241+ assert len (buffer .gaps ) == 1 # should be 2
242+
243+ buffer .update (Sample (dt (2 ), Quantity (2 )))
244+ assert len (buffer ) == 4
245+ assert len (buffer .gaps ) == 1
246+
247+ buffer .update (Sample (dt (5 ), Quantity (5 )))
248+ assert len (buffer ) == 5
249+ assert len (buffer .gaps ) == 0
250+
251+ buffer .update (Sample (dt (99 ), None ))
252+ assert len (buffer ) == 4 # bug: should be 0 (whole range gap)
253+ assert len (buffer .gaps ) == 1
254+
255+
195256@pytest .mark .parametrize (
196257 "buffer" ,
197258 [
0 commit comments