def test_data_past_ram_end_raises_indexerror(self, ram_size, location): vm = VM(memory_size=ram_size) # 1 after end of RAM data_len = 1 + ram_size - location with pytest.raises(IndexError): vm.load_to_memory(b"a" * data_len, location)
def load_rom_to_vm(path: PathOrStr, vm: VM = None, location: int = 0x200) -> VM: """ Utility function to load a rom to a VM's memory space. If the VM isn't provided, one is created. Raises an error if it's too big for the allotted VM. """ path = clean_path(path) vm = vm or VM() with open(path, "rb") as rom_file: rom_data = rom_file.read() rom_size = len(rom_data) mem_size = len(vm.memory) if rom_size > mem_size - vm.program_counter: raise IndexError(f"Rom file too big!" f"{rom_size} > {mem_size - vm.program_counter}") vm.load_to_memory(rom_data, location) return vm
def test_bad_type_on_data_causes_typerror(self): vm = VM() with pytest.raises(TypeError): vm.load_to_memory("bad", 0x200)
def test_good_values_sets_data(self, data): vm = VM() vm.load_to_memory(data, 0x200) assert vm.memory[0x200:0x204] == data
def test_negative_location_causes_indexerror(self): vm = VM() with pytest.raises(IndexError): vm.load_to_memory(b"aaa", -5)