|
| 1 | +import pytest |
| 2 | +import numpy as np |
| 3 | +from typing import Optional, Type |
| 4 | +from contextlib import nullcontext |
| 5 | +from pytest import mark |
| 6 | +from pathlib import Path |
| 7 | +from dataclasses import dataclass |
| 8 | +from harp.io import read |
| 9 | + |
| 10 | +datapath = Path(__file__).parent |
| 11 | + |
| 12 | + |
| 13 | +@dataclass |
| 14 | +class DataFileParam: |
| 15 | + path: str |
| 16 | + expected_rows: int |
| 17 | + expected_address: Optional[int] = None |
| 18 | + expected_dtype: Optional[np.dtype] = None |
| 19 | + expected_length: Optional[int] = None |
| 20 | + expected_error: Optional[Type[BaseException]] = None |
| 21 | + |
| 22 | + def __post_init__(self): |
| 23 | + self.path = datapath / self.path |
| 24 | + |
| 25 | + |
| 26 | +testdata = [ |
| 27 | + DataFileParam(path="data/device_0.bin", expected_rows=1), |
| 28 | + DataFileParam( |
| 29 | + path="data/device_0.bin", |
| 30 | + expected_rows=1, |
| 31 | + expected_address=1, # actual address is 0 |
| 32 | + expected_error=ValueError, |
| 33 | + ), |
| 34 | + DataFileParam( |
| 35 | + path="data/device_0.bin", |
| 36 | + expected_rows=1, |
| 37 | + expected_dtype="uint8", # actual dtype is uint16 |
| 38 | + expected_error=ValueError, |
| 39 | + ), |
| 40 | + DataFileParam( |
| 41 | + path="data/device_0.bin", |
| 42 | + expected_rows=1, |
| 43 | + expected_length=2, # actual length is 1 |
| 44 | + expected_error=ValueError, |
| 45 | + ), |
| 46 | +] |
| 47 | + |
| 48 | + |
| 49 | +@mark.parametrize("dataFile", testdata) |
| 50 | +def test_read(dataFile: DataFileParam): |
| 51 | + context = pytest.raises if dataFile.expected_error is not None else nullcontext |
| 52 | + with context(dataFile.expected_error): |
| 53 | + data = read( |
| 54 | + dataFile.path, |
| 55 | + address=dataFile.expected_address, |
| 56 | + dtype=dataFile.expected_dtype, |
| 57 | + length=dataFile.expected_length, |
| 58 | + ) |
| 59 | + assert len(data) == dataFile.expected_rows |
| 60 | + |
| 61 | + |
| 62 | +if __name__ == "__main__": |
| 63 | + pytest.main() |
0 commit comments