|
| 1 | +import datetime |
1 | 2 | import os
|
2 | 3 | import shutil
|
3 | 4 | import unittest
|
@@ -817,6 +818,68 @@ def test_multi_variable_d(self):
|
817 | 818 | assert record.__eq__(record_named)
|
818 | 819 |
|
819 | 820 |
|
| 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 | + |
820 | 883 | class TestSignal(unittest.TestCase):
|
821 | 884 | """
|
822 | 885 | For lower level signal tests
|
|
0 commit comments