import pytest from cq2_sdk.utils.encoding import encode6bit, decode6bit def test_encode_empty(): assert encode6bit(b"") == b"" def test_decode_empty(): assert decode6bit(b"") == b"" def test_encode_ascii_produces_printable(): # 3 input bytes -> 4 output bytes result = encode6bit(b"abc") assert isinstance(result, bytes) assert len(result) == 4 # All output bytes should be printable ASCII (>= 0x3B offset means >= 0x3B) for b in result: assert 0x3B <= b <= 0x3B + 0x3F # 0x3B to 0x7A def test_roundtrip_3_bytes(): original = b"abc" assert decode6bit(encode6bit(original)) == original def test_roundtrip_typical_password(): original = b"hello world 123 !@#" encoded = encode6bit(original) decoded = decode6bit(encoded) assert decoded == original @pytest.mark.parametrize("inp", [ b"a", b"ab", b"abcd", b"abcdef", b"a" * 100, b"\x00\xff\x7f\x80", bytes(range(256)), ]) def test_roundtrip_various_lengths(inp): encoded = encode6bit(inp) decoded = decode6bit(encoded) assert decoded == inp, f"failed for input of length {len(inp)}" def test_encode_known_vector_abc(): # Literal derived from the extracted substitution table and ARM64 codec. assert encode6bit(b"abc") == b"xK_H"