Skip to content

Commit f224b0f

Browse files
author
Benjamin Moody
committed
Add test cases for time conversion functions.
Test that the get_frame_number, get_elapsed_time, and get_absolute_time methods work correctly, for both Record and MultiRecord objects.
1 parent 6c135b1 commit f224b0f

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

tests/test_record.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import datetime
12
import os
23
import shutil
34
import unittest
@@ -817,6 +818,68 @@ def test_multi_variable_d(self):
817818
assert record.__eq__(record_named)
818819

819820

821+
class TestTimeConversion(unittest.TestCase):
822+
"""
823+
Test cases for time conversion
824+
"""
825+
826+
def test_single(self):
827+
"""
828+
Time conversion for a single-segment record
829+
830+
This checks the get_frame_number, get_elapsed_time, and
831+
get_absolute_time methods for a Record object. The example record
832+
has no base date defined, so attempting to convert to/from absolute
833+
time should raise an exception.
834+
835+
"""
836+
header = wfdb.rdheader("sample-data/test01_00s")
837+
838+
# these time values should be equivalent
839+
n = 123 * header.fs
840+
t = datetime.timedelta(seconds=123)
841+
self.assertEqual(header.get_frame_number(n), n)
842+
self.assertEqual(header.get_frame_number(t), n)
843+
self.assertEqual(header.get_elapsed_time(n), t)
844+
self.assertEqual(header.get_elapsed_time(t), t)
845+
846+
# record test01_00s has no base date, so absolute time conversions
847+
# should fail
848+
self.assertIsNone(header.base_date)
849+
d = datetime.datetime(2001, 1, 1, 12, 0, 0)
850+
self.assertRaises(ValueError, header.get_frame_number, d)
851+
self.assertRaises(ValueError, header.get_absolute_time, n)
852+
self.assertRaises(ValueError, header.get_absolute_time, t)
853+
854+
def test_multisegment_with_date(self):
855+
"""
856+
Time conversion for a multi-segment record with base date
857+
858+
This checks the get_frame_number, get_elapsed_time, and
859+
get_absolute_time methods for a MultiRecord object. The example
860+
record has a base date, so we can convert timestamps between all
861+
three of the supported representations.
862+
863+
"""
864+
header = wfdb.rdheader(
865+
"sample-data/multi-segment/p000878/p000878-2137-10-26-16-57"
866+
)
867+
868+
# these time values should be equivalent
869+
n = 123 * header.fs
870+
t = datetime.timedelta(seconds=123)
871+
d = t + header.base_datetime
872+
self.assertEqual(header.get_frame_number(n), n)
873+
self.assertEqual(header.get_frame_number(t), n)
874+
self.assertEqual(header.get_frame_number(d), n)
875+
self.assertEqual(header.get_elapsed_time(n), t)
876+
self.assertEqual(header.get_elapsed_time(t), t)
877+
self.assertEqual(header.get_elapsed_time(d), t)
878+
self.assertEqual(header.get_absolute_time(n), d)
879+
self.assertEqual(header.get_absolute_time(t), d)
880+
self.assertEqual(header.get_absolute_time(d), d)
881+
882+
820883
class TestSignal(unittest.TestCase):
821884
"""
822885
For lower level signal tests

0 commit comments

Comments
 (0)