Use half-open intervals for time ranges
This commit is contained in:
parent
5175c349aa
commit
12acb677e6
@ -94,7 +94,7 @@ class Chunk(NamedTuple):
|
|||||||
class TopicInfo(NamedTuple):
|
class TopicInfo(NamedTuple):
|
||||||
"""Topic information."""
|
"""Topic information."""
|
||||||
|
|
||||||
conn_count: int
|
conncount: int
|
||||||
msgcount: int
|
msgcount: int
|
||||||
msgdef: str
|
msgdef: str
|
||||||
msgtype: str
|
msgtype: str
|
||||||
@ -472,7 +472,7 @@ class Reader:
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def end_time(self) -> int:
|
def end_time(self) -> int:
|
||||||
"""Timestamp in nanoseconds of the latest message."""
|
"""Timestamp in nanoseconds after the latest message."""
|
||||||
return max(x.end_time for x in self.chunk_infos)
|
return max(x.end_time for x in self.chunk_infos)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -517,7 +517,7 @@ class Reader:
|
|||||||
|
|
||||||
chunk_pos = header.get_uint64('chunk_pos')
|
chunk_pos = header.get_uint64('chunk_pos')
|
||||||
start_time = header.get_time('start_time')
|
start_time = header.get_time('start_time')
|
||||||
end_time = header.get_time('end_time')
|
end_time = header.get_time('end_time') + 1
|
||||||
count = header.get_uint32('count')
|
count = header.get_uint32('count')
|
||||||
|
|
||||||
self.bio.seek(4, os.SEEK_CUR)
|
self.bio.seek(4, os.SEEK_CUR)
|
||||||
|
|||||||
@ -121,7 +121,7 @@ class Reader:
|
|||||||
@property
|
@property
|
||||||
def duration(self) -> int:
|
def duration(self) -> int:
|
||||||
"""Duration in nanoseconds between earliest and latest messages."""
|
"""Duration in nanoseconds between earliest and latest messages."""
|
||||||
return self.metadata['duration']['nanoseconds']
|
return self.metadata['duration']['nanoseconds'] + 1
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def start_time(self) -> int:
|
def start_time(self) -> int:
|
||||||
@ -130,7 +130,7 @@ class Reader:
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def end_time(self) -> int:
|
def end_time(self) -> int:
|
||||||
"""Timestamp in nanoseconds of the latest message."""
|
"""Timestamp in nanoseconds after the latest message."""
|
||||||
return self.start_time + self.duration
|
return self.start_time + self.duration
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|||||||
@ -185,7 +185,7 @@ class Writer: # pylint: disable=too-many-instance-attributes
|
|||||||
self.cursor = None
|
self.cursor = None
|
||||||
|
|
||||||
duration, start, count = self.conn.execute(
|
duration, start, count = self.conn.execute(
|
||||||
'SELECT max(timestamp) - min(timestamp) + 1, min(timestamp), count(*) FROM messages',
|
'SELECT max(timestamp) - min(timestamp), min(timestamp), count(*) FROM messages',
|
||||||
).fetchone()
|
).fetchone()
|
||||||
|
|
||||||
self.conn.commit()
|
self.conn.commit()
|
||||||
|
|||||||
@ -120,9 +120,9 @@ def bag(request: SubRequest, tmp_path: Path) -> Path:
|
|||||||
def test_reader(bag: Path):
|
def test_reader(bag: Path):
|
||||||
"""Test reader and deserializer on simple bag."""
|
"""Test reader and deserializer on simple bag."""
|
||||||
with Reader(bag) as reader:
|
with Reader(bag) as reader:
|
||||||
assert reader.duration == 42
|
assert reader.duration == 43
|
||||||
assert reader.start_time == 666
|
assert reader.start_time == 666
|
||||||
assert reader.end_time == 708
|
assert reader.end_time == 709
|
||||||
assert reader.message_count == 4
|
assert reader.message_count == 4
|
||||||
if reader.compression_mode:
|
if reader.compression_mode:
|
||||||
assert reader.compression_format == 'zstd'
|
assert reader.compression_format == 'zstd'
|
||||||
|
|||||||
@ -198,9 +198,9 @@ def test_reader(tmp_path): # pylint: disable=too-many-statements
|
|||||||
)
|
)
|
||||||
with Reader(bag) as reader:
|
with Reader(bag) as reader:
|
||||||
assert reader.message_count == 1
|
assert reader.message_count == 1
|
||||||
assert reader.duration == 0
|
assert reader.duration == 1
|
||||||
assert reader.start_time == 42 * 10**9
|
assert reader.start_time == 42 * 10**9
|
||||||
assert reader.end_time == 42 * 10**9
|
assert reader.end_time == 42 * 10**9 + 1
|
||||||
assert len(reader.topics.keys()) == 1
|
assert len(reader.topics.keys()) == 1
|
||||||
assert reader.topics['/topic0'].msgcount == 1
|
assert reader.topics['/topic0'].msgcount == 1
|
||||||
msgs = list(reader.messages())
|
msgs = list(reader.messages())
|
||||||
@ -220,9 +220,9 @@ def test_reader(tmp_path): # pylint: disable=too-many-statements
|
|||||||
)
|
)
|
||||||
with Reader(bag) as reader:
|
with Reader(bag) as reader:
|
||||||
assert reader.message_count == 2
|
assert reader.message_count == 2
|
||||||
assert reader.duration == 5 * 10**9
|
assert reader.duration == 5 * 10**9 + 1
|
||||||
assert reader.start_time == 5 * 10**9
|
assert reader.start_time == 5 * 10**9
|
||||||
assert reader.end_time == 10 * 10**9
|
assert reader.end_time == 10 * 10**9 + 1
|
||||||
assert len(reader.topics.keys()) == 1
|
assert len(reader.topics.keys()) == 1
|
||||||
assert reader.topics['/topic0'].msgcount == 2
|
assert reader.topics['/topic0'].msgcount == 2
|
||||||
msgs = list(reader.messages())
|
msgs = list(reader.messages())
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user