def test_relative_count( initial_value_block_0: int, initial_value_block_1: int, initial_value_block_2: int, add_0: int, add_1: int, add_2: int, ) -> None: assume(initial_value_block_0 + add_0 <= 512) assume(initial_value_block_1 + add_1 <= 512) assume(initial_value_block_2 + add_2 <= 512) initial_values = [ initial_value_block_0, initial_value_block_1, initial_value_block_2 ] adds = [add_0, add_1, add_2] packed_count = 0 for basic_block_index, initial_value in enumerate(initial_values): packed_count = Poppy._add_relative_count( basic_block_index=basic_block_index, packed_relative_counts=packed_count, pop_count=initial_value) for basic_block_index, initial_value in enumerate(initial_values): assert Poppy._get_relative_count( basic_block_index=basic_block_index, packed_relative_counts=packed_count) == initial_value for basic_block_index, add in enumerate(adds): packed_count = Poppy._add_relative_count( basic_block_index=basic_block_index, packed_relative_counts=packed_count, pop_count=add) for basic_block_index, (initial_value, add) in enumerate(zip(initial_values, adds)): assert Poppy._get_relative_count( basic_block_index=basic_block_index, packed_relative_counts=packed_count) == initial_value + add
def test_l2_layer(bb: bytes) -> None: assume(len(bb) % 8 == 0) bits = bitarray() bits.frombytes(bb) poppy = Poppy(bits) for byte_offset in range(0, len(bb), 64): basic_block_idx = (byte_offset % 256) // 64 if basic_block_idx != 3: # Calculate the sum of the bits in the 64-byte block. bit_start = 8 * byte_offset bit_end = min(len(bits), bit_start + 512) expected_pop_count = sum(bits[bit_start:bit_end]) level_2_idx = (byte_offset // 256) * 2 + 1 packed_relative_counts = poppy._level_1[level_2_idx] actual_pop_count = poppy._get_relative_count( basic_block_index=basic_block_idx, packed_relative_counts=packed_relative_counts) assert expected_pop_count == actual_pop_count