返回教程正文

配套源码

test_checksum.py

app/tests/test_checksum.py
zdt_motor Brick:用 Python 控制一台 ZDT 电机app/tests/test_checksum.py
Python52 行
"""ZDT 手册校验算法测试。"""

import unittest

from zdt_motor import ChecksumType
from zdt_motor.protocols import CRC8_TABLE, calculate_checksum, crc8_checksum


class ChecksumTests(unittest.TestCase):
    """校验 fixed 0x6B、XOR 和手册 CRC8。"""

    def test_fixed_6b(self):
        """
        @description         : 固定校验始终返回0x6B
        @param               : 无参数
        @return              : 无返回值
        """
        self.assertEqual(
            calculate_checksum(ChecksumType.FIXED_6B, 1, b"\x06\x45"),
            0x6B,
        )

    def test_xor_manual_example(self):
        """
        @description         : 校验手册01 06 45逐字节异或结果
        @param               : 无参数
        @return              : 无返回值
        """
        self.assertEqual(calculate_checksum("xor", 1, b"\x06\x45"), 0x42)

    def test_crc8_manual_table_example(self):
        """
        @description         : 校验手册查表算法处理01 06 45得到0x17
        @param               : 无参数
        @return              : 无返回值
        """
        self.assertEqual(crc8_checksum(b"\x01\x06\x45"), 0x17)
        self.assertEqual(calculate_checksum("crc8", 1, b"\x06\x45"), 0x17)

    def test_crc8_table_is_complete(self):
        """
        @description         : 防止手册256项CRC8表被截断
        @param               : 无参数
        @return              : 无返回值
        """
        self.assertEqual(len(CRC8_TABLE), 256)
        self.assertEqual(CRC8_TABLE[:8], (0x00, 0x5E, 0xBC, 0xE2, 0x61, 0x3F, 0xDD, 0x83))
        self.assertEqual(CRC8_TABLE[-8:], (0xB6, 0xE8, 0x0A, 0x54, 0xD7, 0x89, 0x6B, 0x35))


if __name__ == "__main__":
    unittest.main()