def test_segment_relocations(): memory = MemoryDict() temp_segment = RelocatableValue(segment_index=-1, offset=0) memory[5] = temp_segment + 2 assert memory[5] == RelocatableValue(segment_index=-1, offset=2) relocation_target = RelocatableValue(segment_index=4, offset=25) memory.add_relocation_rule(src_ptr=temp_segment, dest_ptr=relocation_target) assert memory[5] == relocation_target + 2 memory[temp_segment + 3] = 17 memory.relocate_memory() assert memory.data == { 5: relocation_target + 2, relocation_target + 3: 17, }
def test_segment_relocation_failures(): memory = MemoryDict() relocation_target = RelocatableValue(segment_index=4, offset=25) with pytest.raises(AssertionError, match='src_ptr.segment_index must be < 0, src_ptr=1:2.'): memory.add_relocation_rule(src_ptr=RelocatableValue( segment_index=1, offset=2), dest_ptr=relocation_target) with pytest.raises(AssertionError, match='src_ptr.offset must be 0, src_ptr=-3:2.'): memory.add_relocation_rule(src_ptr=RelocatableValue( segment_index=-3, offset=2), dest_ptr=relocation_target) memory.add_relocation_rule(src_ptr=RelocatableValue( segment_index=-3, offset=0), dest_ptr=relocation_target) with pytest.raises( AssertionError, match='The segment with index -3 already has a relocation rule.'): memory.add_relocation_rule(src_ptr=RelocatableValue( segment_index=-3, offset=0), dest_ptr=relocation_target)