§
    ½º¾jW9  ã                  ó$  — d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlZddlmZmZ ddlZddlmZmZmZmZ ddlmZmZ ddlmZmZmZmZmZ ddlmZm Z m!Z!m"Z"  G d	„ d
¦  «        Z# G d„ d¦  «        Z$ G d„ d¦  «        Z% G d„ d¦  «        Z&dS )zZUnit test suite for FreeExile Milestone M1: Procedural Tile Map Pipeline Server to Client.é    )ÚannotationsN)ÚListÚTuple)ÚTileTypeÚTileCellÚMapGridDataÚEncounterZone)ÚWildernessMapGeneratorÚZONE_DEFAULT_SIZES)Úserialize_map_gridÚdeserialize_map_gridÚHEADER_MAGICÚHEADER_SIZEÚBIOME_TO_CODE)ÚProceduralMapEngineÚgenerate_wilderness_mapÚverify_path_connectivityÚcalculate_path_sinuosityc                  ó"   — e Zd ZdZdd„Zdd„ZdS )ÚTestTileTypeEnumExpansionz2Verifies TileType codes 0-19 and behavior methods.ÚreturnÚNonec                óˆ  — i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“d#d$d%d&œ¥}|                      ¦   «         D ]Ñ\  }}t          |         }|j        }||k    }|sªt          j        d'|fd(||f¦  «        t          j        |¦  «        t          j        |¦  «        d)t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd)d*œz  }d+d,|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}ŒÒt          t          ¦  «        }d-}	||	k    }|süt          j        d'|fd.||	f¦  «        d/t          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd/d0t          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd0t          j        |¦  «        t          j        |	¦  «        d1œz  }
d2d3|
iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}	d S )4NÚVOIDr   ÚFLOORé   ÚWALLé   ÚDESTRUCTIBLE_BARRICADEé   ÚMUD_POOLé   Ú
SPIKE_TRAPé   ÚCRUMBLED_DEBRISé   Ú	BONE_PILEé   ÚPOISON_VENTé   ÚCHASMé	   Ú	BOSS_GATEé
   Ú
BOSS_ALTARé   ÚRUNIC_FLOORé   ÚPATHé   ÚDENSE_TERRAINé   ÚPOIé   ÚENCOUNTER_LOWé   é   é   é   )ÚENCOUNTER_MEDIUMÚENCOUNTER_HIGHÚWATER©ú==)z-%(py3)s
{%(py3)s = %(py1)s.value
} == %(py5)sÚcode)Úpy1Úpy3Úpy5zassert %(py7)sÚpy7é   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenr   ©Úpy0rD   rE   Úpy6úassert %(py8)sÚpy8)Úitemsr   ÚvalueÚ
@pytest_arÚ_call_reprcompareÚ	_safereprÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚAssertionErrorÚ_format_explanationrI   )ÚselfÚexpectedÚnamerC   Ú@py_assert0Ú@py_assert2Ú@py_assert4Ú@py_format6Ú@py_format8Ú@py_assert5Ú@py_format7Ú@py_format9s               úAC:\Projects\FreeExile\tests\unit\test_wilderness_map_generator.pyÚ%test_all_twenty_tile_codes_registeredz?TestTileTypeEnumExpansion.test_all_twenty_tile_codes_registered   s  € ð
Ø�Að
Ø ð
Ø#)¨1ð
Ø.FÈð
ØKUÐWXð
à˜!ð
à.°ð
à3>Àð
àCPÐRSð
àU\Ð^_ð
ð ˜ð
ð *¨2ð
ð 0=¸bð
ð CIÈ"ð
ð O^Ð_að
ð �2ð	
ð '¨ð	
ð ACÐVXÐceð	
ð 
ð 
ˆð #Ÿ.š.Ñ*Ô*ð 	0ð 	0‰JˆD�$Ý˜D”>Ð/�>Ô'Ð/Ð'¨4Ò/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð'¨4Ð/Ñ/Ô/Õ/Ô/�>Ñ/Ô/Õ/Ô/Ð'Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/¨4Ñ/Ô/Ð/Õ/Ô/¨4Ñ/Ô/Ð/Ð/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ý•8‰}Œ}Ð" Ð"ˆ} Ò"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆ} Ð"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"�sÑ"Ô"Ð"Õ"Ô"�sÑ"Ô"Ð"Ð"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"•8Ñ"Ô"Ð"Õ"Ô"•8Ñ"Ô"Ð"Ð"Õ"Ô"ˆ}Ñ"Ô"Õ"Ô" Ñ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ó    c           	     ó<  — t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j        t           j	        g	}|D ]à}|j
        } |¦   «         }d}||u }|s½t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t#          t          j        |¦  «        ¦  «        ‚d x}x}x}}Œát           j        t           j        t           j        t           j        t           j        t           j        g}	|	D ]à}|j
        } |¦   «         }d}||u }|s½t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t#          t          j        |¦  «        ¦  «        ‚d x}x}x}}Œát           j        }|j        } |¦   «         }d	}
||
k    }|sÚt          j        d
|fd||
f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |
¦  «        dœz  }dd|iz  }t#          t          j        |¦  «        ¦  «        ‚d x}x}x}x}}
t           j        }|j        } |¦   «         }d}
||
k    }|sÚt          j        d
|fd||
f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |
¦  «        dœz  }dd|iz  }t#          t          j        |¦  «        ¦  «        ‚d x}x}x}x}}
t           j        }|j        } |¦   «         }d}
||
k    }|sÚt          j        d
|fd||
f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |
¦  «        dœz  }dd|iz  }t#          t          j        |¦  «        ¦  «        ‚d x}x}x}x}}
t           j        }|j        } |¦   «         }d}
||
k    }|sÚt          j        d
|fd||
f¦  «        dt          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |
¦  «        dœz  }dd|iz  }t#          t          j        |¦  «        ¦  «        ‚d x}x}x}x}}
d S )NT©Úis)zJ%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.is_passable
}()
} is %(py7)sÚt)rK   Úpy2Úpy4rG   úassert %(py9)sÚpy9Fgš™™™™™é?rA   )zf%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.PATH
}.movement_cost
}()
} == %(py9)sr   )rK   rk   rl   rL   rn   zassert %(py11)sÚpy11gáz®Gáö?)zo%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.DENSE_TERRAIN
}.movement_cost
}()
} == %(py9)sg       @)zj%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.MUD_POOL
}.movement_cost
}()
} == %(py9)sg      ð?)zg%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.FLOOR
}.movement_cost
}()
} == %(py9)s)r   r   r!   r#   r3   r5   r7   r9   r>   r?   Úis_passablerQ   rR   rT   rU   rV   rS   rW   rX   r   r   r   r+   r-   r@   Úmovement_cost)rY   Úpassable_typesrj   Ú@py_assert1Ú@py_assert3Ú@py_assert6ra   r`   Ú@py_format10Úimpassable_typesÚ@py_assert8Ú@py_assert7Ú@py_format12s                rd   Ú'test_tile_passability_and_movement_costzATestTileTypeEnumExpansion.test_tile_passability_and_movement_cost'   s  € åŒN�HÔ-­xÔ/BÅHÄMÝÔ"¥H¤Lµ(Ô2HÝÔ%¥xÔ'>ð
ˆð
  ð 	+ð 	+ˆAØ”=Ð*�=�=‘?”?Ð* dÐ*�? dÐ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*�? dÐ*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*�1Ñ*Ô*Ð*Õ*Ô*�1Ñ*Ô*Ð*Ð*Õ*Ô*�=Ñ*Ô*Õ*Ô*�?Ñ*Ô*Õ*Ô* dÑ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*õ ŒM�8œ=­(Ô*IÝŒN�HÔ.µ´ð
Ðð "ð 	,ð 	,ˆAØ”=Ð+�=�=‘?”?Ð+ eÐ+�? eÐ+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+�? eÐ+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+�1Ñ+Ô+Ð+Õ+Ô+�1Ñ+Ô+Ð+Ð+Õ+Ô+�=Ñ+Ô+Õ+Ô+�?Ñ+Ô+Õ+Ô+ eÑ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+åŒ}Ð3ˆ}Ô*Ð3Ð*Ð*Ñ,Ô,Ð3°Ð3Ð,°Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð,°Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�xÑ3Ô3Ð3Õ3Ô3�xÑ3Ô3Ð3Ð3Õ3Ô3ˆ}Ñ3Ô3Õ3Ô3Ð*Ñ3Ô3Õ3Ô3Ð,Ñ3Ô3Õ3Ô3°Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ÝÔ%Ð=Ð%Ô3Ð=Ð3Ð3Ñ5Ô5Ð=¸Ð=Ð5¸Ò=Ð=Ð=Ð=Õ=Ô=Ð=Ð=Ð=Ð=Ð5¸Ð=Ñ=Ô=Ð=Õ=Ô=Ñ=Ô=Ð=Ð=Õ=Ô=�xÑ=Ô=Ð=Õ=Ô=�xÑ=Ô=Ð=Ð=Õ=Ô=Ð%Ñ=Ô=Õ=Ô=Ð3Ñ=Ô=Õ=Ô=Ð5Ñ=Ô=Õ=Ô=¸Ñ=Ô=Ð=Ð=Ñ=Ð=Ð=Ð=Ð=Ð=Ñ=Ð=Õ=Õ=Ô=Ð=Ñ=Ô=Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=ÝÔ Ð7Ð Ô.Ð7Ð.Ð.Ñ0Ô0Ð7°CÐ7Ð0°CÒ7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7Ð0°CÐ7Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7�xÑ7Ô7Ð7Õ7Ô7�xÑ7Ô7Ð7Ð7Õ7Ô7Ð Ñ7Ô7Õ7Ô7Ð.Ñ7Ô7Õ7Ô7Ð0Ñ7Ô7Õ7Ô7°CÑ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ÝŒ~Ð4ˆ~Ô+Ð4Ð+Ð+Ñ-Ô-Ð4°Ð4Ð-°Ò4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4Ð-°Ð4Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4�xÑ4Ô4Ð4Õ4Ô4�xÑ4Ô4Ð4Ð4Õ4Ô4ˆ~Ñ4Ô4Õ4Ô4Ð+Ñ4Ô4Õ4Ô4Ð-Ñ4Ô4Õ4Ô4°Ñ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4rf   N©r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__re   r{   © rf   rd   r   r      sB   € € € € € Ø<Ð<ð	#ð 	#ð 	#ð 	#ð5ð 5ð 5ð 5ð 5ð 5rf   r   c                  óˆ   — e Zd ZdZej                             dg d¢¦  «        dd„¦   «         Zdd„Zdd„Z	dd„Z
dd„Zdd„ZdS )ÚTestWildernessMapGeneratorzGVerifies wilderness map layout, paths, encounter zones, and guarantees.zzone_id,expected_w,expected_h)	)Úzone_tang_kiem_nhaié<   é-   )Úzone_ancient_sword_barrowéD   é4   )Úzone_boundless_sandstorméL   é:   )Úzone_blood_scale_ruinséT   é@   )Úzone_five_elements_altaré\   éF   )Úzone_abyssal_ice_pondéd   r‹   )Úzone_infinite_blood_riftél   éR   )Úzone_purgatory_lava_cavernér   éV   )Úzone_boundless_celestial_palaceéx   éZ   Úzone_idÚstrÚ
expected_wÚintÚ
expected_hr   r   c                ó¸  — t          j        |¦  «        }g }|j        }||k    }|}|r|j        }	|	|k    }
|
}|�sÔt	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nddœz  }dd|iz  }| 
                    |¦  «         |rÉt	          j        d|
fd|	|f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |	¦  «        d	t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd	d
œz  }dd|iz  }| 
                    |¦  «         t	          j        |d¦  «        i z  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}x}x}x}	}
|                     d¬¦  «        }g }|j        }||k    }|}|r|j        }	|	|k    }
|
}|�sÔt	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nddœz  }dd|iz  }| 
                    |¦  «         |rÉt	          j        d|
fd|	|f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |	¦  «        d	t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd	d
œz  }dd|iz  }| 
                    |¦  «         t	          j        |d¦  «        i z  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}x}x}x}	}
g }|j        }t!          |¦  «        }||k    }|}|r$|j        d         }t!          |¦  «        }||k    }|}|�sLt	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        t           ¦  «        rt	          j	        t           ¦  «        nddt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        d	t          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nd	dœz  }dd|iz  }| 
                    |¦  «         |ræt	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        t           ¦  «        rt	          j	        t           ¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        nddœz  }dd|iz  }| 
                    |¦  «         t	          j        |d¦  «        i z  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}x}}d S )NrA   )z-%(py4)s
{%(py4)s = %(py2)s.width
} == %(py6)sÚgenr    )rk   rl   rL   z%(py8)srN   )z2%(py12)s
{%(py12)s = %(py10)s.height
} == %(py14)sr¢   )Úpy10Úpy12Úpy14z%(py16)sÚpy16r   zassert %(py19)sÚpy19ée   ©ÚseedÚmap_data)zK%(py7)s
{%(py7)s = %(py2)s(%(py5)s
{%(py5)s = %(py3)s.tiles
})
} == %(py9)srI   )rk   rE   rF   rG   rn   z%(py11)sro   )z5%(py17)s
{%(py17)s = %(py13)s(%(py15)s)
} == %(py19)s)Úpy13Úpy15Úpy17r©   z%(py21)sÚpy21zassert %(py24)sÚpy24)r
   Úfor_zoneÚwidthÚheightrQ   rR   rT   rU   rV   rS   ÚappendÚ_format_booloprW   rX   ÚgenerateÚtilesrI   )rY   rž   r    r¢   r¤   rs   rt   ra   r\   Ú@py_assert11Ú@py_assert13rb   rc   Ú@py_format15Ú@py_format17Ú@py_format18Ú@py_format20r­   r^   ru   rx   Ú@py_assert14Ú@py_assert16Ú@py_assert18rv   rz   Ú@py_format22Ú@py_format23Ú@py_format25s                                rd   Ú$test_canonical_wilderness_dimensionsz?TestWildernessMapGenerator.test_canonical_wilderness_dimensions@   sÄ  € õ %Ô-¨gÑ6Ô6ˆØCÐCˆsŒyÐCˆy˜JÒ&ÐCÐCÐCÐCÐC¨3¬:ÐC¨:¸Ò+CÐCÐCÐCÐCÑCÕCÔCÐCÐCÐCÐCˆy˜JÐCÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔCˆsÑCÔCÐCÕCÔCˆsÑCÔCÐCÐCÕCÔCˆyÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔC˜JÑCÔCÐCÕCÔC˜JÑCÔCÐCÐCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÐC×CÒCÐCÑCÔCÐCÐCÐCÕCÔCÐCÐCÐCÐC¨:¸ÐCÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔC¨3ÑCÔCÐCÕCÔC¨3ÑCÔCÐCÐCÕCÔC¨:ÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔC¸ÑCÔCÐCÕCÔC¸ÑCÔCÐCÐCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÐC×CÒCÐCÑCÔCÐCÕCÔCÐCÐCÑCÔCÐCÑCÐCÐCÐCÐCÐCÑCÐCÕCÕCÔCÐCÑCÔCÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCÐCØ—<’< S�<Ñ)Ô)ˆØMÐMˆxŒ~ÐMˆ~ Ò+ÐMÐMÐMÐMÐM°´ÐM°À:Ò0MÐMÐMÐMÐMÑMÕMÔMÐMÐMÐMÐMˆ~ ÐMÑMÔMÐMÕMÔMÑMÔMÐMÐMÕMÔMˆxÑMÔMÐMÕMÔMˆxÑMÔMÐMÐMÕMÔMˆ~ÑMÔMÐMÕMÔMÑMÔMÐMÐMÕMÔM ÑMÔMÐMÕMÔM ÑMÔMÐMÐMÐMÐMÑMÐMÐMÐMÐMÐMÑMÐMÐM×MÒMÐMÑMÔMÐMÐMÐMÕMÔMÐMÐMÐMÐM°À:ÐMÑMÔMÐMÕMÔMÑMÔMÐMÐMÕMÔM°ÑMÔMÐMÕMÔM°ÑMÔMÐMÐMÕMÔM°ÑMÔMÐMÕMÔMÑMÔMÐMÐMÕMÔMÀ:ÑMÔMÐMÕMÔMÀ:ÑMÔMÐMÐMÐMÐMÑMÐMÐMÐMÐMÐMÑMÐMÐM×MÒMÐMÑMÔMÐMÕMÔMÐMÐMÑMÔMÐMÑMÐMÐMÐMÐMÐMÑMÐMÕMÕMÔMÐMÑMÔMÑMÔMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMÐMØYÐY�8”>ÐY�s�>Ñ"Ô"ÐYÐ" jÒ0ÐYÐYÐYÐYÐY¸¼ÈÔ9JÐYµSÐ9JÑ5KÔ5KÐYÐ5KÈzÒ5YÐYÐYÐYÐYÑYÕYÔYÐYÐYÐYÐYÐ" jÐYÑYÔYÐYÕYÔYÑYÔYÐYÐYÕYÔY�sÑYÔYÐYÕYÔY�sÑYÔYÐYÐYÐYÕYÔYÑYÔYÐYÐYÕYÔY�8ÑYÔYÐYÕYÔY�8ÑYÔYÐYÐYÕYÔY�>ÑYÔYÕYÔYÐ"ÑYÔYÐYÕYÔYÑYÔYÐYÐYÕYÔY jÑYÔYÐYÕYÔY jÑYÔYÐYÐYÐYÐYÑYÐYÐYÐYÐYÐYÑYÐYÐY×YÒYÐYÑYÔYÐYÐYÐYÕYÔYÐYÐYÐYÐYÐ5KÈzÐYÑYÔYÐYÕYÔYÑYÔYÐYÐYÕYÔYµSÑYÔYÐYÕYÔYµSÑYÔYÐYÐYÕYÔYÐ9JÑYÔYÕYÔYÐ5KÑYÔYÐYÕYÔYÑYÔYÐYÐYÕYÔYÈzÑYÔYÐYÕYÔYÈzÑYÔYÐYÐYÐYÐYÑYÐYÐYÐYÐYÐYÑYÐYÐY×YÒYÐYÑYÔYÐYÕYÔYÐYÐYÑYÔYÐYÑYÐYÐYÐYÐYÐYÑYÐYÕYÕYÔYÐYÑYÔYÑYÔYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYÐYrf   c                óæ  — t          j        d¦  «        }dD �]X}|                     |¬¦  «        }|j        \  }}t	          |j        ¦  «        D �]}t	          |j        ¦  «        D �]}t          j        ||z
  ||z
  ¦  «        dk    �rã|j	        |         |         }|j
        }	d}
|	|
u }|sÈt          j        d|fd|	|
f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |
¦  «        d	œz  }t          j        d
|› d|› d|› �¦  «        dz   d|iz  }t%          t          j        |¦  «        ¦  «        ‚d x}	x}}
|j        }	t*          j        t*          j        f}
|	|
v }|sÈt          j        d|fd|	|
f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |
¦  «        d	œz  }t          j        d|j        › d�¦  «        dz   d|iz  }t%          t          j        |¦  «        ¦  «        ‚d x}	x}}
�Œ�Œ!�ŒZd S )Nr„   )r   é*   r”   é	  iŸ† r«   g       @Trh   )z0%(py2)s
{%(py2)s = %(py0)s.walkable
} is %(py5)sÚcell©rK   rk   rF   zBlocked cell (ú,z) inside spawn radius for seed ú
>assert %(py7)srG   ©Úin)z1%(py2)s
{%(py2)s = %(py0)s.tile_type
} in %(py5)szNon-floor tile z inside spawn radius)r
   r³   r¸   Úspawn_pointÚrangerµ   r´   ÚmathÚhypotr¹   ÚwalkablerQ   rR   rT   rU   rV   rS   Ú_format_assertmsgrW   rX   Ú	tile_typer   r   r3   )rY   r¤   r¬   r­   ÚsxÚsyÚyÚxrÊ   rs   r^   rt   r_   r`   s                 rd   Ú'test_spawn_safe_area_radius_8_guaranteezBTestWildernessMapGenerator.test_spawn_safe_area_radius_8_guaranteeQ   s¶  € Ý$Ô-Ð.CÑDÔDˆØ,ð 	Iñ 	IˆDØ—|’|¨�|Ñ.Ô.ˆHØÔ)‰FˆB�Ý˜8œ?Ñ+Ô+ð Iñ I�Ý˜xœ~Ñ.Ô.ð Iñ I�AÝ”z ! b¡&¨!¨b©&Ñ1Ô1°SÒ8Ñ8Ø'œ~¨aÔ0°Ô3˜Ø#œ}Ðs°Ðs˜}°Ð4ÐsÐsÐsÕsÔsÐsÐsÐsÐs˜}°ÐsÑsÔsÐsÕsÔsÑsÔsÐsÐsÕsÔs˜tÑsÔsÐsÕsÔs˜tÑsÔsÐsÐsÕsÔs˜}ÑsÔsÕsÔs°ÑsÔsÐsÐsÑsÐsÕsÔsÐ6sÀqÐ6sÐ6sÈ1Ð6sÐ6sÐmqÐ6sÐ6sÑsÔsÐsÑsÐsÐsÐsÑsÐsÕsÕsÔsÐsÑsÔsÑsÔsÐsÐsÐsÐsÐsÐsÐsØ#œ~ð  Iµ(´.Å(Ä-Ð1Pð  I˜~Ð1PÐPð  Ið  Ið  Iõ  Iô  Ið  Ið  Ið  Ið  I˜~Ð1Pð  Iñ  Iô  Ið  Iõ  Iô  Iñ  Iô  Ið  Ið  Iõ  Iô  I˜tñ  Iô  Ið  Iõ  Iô  I˜tñ  Iô  Ið  Ið  Iõ  Iô  I˜~ñ  Iô  Iõ  Iô  IÐ1Pñ  Iô  Ið  Ið  Iñ  Ið  Iõ  Iô  Ið  SIÐdhÔdrð  SIð  SIð  SIñ  Iô  Ið  Iñ  Ið  Ið  Ið  Iñ  Ið  Iõ  Iõ  Iô  Ið  Iñ  Iô  Iñ  Iô  Ið  Ið  Ið  Ið  Ið  Ið  Ið  Iùñ	IñIð	Ið 	Irf   c                óÔ  — dD �]ã}t          j        d¦  «        }|                     |¬¦  «        }t          ||j        |j        d¬¦  «        \  }}d}||u }|s¯t          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d	œz  }t          j        d
|› �¦  «        dz   d|iz  }	t          t          j        |	¦  «        ¦  «        ‚d x}}t          ||j        |j        ¦  «        }
d}|
|k    }|s²t          j        d|fd|
|f¦  «        dt          j	        ¦   «         v st          j
        |
¦  «        rt          j        |
¦  «        ndt          j        |¦  «        d	œz  }t          j        d|
› d|› �¦  «        dz   d|iz  }	t          t          j        |	¦  «        ¦  «        ‚d x}}�Œåd S )N)r   r   rÈ   r”   i90  r„   r«   T)Úallow_sealed_boss_gaterh   )z%(py0)s is %(py3)sÚ	connected©rK   rE   z Main path disconnected for seed z
>assert %(py5)srF   g      ô?©ú>=)z%(py0)s >= %(py3)sÚ	sinuosityzPath sinuosity z < 1.25 for seed )r
   r³   r¸   r   rÐ   Ú	boss_gaterQ   rR   rT   rU   rV   rS   rÕ   rW   rX   r   )rY   r¬   r¤   r­   rÞ   Úpathr]   rs   Ú@py_format4r_   râ   s              rd   Ú!test_guaranteed_sinuous_main_pathz<TestWildernessMapGenerator.test_guaranteed_sinuous_main_path]   sM  € Ø*ð 	[ñ 	[ˆDÝ(Ô1Ð2GÑHÔHˆCØ—|’|¨�|Ñ.Ô.ˆHÝ6°xÀÔAUÐW_ÔWið  CGð  Hñ  Hô  H‰OˆI�tØ $ÐO�9 Ð$ÐOÐOÐOÕOÔOÐOÐOÐOÐO�9 ÐOÑOÔOÐOÕOÔOÑOÔOÐOÐOÕOÔO�9ÑOÔOÐOÕOÔO�9ÑOÔOÐOÐOÕOÔO ÑOÔOÐOÐOÑOÐOÕOÔOÐ&OÈÐ&OÐ&OÑOÔOÐOÑOÐOÐOÐOÑOÐOÕOÕOÔOÐOÑOÔOÑOÔOÐOÐOÐOÐOÐOÝ0°°xÔ7KÈXÔM_Ñ`Ô`ˆIØ $ÐZ�9 Ò$ÐZÐZÐZÕZÔZÐZÐZÐZÐZ�9 ÐZÑZÔZÐZÕZÔZÑZÔZÐZÐZÕZÔZ�9ÑZÔZÐZÕZÔZ�9ÑZÔZÐZÐZÕZÔZ ÑZÔZÐZÐZÑZÐZÕZÔZÐ&Z¸	Ð&ZÐ&ZÐTXÐ&ZÐ&ZÑZÔZÐZÑZÐZÐZÐZÑZÐZÕZÕZÔZÐZÑZÔZÑZÔZÐZÐZÐZÐZÐZÑZð	[ð 	[rf   c                ór  — t          j        d¦  «        }|                     d¬¦  «        }d}|j        }t	          |¦  «        }||k    }d}||k    }|r|�st          j        d||fd|||f¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        ndd	t          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d
œz  }	dd|	iz  }
t          t          j        |
¦  «        ¦  «        ‚d x}x}x}x}x}}d„ |j        D ¦   «         }g }d}||v }|}|rd}||v }|}|�sXt          j        d|fd||f¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }|                     |¦  «         |r‹t          j        d|fd||f¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}}|j        D �]}d}|j        }||k    }|j        }||k     }|j        }||k     }|r|r|�sPt          j        d|||fd||||f¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d	t          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        dœz  }
d d!|
iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}}d}|j        }||k    }|j        }||k     }|j        }||k     }|r|r|�sPt          j        d|||fd"||||f¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d	t          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        dœz  }
d d!|
iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}}�Œ!d}|j        }t	          |¦  «        }||k    }d}||k    }|r|�st          j        d||fd#|||f¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        ndd	t          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d
œz  }	dd|	iz  }
t          t          j        |
¦  «        ¦  «        ‚d x}x}x}x}x}}|j        D ]®\  }}|j        |         |         }|j        }d$}||u }|st          j        d%|fd&||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d'œz  }d(d)|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}}Œ¯d S )*Nr„   i+  r«   r   r    ©ú<=ré   )zU%(py1)s <= %(py9)s
{%(py9)s = %(py4)s(%(py7)s
{%(py7)s = %(py5)s.encounter_zones
})
}zV%(py9)s
{%(py9)s = %(py4)s(%(py7)s
{%(py7)s = %(py5)s.encounter_zones
})
} <= %(py11)srI   r­   ©rD   rl   rF   rG   rn   ro   úassert %(py13)sr®   c                ó   — g | ]	}|j         ‘Œ
S r�   )Útier)Ú.0Úes     rd   ú
<listcomp>zQTestWildernessMapGenerator.test_encounter_zones_and_dead_ends.<locals>.<listcomp>j   s   € Ð:Ð:Ð:˜A�”Ð:Ð:Ð:rf   r   rÎ   )z%(py3)s in %(py5)sÚtiers)rE   rF   z%(py7)srG   )z%(py10)s in %(py12)s)r¥   r¦   z%(py14)sr§   r   zassert %(py17)sr°   )ré   ú<rò   )z-%(py1)s <= %(py7)s
{%(py7)s = %(py5)s.min_x
}zI%(py7)s
{%(py7)s = %(py5)s.min_x
} < %(py10)s
{%(py10)s = %(py8)s.max_x
}zL%(py10)s
{%(py10)s = %(py8)s.max_x
} < %(py13)s
{%(py13)s = %(py11)s.width
}Úenc)rD   rF   rG   rN   r¥   ro   r®   úassert %(py15)sr¯   )z-%(py1)s <= %(py7)s
{%(py7)s = %(py5)s.min_y
}zI%(py7)s
{%(py7)s = %(py5)s.min_y
} < %(py10)s
{%(py10)s = %(py8)s.max_y
}zM%(py10)s
{%(py10)s = %(py8)s.max_y
} < %(py13)s
{%(py13)s = %(py11)s.height
})zU%(py1)s <= %(py9)s
{%(py9)s = %(py4)s(%(py7)s
{%(py7)s = %(py5)s.dead_end_points
})
}zV%(py9)s
{%(py9)s = %(py4)s(%(py7)s
{%(py7)s = %(py5)s.dead_end_points
})
} <= %(py11)sTrh   ©z0%(py3)s
{%(py3)s = %(py1)s.walkable
} is %(py6)s©rD   rE   rL   rM   rN   )r
   r³   r¸   Úencounter_zonesrI   rQ   rR   rS   rT   rU   rV   rW   rX   r¶   r·   Úmin_xÚmax_xr´   Úmin_yÚmax_yrµ   Údead_end_pointsr¹   rÔ   )rY   r¤   r­   r\   ru   rx   r]   Ú@py_assert10rt   rz   Ú@py_format14rñ   rs   r^   Ú@py_assert9rº   r_   r`   Ú@py_format13r¼   Ú@py_format16r¾   ró   Ú@py_assert12ÚdxÚdyra   rb   rc   s                                rd   Ú"test_encounter_zones_and_dead_endsz=TestWildernessMapGenerator.test_encounter_zones_and_dead_endsf   s„	  € Ý$Ô-Ð.CÑDÔDˆØ—<’< S�<Ñ)Ô)ˆØÐ6˜Ô0Ð6•CÐ0Ñ1Ô1Ð6ˆqÐ1Ò6Ð6°QÐ6Ð1°QÒ6Ð6Ð6Ð6Ð6Ñ6Õ6Ô6Ð6Ð6Ð6Ð6Ð6ˆqÐ1°QÐ6Ñ6Ô6Õ6Ô6ˆqÑ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6•CÑ6Ô6Ð6Õ6Ô6•CÑ6Ô6Ð6Ð6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6˜Ñ6Ô6Ð6Õ6Ô6˜Ñ6Ô6Ð6Ð6Õ6Ô6Ð0Ñ6Ô6Õ6Ô6Ð1Ñ6Ô6Õ6Ô6°QÑ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ø:Ð: Ô!9Ð:Ñ:Ô:ˆØ(Ð(ˆqÐ(ˆq�EˆzÐ(Ð(Ð(Ð(Ð(˜aÐ(˜a 5˜jÐ(Ð(Ð(Ð(Ñ(Õ(Ô(Ð(Ð(Ð(Ð(ˆq�EÐ(Ñ(Ô(Õ(Ô(ˆqÑ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(�EÑ(Ô(Ð(Õ(Ô(�EÑ(Ô(Ð(Ð(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Ð(×(Ò(Ð(Ñ(Ô(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(˜a 5Ð(Ñ(Ô(Õ(Ô(˜aÑ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô( 5Ñ(Ô(Ð(Õ(Ô( 5Ñ(Ô(Ð(Ð(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Ð(×(Ò(Ð(Ñ(Ô(Ð(Õ(Ô(Ð(Ð(Ñ(Ô(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ØÔ+ð 	@ñ 	@ˆCØÐ>˜œ	Ð>�1˜	Ò>Ð> C¤IÐ>˜	 IÒ>Ð>°´Ð> I°Ò>Ð>Ð>Ð>Ð>Ð>Ð>Ñ>Õ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>�1˜	 I°Ð>Ñ>Ô>Õ>Ô>�1Ñ>Ô>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>˜Ñ>Ô>Ð>Õ>Ô>˜Ñ>Ô>Ð>Ð>Õ>Ô>˜	Ñ>Ô>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô> CÑ>Ô>Ð>Õ>Ô> CÑ>Ô>Ð>Ð>Õ>Ô> IÑ>Ô>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>°Ñ>Ô>Ð>Õ>Ô>°Ñ>Ô>Ð>Ð>Õ>Ô>°Ñ>Ô>Ð>Ð>Ñ>Ð>Ð>Ð>Ð>Ð>Ñ>Ð>Õ>Õ>Ô>Ð>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>ØÐ?˜œ	Ð?�1˜	Ò?Ð? C¤IÐ?˜	 IÒ?Ð?°´Ð? I°Ò?Ð?Ð?Ð?Ð?Ð?Ð?Ñ?Õ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?�1˜	 I°Ð?Ñ?Ô?Õ?Ô?�1Ñ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?˜Ñ?Ô?Ð?Õ?Ô?˜Ñ?Ô?Ð?Ð?Õ?Ô?˜	Ñ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô? CÑ?Ô?Ð?Õ?Ô? CÑ?Ô?Ð?Ð?Õ?Ô? IÑ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?°Ñ?Ô?Ð?Õ?Ô?°Ñ?Ô?Ð?Ð?Õ?Ô?°Ñ?Ô?Ð?Ð?Ñ?Ð?Ð?Ð?Ð?Ð?Ñ?Ð?Õ?Õ?Ô?Ð?Ñ?Ô?Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ñ?àÐ6˜Ô0Ð6•CÐ0Ñ1Ô1Ð6ˆqÐ1Ò6Ð6°QÐ6Ð1°QÒ6Ð6Ð6Ð6Ð6Ñ6Õ6Ô6Ð6Ð6Ð6Ð6Ð6ˆqÐ1°QÐ6Ñ6Ô6Õ6Ô6ˆqÑ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6•CÑ6Ô6Ð6Õ6Ô6•CÑ6Ô6Ð6Ð6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6˜Ñ6Ô6Ð6Õ6Ô6˜Ñ6Ô6Ð6Ð6Õ6Ô6Ð0Ñ6Ô6Õ6Ô6Ð1Ñ6Ô6Õ6Ô6°QÑ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ØÔ.ð 	;ð 	;‰FˆB�Ø”> "Ô% bÔ)Ð:Ð)Ô2Ð:°dÐ:Ð2°dÐ:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð2°dÐ:Ñ:Ô:Õ:Ô:Ð)Ñ:Ô:Õ:Ô:Ð2Ñ:Ô:Õ:Ô:°dÑ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:ð	;ð 	;rf   c                ó$  — t          j        d¦  «        }|                     d¬¦  «        }|j        }d }||u}|s—t	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        dœz  }dd	|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}}d
\  }}	t          |j        |j        |j        z   ¦  «        D ]¬}
t          |j        |j        |j        z   ¦  «        D ]‡}||j        k    s7||j        |j        z   dz
  k    s!|
|j        k    s|
|j        |j        z   dz
  k    rC|j        |
         |         j        }|t&          j        k    r|dz  }Œr|t&          j        k    r|	dz  }	ŒˆŒ­d}||k    }|s—t	          j        d|fd||f¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        dœz  }dd	|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}}|j        }d}||z  }|j        }d}||z  }||z   }d}||z
  }d}||z
  }|	|k    }|�srt	          j        d|fd|	|f¦  «        dt          j        ¦   «         v st	          j        |	¦  «        rt	          j	        |	¦  «        nddt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        dt          j        ¦   «         v st	          j        |¦  «        rt	          j	        |¦  «        ndt	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœ	z  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚d x}x}x}x}x}x}x}x}x}x}x}}d S )Nr„   iç  r«   )úis not)z%(py0)s is not %(py3)sÚbrrß   úassert %(py5)srF   )r   r   r   rA   )z%(py0)s == %(py3)sÚ
gate_countr   r"   )z�%(py0)s == ((((%(py4)s
{%(py4)s = %(py2)s.w
} * %(py6)s) + (%(py10)s
{%(py10)s = %(py8)s.h
} * %(py12)s)) - %(py16)s) - %(py19)s)Ú
wall_count)	rK   rk   rl   rL   rN   r¥   r¦   r¨   r©   zassert %(py22)sÚpy22)r
   r³   r¸   Ú	boss_roomrQ   rR   rT   rU   rV   rS   rW   rX   rÑ   rÙ   ÚhrÚ   Úwr¹   rÖ   r   r-   r   )rY   r¤   r­   r  r]   rs   rå   r_   r
  r  rÙ   rÚ   rj   rt   ra   ry   rÿ   rº   r»   rÀ   Ú@py_assert15Ú@py_assert17rÂ   Ú@py_assert20Ú@py_format21rÄ   s                             rd   Ú#test_boss_arena_perimeter_isolationz>TestWildernessMapGenerator.test_boss_arena_perimeter_isolationt   sž  € Ý$Ô-Ð.CÑDÔDˆØ—<’< S�<Ñ)Ô)ˆØÔˆØÐˆr˜ˆ~ÐÐÐÕÔÐÐÐÐˆr˜ÐÑÔÐÕÔÑÔÐÐÕÔˆrÑÔÐÕÔˆrÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØ!%Ñˆ
�JÝ�r”t˜RœT B¤D™[Ñ)Ô)ð 	(ð 	(ˆAÝ˜2œ4 ¤¨¬¡Ñ-Ô-ð (ð (�Ø˜œ’9�9  R¤T¨B¬D¡[°1¡_Ò 4Ð 4¸¸R¼Tº	¸	ÀQÈ"Ì$ÐQSÔQUÉ+ÐXYÉ/ÒEYÐEYØ œ qÔ)¨!Ô,Ô6�AØ�HÔ.Ò.Ð.Ø" a™˜
˜
Ø�hœmÒ+Ð+Ø" a™˜
øð(ð Ðˆz˜QŠÐÐÐÕÔÐÐÐÐˆz˜QÐÑÔÐÕÔÑÔÐÐÕÔˆzÑÔÐÕÔˆzÑÔÐÐÕÔ˜QÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØ œdÐ: QÐ:˜d Q™hÐ:¨¬Ð:°Ð:¨°©Ð:˜h¨Ñ1Ð:°AÐ:Ð1°AÑ5Ð:¸Ð:Ð5¸Ñ:Ð:ˆzÐ:Ò:Ð:Ð:Ñ:Õ:Ô:Ð:Ð:Ð:Ð:ˆzÐ:Ð:Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:ˆzÑ:Ô:Ð:Õ:Ô:ˆzÑ:Ô:Ð:Ð:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:˜bÑ:Ô:Ð:Õ:Ô:˜bÑ:Ô:Ð:Ð:Õ:Ô:˜dÑ:Ô:Õ:Ô: QÑ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:¨Ñ:Ô:Ð:Õ:Ô:¨Ñ:Ô:Ð:Ð:Õ:Ô:¨Ñ:Ô:Õ:Ô:°Ñ:Ô:Õ:Ô:°AÑ:Ô:Õ:Ô:¸Ñ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:rf   c           	     óh  — t          j        d¦  «        }|                     d¬¦  «        }d}|j        }t	          |¦  «        }||k    }d}||k    }|r|�st          j        d||fd|||f¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        ndd	t          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nd	t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d
œz  }	dd|	iz  }
t          t          j        |
¦  «        ¦  «        ‚d x}x}x}x}x}}|j        D �]­\  }}}|j        |         |         }|j        }t          j        }||k    }|sÇt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}}|j        |         |         }|j        }d}||u }|st          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}}�Œ¯d S )Nr„   ix  r«   r   r    rè   )zP%(py1)s <= %(py9)s
{%(py9)s = %(py4)s(%(py7)s
{%(py7)s = %(py5)s.poi_points
})
}zQ%(py9)s
{%(py9)s = %(py4)s(%(py7)s
{%(py7)s = %(py5)s.poi_points
})
} <= %(py11)srI   r­   rê   rë   r®   rA   )zJ%(py3)s
{%(py3)s = %(py1)s.tile_type
} == %(py7)s
{%(py7)s = %(py5)s.POI
}r   ©rD   rE   rF   rG   rm   rn   Trh   rõ   rö   rM   rN   )r
   r³   r¸   Ú
poi_pointsrI   rQ   rR   rS   rT   rU   rV   rW   rX   r¹   rÖ   r   r7   rÔ   )rY   r¤   r­   r\   ru   rx   r]   rý   rt   rz   rþ   ÚpxÚpyÚ_r^   r`   rv   ra   rb   rc   s                       rd   Útest_poi_placement_countz3TestWildernessMapGenerator.test_poi_placement_count…   s–  € Ý$Ô-Ð.CÑDÔDˆØ—<’< S�<Ñ)Ô)ˆØÐ1˜Ô+Ð1•CÐ+Ñ,Ô,Ð1ˆqÐ,Ò1Ð1°Ð1Ð,°Ò1Ð1Ð1Ð1Ð1Ñ1Õ1Ô1Ð1Ð1Ð1Ð1Ð1ˆqÐ,°Ð1Ñ1Ô1Õ1Ô1ˆqÑ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1•CÑ1Ô1Ð1Õ1Ô1•CÑ1Ô1Ð1Ð1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1˜Ñ1Ô1Ð1Õ1Ô1˜Ñ1Ô1Ð1Ð1Õ1Ô1Ð+Ñ1Ô1Õ1Ô1Ð,Ñ1Ô1Õ1Ô1°Ñ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ø!Ô,ð 	;ñ 	;‰IˆB��AØ”> "Ô% bÔ)ÐCÐ)Ô3ÐCµx´|ÐCÐ3°|ÒCÐCÐCÐCÕCÔCÐCÐCÐCÐCÐ3°|ÐCÑCÔCÕCÔCÐ)ÑCÔCÕCÔCÐ3ÑCÔCÐCÕCÔCÑCÔCÐCÐCÕCÔCµxÑCÔCÐCÕCÔCµxÑCÔCÐCÐCÕCÔC°|ÑCÔCÐCÐCÑCÐCÐCÐCÐCÐCÑCÐCÕCÕCÔCÐCÑCÔCÑCÔCÐCÐCÐCÐCÐCÐCÐCÐCÐCØ”> "Ô% bÔ)Ð:Ð)Ô2Ð:°dÐ:Ð2°dÐ:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð2°dÐ:Ñ:Ô:Õ:Ô:Ð)Ñ:Ô:Õ:Ô:Ð2Ñ:Ô:Õ:Ô:°dÑ:Ô:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ñ:ð	;ð 	;rf   N)rž   rŸ   r    r¡   r¢   r¡   r   r   r|   )r}   r~   r   r€   ÚpytestÚmarkÚparametrizerÆ   rÛ   ræ   r  r  r  r�   rf   rd   rƒ   rƒ   =   sÏ   € € € € € ØQÐQà„[×ÒØ'ð	
ð 	
ð 	
ñ	ô 	ðZð Zð Zñ	ô 	ðZð
Ið 
Ið 
Ið 
Ið[ð [ð [ð [ð;ð ;ð ;ð ;ð;ð ;ð ;ð ;ð";ð ;ð ;ð ;ð ;ð ;rf   rƒ   c                  ó:   — e Zd ZdZd
d„Zd
d„Zd
d„Zd
d„Zd
d„Zd	S )ÚTestMapBinarySerializerzVVerifies binary encoding, decoding, truncation detection, and unknown tile resilience.r   r   c                óÌ  — t          j        d¦  «        }|                     d¬¦  «        }t          |¦  «        }|d d…         }|t          k    }|s¦t          j        d|fd|t          f¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        nddœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}t          |¦  «        }|j        }|j        }	||	z  }
t           |
z   }||k    }|�sÉt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        nddt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j	        ¦   «         v st          j
        t           ¦  «        rt          j        t           ¦  «        nddt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}	x}
}t#          |¦  «        }|j        }|j        }||k    }|sèt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|j        }|j        }||k    }|sèt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|j        }|j        }||k    }|sèt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|j        }|j        }||k    }|sèt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|j        }t          |¦  «        }|j        }t          |¦  «        }||k    }|�sžt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        nddt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        nddt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}}|j        }t          |¦  «        }|j        }t          |¦  «        }||k    }|�sžt          j        d|fd ||f¦  «        dt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        nddt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        nddt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}}t-          |j        ¦  «        D ]ñ}t-          |j        ¦  «        D ]Ú}|j        |         |         }|j        }|j        |         |         }|j        }||k    }|s’t          j        d|fd!||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d"œz  }d#d$|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}}ŒÛŒòd S )%Nr„   rÉ   r«   r   rA   )z%(py1)s == %(py3)sr   )rD   rE   r	  rF   rà   )z�%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= (%(py5)s + (%(py8)s
{%(py8)s = %(py6)s.width
} * %(py11)s
{%(py11)s = %(py9)s.height
}))rI   Úbinary_datar   Úorig)rK   rD   rE   rF   rL   rN   rn   ro   rô   r¯   ©zH%(py2)s
{%(py2)s = %(py0)s.width
} == %(py6)s
{%(py6)s = %(py4)s.width
}Úrestored©rK   rk   rl   rL   rM   rN   )zJ%(py2)s
{%(py2)s = %(py0)s.height
} == %(py6)s
{%(py6)s = %(py4)s.height
})zT%(py2)s
{%(py2)s = %(py0)s.spawn_point
} == %(py6)s
{%(py6)s = %(py4)s.spawn_point
})zP%(py2)s
{%(py2)s = %(py0)s.boss_gate
} == %(py6)s
{%(py6)s = %(py4)s.boss_gate
})zœ%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.encounter_zones
})
} == %(py12)s
{%(py12)s = %(py7)s(%(py10)s
{%(py10)s = %(py8)s.encounter_zones
})
})rK   rD   rE   rF   rG   rN   r¥   r¦   zassert %(py14)sr§   )z’%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.poi_points
})
} == %(py12)s
{%(py12)s = %(py7)s(%(py10)s
{%(py10)s = %(py8)s.poi_points
})
})zP%(py3)s
{%(py3)s = %(py1)s.tile_type
} == %(py8)s
{%(py8)s = %(py6)s.tile_type
})rD   rE   rL   rN   zassert %(py10)sr¥   )r
   r³   r¸   r   r   rQ   rR   rS   rT   rU   rV   rW   rX   rI   r´   rµ   r   r   rÐ   rã   r÷   r  rÑ   r¹   rÖ   )rY   r¤   r#  r"  r\   r]   rå   r_   ry   rý   r  r»   r^   rþ   r  r%  rs   ra   rt   rb   rc   rÿ   rº   ru   r   r¼   rÙ   rÚ   Ú@py_format11s                                rd   Útest_binary_roundtrip_integrityz7TestMapBinarySerializer.test_binary_roundtrip_integrity‘   s€  € Ý$Ô-Ð.CÑDÔDˆØ�|Š| ˆ|Ñ%Ô%ˆÝ(¨Ñ.Ô.ˆà˜2˜A˜2ŒÐ.ˆ¥,Ò.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.ˆ¥,Ð.Ñ.Ô.Õ.Ô.ˆÑ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.¥,Ñ.Ô.Ð.Õ.Ô.¥,Ñ.Ô.Ð.Ð.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ý�;ÑÔÐI°´ÐI¸d¼kÐI°¸kÑ1IÐI¥;Ð1IÑ#IÐIÐÐ#IÒIÐIÐIÑIÕIÔIÐIÐIÐIÐIÐÐ#IÐIÑIÔIÐIÕIÔIÑIÔIÐIÐIÕIÔI�sÑIÔIÐIÕIÔI�sÑIÔIÐIÐIÐIÕIÔIÑIÔIÐIÐIÕIÔI�;ÑIÔIÐIÕIÔI�;ÑIÔIÐIÐIÕIÔIÐÑIÔIÐIÕIÔIÑIÔIÐIÐIÕIÔI¥;ÑIÔIÐIÕIÔI¥;ÑIÔIÐIÐIÐIÕIÔIÑIÔIÐIÐIÕIÔI°ÑIÔIÐIÕIÔI°ÑIÔIÐIÐIÕIÔI°ÑIÔIÐIÕIÔIÑIÔIÐIÐIÕIÔI¸dÑIÔIÐIÕIÔI¸dÑIÔIÐIÐIÕIÔI¸kÑIÔIÐIÐIÑIÐIÐIÐIÐIÐIÑIÐIÕIÕIÔIÐIÑIÔIÑIÔIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIå'¨Ñ4Ô4ˆØŒ~Ð+ ¤Ð+ˆ~ Ò+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+ˆ~ Ð+Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ˆxÑ+Ô+Ð+Õ+Ô+ˆxÑ+Ô+Ð+Ð+Õ+Ô+ˆ~Ñ+Ô+Ð+Õ+Ô+Ñ+Ô+Ð+Ð+Õ+Ô+ Ñ+Ô+Ð+Õ+Ô+ Ñ+Ô+Ð+Ð+Õ+Ô+ Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ØŒÐ- $¤+Ð-ˆ +Ò-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-ˆ +Ð-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-ˆxÑ-Ô-Ð-Õ-Ô-ˆxÑ-Ô-Ð-Ð-Õ-Ô-ˆÑ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô- $Ñ-Ô-Ð-Õ-Ô- $Ñ-Ô-Ð-Ð-Õ-Ô- +Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØÔ#Ð7 tÔ'7Ð7Ð#Ð'7Ò7Ð7Ð7Ð7Õ7Ô7Ð7Ð7Ð7Ð7Ð#Ð'7Ð7Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7ˆxÑ7Ô7Ð7Õ7Ô7ˆxÑ7Ô7Ð7Ð7Õ7Ô7Ð#Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7 tÑ7Ô7Ð7Õ7Ô7 tÑ7Ô7Ð7Ð7Õ7Ô7Ð'7Ñ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ØÔ!Ð3 T¤^Ð3Ð! ^Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð! ^Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3ˆxÑ3Ô3Ð3Õ3Ô3ˆxÑ3Ô3Ð3Ð3Õ3Ô3Ð!Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3 TÑ3Ô3Ð3Õ3Ô3 TÑ3Ô3Ð3Ð3Õ3Ô3 ^Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ØÔ+ÐI�sÐ+Ñ,Ô,ÐI°DÔ4HÐIµÐ4HÑ0IÔ0IÐIÐ,Ð0IÒIÐIÐIÑIÕIÔIÐIÐIÐIÐIÐ,Ð0IÐIÑIÔIÐIÕIÔIÑIÔIÐIÐIÕIÔI�sÑIÔIÐIÕIÔI�sÑIÔIÐIÐIÐIÕIÔIÑIÔIÐIÐIÕIÔI�8ÑIÔIÐIÕIÔI�8ÑIÔIÐIÐIÕIÔIÐ+ÑIÔIÕIÔIÐ,ÑIÔIÐIÕIÔIÑIÔIÐIÐIÕIÔIµÑIÔIÐIÕIÔIµÑIÔIÐIÐIÐIÕIÔIÑIÔIÐIÐIÕIÔI°DÑIÔIÐIÕIÔI°DÑIÔIÐIÐIÕIÔIÐ4HÑIÔIÕIÔIÐ0IÑIÔIÐIÐIÑIÐIÐIÐIÐIÐIÑIÐIÕIÕIÔIÐIÑIÔIÑIÔIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIÐIØÔ&Ð?�sÐ&Ñ'Ô'Ð?¨t¬Ð?­3¨Ñ+?Ô+?Ð?Ð'Ð+?Ò?Ð?Ð?Ñ?Õ?Ô?Ð?Ð?Ð?Ð?Ð'Ð+?Ð?Ñ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?�sÑ?Ô?Ð?Õ?Ô?�sÑ?Ô?Ð?Ð?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?�8Ñ?Ô?Ð?Õ?Ô?�8Ñ?Ô?Ð?Ð?Õ?Ô?Ð&Ñ?Ô?Õ?Ô?Ð'Ñ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?­3Ñ?Ô?Ð?Õ?Ô?­3Ñ?Ô?Ð?Ð?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?¨tÑ?Ô?Ð?Õ?Ô?¨tÑ?Ô?Ð?Ð?Õ?Ô?¨Ñ?Ô?Õ?Ô?Ð+?Ñ?Ô?Ð?Ð?Ñ?Ð?Ð?Ð?Ð?Ð?Ñ?Ð?Õ?Õ?Ô?Ð?Ñ?Ô?Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?å�t”{Ñ#Ô#ð 	Tð 	TˆAÝ˜4œ:Ñ&Ô&ð Tð T�Ø”~ aÔ(¨Ô+ÐSÐ+Ô5ÐS¸¼ÀA¼ÀqÔ9IÐSÐ9IÔ9SÐSÐ5Ð9SÒSÐSÐSÐSÕSÔSÐSÐSÐSÐSÐ5Ð9SÐSÑSÔSÕSÔSÐ+ÑSÔSÕSÔSÐ5ÑSÔSÕSÔSÐ9IÑSÔSÕSÔSÐ9SÑSÔSÐSÐSÑSÐSÐSÐSÐSÐSÑSÐSÕSÕSÔSÐSÑSÔSÑSÔSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSðTð	Tð 	Trf   c                ó  — t          j        t          d¬¦  «        5  t          d¦  «         d d d ¦  «         n# 1 swxY w Y   d}t          j        t          d¬¦  «        5  t          |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NzBuffer too short©Úmatchs   SHORTs   XX                    zInvalid map magic)r  ÚraisesÚ
ValueErrorr   )rY   Úcorrupt_magics     rd   Ú!test_binary_header_error_handlingz9TestMapBinarySerializer.test_binary_header_error_handling¥   s
  € ÝŒ]�:Ð-?Ð@Ñ@Ô@ð 	+ð 	+Ý  Ñ*Ô*Ð*ð	+ð 	+ð 	+ñ 	+ô 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+øøøð 	+ð 	+ð 	+ð 	+ð -ˆÝŒ]�:Ð-@ÐAÑAÔAð 	0ð 	0Ý  Ñ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	0ð 	0s   œ8¸<¿<Á A=Á=BÂBc                óF  — t          j        d¦  «        }t          |                     d¬¦  «        ¦  «        }t	          |¦  «        }ddd|dz
  |dz
  fD ]L}t          j        t          d	¬
¦  «        5  t          |d |…         ¦  «         d d d ¦  «         n# 1 swxY w Y   ŒMd S )Nr„   rÈ   r«   r:   rH   é   r   é2   zBuffer truncatedr*  )	r
   r³   r   r¸   rI   r  r,  r-  r   )rY   r¤   Ú	valid_bufÚ	total_lenÚcuts        rd   Ú*test_binary_truncation_across_all_sectionszBTestMapBinarySerializer.test_binary_truncation_across_all_sections­   sç   € Ý$Ô-Ð.CÑDÔDˆÝ& s§|¢|¸ |Ñ'<Ô'<Ñ=Ô=ˆ	Ý˜	‘N”Nˆ	Ø˜˜B 	¨A¡¨y¸2©~Ð>ð 	6ð 	6ˆCÝ”�zÐ1CÐDÑDÔDð 6ð 6Ý$ Y¨t°¨t¤_Ñ5Ô5Ð5ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6øð	6ð 	6s   Á1BÂB	ÂB	c                óÊ  — t          j        d¦  «        }t          t          |                     d¬¦  «        ¦  «        ¦  «        }d|d<   t          t          |¦  «        ¦  «        }|j        d         d         }|j        }t          j
        }||k    }|sÇt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        d	œz  }d
d|iz  }	t#          t          j        |	¦  «        ¦  «        ‚d x}x}x}}d S )Nr„   r(   r«   éc   éÿÿÿÿrA   )zK%(py3)s
{%(py3)s = %(py1)s.tile_type
} == %(py7)s
{%(py7)s = %(py5)s.WALL
}r   r  rm   rn   )r
   r³   Ú	bytearrayr   r¸   r   Úbytesr¹   rÖ   r   r   rQ   rR   rS   rT   rU   rV   rW   rX   )
rY   r¤   Úrawr%  r\   r]   ru   r^   r`   rv   s
             rd   Ú(test_unknown_tile_value_fallback_to_wallz@TestMapBinarySerializer.test_unknown_tile_value_fallback_to_wallµ   sc  € Ý$Ô-Ð.CÑDÔDˆÝÕ*¨3¯<ª<¸Q¨<Ñ+?Ô+?Ñ@Ô@ÑAÔAˆØˆˆB‰Ý'­¨c©
¬
Ñ3Ô3ˆØŒ~˜bÔ! "Ô%Ð@Ð%Ô/Ð@µ8´=Ð@Ð/°=Ò@Ð@Ð@Ð@Õ@Ô@Ð@Ð@Ð@Ð@Ð/°=Ð@Ñ@Ô@Õ@Ô@Ð%Ñ@Ô@Õ@Ô@Ð/Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@µ8Ñ@Ô@Ð@Õ@Ô@µ8Ñ@Ô@Ð@Ð@Õ@Ô@°=Ñ@Ô@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Õ@Õ@Ô@Ð@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@rf   c                óÜ  — t          dd¬¦  «        }t          |t          ¦  «        }|�sddt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dœz  }t          t          j	        |¦  «        ¦  «        ‚d }| 
                    ¦   «         }t          |¦  «        }d	}||k    }|sòt          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}x}}t          |¦  «        }
|
j        }|j        }||k    }|sèt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }	t          t          j	        |	¦  «        ¦  «        ‚d x}x}}d S )Nr„   é{   r«   z5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}Ú
isinstancer­   r   )rK   rD   rk   rl   r   )ú>)z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)srI   ÚbrJ   rM   rN   rA   r$  Údecodedr&  )r   r@  r   rT   rU   rQ   rV   rS   rW   rX   Ú	to_binaryrI   rR   r   r´   )rY   r­   rt   Ú@py_format5rB  r]   ra   r^   rb   rc   rC  rs   s               rd   Ú%test_facade_and_to_binary_integrationz=TestMapBinarySerializer.test_facade_and_to_binary_integration¼   so  € Ý*Ð+@ÀsÐKÑKÔKˆÝ˜(¥KÑ0Ô0Ð0Ð0Ñ0Ð0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0�zÑ0Ô0Ð0Õ0Ô0�zÑ0Ô0Ð0Ð0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0˜(Ñ0Ô0Ð0Õ0Ô0˜(Ñ0Ô0Ð0Ð0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0¥KÑ0Ô0Ð0Õ0Ô0¥KÑ0Ô0Ð0Ð0Õ0Ô0Ð0Ñ0Ô0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ø×ÒÑ Ô ˆÝ�1‰vŒvÐ˜Ðˆv˜ŠzÐÐÐÕÔÐÐÐÐˆv˜ÐÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÕÔÑÔÐÐÕÔ�1ÑÔÐÕÔ�1ÑÔÐÐÕÔˆvÑÔÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐÝ& qÑ)Ô)ˆØŒ}Ð. ¤Ð.ˆ} Ò.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.ˆ} Ð.Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô.ˆwÑ.Ô.Ð.Õ.Ô.ˆwÑ.Ô.Ð.Ð.Õ.Ô.ˆ}Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô. Ñ.Ô.Ð.Õ.Ô. Ñ.Ô.Ð.Ð.Õ.Ô. Ñ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.rf   Nr|   )	r}   r~   r   r€   r(  r/  r6  r=  rF  r�   rf   rd   r   r   Ž   s†   € € € € € Ø`Ð`ðTð Tð Tð Tð(0ð 0ð 0ð 0ð6ð 6ð 6ð 6ðAð Að Að Að/ð /ð /ð /ð /ð /rf   r   c                  óR   — e Zd ZdZedd„¦   «         Zdd„Zdd	„Zdd
„Zdd„Z	dd„Z
dS )Ú'TestClientTileGridLoaderNodeIntegrationzfVerifies client-side JS loader decodes binary stream, handles OOB/NaN queries, and in-place mutations.ÚscriptrŸ   r   ú subprocess.CompletedProcess[str]c                ó8   — t          j        dd| gddd¬¦  «        S )NÚnodez-eTzc:\Projects\FreeExile)Úcapture_outputÚtextÚcwd)Ú
subprocessÚrun)rI  s    rd   Ú	_run_nodez1TestClientTileGridLoaderNodeIntegration._run_nodeÈ   s.   € åŒ~Ø�T˜6Ð"ØØØ(ð	
ñ 
ô 
ð 	
rf   r   c                óP  — t          j        d¦  «        st          j        d¦  «         t	          j        d¦  «        }|                     d¬¦  «        }|dz  }|                     t          |¦  «        ¦  «         t          |¦  «         
                    dd¦  «        }d	|› d
|j        › d|j        › d�}|                      |¦  «        }|j        }d}	||	k    }
|
sÇt          j        d|
fd||	f¦  «        dt#          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |	¦  «        dœz  }t          j        d|j        › �¦  «        dz   d|iz  }t/          t          j        |¦  «        ¦  «        ‚d x}x}
}	d S )NrL  ú,Node.js runtime not installed in environmentr„   iA  r«   zmap_test.binú\ú/z¥
        const fs = require('fs');
        const { TileGridLoader } = require('./client/webapp/js/engine/tile_grid_loader.js');
        const buf = fs.readFileSync('z‡');
        const meta = TileGridLoader.loadBinaryMap(buf);
        if (!meta) process.exit(1);
        if (window.currentMapWidth !== z;) process.exit(2);
        if (window.currentMapHeight !== zý) process.exit(3);
        const spawnTile = window.getTileAt(meta.spawn.x, meta.spawn.y);
        if (spawnTile !== 1 && spawnTile !== 13) process.exit(4);
        if (window.getTileAt(-10, -10) !== 2) process.exit(5);
        process.exit(0);
        r   rA   ©z2%(py2)s
{%(py2)s = %(py0)s.returncode
} == %(py5)sÚresrË   zNode decoding failed: rÍ   rG   )ÚshutilÚwhichr  Úskipr
   r³   r¸   Úwrite_bytesr   rŸ   Úreplacer´   rµ   rR  Ú
returncoderQ   rR   rT   rU   rV   rS   rÕ   ÚstderrrW   rX   )rY   Útmp_pathr¤   r­   Úbin_pathÚbin_strÚ	js_scriptrX  rs   r^   rt   r_   r`   s                rd   Ú$test_node_tile_grid_loader_roundtripzLTestClientTileGridLoaderNodeIntegration.test_node_tile_grid_loader_roundtripÑ   sÛ  € ÝŒ|˜FÑ#Ô#ð 	HÝŒKÐFÑGÔGÐGå$Ô-Ð.CÑDÔDˆØ—<’< S�<Ñ)Ô)ˆØ˜nÑ,ˆØ×ÒÕ/°Ñ9Ô9Ñ:Ô:Ð:Ý�h‘-”-×'Ò'¨¨cÑ2Ô2ˆðð '.ðð ð )1¬ðð ð *2¬ðð ð ˆ	ð �nŠn˜YÑ'Ô'ˆØŒ~ÐI ÐIˆ~ Ò"ÐIÐIÐIÕIÔIÐIÐIÐIÐIˆ~ ÐIÑIÔIÐIÕIÔIÑIÔIÐIÐIÕIÔIˆsÑIÔIÐIÕIÔIˆsÑIÔIÐIÐIÕIÔIˆ~ÑIÔIÕIÔI ÑIÔIÐIÐIÑIÐIÕIÔIÐ$I¸S¼ZÐ$IÐ$IÑIÔIÐIÑIÐIÐIÐIÑIÐIÕIÕIÔIÐIÑIÔIÑIÔIÐIÐIÐIÐIÐIÐIÐIÐIÐIrf   c                ó@  — t          j        d¦  «        st          j        d¦  «         d}|                      |¦  «        }|j        }d}||k    }|sÇt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        d	|j        › �¦  «        d
z   d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S )NrL  rT  z±
        const { TileGridLoader, BIOME_CODES } = require('./client/webapp/js/engine/tile_grid_loader.js');
        if (!TileGridLoader || !BIOME_CODES) process.exit(1);
        r   rA   rW  rX  rË   z3Clean Node require failed (window ReferenceError): rÍ   rG   ©rY  rZ  r  r[  rR  r^  rQ   rR   rT   rU   rV   rS   rÕ   r_  rW   rX   ©rY   rI  rX  rs   r^   rt   r_   r`   s           rd   Ú,test_node_loader_clean_import_without_windowzTTestClientTileGridLoaderNodeIntegration.test_node_loader_clean_import_without_windowë   sA  € ÝŒ|˜FÑ#Ô#ð 	HÝŒKÐFÑGÔGÐGðˆð �nŠn˜VÑ$Ô$ˆØŒ~Ðf Ðfˆ~ Ò"ÐfÐfÐfÕfÔfÐfÐfÐfÐfˆ~ ÐfÑfÔfÐfÕfÔfÑfÔfÐfÐfÕfÔfˆsÑfÔfÐfÕfÔfˆsÑfÔfÐfÐfÕfÔfˆ~ÑfÔfÕfÔf ÑfÔfÐfÐfÑfÐfÕfÔfÐ$fÐZ]ÔZdÐ$fÐ$fÑfÔfÐfÑfÐfÐfÐfÑfÐfÕfÕfÔfÐfÑfÔfÑfÔfÐfÐfÐfÐfÐfÐfÐfÐfÐfrf   c                ó@  — t          j        d¦  «        st          j        d¦  «         d}|                      |¦  «        }|j        }d}||k    }|sÇt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        d	|j        › �¦  «        d
z   d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S )NrL  rT  a²  
        const { TileGridLoader } = require('./client/webapp/js/engine/tile_grid_loader.js');
        TileGridLoader.loadFallbackGrid(60, 45, 1);
        const badCoords = [NaN, undefined, -1, 60, Infinity, -Infinity, "invalid"];
        for (const c of badCoords) {
            if (TileGridLoader.getTileAt(c, 0) !== 2 || TileGridLoader.getTileAt(0, c) !== 2) {
                console.error("Failed for coord:", c, "got:", TileGridLoader.getTileAt(c, 0));
                process.exit(1);
            }
        }
        if (TileGridLoader.getTileAt(NaN, NaN) !== 2) process.exit(2);
        if (TileGridLoader.getTileAt(0.9, 0.9) !== 1) process.exit(3);
        process.exit(0);
        r   rA   rW  rX  rË   z!getTileAt non-finite/OOB failed: rÍ   rG   rf  rg  s           rd   Ú(test_node_get_tile_at_non_finite_and_oobzPTestClientTileGridLoaderNodeIntegration.test_node_get_tile_at_non_finite_and_oobõ   s?  € ÝŒ|˜FÑ#Ô#ð 	HÝŒKÐFÑGÔGÐGðˆð �nŠn˜VÑ$Ô$ˆØŒ~ÐT ÐTˆ~ Ò"ÐTÐTÐTÕTÔTÐTÐTÐTÐTˆ~ ÐTÑTÔTÐTÕTÔTÑTÔTÐTÐTÕTÔTˆsÑTÔTÐTÕTÔTˆsÑTÔTÐTÐTÕTÔTˆ~ÑTÔTÕTÔT ÑTÔTÐTÐTÑTÐTÕTÔTÐ$TÈÌ
Ð$TÐ$TÑTÔTÐTÑTÐTÐTÐTÑTÐTÕTÕTÔTÐTÑTÔTÑTÔTÐTÐTÐTÐTÐTÐTÐTÐTÐTrf   c                ó@  — t          j        d¦  «        st          j        d¦  «         d}|                      |¦  «        }|j        }d}||k    }|sÇt          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        d	|j        › �¦  «        d
z   d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S )NrL  rT  a  
        const { TileGridLoader } = require('./client/webapp/js/engine/tile_grid_loader.js');
        TileGridLoader.loadFallbackGrid(10, 10, 1);
        if (!TileGridLoader.setTileAt(5, 5, 10) || TileGridLoader.getTileAt(5, 5) !== 10) process.exit(1);
        if (!TileGridLoader.setTileAt(5, 5, 1) || TileGridLoader.getTileAt(5, 5) !== 1) process.exit(2);
        for (const bad of [-1, 10, NaN, Infinity]) {
            if (TileGridLoader.setTileAt(bad, 0, 1) !== false) process.exit(3);
        }
        process.exit(0);
        r   rA   rW  rX  rË   z$setTileAt mutation or guard failed: rÍ   rG   rf  rg  s           rd   Ú)test_node_set_tile_at_mutation_and_guardszQTestClientTileGridLoaderNodeIntegration.test_node_set_tile_at_mutation_and_guards	  s?  € ÝŒ|˜FÑ#Ô#ð 	HÝŒKÐFÑGÔGÐGð	ˆð �nŠn˜VÑ$Ô$ˆØŒ~ÐW ÐWˆ~ Ò"ÐWÐWÐWÕWÔWÐWÐWÐWÐWˆ~ ÐWÑWÔWÐWÕWÔWÑWÔWÐWÐWÕWÔWˆsÑWÔWÐWÕWÔWˆsÑWÔWÐWÐWÕWÔWˆ~ÑWÔWÕWÔW ÑWÔWÐWÐWÑWÐWÕWÔWÐ$WÈ3Ì:Ð$WÐ$WÑWÔWÐWÑWÐWÐWÐWÑWÐWÕWÕWÔWÐWÑWÔWÑWÔWÐWÐWÐWÐWÐWÐWÐWÐWÐWrf   c                ó,  — t          j        d¦  «        st          j        d¦  «         t	          j        d¦  «        }|dz  }|                     t          |                     d¬¦  «        ¦  «        ¦  «         t          |¦  «         
                    dd¦  «        }d	|› d
�}|                      |¦  «        }|j        }d}||k    }	|	sÇt          j        d|	fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }
t          j        d|j        › �¦  «        dz   d|
iz  }t+          t          j        |¦  «        ¦  «        ‚d x}x}	}d S )NrL  rT  r„   z	valid.binrÈ   r«   rU  rV  a�  
        const fs = require('fs');
        const { TileGridLoader } = require('./client/webapp/js/engine/tile_grid_loader.js');
        if (TileGridLoader.loadBinaryMap(null) !== null) process.exit(1);
        if (TileGridLoader.loadBinaryMap(Buffer.alloc(0)) !== null) process.exit(2);
        if (TileGridLoader.loadBinaryMap(Buffer.alloc(15)) !== null) process.exit(3);

        const valid = fs.readFileSync('a‚  ');
        const corrupt = Buffer.from(valid); corrupt[0] = 88; corrupt[1] = 88;
        if (TileGridLoader.loadBinaryMap(corrupt) !== null) process.exit(4);

        for (const cut of [16, 20, valid.length - 1]) {
            if (TileGridLoader.loadBinaryMap(valid.subarray(0, cut)) !== null) process.exit(5);
        }

        const fake = Buffer.alloc(16);
        fake.write("FE", 0, 2, 'ascii'); fake.writeUInt8(1, 2); fake.writeUInt8(1, 3);
        fake.writeUInt16LE(0, 4); fake.writeUInt16LE(0, 6); fake.writeUInt8(10, 12);
        if (TileGridLoader.loadBinaryMap(fake) !== null) process.exit(6);

        process.exit(0);
        r   rA   rW  rX  rË   zNode buffer rejection failed: rÍ   rG   )rY  rZ  r  r[  r
   r³   r\  r   r¸   rŸ   r]  rR  r^  rQ   rR   rT   rU   rV   rS   rÕ   r_  rW   rX   )rY   r`  r¤   ra  rb  rI  rX  rs   r^   rt   r_   r`   s               rd   Ú.test_node_loader_truncated_and_corrupt_bufferszVTestClientTileGridLoaderNodeIntegration.test_node_loader_truncated_and_corrupt_buffers  s´  € ÝŒ|˜FÑ#Ô#ð 	HÝŒKÐFÑGÔGÐGÝ$Ô-Ð.CÑDÔDˆØ˜kÑ)ˆØ×ÒÕ/°·²À"°Ñ0EÔ0EÑFÔFÑGÔGÐGÝ�h‘-”-×'Ò'¨¨cÑ2Ô2ˆðð )0ðð ð ˆð, �nŠn˜VÑ$Ô$ˆØŒ~ÐQ ÐQˆ~ Ò"ÐQÐQÐQÕQÔQÐQÐQÐQÐQˆ~ ÐQÑQÔQÐQÕQÔQÑQÔQÐQÐQÕQÔQˆsÑQÔQÐQÕQÔQˆsÑQÔQÐQÐQÕQÔQˆ~ÑQÔQÕQÔQ ÑQÔQÐQÐQÑQÐQÕQÔQÐ$QÀSÄZÐ$QÐ$QÑQÔQÐQÑQÐQÐQÐQÑQÐQÕQÕQÔQÐQÑQÔQÑQÔQÐQÐQÐQÐQÐQÐQÐQÐQÐQrf   N)rI  rŸ   r   rJ  r|   )r}   r~   r   r€   ÚstaticmethodrR  rd  rh  rj  rl  rn  r�   rf   rd   rH  rH  Å   s²   € € € € € ØpÐpàð
ð 
ð 
ñ „\ð
ðJð Jð Jð Jð4gð gð gð gðUð Uð Uð Uð(Xð Xð Xð Xð Rð Rð Rð Rð Rð Rrf   rH  )'r€   Ú
__future__r   ÚbuiltinsrT   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterQ   rÒ   rY  rP  Útypingr   r   r  Úserver.world.map_data_typesr   r   r   r	   Ú%server.world.wilderness_map_generatorr
   r   Ú"server.world.map_binary_serializerr   r   r   r   r   Ú"server.world.procedural_map_enginer   r   r   r   r   rƒ   r   rH  r�   rf   rd   ú<module>rz     s  ðØ `Ð `à "Ð "Ð "Ð "Ð "Ð "Ø  € € € € € € € € € € € € Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ø €€€à VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VØ \Ð \Ð \Ð \Ð \Ð \Ð \Ð \ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð!5ð !5ð !5ð !5ð !5ñ !5ô !5ð !5ðHN;ð N;ð N;ð N;ð N;ñ N;ô N;ð N;ðb4/ð 4/ð 4/ð 4/ð 4/ñ 4/ô 4/ð 4/ðnsRð sRð sRð sRð sRñ sRô sRð sRð sRð sRrf   