🎉 Initial commit
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
"""Quality decode tests (SPECIFICATION §7)."""
|
||||
|
||||
import pytest
|
||||
|
||||
from opcda_diagnozer.quality import QualityClass, decode_quality
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("raw", "name", "quality_class"),
|
||||
[
|
||||
(0xC0, "GOOD", QualityClass.GOOD),
|
||||
(0xD8, "GOOD_LOCAL_OVERRIDE", QualityClass.GOOD),
|
||||
(0x44, "UNCERTAIN_LAST_USABLE", QualityClass.UNCERTAIN),
|
||||
(0x40, "UNCERTAIN", QualityClass.UNCERTAIN),
|
||||
(0x00, "BAD", QualityClass.BAD),
|
||||
(0x04, "BAD_CONFIG_ERROR", QualityClass.BAD),
|
||||
(0x08, "BAD_NOT_CONNECTED", QualityClass.BAD),
|
||||
(0x0C, "BAD_DEVICE_FAILURE", QualityClass.BAD),
|
||||
(0x10, "BAD_SENSOR_FAILURE", QualityClass.BAD),
|
||||
(0x14, "BAD_LAST_KNOWN_VALUE", QualityClass.BAD),
|
||||
(0x18, "BAD_COMM_FAILURE", QualityClass.BAD),
|
||||
(0x1C, "BAD_OUT_OF_SERVICE", QualityClass.BAD),
|
||||
],
|
||||
)
|
||||
def test_spec_table_decodes(raw: int, name: str, quality_class: QualityClass) -> None:
|
||||
info = decode_quality(raw)
|
||||
assert info.name == name
|
||||
assert info.quality_class is quality_class
|
||||
assert info.raw_hex == f"0x{raw:02X}"
|
||||
|
||||
|
||||
def test_unknown_code_falls_back_to_class() -> None:
|
||||
info = decode_quality(0x20)
|
||||
assert info.quality_class is QualityClass.BAD
|
||||
assert info.name.startswith("BAD_")
|
||||
|
||||
|
||||
def test_class_bits_come_from_low_byte() -> None:
|
||||
# 16-bit quality word: the high byte must not affect the class (§7)
|
||||
assert decode_quality(0x0118).quality_class is QualityClass.BAD
|
||||
assert decode_quality(0xFFC0).quality_class is QualityClass.GOOD
|
||||
Reference in New Issue
Block a user