def test_round_trip_generated_patches(echoes_game_data, default_preset): # Setup preset = dataclasses.replace( default_preset, base_preset_name=default_preset.name, configuration=dataclasses.replace( default_preset.configuration, trick_level=TrickLevelConfiguration( minimal_logic=True, specific_levels={}, game=RandovaniaGame.PRIME2, ) ) ) all_patches = generator._async_create_description( permalink=Permalink( seed_number=1000, spoiler=True, presets={0: preset}, ), status_update=lambda x: None, attempts=0, ).all_patches # Run encoded = game_patches_serializer.serialize(all_patches, {0: echoes_game_data}) decoded = game_patches_serializer.decode(encoded, {0: preset.configuration}) # Assert assert all_patches == decoded
def test_round_trip_generated_patches(echoes_game_data, preset_manager): # Setup preset = dataclasses.replace( preset_manager.default_preset, layout_configuration=dataclasses.replace( preset_manager.default_preset.layout_configuration, trick_level_configuration=TrickLevelConfiguration( global_level=LayoutTrickLevel.MINIMAL_RESTRICTIONS, specific_levels={}, ) ) ) patches = generator._create_randomized_patches( permalink=Permalink( seed_number=1000, spoiler=True, preset=preset, ), game=data_reader.decode_data(echoes_game_data), status_update=lambda x: None, ) # Run encoded = game_patches_serializer.serialize(patches, echoes_game_data) decoded = game_patches_serializer.decode(encoded, preset.layout_configuration) # Assert assert patches == decoded
def test_round_trip_generated_patches(echoes_game_data, preset_manager): # Setup preset = dataclasses.replace( preset_manager.default_preset, layout_configuration=dataclasses.replace( preset_manager.default_preset.layout_configuration, trick_level_configuration=TrickLevelConfiguration( global_level=LayoutTrickLevel.MINIMAL_RESTRICTIONS, specific_levels={}, ))) all_patches = generator._async_create_description( permalink=Permalink( seed_number=1000, spoiler=True, presets={0: preset}, ), status_update=lambda x: None, ).all_patches # Run encoded = game_patches_serializer.serialize(all_patches, {0: echoes_game_data}) decoded = game_patches_serializer.decode(encoded, {0: preset.layout_configuration}) # Assert assert all_patches == decoded
async def test_round_trip_generated_patches(default_preset): # Setup preset = dataclasses.replace( default_preset, uuid=uuid.UUID('b41fde84-1f57-4b79-8cd6-3e5a78077fa6'), base_preset_uuid=default_preset.uuid, configuration=dataclasses.replace(default_preset.configuration, trick_level=TrickLevelConfiguration( minimal_logic=True, specific_levels={}, game=default_preset.game, ))) description = await generator._create_description( permalink=Permalink( seed_number=1000, spoiler=True, presets={0: preset}, ), status_update=lambda x: None, attempts=0, ) all_patches = description.all_patches # Run encoded = game_patches_serializer.serialize(all_patches, {0: default_preset.game}) decoded = game_patches_serializer.decode(encoded, {0: preset.configuration}) # Assert assert all_patches == decoded
def test_round_trip_generated_patches(echoes_game_data): # Setup configuration = LayoutConfiguration.from_params( trick_level_configuration=TrickLevelConfiguration( global_level=LayoutTrickLevel.MINIMAL_RESTRICTIONS, specific_levels={}, )) patches = generator._create_randomized_patches( permalink=Permalink( seed_number=1000, spoiler=True, patcher_configuration=PatcherConfiguration.default(), layout_configuration=configuration, ), game=data_reader.decode_data(echoes_game_data), status_update=lambda x: None, ) # Run encoded = game_patches_serializer.serialize(patches, echoes_game_data) decoded = game_patches_serializer.decode(encoded, configuration) # Assert assert patches == decoded
async def test_round_trip_generated_patches(default_preset): # Setup preset = dataclasses.replace( default_preset, uuid=uuid.UUID('b41fde84-1f57-4b79-8cd6-3e5a78077fa6'), base_preset_uuid=default_preset.uuid, configuration=dataclasses.replace(default_preset.configuration, trick_level=TrickLevelConfiguration( minimal_logic=True, specific_levels={}, game=default_preset.game, ))) description = await generator._create_description( generator_params=GeneratorParameters( seed_number=1000, spoiler=True, presets=[preset], ), status_update=lambda x: None, attempts=0, ) all_patches = description.all_patches # Run encoded = game_patches_serializer.serialize(all_patches) decoded = game_patches_serializer.decode(encoded, {0: preset.configuration}) decoded_with_original_game = { i: dataclasses.replace(d, game=orig.game) for (i, d), orig in zip(decoded.items(), all_patches.values()) } # Assert assert all_patches == decoded_with_original_game
def _serialized_patches(self): cached_result = object.__getattribute__(self, "__cached_serialized_patches") if cached_result is None: cached_result = game_patches_serializer.serialize(self.all_patches) object.__setattr__(self, "__cached_serialized_patches", cached_result) return cached_result
def test_encode(patches_with_data, echoes_game_data): expected, patches = patches_with_data # Run encoded = game_patches_serializer.serialize(patches, echoes_game_data) # Assert for key, value in expected["locations"].items(): assert encoded["locations"][key] == value assert encoded == expected
def _serialized_patches(self): cached_result = object.__getattribute__(self, "__cached_serialized_patches") if cached_result is None: cached_result = game_patches_serializer.serialize( self.all_patches, { index: preset.configuration.game_data for index, preset in self.permalink.presets.items() }) object.__setattr__(self, "__cached_serialized_patches", cached_result) return cached_result
def as_json(self) -> dict: result = { "info": { "version": self.version, "permalink": self.permalink.as_json, } } if self.permalink.spoiler: result["game_modifications"] = game_patches_serializer.serialize( self.patches, self.permalink.layout_configuration.game_data) result["playthrough"] = [{ "path_from_previous": path.previous_nodes, "node": path.node_name, } for path in self.solver_path] return result
def _shareable_hash_bytes(self) -> bytes: dict_to_serialize = game_patches_serializer.serialize( self.patches, self.permalink.layout_configuration.game_data) bytes_representation = json.dumps(dict_to_serialize).encode() return hashlib.blake2b(bytes_representation, digest_size=5).digest()