import binascii import struct import pytest from .helpers import Suite @pytest.mark.integration_test def test_crc32(): # FIXME: Stub # crc = 0xFFFFFFFF # byt = 0x61 # => (crc >> 8) ^ _CRC32_Table[(crc & 0xFF) ^ byt] # (crc >> 8) = 0x00FFFFFF # => 0x00FFFFFF ^ _CRC32_Table[(crc & 0xFF) ^ byt] # (crc & 0xFF) = 0xFF # => 0x00FFFFFF ^ _CRC32_Table[0xFF ^ byt] # 0xFF ^ 0x61 = 0x9E # => 0x00FFFFFF ^ _CRC32_Table[0x9E] # _CRC32_Table[0x9E] = 0x17b7be43 # => 0x00FFFFFF ^ 0x17b7be43 code_py = """ def _crc32_f(crc: u32, byt: u8) -> u32: return 16777215 ^ 397917763 def testEntry(data: bytes) -> u32: return 4294967295 ^ _crc32_f(4294967295, data[0]) """ exp_result = binascii.crc32(b'a') result = Suite(code_py).run_code(b'a') # exp_result returns a unsigned integer, as is proper exp_data = struct.pack('I', exp_result) # ints extracted from WebAssembly are always signed data = struct.pack('i', result.returned_value) assert exp_data == data