def assert_differing_address(manager: ConstraintManager, rom: RomVariant, local_address: int, virtual_address: int) -> None: if local_address != -1: assert virtual_address == manager.to_virtual(rom, local_address) assert local_address == manager.to_local(rom, virtual_address)
def process(self) -> None: print('Start processing') progress = 0 # Test using a constraint manager with all variations manager = ConstraintManager({ RomVariant.USA, RomVariant.JP, RomVariant.EU, RomVariant.DEMO, RomVariant.DEMO_JP }) constraint_database = get_constraint_database() constraints = constraint_database.get_constraints() i = 0 count = len(constraints) for constraint in constraints: if not constraint.enabled: i = i + 1 continue # test if constraint is redundant va_a = manager.to_virtual(constraint.romA, constraint.addressA) va_b = manager.to_virtual(constraint.romB, constraint.addressB) if va_a == va_b: print(f'Disable {constraint}') constraint.enabled = False else: #print(f'Keep {constraint}') manager.add_constraint(constraint) try: manager.rebuild_relations() except InvalidConstraintError as e: print(e) print(constraint) self.signal_fail.emit() return i = i + 1 new_progress = (i * 50) // count if new_progress != progress: progress = new_progress self.signal_progress.emit(new_progress) self.signal_progress.emit(50) i = 0 # Test that there are no disabled constraints that are still needed for constraint in constraints: if constraint.enabled: i = i + 1 continue # test if constraint is redundant va_a = manager.to_virtual(constraint.romA, constraint.addressA) va_b = manager.to_virtual(constraint.romB, constraint.addressB) if va_a != va_b: print(f'Need to reenable {constraint}') constraint.enabled = True manager.add_constraint(constraint) try: manager.rebuild_relations() except InvalidConstraintError as e: print(e) print(constraint) self.signal_fail.emit() return i = i + 1 new_progress = (i * 50) // count + 50 if new_progress != progress: progress = new_progress self.signal_progress.emit(new_progress) constraint_database._write_constraints( ) # TODO add a public method to update changed constraints in the database? constraint_database.constraints_changed.emit() self.signal_done.emit()
def assert_same_address(manager: ConstraintManager, rom: RomVariant, address: int) -> None: assert address == manager.to_virtual(rom, address) assert address == manager.to_local(rom, address)