§
    ˆ¶¾jc  ã                  ó  — d Z ddlmZ ddlZddlZddl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 ddlmZmZ ddlmZmZ dd	lmZ dd„Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        ZdS )aC  
Comprehensive E2E Test Suite for FreeExile PoE2 Procedural Tile Map System.
Enforces 4-Tier Testing Methodology:
- Tier 1: Feature Coverage (>=5 test cases per feature area)
- Tier 2: Boundary & Corner Cases (>=5 test cases per feature area)
- Tier 3: Cross-Feature Combinations
- Tier 4: Real-World Application Scenarios
é    )ÚannotationsN)ÚListÚTuple)ÚTileTypeÚMapGridDataÚEncounterZoneÚObstacleInstanceÚObstacleType)ÚWildernessMapGeneratorÚZONE_DEFAULT_SIZES)Úserialize_map_gridÚdeserialize_map_grid)Úcalculate_path_sinuosityÚverify_path_connectivity)Ú
ZoneEngineÚgridÚbytesÚwidthÚintÚheightÚtxÚtyÚreturnc                óp   — |dk     s||k    s|dk     s||k    rt           j        j        S | ||z  |z            S )zLSimulates client-side window.getTileAt(tx, ty) reading row-major Uint8Array.r   )r   ÚWALLÚvalue)r   r   r   r   r   s        ú;C:\Projects\FreeExile\tests\e2e\test_poe2_map_system_e2e.pyÚclient_get_tile_atr      sA   € à	ˆA‚v€v��u’�  Q¢ ¨"°ª,¨,ÝŒ}Ô"Ð"Ø��U‘
˜R‘Ô Ð ó    c                  óz  — e Zd ZdZd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d	„Z	d2d
„Z
d2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d„Zd2d „Z d2d!„Z!d2d"„Z"d2d#„Z#d2d$„Z$d2d%„Z%d2d&„Z&d2d'„Z'd2d(„Z(d2d)„Z)d2d*„Z*d2d+„Z+d2d,„Z,d2d-„Z-d2d.„Z.d2d/„Z/d2d0„Z0d1S )3ÚTestTier1FeatureCoveragez;Tier 1: Feature Coverage (>=5 test cases per feature area).r   ÚNonec                óš   — t          j        d¦  «                             d¦  «        }|j        dk    r|j        dk    r|j        dk    sJ ‚d S )NÚzone_tang_kiem_nhaié*   é<   é-   ÚBLEACHED_BONE_CANYON)r   Úfor_zoneÚgenerater   r   Úbiome©ÚselfÚms     r   Útest_t1_gen_valid_gridz/TestTier1FeatureCoverage.test_t1_gen_valid_grid"   sO   € Ý"Ô+Ð,AÑBÔB×KÒKÈBÑOÔOˆØŒw˜"Š}ˆ} ¤¨R¢ °A´GÐ?UÒ4UÐ4UÐ4UÐUÐ4UÐ4Ur   c                óš   — dD ]G\  }\  }}t          j        |¦  «                             d¦  «        }|j        |k    r|j        |k    sJ ‚ŒHd S )N))r$   )r&   r'   )Úzone_ancient_sword_barrow)éD   é4   )Úzone_boundless_celestial_palace)éx   éZ   éd   ©r   r)   r*   r   r   )r-   ÚzidÚwÚhr.   s        r   Útest_t1_gen_canonical_zonesz4TestTier1FeatureCoverage.test_t1_gen_canonical_zones&   s`   € ð Xð 	2ð 	2‰KˆC‘�!�QÝ&Ô/°Ñ4Ô4×=Ò=¸cÑBÔBˆAØ”7˜a’<�< A¤H°¢M M MÐ1 Mð	2ð 	2r   c                ó2  — t          j        d¦  «                             d¦  «        }t          j        d¦  «                             d¦  «        }|j        |j        k    r|j        |j        k    sJ ‚d„ |j        D ¦   «         d„ |j        D ¦   «         k    sJ ‚d S )Nr$   éç  c                ó&   — g | ]}|D ]	}|j         ‘Œ
ŒS © ©Ú	tile_type©Ú.0ÚrowÚcs      r   ú
<listcomp>zVTestTier1FeatureCoverage.test_t1_gen_deterministic_reproducibility.<locals>.<listcomp>/   s'   € Ð=Ð=Ð= ¸Ð=Ð=°A�”Ð=Ð=Ð=Ð=r   c                ó&   — g | ]}|D ]	}|j         ‘Œ
ŒS r@   rA   rC   s      r   rG   zVTestTier1FeatureCoverage.test_t1_gen_deterministic_reproducibility.<locals>.<listcomp>/   s*   € ÐAoÐAoÐAoÐRUÐknÐAoÐAoÐfgÀ!Ä+ÐAoÐAoÐAoÐAor   )r   r)   r*   Úspawn_pointÚ	boss_gateÚtiles©r-   Úm1Úm2s      r   Ú)test_t1_gen_deterministic_reproducibilityzBTestTier1FeatureCoverage.test_t1_gen_deterministic_reproducibility+   s�   € Ý#Ô,Ð-BÑCÔC×LÒLÈSÑQÔQˆÝ#Ô,Ð-BÑCÔC×LÒLÈSÑQÔQˆØŒ~ ¤Ò/Ð/°B´LÀBÄLÒ4PÐ4PÐ4PÐPØ=Ð= r¤xÐ=Ñ=Ô=ÐAoÐAoÐY[ÔYaÐAoÑAoÔAoÒoÐoÐoÐoÐoÐor   c                óÂ   — t          j        d¦  «                             d¦  «        }|                     ¦   «         t	          |j        |j        z  dz  ¦  «        k    sJ ‚d S )Nr$   éM   g333333Ã?)r   r)   r*   Úget_walkables_countr   r   r   r,   s     r   Ú!test_t1_gen_walkable_floors_existz:TestTier1FeatureCoverage.test_t1_gen_walkable_floors_exist1   sZ   € Ý"Ô+Ð,AÑBÔB×KÒKÈBÑOÔOˆØ×$Ò$Ñ&Ô&­#¨a¬g¸¼Ñ.@À4Ñ.GÑ*HÔ*HÒHÐHÐHÐHÐHÐHr   c                ór   — t          j        dd¬¦  «                             d¦  «        }|j        dk    sJ ‚d S )Nr$   ÚSAVAGE_MANGROVE_SWAMP©Úbiome_idé7   )r   r)   r*   r+   r,   s     r   Ú&test_t1_gen_biome_attributes_respectedz?TestTier1FeatureCoverage.test_t1_gen_biome_attributes_respected5   sB   € Ý"Ô+Ð,AÐLcÐdÑdÔd×mÒmÐnpÑqÔqˆØŒwÐ1Ò1Ð1Ð1Ð1Ð1Ð1r   c                óª   — t          j        d¦  «                             d¦  «        }t          |¦  «        }|d d…         dk    r|d         dk    sJ ‚d S )Nr$   é{   é   s   FEé   )r   r)   r*   r   )r-   r.   Úbs      r   Útest_t1_ser_magic_headerz1TestTier1FeatureCoverage.test_t1_ser_magic_header:   sT   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝ˜qÑ!Ô!ˆØ��!�Œu˜Š~ˆ~ ! A¤$¨!¢) ) )Ð+ ) )r   c                ó¼   — t          j        d¦  «                             d¦  «        }t          j        dt          |¦  «        d¦  «        \  }}|dk    r|dk    sJ ‚d S )Nr$   r[   z<HHé   r&   r'   )r   r)   r*   ÚstructÚunpack_fromr   )r-   r.   r:   r;   s       r   Útest_t1_ser_header_dimensionsz6TestTier1FeatureCoverage.test_t1_ser_header_dimensions?   s\   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝÔ! %Õ);¸AÑ)>Ô)>ÀÑBÔB‰ˆˆ1Ø�BŠwˆw˜1 š7˜7˜7Ð"˜7˜7r   c                ó  — t          j        d¦  «                             d¦  «        }t          t	          |¦  «        ¦  «        dt          |j        ¦  «        dz  z   t          |j        ¦  «        dz  z   |j        |j        z  z   k    sJ ‚d S )Nr$   r[   é   é   é   )	r   r)   r*   Úlenr   Ú
poi_pointsÚencounter_zonesr   r   r,   s     r   Útest_t1_ser_poi_and_enc_tablesz7TestTier1FeatureCoverage.test_t1_ser_poi_and_enc_tablesD   s…   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝÕ% aÑ(Ô(Ñ)Ô)¨Rµ#°a´lÑ2CÔ2CÀaÑ2GÑ-GÍ#ÈaÔN_ÑJ`ÔJ`ÐcdÑJdÑ-dÐghÔgnÐqrÔqyÑgyÑ-yÒyÐyÐyÐyÐyÐyr   c                ó  — t          j        d¦  «                             d¦  «        }t          t	          |¦  «        ¦  «        }|j        |j        k    r0|j        |j        k    r |j        |j        k    r|j        |j        k    sJ ‚d S )Nr$   r[   )	r   r)   r*   r   r   r   r   rI   rJ   ©r-   r.   Úds      r   Ú$test_t1_ser_deserialization_fidelityz=TestTier1FeatureCoverage.test_t1_ser_deserialization_fidelityH   s‚   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝ Õ!3°AÑ!6Ô!6Ñ7Ô7ˆØŒw˜!œ'Ò!Ð! a¤h°!´(Ò&:Ð&:¸q¼}ÐPQÔP]Ò?]Ð?]ÐbcÔbmÐqrÔq|Òb|Ðb|Ðb|Ð|Ðb|Ðb|r   c                óð   ‡‡— t          j        d¦  «                             d¦  «        Št          t	          ‰¦  «        ¦  «        Št          ˆˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        sJ ‚d S )Nr$   r[   c              3  óª   •K  — | ]M}t          ‰j        ¦  «        D ]6}‰j        |         |         j        ‰j        |         |         j        k    V — Œ7ŒNd S ©N©Úranger   rK   rB   )rD   ÚyÚxro   r.   s      €€r   ú	<genexpr>zLTestTier1FeatureCoverage.test_t1_ser_tile_matrix_equality.<locals>.<genexpr>P   s]   øè è € ÐwÐwÈ!ÕhmÐnoÔnuÑhvÔhvÐwÐwÐcd�1”7˜1”:˜a”=Ô*¨a¬g°a¬j¸¬mÔ.EÒEÐwÐwÐwÐwÐwÐwÐwr   )r   r)   r*   r   r   Úallru   r   )r-   ro   r.   s    @@r   Ú test_t1_ser_tile_matrix_equalityz9TestTier1FeatureCoverage.test_t1_ser_tile_matrix_equalityM   su   øø€ Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝ Õ!3°AÑ!6Ô!6Ñ7Ô7ˆÝÐwÐwÐwÐwÐwÍuÐUVÔU]ÉÌÐwÑwÔwÑwÔwÐwÐwÐwÐwÐwr   c                óü   — t          j        d¦  «                             d¦  «        }|j        \  }}|j        |         |         j        t          j        t          j        fv r|j        |         |         j	        sJ ‚d S )Nr$   éA  )
r   r)   r*   rI   rK   rB   r   ÚFLOORÚPATHÚwalkable©r-   r.   ÚsxÚsys       r   Útest_t1_spawn_center_is_floorz6TestTier1FeatureCoverage.test_t1_spawn_center_is_floorS   sq   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆØ”‰ˆˆBØŒw�rŒ{˜2ŒÔ(­X¬^½X¼]Ð,KÐKÐKÐPQÔPWÐXZÔP[Ð\^ÔP_ÔPhÐKÐKÐhÐKÐKr   c           	     ó4  ‡‡‡— t          j        d¦  «                             d¦  «        Š‰j        \  ŠŠˆˆˆfd„t	          t          d‰dz
  ¦  «        t          ‰j        dz
  ‰dz   ¦  «        ¦  «        D ¦   «         }t          d„ |D ¦   «         ¦  «        sJ ‚d S )Nr$   r|   c           
     óä   •— g | ]l}t          t          d ‰dz
  ¦  «        t          ‰j        d z
  ‰dz   ¦  «        ¦  «        D ]/}|‰z
  dz  |‰z
  dz  z   dk    ¯‰j        |         |         j        ‘Œ0ŒmS )r]   é   é	   r\   é@   )ru   ÚmaxÚminr   rK   rB   ©rD   rv   rw   r.   r�   r‚   s      €€€r   rG   zNTestTier1FeatureCoverage.test_t1_spawn_radius_8_all_floors.<locals>.<listcomp>[   s›   ø€ ð wð wð w°!Ý$¥S¨¨B°©F¡^¤^µS¸¼À1¹ÀbÈ1ÁfÑ5MÔ5MÑNÔNðwð wØÐSTÐWYÑSYÐ^_ÑR_ÐcdÐgiÑciÐnoÑboÑRoÐsuÒRuÐRuð ”g˜a”j ”mÔ-ØRuÐRuÐRuÐRur   r]   r†   r‡   c              3  óJ   K  — | ]}|t           j        t           j        fv V — Œd S rs   )r   r}   r~   )rD   Úts     r   rx   zMTestTier1FeatureCoverage.test_t1_spawn_radius_8_all_floors.<locals>.<genexpr>]   s0   è è € ÐLÐL¸A�1�œ­¬Ð7Ð7ÐLÐLÐLÐLÐLÐLr   )	r   r)   r*   rI   ru   r‰   rŠ   r   ry   )r-   Ú
safe_tilesr.   r�   r‚   s     @@@r   Ú!test_t1_spawn_radius_8_all_floorsz:TestTier1FeatureCoverage.test_t1_spawn_radius_8_all_floorsX   sÃ   øøø€ Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆØ”‰ˆˆBðwð wð wð wð wð wµu½SÀÀBÈÁF¹^¼^ÍSÐQRÔQYÐ\]ÑQ]Ð_aÐdeÑ_eÑMfÔMfÑ7gÔ7gð wñ wô wˆ
åÐLÐLÀÐLÑLÔLÑLÔLÐLÐLÐLÐLÐLr   c                ó  ‡‡‡— t          j        d¦  «                             d¦  «        Š‰j        \  ŠŠt	          ˆˆˆfd„t          t          d‰dz
  ¦  «        t          ‰j        dz
  ‰dz   ¦  «        ¦  «        D ¦   «         ¦  «        sJ ‚d S )Nr$   r|   c           	   3  óì   •K  — | ]n}t          t          d ‰dz
  ¦  «        t          ‰j        d z
  ‰dz   ¦  «        ¦  «        D ]1}|‰z
  dz  |‰z
  dz  z   dk    ¯‰j        |         |         j        V — Œ2ŒodS ©r]   r†   r‡   r\   rˆ   N)ru   r‰   rŠ   r   rK   r   r‹   s      €€€r   rx   zOTestTier1FeatureCoverage.test_t1_spawn_radius_8_all_walkable.<locals>.<genexpr>b   s§   øè è € ð tð t¨aÝ!¥# a¨¨a©¡.¤.µ#°a´gÀ±kÀ2ÈÁ6Ñ2JÔ2JÑKÔKðtð tØÐPQÐTVÑPVÐ[\É}Ð`aÐdfÑ`fÐklÑ_lÑOlÐprÒOrÐOrð ”7˜1”:˜a”=Ô)ØOrÐOrÐOrÐOrÐOrðtð tr   r]   r†   r‡   )	r   r)   r*   rI   ry   ru   r‰   rŠ   r   r€   s    @@@r   Ú#test_t1_spawn_radius_8_all_walkablez<TestTier1FeatureCoverage.test_t1_spawn_radius_8_all_walkable_   sÂ   øøø€ Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆØ”‰ˆˆBÝð tð tð tð tð tð tµ5½¸QÀÀQÁ¹¼ÍÈQÌXÐXYÉ\Ð[]Ð`aÑ[aÑIbÔIbÑ3cÔ3cð tñ tô tñ tô tð 	tð 	tð tð 	tð 	tr   c                ó  ‡‡‡— t          j        d¦  «                             d¦  «        Š‰j        \  ŠŠt	          ˆˆˆfd„t          t          d‰dz
  ¦  «        t          ‰j        dz
  ‰dz   ¦  «        ¦  «        D ¦   «         ¦  «        rJ ‚d S )Nr$   r|   c           	   3  óì   •K  — | ]n}t          t          d ‰dz
  ¦  «        t          ‰j        d z
  ‰dz   ¦  «        ¦  «        D ]1}|‰z
  dz  |‰z
  dz  z   dk    ¯‰j        |         |         j        V — Œ2ŒodS r’   )ru   r‰   rŠ   r   rK   Úblocks_visionr‹   s      €€€r   rx   zVTestTier1FeatureCoverage.test_t1_spawn_radius_8_blocks_vision_false.<locals>.<genexpr>h   s¨   øè è € ð xð x°qÝ %¥c¨!¨R°!©V¡n¤nµc¸!¼'ÀA¹+ÀrÈAÁvÑ6NÔ6NÑ OÔ Oðxð xØÐTUÐXZÑTZÐ_`ÑS`ÐdeÐhjÑdjÐopÑcpÑSpÐtvÒSvÐSvð ”w˜q”z !”}Ô2ØSvÐSvÐSvÐSvÐSvðxð xr   r]   r†   r‡   )	r   r)   r*   rI   Úanyru   r‰   rŠ   r   r€   s    @@@r   Ú*test_t1_spawn_radius_8_blocks_vision_falsezCTestTier1FeatureCoverage.test_t1_spawn_radius_8_blocks_vision_falsee   sÆ   øøø€ Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆØ”‰ˆˆBÝð xð xð xð xð xð x½EÅ#ÀaÈÈaÉÁ.Ä.ÕRUÐVWÔV^ÐabÑVbÐdfÐijÑdjÑRkÔRkÑ<lÔ<lð xñ xô xñ xô xð 	xð 	xð xð 	xð 	xr   c                ó&  — t          j        d¦  «                             d¦  «        }|j        \  }}t	          |j        |         |dz            j        |j        |         |dz
           j        |j        |dz            |         j        g¦  «        sJ ‚d S )Nr$   r|   r†   )r   r)   r*   rI   r—   rK   r   r€   s       r   Ú!test_t1_spawn_perimeter_connectedz:TestTier1FeatureCoverage.test_t1_spawn_perimeter_connectedk   sŠ   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆØ”‰ˆˆBÝ�A”G˜B”K  Q¡Ô'Ô0°!´'¸"´+¸bÀ1¹fÔ2EÔ2NÐPQÔPWÐXZÐ]^ÑX^ÔP_Ð`bÔPcÔPlÐmÑnÔnÐnÐnÐnÐnÐnr   c                óÂ   — t          j        d¦  «                             d¦  «        }t          ||j        |j        ¦  «        \  }}|du rt          |¦  «        dk    sJ ‚d S )Nr$   éô  Tr   ©r   r)   r*   r   rI   rJ   ri   )r-   r.   ÚokÚpaths       r   Ú test_t1_path_connectivity_existsz9TestTier1FeatureCoverage.test_t1_path_connectivity_existsq   sZ   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝ+¨A¨q¬}¸a¼kÑJÔJ‰ˆˆDØ�Tˆzˆz�c $™iœi¨!šm˜m˜mÐ+˜m˜mr   c                óÒ   — t          j        d¦  «                             d¦  «        }t          ||j        |j        ¦  «        \  }}t          ||j        |j        ¦  «        dk    sJ ‚d S )Nr$   rœ   ç      ô?©r   r)   r*   r   rI   rJ   r   ©r-   r.   Ú_rŸ   s       r   Ú%test_t1_path_sinuosity_tang_kiem_nhaiz>TestTier1FeatureCoverage.test_t1_path_sinuosity_tang_kiem_nhaiv   sa   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝ*¨1¨a¬m¸Q¼[ÑIÔI‰ˆˆ4Ý'¨¨a¬m¸Q¼[ÑIÔIÈTÒQÐQÐQÐQÐQÐQr   c                óÒ   — t          j        d¦  «                             d¦  «        }t          ||j        |j        ¦  «        \  }}t          ||j        |j        ¦  «        dk    sJ ‚d S )Nr4   rœ   r¢   r£   r¤   s       r   Ú'test_t1_path_sinuosity_celestial_palacez@TestTier1FeatureCoverage.test_t1_path_sinuosity_celestial_palace{   sb   € Ý"Ô+Ð,MÑNÔN×WÒWÐX[Ñ\Ô\ˆÝ*¨1¨a¬m¸Q¼[ÑIÔI‰ˆˆ4Ý'¨¨a¬m¸Q¼[ÑIÔIÈTÒQÐQÐQÐQÐQÐQr   c                óÒ   — t          j        d¦  «                             d¦  «        }d„ |j        D ¦   «         }t	          |¦  «        dk    rt          d„ |D ¦   «         ¦  «        sJ ‚d S )Nr$   rœ   c                óF   — g | ]}|D ]}|j         t          j        k    ¯|‘ŒŒS r@   )rB   r   r~   rC   s      r   rG   zMTestTier1FeatureCoverage.test_t1_path_contains_path_tiles.<locals>.<listcomp>‚   s3   € ÐXÐXÐX˜C°CÐXÐX¨q¸1¼;Í(Ì-Ò;WÐ;W�aÐ;WÐ;WÐ;WÐ;Wr   é   c              3  ó,   K  — | ]}|j         d k    V — ŒdS )çš™™™™™é?N)Úmovement_cost©rD   rF   s     r   rx   zLTestTier1FeatureCoverage.test_t1_path_contains_path_tiles.<locals>.<genexpr>ƒ   s)   è è € Ð,XÐ,XÈ¨Q¬_ÀÒ-CÐ,XÐ,XÐ,XÐ,XÐ,XÐ,Xr   ©r   r)   r*   rK   ri   ry   )r-   r.   Ú
path_tiless      r   Ú test_t1_path_contains_path_tilesz9TestTier1FeatureCoverage.test_t1_path_contains_path_tiles€   so   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆØXÐX 1¤7ÐXÑXÔXˆ
Ý�:‰Œ "Ò$Ð$­Ð,XÐ,XÈZÐ,XÑ,XÔ,XÑ)XÔ)XÐ$Ð$ÐXÐ$Ð$r   c                óÎ   — t          j        d¦  «                             d¦  «        }t          ||j        |j        ¦  «        \  }}t          d„ |D ¦   «         ¦  «        dk    sJ ‚d S )Nr$   rœ   c                ó   — h | ]
}|d          ’ŒS ©r]   r@   )rD   Úps     r   ú	<setcomp>zITestTier1FeatureCoverage.test_t1_path_non_linear_nodes.<locals>.<setcomp>ˆ   s   € Ð'Ð'Ð'˜Q�A�a”DÐ'Ð'Ð'r   r†   r�   r¤   s       r   Útest_t1_path_non_linear_nodesz6TestTier1FeatureCoverage.test_t1_path_non_linear_nodes…   sh   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝ*¨1¨a¬m¸Q¼[ÑIÔI‰ˆˆ4ÝÐ'Ð' $Ð'Ñ'Ô'Ñ(Ô(¨AÒ-Ð-Ð-Ð-Ð-Ð-r   c                ó   — t          dd¬¦  «                             d¦  «        }t          j        d¦  «                             d¦  «        }t          |j        ¦  «        dk    rt          |j        ¦  «        dk    sJ ‚d S )Né0   é$   ©r   r   éX  r4   r\   rg   )r   r*   r)   ri   rk   )r-   Úm_narrowÚm_wides      r   Útest_t1_enc_zone_count_2_or_3z6TestTier1FeatureCoverage.test_t1_enc_zone_count_2_or_3‹   sz   € Ý)°¸2Ð>Ñ>Ô>×GÒGÈÑLÔLˆÝ'Ô0Ð1RÑSÔS×\Ò\Ð]`ÑaÔaˆÝ�8Ô+Ñ,Ô,°Ò1Ð1µc¸&Ô:PÑ6QÔ6QÐUVÒ6VÐ6VÐ6VÐVÐ6VÐ6Vr   c                ó†   — t          j        d¦  «                             d¦  «        }d„ |j        D ¦   «         g d¢k    sJ ‚d S )Nr4   r½   c                ó   — g | ]	}|j         ‘Œ
S r@   )Útier)rD   Úezs     r   rG   zLTestTier1FeatureCoverage.test_t1_enc_zone_tiers_assigned.<locals>.<listcomp>’   s   € Ð4Ð4Ð4˜B�”Ð4Ð4Ð4r   )r]   r\   rg   )r   r)   r*   rk   r,   s     r   Útest_t1_enc_zone_tiers_assignedz8TestTier1FeatureCoverage.test_t1_enc_zone_tiers_assigned�   sN   € Ý"Ô+Ð,MÑNÔN×WÒWÐX[Ñ\Ô\ˆØ4Ð4 !Ô"3Ð4Ñ4Ô4¸	¸	¸	ÒAÐAÐAÐAÐAÐAr   c                ó    — t          j        d¦  «                             d¦  «        }d„ |j        D ¦   «         }t	          |¦  «        dk    sJ ‚d S )Nr$   r½   c                óz   — h | ]8}|D ]3}|j         t          j        t          j        t          j        fv ¯,|j         ’Œ4Œ9S r@   ©rB   r   ÚENCOUNTER_LOWÚENCOUNTER_MEDIUMÚENCOUNTER_HIGHrC   s      r   r·   zHTestTier1FeatureCoverage.test_t1_enc_tiles_classified.<locals>.<setcomp>–   s}   € ð  að  að  a S¸Sð  að  a¸ÀAÄKÕT\ÔTjÕltô  mFõ  HPô  H_ð  T`ð  E`ð  E`�Q”[ð  E`ð  E`ð  E`ð  E`r   r\   ©r   r)   r*   rK   ri   )r-   r.   Ú	enc_typess      r   Útest_t1_enc_tiles_classifiedz5TestTier1FeatureCoverage.test_t1_enc_tiles_classified”   sb   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆð að  a¨A¬Gð  añ  aô  aˆ	Ý�9‰~Œ~ Ò"Ð"Ð"Ð"Ð"Ð"r   c                óš   ‡— t          j        d¦  «                             d¦  «        Št          ˆfd„‰j        D ¦   «         ¦  «        sJ ‚d S )Nr$   r½   c              3  ó°   •K  — | ]P}d |j         cxk    o|j        cxk     o
‰j        k     nc o%d |j        cxk    o|j        cxk     o
‰j        k     nc V — ŒQdS ©r   N)Úmin_xÚmax_xr   Úmin_yÚmax_yr   )rD   rÄ   r.   s     €r   rx   zKTestTier1FeatureCoverage.test_t1_enc_zones_within_bounds.<locals>.<genexpr>›   s‹   øè è € ÐzÐzÐbd�1˜œÐ5Ð5Ò5Ð5 2¤8Ð5Ð5Ò5Ð5¨a¬gÒ5Ð5Ð5Ð5Ð]¸!¸r¼xÐ:]Ð:]Ò:]Ð:]È"Ì(Ð:]Ð:]Ò:]Ð:]ÐUVÔU]Ò:]Ð:]Ð:]Ð:]ÐzÐzÐzÐzÐzÐzr   )r   r)   r*   ry   rk   r,   s    @r   Útest_t1_enc_zones_within_boundsz8TestTier1FeatureCoverage.test_t1_enc_zones_within_bounds™   sU   ø€ Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝÐzÐzÐzÐzÐhiÔhyÐzÑzÔzÑzÔzÐzÐzÐzÐzÐzr   c                óÒ   — t          j        d¦  «                             d¦  «        }d„ |j        D ¦   «         }t	          |¦  «        dk    rt          d„ |D ¦   «         ¦  «        sJ ‚d S )Nr$   r½   c                óp   — g | ]3}|D ].}|j         t          j        t          j        t          j        fv ¯,|‘Œ/Œ4S r@   rÈ   rC   s      r   rG   zGTestTier1FeatureCoverage.test_t1_enc_zones_walkable.<locals>.<listcomp>Ÿ   sp   € ð  Sð  Sð  S�s¨sð  Sð  S¨!°a´kÅhÔF\Õ^fÔ^wõ  zBô  zQð  FRð  7Rð  7R�ð  7Rð  7Rð  7Rð  7Rr   r   c              3  ó$   K  — | ]}|j         V — Œd S rs   )r   r¯   s     r   rx   zFTestTier1FeatureCoverage.test_t1_enc_zones_walkable.<locals>.<genexpr>    s$   è è € Ð%@Ð%@°Q a¤jÐ%@Ð%@Ð%@Ð%@Ð%@Ð%@r   r°   )r-   r.   Úcellss      r   Útest_t1_enc_zones_walkablez3TestTier1FeatureCoverage.test_t1_enc_zones_walkable�   sx   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆð Sð  S˜aœgð  Sñ  Sô  SˆÝ�5‰zŒz˜AŠ~ˆ~¥#Ð%@Ð%@¸%Ð%@Ñ%@Ô%@Ñ"@Ô"@ˆ~ˆ~Ð@ˆ~ˆ~r   c                óš   — t          j        d¦  «                             d¦  «        }dt          |j        ¦  «        cxk    rdk    sn J ‚d S )Nr$   é¼  r]   r\   )r   r)   r*   ri   Údead_end_pointsr,   s     r   Útest_t1_dead_ends_countz0TestTier1FeatureCoverage.test_t1_dead_ends_count£   sW   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆØ•C˜Ô)Ñ*Ô*Ð/Ð/Ò/Ð/¨aÒ/Ð/Ð/Ð/Ð/Ð/Ð/Ð/r   c                ó¨   ‡— t          j        d¦  «                             d¦  «        Š‰j        r t	          ˆfd„‰j        D ¦   «         ¦  «        rJ ‚d S )Nr$   rÝ   c              3  óT   •K  — | ]"\  }}‰j                              ||¦  «        V — Œ#d S rs   ©Ú	boss_roomÚcontains©rD   ÚdxÚdyr.   s      €r   rx   zPTestTier1FeatureCoverage.test_t1_dead_ends_secluded_from_boss.<locals>.<genexpr>©   s9   øè è € Ð&dÐ&dÉÈÈB q¤{×';Ò';¸BÀÑ'CÔ'CÐ&dÐ&dÐ&dÐ&dÐ&dÐ&dr   )r   r)   r*   rã   r—   rÞ   r,   s    @r   Ú$test_t1_dead_ends_secluded_from_bossz=TestTier1FeatureCoverage.test_t1_dead_ends_secluded_from_boss§   s\   ø€ Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆØŒ{Ðd¥3Ð&dÐ&dÐ&dÐ&dÐRSÔRcÐ&dÑ&dÔ&dÑ#dÔ#dÐdÐdÐdÐdÐdr   c                óš   ‡— t          j        d¦  «                             d¦  «        Št          ˆfd„‰j        D ¦   «         ¦  «        sJ ‚d S )Nr$   rÝ   c              3  óÄ   •K  — | ]Z\  }}‰j         |         |         j        t          j        t          j        t          j        fv o‰j         |         |         j        V — Œ[d S rs   )rK   rB   r   r}   ÚPOIr~   r   rå   s      €r   rx   zQTestTier1FeatureCoverage.test_t1_dead_ends_have_floor_clearing.<locals>.<genexpr>­   s…   øè è € ð  \ð  \ñ  @Fð  @Bð  DF�1”7˜2”;˜r”?Ô,µ´ÅÄÍxÌ}Ð0]Ð]ÐzÐbcÔbiÐjlÔbmÐnpÔbqÔbzð  \ð  \ð  \ð  \ð  \ð  \r   ©r   r)   r*   ry   rÞ   r,   s    @r   Ú%test_t1_dead_ends_have_floor_clearingz>TestTier1FeatureCoverage.test_t1_dead_ends_have_floor_clearing«   s‡   ø€ Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝð  \ð  \ð  \ð  \ð  JKô  J[ð  \ñ  \ô  \ñ  \ô  \ð  	\ð  	\ð  \ð  	\ð  	\r   c                óš   ‡— t          j        d¦  «                             d¦  «        Št          ˆfd„‰j        D ¦   «         ¦  «        sJ ‚d S )Nr$   rÝ   c              3  óP   •K  — | ] }t          ‰‰j        |¦  «        d          V — Œ!dS rÑ   )r   rI   )rD   Úder.   s     €r   rx   zOTestTier1FeatureCoverage.test_t1_dead_ends_connected_to_path.<locals>.<genexpr>±   s7   øè è € ÐaÐaÈÕ+¨A¨q¬}¸bÑAÔAÀ!ÔDÐaÐaÐaÐaÐaÐar   rì   r,   s    @r   Ú#test_t1_dead_ends_connected_to_pathz<TestTier1FeatureCoverage.test_t1_dead_ends_connected_to_path¯   sT   ø€ Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝÐaÐaÐaÐaÈqÔO`ÐaÑaÔaÑaÔaÐaÐaÐaÐaÐar   c                óš   ‡— t          j        d¦  «                             d¦  «        Št          ˆfd„‰j        D ¦   «         ¦  «        sJ ‚d S )Nr$   rÝ   c              3  ó~   •K  — | ]7\  }}d |cxk    o‰j         d z
  k     nc od |cxk    o‰j        d z
  k     nc V — Œ8dS ©r]   Nr¼   rå   s      €r   rx   zGTestTier1FeatureCoverage.test_t1_dead_ends_terminate.<locals>.<genexpr>µ   óp   øè è € ÐdÐdÉÈÈB�1˜Ð(Ð(Ò(Ð(˜QœW q™[Ò(Ð(Ð(Ð(ÐC¨Q°"Ð-CÐ-CÒ-CÐ-C°q´xÀ!±|Ò-CÐ-CÐ-CÐ-CÐdÐdÐdÐdÐdÐdr   rì   r,   s    @r   Útest_t1_dead_ends_terminatez4TestTier1FeatureCoverage.test_t1_dead_ends_terminate³   sU   ø€ Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝÐdÐdÐdÐdÐRSÔRcÐdÑdÔdÑdÔdÐdÐdÐdÐdÐdr   c                óæ   — t          j        d¦  «                             d¦  «        }d„ |j        D ¦   «         }t	          |¦  «        dk    r#|j        |d         j        |d         j        fk    sJ ‚d S )Nr$   é   c                óF   — g | ]}|D ]}|j         t          j        k    ¯|‘ŒŒS r@   )rB   r   Ú	BOSS_GATErC   s      r   rG   zJTestTier1FeatureCoverage.test_t1_boss_gate_exactly_one.<locals>.<listcomp>º   s4   € ÐXÐXÐX�s¨sÐXÐX¨!°a´kÅXÔEWÒ6WÐ6W�Ð6WÐ6WÐ6WÐ6Wr   r]   r   )r   r)   r*   rK   ri   rJ   rw   rv   )r-   r.   Úgatess      r   Útest_t1_boss_gate_exactly_onez6TestTier1FeatureCoverage.test_t1_boss_gate_exactly_one¸   sn   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆØXÐX˜aœgÐXÑXÔXˆÝ�5‰zŒz˜QŠˆ 1¤;°5¸´8´:¸uÀQ¼x¼zÐ2JÒ#JÐ#JÐ#JÐJÐ#JÐ#Jr   c                óÔ   — t          j        d¦  «                             d¦  «        }|j        \  }}|j        |         |         j        du r|j        |         |         j        du sJ ‚d S )Nr$   rø   FT)r   r)   r*   rJ   rK   r   r–   ©r-   r.   ÚgxÚgys       r   Ú#test_t1_boss_gate_initially_blockedz<TestTier1FeatureCoverage.test_t1_boss_gate_initially_blocked½   sh   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆØ”‰ˆˆBØŒw�rŒ{˜2ŒÔ'¨5Ð0Ð0°Q´W¸R´[À´_Ô5RÐVZÐ5ZÐ5ZÐ5ZÐZÐ5ZÐ5Zr   c                ób  ‡‡— t          j        d¦  «                             d¦  «        Š‰j        Š‰€J ‚ˆfd„t	          ‰j        ‰j        ‰j        z   ¦  «        D ¦   «         ˆfd„t	          ‰j        ‰j        ‰j        z   ¦  «        D ¦   «         z   }t          ˆfd„|D ¦   «         ¦  «        sJ ‚d S )Nr$   rø   c                óP   •— g | ]"}‰j         ‰j         ‰j        z   d z
  fD ]}||f‘ŒŒ#S rµ   )rv   r;   )rD   rw   rv   Úbrs      €r   rG   zPTestTier1FeatureCoverage.test_t1_boss_arena_perimeter_sealed.<locals>.<listcomp>Æ   ó@   ø€ Ð_Ð_Ð_ ÈÌÈbÌdÐUWÔUYÉkÐ\]ÉoÐG^Ð_Ð_À!�a˜�VÐ_Ð_Ð_Ð_r   c                óP   •— g | ]"}‰j         ‰j         ‰j        z   d z
  fD ]}||f‘ŒŒ#S rµ   )rw   r:   )rD   rv   rw   r  s      €r   rG   zPTestTier1FeatureCoverage.test_t1_boss_arena_perimeter_sealed.<locals>.<listcomp>Ç   r  r   c              3  ó„   •K  — | ]:\  }}||f‰j         k    ¯‰j        |         |         j        t          j        k    V — Œ;d S rs   )rJ   rK   rB   r   r   )rD   rw   rv   r.   s      €r   rx   zOTestTier1FeatureCoverage.test_t1_boss_arena_perimeter_sealed.<locals>.<genexpr>È   sP   øè è € ÐkÐkÁÀÀ1ÐVWÐYZÐU[Ð_`Ô_jÒUjÐUj�1”7˜1”:˜a”=Ô*­h¬mÒ;ÐUjÐUjÐUjÐUjÐkÐkr   )
r   r)   r*   rã   ru   rw   r:   rv   r;   ry   )r-   Ú	perimeterr  r.   s     @@r   Ú#test_t1_boss_arena_perimeter_sealedz<TestTier1FeatureCoverage.test_t1_boss_arena_perimeter_sealedÂ   sÀ   øø€ Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆØŒ[ˆØˆ~ˆ~ˆ~Ø_Ð_Ð_Ð_¥U¨2¬4°´¸¼±Ñ%=Ô%=Ð_Ñ_Ô_Ø_Ð_Ð_Ð_¥U¨2¬4°´¸¼±Ñ%=Ô%=Ð_Ñ_Ô_ñ`ˆ	åÐkÐkÐkÐkÈ	ÐkÑkÔkÑkÔkÐkÐkÐkÐkÐkr   c                óè   — t          j        d¦  «                             d¦  «        }d„ |j        D ¦   «         }d„ |j        D ¦   «         }t	          |¦  «        dk    rt	          |¦  «        dk    sJ ‚d S )Nr$   rø   c                óF   — g | ]}|D ]}|j         t          j        k    ¯|‘ŒŒS r@   )rB   r   Ú
BOSS_ALTARrC   s      r   rG   zNTestTier1FeatureCoverage.test_t1_boss_arena_interior_altar.<locals>.<listcomp>Ì   s4   € ÐZÐZÐZ˜°ÐZÐZ¨1°q´{ÅhÔFYÒ7YÐ7Y�!Ð7YÐ7YÐ7YÐ7Yr   c                óF   — g | ]}|D ]}|j         t          j        k    ¯|‘ŒŒS r@   )rB   r   ÚRUNIC_FLOORrC   s      r   rG   zNTestTier1FeatureCoverage.test_t1_boss_arena_interior_altar.<locals>.<listcomp>Í   s4   € ÐZÐZÐZ�s¨sÐZÐZ¨!°a´kÅXÔEYÒ6YÐ6Y�Ð6YÐ6YÐ6YÐ6Yr   r]   r†   rÌ   )r-   r.   ÚaltarsÚrunics       r   Ú!test_t1_boss_arena_interior_altarz:TestTier1FeatureCoverage.test_t1_boss_arena_interior_altarÊ   ss   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆØZÐZ˜qœwÐZÑZÔZˆØZÐZ˜aœgÐZÑZÔZˆÝ�6‰{Œ{˜aÒÐ¥C¨¡J¤J°!¢O O OÐ3 O Or   c                ó  — t          j        d¦  «                             d¦  «        }|j        \  }}t          j        dc|j        |         |         _        |j        |         |         _        |j        |         |         j        du sJ ‚d S )Nr$   rø   T)	r   r)   r*   rJ   r   r}   rK   rB   r   rþ   s       r   Ú test_t1_boss_gate_breach_mutatesz9TestTier1FeatureCoverage.test_t1_boss_gate_breach_mutatesÐ   sx   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆØ”‰ˆˆBÝ>F¼nÈdÐ;ˆŒ�Œ�BŒÔ! 1¤7¨2¤;¨r¤?Ô#;ØŒw�rŒ{˜2ŒÔ'¨4Ð/Ð/Ð/Ð/Ð/Ð/r   c                óš   — t          j        d¦  «                             d¦  «        }dt          |j        ¦  «        cxk    rdk    sn J ‚d S )Nr$   é„  r]   rg   )r   r)   r*   ri   rj   r,   s     r   Útest_t1_poi_count_1_to_3z1TestTier1FeatureCoverage.test_t1_poi_count_1_to_3×   sV   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆØ•C˜œÑ%Ô%Ð*Ð*Ò*Ð*¨Ò*Ð*Ð*Ð*Ð*Ð*Ð*Ð*r   c                óš   ‡— t          j        d¦  «                             d¦  «        Št          ˆfd„‰j        D ¦   «         ¦  «        sJ ‚d S )Nr$   r  c              3  ól   •K  — | ].\  }}}‰j         |         |         j        t          j        k    V — Œ/d S rs   )rK   rB   r   rë   ©rD   ÚpxÚpyr¥   r.   s       €r   rx   zATestTier1FeatureCoverage.test_t1_poi_tile_type.<locals>.<genexpr>Ý   s=   øè è € Ð[Ð[ÁÀÀRÈ�1”7˜2”;˜r”?Ô,µ´Ò<Ð[Ð[Ð[Ð[Ð[Ð[r   ©r   r)   r*   ry   rj   r,   s    @r   Útest_t1_poi_tile_typez.TestTier1FeatureCoverage.test_t1_poi_tile_typeÛ   sS   ø€ Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝÐ[Ð[Ð[Ð[ÈaÌlÐ[Ñ[Ô[Ñ[Ô[Ð[Ð[Ð[Ð[Ð[r   c                óš   ‡— t          j        d¦  «                             d¦  «        Št          ˆfd„‰j        D ¦   «         ¦  «        sJ ‚d S )Nr$   r  c              3  óP   •K  — | ] \  }}}‰j         |         |         j        V — Œ!d S rs   )rK   r   r  s       €r   rx   z@TestTier1FeatureCoverage.test_t1_poi_walkable.<locals>.<genexpr>á   s6   øè è € ÐJÐJ±	°°B¸�1”7˜2”;˜r”?Ô+ÐJÐJÐJÐJÐJÐJr   r  r,   s    @r   Útest_t1_poi_walkablez-TestTier1FeatureCoverage.test_t1_poi_walkableß   sS   ø€ Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝÐJÐJÐJÐJ¸Q¼\ÐJÑJÔJÑJÔJÐJÐJÐJÐJÐJr   c                ó¨   ‡— t          j        d¦  «                             d¦  «        Š‰j        r t	          ˆfd„‰j        D ¦   «         ¦  «        rJ ‚d S )Nr$   r  c              3  óV   •K  — | ]#\  }}}‰j                              ||¦  «        V — Œ$d S rs   râ   r  s       €r   rx   zJTestTier1FeatureCoverage.test_t1_poi_outside_boss_arena.<locals>.<genexpr>å   s<   øè è € Ð&bÐ&bÉ	ÈÈBÐPQ q¤{×';Ò';¸BÀÑ'CÔ'CÐ&bÐ&bÐ&bÐ&bÐ&bÐ&br   )r   r)   r*   rã   r—   rj   r,   s    @r   Útest_t1_poi_outside_boss_arenaz7TestTier1FeatureCoverage.test_t1_poi_outside_boss_arenaã   s\   ø€ Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆØŒ{Ðb¥3Ð&bÐ&bÐ&bÐ&bÐUVÔUaÐ&bÑ&bÔ&bÑ#bÔ#bÐbÐbÐbÐbÐbr   c                ó”   — t          j        d¦  «                             d¦  «        }t          d„ |j        D ¦   «         ¦  «        sJ ‚d S )Nr$   r  c              3  ó&   K  — | ]\  }}}|d v V — ŒdS )>   Úcache_shrineÚmerchant_postÚancient_tabletNr@   )rD   r¥   Úks      r   rx   zCTestTier1FeatureCoverage.test_t1_poi_valid_kinds.<locals>.<genexpr>é   s2   è è € ÐhÐhÑPWÐPQÐSTÐVW�1ÐKÐKÐhÐhÐhÐhÐhÐhr   r  r,   s     r   Útest_t1_poi_valid_kindsz0TestTier1FeatureCoverage.test_t1_poi_valid_kindsç   sN   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝÐhÐhÐ[\Ô[gÐhÑhÔhÑhÔhÐhÐhÐhÐhÐhr   c                ó  — t          j        d¦  «                             d¦  «        }t          d„ |j        D ¦   «         ¦  «        }t          ||j        |j        dd¦  «        |j        d         d         j        j	        k    sJ ‚d S )Nr$   éo   c              3  ó8   K  — | ]}|D ]}|j         j        V — ŒŒd S rs   ©rB   r   rC   s      r   rx   zMTestTier1FeatureCoverage.test_t1_client_row_major_indexing.<locals>.<genexpr>î   ó4   è è € ÐFÐF¨#À#ÐFÐF¸Q�A”KÔ%ÐFÐFÐFÐFÐFÐFÐFr   é
   rh   )
r   r)   r*   r   rK   r   r   r   rB   r   ©r-   r.   Úraws      r   Ú!test_t1_client_row_major_indexingz:TestTier1FeatureCoverage.test_t1_client_row_major_indexingì   sz   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝÐFÐF°´ÐFÑFÔFÑFÔFˆÝ! # q¤w°´¸"¸aÑ@Ô@ÀAÄGÈAÄJÈrÄNÔD\ÔDbÒbÐbÐbÐbÐbÐbr   c                óþ   — t          j        d¦  «                             d¦  «        }t          d„ |j        D ¦   «         ¦  «        }t          ||j        |j        |j        d         |j        d         ¦  «        dv sJ ‚d S )Nr$   r,  c              3  ó8   K  — | ]}|D ]}|j         j        V — ŒŒd S rs   r.  rC   s      r   rx   zQTestTier1FeatureCoverage.test_t1_client_get_tile_inside_bounds.<locals>.<genexpr>ó   r/  r   r   r]   )r]   é   )	r   r)   r*   r   rK   r   r   r   rI   r1  s      r   Ú%test_t1_client_get_tile_inside_boundsz>TestTier1FeatureCoverage.test_t1_client_get_tile_inside_boundsñ   sz   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆÝÐFÐF°´ÐFÑFÔFÑFÔFˆÝ! # q¤w°´¸!¼-ÈÔ:JÈAÌMÐZ[ÔL\Ñ]Ô]ÐahÐhÐhÐhÐhÐhÐhr   c                ó„   — t          d¦  «        }t          |dddd¦  «        dk    rt          |dddd¦  «        dk    sJ ‚d S )NiŒ
  r&   r'   éÿÿÿÿr   r\   )r   r   )r-   r2  s     r   Ú*test_t1_client_get_tile_out_of_bounds_wallzCTestTier1FeatureCoverage.test_t1_client_get_tile_out_of_bounds_wallö   sU   € Ý�G‰nŒnˆÝ! # r¨2¨r°1Ñ5Ô5¸Ò:Ð:Õ?QÐRUÐWYÐ[]Ð_aÐcdÑ?eÔ?eÐijÒ?jÐ?jÐ?jÐjÐ?jÐ?jr   c                óÔ   ‡— t           j        t           j        t           j        t           j        t           j        t           j        hŠt          ˆfd„t           D ¦   «         ¦  «        sJ ‚d S )Nc              3  óL   •K  — | ]}|                      ¦   «         |‰vk    V — Œd S rs   )Úis_passable)rD   ÚttÚ
impassables     €r   rx   zLTestTier1FeatureCoverage.test_t1_client_passability_check.<locals>.<genexpr>ü   s7   øè è € ÐQÐQÀ"�2—>’>Ñ#Ô#¨°*Ð(<Ò=ÐQÐQÐQÐQÐQÐQr   )r   ÚVOIDr   ÚDESTRUCTIBLE_BARRICADEÚCHASMrú   ÚWATERry   )r-   r?  s    @r   Ú test_t1_client_passability_checkz9TestTier1FeatureCoverage.test_t1_client_passability_checkú   sb   ø€ Ý”m¥X¤]µHÔ4SÕU]ÔUcÕemÔewõ  zBô  zHð  Iˆ
ÝÐQÐQÐQÐQÍÐQÑQÔQÑQÔQÐQÐQÐQÐQÐQr   c                ó’   — t           j                             ¦   «         dk    r"t           j                             ¦   «         dk    sJ ‚d S )Nr­   gáz®Gáö?)r   r~   r®   ÚDENSE_TERRAIN©r-   s    r   Útest_t1_client_speed_modifiersz7TestTier1FeatureCoverage.test_t1_client_speed_modifiersþ   sA   € ÝŒ}×*Ò*Ñ,Ô,°Ò3Ð3½Ô8N×8\Ò8\Ñ8^Ô8^ÐbfÒ8fÐ8fÐ8fÐfÐ8fÐ8fr   N©r   r"   )1Ú__name__Ú
__module__Ú__qualname__Ú__doc__r/   r<   rO   rS   rY   r_   rd   rl   rp   rz   rƒ   r�   r“   r˜   rš   r    r¦   r¨   r²   r¸   rÀ   rÅ   rÎ   rÖ   rÛ   rß   rè   rí   rñ   rö   rü   r  r	  r  r  r  r  r   r#  r*  r3  r7  r:  rD  rH  r@   r   r   r!   r!      s(  € € € € € ØEÐEðVð Vð Vð Vð2ð 2ð 2ð 2ð
pð pð pð pðIð Ið Ið Ið2ð 2ð 2ð 2ð
,ð ,ð ,ð ,ð
#ð #ð #ð #ð
zð zð zð zð}ð }ð }ð }ð
xð xð xð xðið ið ið ið
Mð Mð Mð Mðtð tð tð tðxð xð xð xðoð oð oð oð,ð ,ð ,ð ,ð
Rð Rð Rð Rð
Rð Rð Rð Rð
Yð Yð Yð Yð
.ð .ð .ð .ðWð Wð Wð Wð
Bð Bð Bð Bð#ð #ð #ð #ð
{ð {ð {ð {ðAð Að Að Að0ð 0ð 0ð 0ðeð eð eð eð\ð \ð \ð \ðbð bð bð bðeð eð eð eð
Kð Kð Kð Kð
[ð [ð [ð [ð
lð lð lð lð4ð 4ð 4ð 4ð0ð 0ð 0ð 0ð+ð +ð +ð +ð\ð \ð \ð \ðKð Kð Kð Kðcð cð cð cðið ið ið ið
cð cð cð cð
ið ið ið ið
kð kð kð kðRð Rð Rð Rðgð gð gð gð gð gr   r!   c                  óÚ   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd	„Z	dd
„Z
dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdS )ÚTestTier2BoundaryAndCornerCaseszBTier 2: Boundary & Corner Cases (>=5 test cases per feature area).r   r"   c                óÂ   — t          j        d¦  «                             d¦  «        }|j        dk    r*|j        dk    r|j        dz  dz   |j        dz  dz   z  dk    sJ ‚d S )Nr$   r]   r&   r'   rf   é   r8   r,   s     r   Ú test_t2_smallest_grid_dimensionsz@TestTier2BoundaryAndCornerCases.test_t2_smallest_grid_dimensions  sj   € Ý"Ô+Ð,AÑBÔB×KÒKÈAÑNÔNˆØŒw˜"Š}ˆ} ¤¨R¢ °Q´WÀ±]ÀQÑ5FÈ1Ì8ÐWYÉ>Ð\]ÑK]Ñ4^ÐbdÒ4dÐ4dÐ4dÐdÐ4dÐ4dr   c                óÂ   — t          j        d¦  «                             d¦  «        }|j        dk    r*|j        dk    r|j        dz  dz   |j        dz  dz   z  dk    sJ ‚d S )Nr4   r]   r5   r6   rf   rº   r8   r,   s     r   Útest_t2_largest_grid_dimensionsz?TestTier2BoundaryAndCornerCases.test_t2_largest_grid_dimensions
  sk   € Ý"Ô+Ð,MÑNÔN×WÒWÐXYÑZÔZˆØŒw˜#Š~ˆ~ !¤(¨b¢. .°a´gÀ±mÀaÑ6GÈAÌHÐXZÉNÐ]^ÑL^Ñ5_ÐceÒ5eÐ5eÐ5eÐeÐ5eÐ5er   c                óÌ   — dD ]`}t          j        |¦  «                             d¦  «        }|j        |j        ft
          |         k    r|                     ¦   «         dk    sJ ‚Œad S )N)Úzone_blood_scale_ruinsÚzone_abyssal_ice_pondr]   r7   )r   r)   r*   r   r   r   rR   )r-   Úzr.   s      r   Ú test_t2_intermediate_grids_scalez@TestTier2BoundaryAndCornerCases.test_t2_intermediate_grids_scale  sw   € ØDð 	bð 	bˆAÝ&Ô/°Ñ2Ô2×;Ò;¸AÑ>Ô>ˆAØ”G˜QœXÐ&Õ*<¸QÔ*?Ò?Ð?ÀA×DYÒDYÑD[ÔD[Ð^aÒDaÐDaÐDaÐaÐDað	bð 	br   c                ó˜   — t          j        d¦  «                             d¦  «        }t          t	          |¦  «        ¦  «        dk     sJ ‚d S )Nr4   r]   i˜:  )r   r)   r*   ri   r   r,   s     r   Útest_t2_memory_budget_under_8mbz?TestTier2BoundaryAndCornerCases.test_t2_memory_budget_under_8mb  sJ   € Ý"Ô+Ð,MÑNÔN×WÒWÐXYÑZÔZˆÝÕ% aÑ(Ô(Ñ)Ô)¨EÒ1Ð1Ð1Ð1Ð1Ð1r   c                ó¬   — t          j        d¦  «                             d¦  «        }|                     |j        dz
  |j        dz
  ¦  «        dk    sJ ‚d S )Nr4   r]   )é   rh   )r   r)   r*   Úget_chunk_coordsr   r   r,   s     r   Útest_t2_chunk_bounds_clampingz=TestTier2BoundaryAndCornerCases.test_t2_chunk_bounds_clamping  sV   € Ý"Ô+Ð,MÑNÔN×WÒWÐXYÑZÔZˆØ×!Ò! !¤'¨A¡+¨q¬x¸!©|Ñ<Ô<Ð@aÒaÐaÐaÐaÐaÐar   c                óÔ   — t          j        d¦  «                             d¦  «        }|j        d         d         j        t
          j        k    r|j        d         d         j        rJ ‚d S )Nr$   r\   r   )r   r)   r*   rK   rB   r   r   r   r,   s     r   Útest_t2_boundary_corner_0_0z;TestTier2BoundaryAndCornerCases.test_t2_boundary_corner_0_0  sY   € Ý"Ô+Ð,AÑBÔB×KÒKÈAÑNÔNˆØŒw�qŒz˜!Œ}Ô&­(¬-Ò7Ð7ÀÄÈÄ
È1ÄÔ@VÐ7Ð7ÐVÐ7Ð7r   c                óÄ   — t          j        d¦  «                             d¦  «        }|j        |j        dz
           |j        dz
           j        t          j        k    sJ ‚d S )Nr$   r\   r]   )	r   r)   r*   rK   r   r   rB   r   r   r,   s     r   Útest_t2_boundary_corner_w_hz;TestTier2BoundaryAndCornerCases.test_t2_boundary_corner_w_h   sU   € Ý"Ô+Ð,AÑBÔB×KÒKÈAÑNÔNˆØŒw�q”x !‘|Ô$ Q¤W¨q¡[Ô1Ô;½x¼}ÒLÐLÐLÐLÐLÐLr   c                ó  — t          j        d¦  «                             d¦  «        }|j        d         |j        dz
           j        t          j        k    r.|j        |j        dz
           d         j        t          j        k    sJ ‚d S )Nr$   r\   r   r]   )	r   r)   r*   rK   r   rB   r   r   r   r,   s     r   Ú&test_t2_boundary_top_right_bottom_leftzFTestTier2BoundaryAndCornerCases.test_t2_boundary_top_right_bottom_left$  ss   € Ý"Ô+Ð,AÑBÔB×KÒKÈAÑNÔNˆØŒw�qŒz˜!œ' A™+Ô&Ô0µH´MÒAÐAÀaÄgÈaÌhÐYZÉlÔF[Ð\]ÔF^ÔFhÕltÔlyÒFyÐFyÐFyÐyÐFyÐFyr   c                ó´   ‡— t          j        d¦  «                             d¦  «        Št          ˆfd„t	          ‰j        ¦  «        D ¦   «         ¦  «        sJ ‚d S )Nr$   r\   c              3  óÀ   •K  — | ]X}‰j         d          |         j        t          j        k    o-‰j         ‰j        dz
           |         j        t          j        k    V — ŒYdS ©r   r]   N)rK   rB   r   r   r   )rD   rw   r.   s     €r   rx   zZTestTier2BoundaryAndCornerCases.test_t2_boundary_perimeter_impenetrable.<locals>.<genexpr>*  su   øè è € ð  Mð  MÐxy�1”7˜1”:˜a”=Ô*­h¬mÒ;ÐsÀÄÈÌÐSTÉÔ@UÐVWÔ@XÔ@bÕfnÔfsÒ@sð  Mð  Mð  Mð  Mð  Mð  Mr   )r   r)   r*   ry   ru   r   r,   s    @r   Ú'test_t2_boundary_perimeter_impenetrablezGTestTier2BoundaryAndCornerCases.test_t2_boundary_perimeter_impenetrable(  sœ   ø€ Ý"Ô+Ð,AÑBÔB×KÒKÈAÑNÔNˆÝð  Mð  Mð  Mð  Mõ  ~Cð  DEô  DKñ  ~Lô  ~Lð  Mñ  Mô  Mñ  Mô  Mð  	Mð  	Mð  Mð  	Mð  	Mr   c                óž   — t          t          j        d¦  «        ¦  «        dk    r%t          t          j        d¦  «        ¦  «        dk    sJ ‚d S )Ng®Gáz®ï?r   g{®Gáz„¿r9  )r   ÚmathÚfloorrG  s    r   Ú!test_t2_boundary_float_truncationzATestTier2BoundaryAndCornerCases.test_t2_boundary_float_truncation,  sG   € Ý•4”:˜dÑ#Ô#Ñ$Ô$¨Ò)Ð)­cµ$´*¸UÑ2CÔ2CÑ.DÔ.DÈÒ.JÐ.JÐ.JÐJÐ.JÐ.Jr   c                óp   — t          t          d¦  «        dddd¦  «        t          j        j        k    sJ ‚d S )Nr7   r0  r9  rh   ©r   r   r   r   r   rG  s    r   Útest_t2_oob_negative_xz6TestTier2BoundaryAndCornerCases.test_t2_oob_negative_x0  s4   € Ý!¥%¨¡*¤*¨b°"°b¸!Ñ<Ô<ÅÄÔ@SÒSÐSÐSÐSÐSÐSr   c                óp   — t          t          d¦  «        dddd¦  «        t          j        j        k    sJ ‚d S )Nr7   r0  rh   r9  ro  rG  s    r   Útest_t2_oob_negative_yz6TestTier2BoundaryAndCornerCases.test_t2_oob_negative_y3  s4   € Ý!¥%¨¡*¤*¨b°"°a¸Ñ<Ô<ÅÄÔ@SÒSÐSÐSÐSÐSÐSr   c                óš   — t          t          d¦  «        dddd¦  «        dk    r$t          t          d¦  «        dddd¦  «        dk    sJ ‚d S ©Nr7   r0  rh   r\   r>   ©r   r   rG  s    r   Útest_t2_oob_large_xz3TestTier2BoundaryAndCornerCases.test_t2_oob_large_x6  sY   € Ý!¥%¨¡*¤*¨b°"°b¸!Ñ<Ô<ÀÒAÐAÕFXÕY^Ð_bÑYcÔYcÐegÐikÐmpÐrsÑFtÔFtÐxyÒFyÐFyÐFyÐyÐFyÐFyr   c                óš   — t          t          d¦  «        dddd¦  «        dk    r$t          t          d¦  «        dddd¦  «        dk    sJ ‚d S rt  ru  rG  s    r   Útest_t2_oob_large_yz3TestTier2BoundaryAndCornerCases.test_t2_oob_large_y9  sY   € Ý!¥%¨¡*¤*¨b°"°a¸Ñ<Ô<ÀÒAÐAÕFXÕY^Ð_bÑYcÔYcÐegÐikÐmnÐpsÑFtÔFtÐxyÒFyÐFyÐFyÐyÐFyÐFyr   c                óp   — t          t          d¦  «        dddd¦  «        t          j        j        k    sJ ‚d S )Nr7   r0  i�ÿÿÿro  rG  s    r   Útest_t2_oob_both_negativez9TestTier2BoundaryAndCornerCases.test_t2_oob_both_negative<  s4   € Ý!¥%¨¡*¤*¨b°"°c¸3Ñ?Ô?Å8Ä=ÔCVÒVÐVÐVÐVÐVÐVr   c                óž   — t          j        d¦  «                             d¦  «        }t          ||j        |j        ¦  «        d         du sJ ‚d S )Nr$   r   T©r   r)   r*   r   rI   rJ   r,   s     r   Útest_t2_seed_zeroz1TestTier2BoundaryAndCornerCases.test_t2_seed_zero@  sM   € Ý"Ô+Ð,AÑBÔB×KÒKÈAÑNÔNˆÝ'¨¨1¬=¸!¼+ÑFÔFÀqÔIÈTÐQÐQÐQÐQÐQÐQr   c                óž   — t          j        d¦  «                             d¦  «        }t          ||j        |j        ¦  «        d         du sJ ‚d S )Nr$   r9  r   Tr|  r,   s     r   Útest_t2_seed_negative_smallz;TestTier2BoundaryAndCornerCases.test_t2_seed_negative_smallD  sM   € Ý"Ô+Ð,AÑBÔB×KÒKÈBÑOÔOˆÝ'¨¨1¬=¸!¼+ÑFÔFÀqÔIÈTÐQÐQÐQÐQÐQÐQr   c                óž   — t          j        d¦  «                             d¦  «        }t          ||j        |j        ¦  «        d         du sJ ‚d S )Nr$   iÁ½ðÿr   Tr|  r,   s     r   Útest_t2_seed_negative_largez;TestTier2BoundaryAndCornerCases.test_t2_seed_negative_largeH  sM   € Ý"Ô+Ð,AÑBÔB×KÒKÈGÑTÔTˆÝ'¨¨1¬=¸!¼+ÑFÔFÀqÔIÈTÐQÐQÐQÐQÐQÐQr   c                óž   — t          j        d¦  «                             d¦  «        }t          ||j        |j        ¦  «        d         du sJ ‚d S )Nr$   iÿÿÿr   Tr|  r,   s     r   Útest_t2_seed_int32_maxz6TestTier2BoundaryAndCornerCases.test_t2_seed_int32_maxL  óM   € Ý"Ô+Ð,AÑBÔB×KÒKÈJÑWÔWˆÝ'¨¨1¬=¸!¼+ÑFÔFÀqÔIÈTÐQÐQÐQÐQÐQÐQr   c                óž   — t          j        d¦  «                             d¦  «        }t          ||j        |j        ¦  «        d         du sJ ‚d S )Nr$   l   ÿÿ r   Tr|  r,   s     r   Útest_t2_seed_uint32_maxz7TestTier2BoundaryAndCornerCases.test_t2_seed_uint32_maxP  r„  r   c                óâ   — t          j        d¦  «                             d¦  «        }d|j        d         cxk    r|j        dz
  k     r%n n"d|j        d         cxk    r|j        dz
  k     sn J ‚d S )Nr$   rh   r]   r   )r   r)   r*   rI   r   r   r,   s     r   Ú&test_t2_spawn_safe_zone_clamped_boundszFTestTier2BoundaryAndCornerCases.test_t2_spawn_safe_zone_clamped_boundsU  sˆ   € Ý"Ô+Ð,AÑBÔB×KÒKÈAÑNÔNˆØ�A”M !Ô$Ð2Ð2Ò2Ð2 q¤w°¡{Ò2Ð2Ð2Ð2Ð2°q¸A¼MÈ!Ô<LÐ7[Ð7[Ò7[Ð7[ÈqÌxÐZ[É|Ò7[Ð7[Ð7[Ð7[Ð7[Ð[Ð7[Ð7[r   c                ó´   ‡— t          j        d¦  «                             d¦  «        Št          ˆfd„t	          ‰j        ¦  «        D ¦   «         ¦  «        sJ ‚d S )Nr$   rh   c              3  óÀ   •K  — | ]X}‰j         |         d          j        t          j        k    o-‰j         |         ‰j        dz
           j        t          j        k    V — ŒYdS rh  )rK   rB   r   r   r   )rD   rv   r.   s     €r   rx   zXTestTier2BoundaryAndCornerCases.test_t2_spawn_safe_clearing_in_bounds.<locals>.<genexpr>[  ss   øè è € ð  Mð  MÐwx�1”7˜1”:˜a”=Ô*­h¬mÒ;ÐrÀÄÈÄ
È1Ì7ÐUVÉ;Ô@WÔ@aÕemÔerÒ@rð  Mð  Mð  Mð  Mð  Mð  Mr   )r   r)   r*   ry   ru   r   r,   s    @r   Ú%test_t2_spawn_safe_clearing_in_boundszETestTier2BoundaryAndCornerCases.test_t2_spawn_safe_clearing_in_boundsY  sœ   ø€ Ý"Ô+Ð,AÑBÔB×KÒKÈAÑNÔNˆÝð  Mð  Mð  Mð  Mõ  }Bð  CDô  CKñ  }Lô  }Lð  Mñ  Mô  Mñ  Mô  Mð  	Mð  	Mð  Mð  	Mð  	Mr   c                óö   — t          j        d¦  «                             d¦  «        }|j        }|rFd|j        k    r;|j        |j        z   |j        k    r#d|j        k    r|j        |j        z   |j	        k    sJ ‚d S )Nr$   rh   r   )
r   r)   r*   rã   rw   r:   r   rv   r;   r   )r-   r.   r  s      r   Ú!test_t2_boss_arena_clamped_boundszATestTier2BoundaryAndCornerCases.test_t2_boss_arena_clamped_bounds]  sz   € Ý"Ô+Ð,AÑBÔB×KÒKÈAÑNÔNˆØŒ[ˆØÐd�a˜2œ4’i�i B¤D¨2¬4¡K°1´7Ò$:Ð$:¸qÀBÄDºy¸yÈRÌTÐTVÔTXÉ[Ð\]Ô\dÒMdÐMdÐMdÐdÐMdÐMdr   c                óš   ‡— t          j        d¦  «                             d¦  «        Št          ˆfd„‰j        D ¦   «         ¦  «        sJ ‚d S )Nr$   rh   c              3  ó~   •K  — | ]7\  }}d |cxk    o‰j         d z
  k     nc od |cxk    o‰j        d z
  k     nc V — Œ8dS rô   r¼   rå   s      €r   rx   zRTestTier2BoundaryAndCornerCases.test_t2_dead_end_clamped_bounds.<locals>.<genexpr>d  rõ   r   rì   r,   s    @r   Útest_t2_dead_end_clamped_boundsz?TestTier2BoundaryAndCornerCases.test_t2_dead_end_clamped_boundsb  sU   ø€ Ý"Ô+Ð,AÑBÔB×KÒKÈAÑNÔNˆÝÐdÐdÐdÐdÐRSÔRcÐdÑdÔdÑdÔdÐdÐdÐdÐdÐdr   c                óš   ‡— t          j        d¦  «                             d¦  «        Št          ˆfd„‰j        D ¦   «         ¦  «        sJ ‚d S )Nr$   rh   c              3  ó€   •K  — | ]8\  }}}d |cxk    o‰j         d z
  k     nc od |cxk    o‰j        d z
  k     nc V — Œ9dS rô   r¼   r  s       €r   rx   zMTestTier2BoundaryAndCornerCases.test_t2_poi_clamped_bounds.<locals>.<genexpr>h  ss   øè è € ÐbÐbÉ	ÈÈBÐPQ�1˜Ð(Ð(Ò(Ð(˜QœW q™[Ò(Ð(Ð(Ð(ÐC¨Q°"Ð-CÐ-CÒ-CÐ-C°q´xÀ!±|Ò-CÐ-CÐ-CÐ-CÐbÐbÐbÐbÐbÐbr   r  r,   s    @r   Útest_t2_poi_clamped_boundsz:TestTier2BoundaryAndCornerCases.test_t2_poi_clamped_boundsf  sU   ø€ Ý"Ô+Ð,AÑBÔB×KÒKÈAÑNÔNˆÝÐbÐbÐbÐbÐUVÔUaÐbÑbÔbÑbÔbÐbÐbÐbÐbÐbr   NrI  )rJ  rK  rL  rM  rR  rT  rY  r[  r_  ra  rc  re  ri  rm  rp  rr  rv  rx  rz  r}  r  r�  rƒ  r†  rˆ  r‹  r�  r�  r“  r@   r   r   rO  rO    sp  € € € € € ØLÐLðeð eð eð eðfð fð fð fðbð bð bð bð
2ð 2ð 2ð 2ðbð bð bð bð
Wð Wð Wð WðMð Mð Mð Mðzð zð zð zðMð Mð Mð MðKð Kð Kð KðTð Tð Tð TðTð Tð Tð Tðzð zð zð zðzð zð zð zðWð Wð Wð WðRð Rð Rð RðRð Rð Rð RðRð Rð Rð RðRð Rð Rð RðRð Rð Rð Rð
\ð \ð \ð \ðMð Mð Mð Mðeð eð eð eð
eð eð eð eðcð cð cð cð cð cr   rO  c                  ó:   — e Zd ZdZd
d„Zd
d„Zd
d„Zd
d„Zd
d„Zd	S )Ú!TestTier3CrossFeatureCombinationszATier 3: Cross-Feature State Interleaving & Pairwise Combinations.r   r"   c                ó  ‡‡— t          j        d¦  «                             d¦  «        Št          j        d¦  «                             d¦  «        Št          ˆˆfd„t	          ‰j        ¦  «        D ¦   «         ¦  «        dk    sJ ‚d S )Nr$   ié  iÒ  c              3  ó®   •K  — | ]O}t          ‰j        ¦  «        D ]8}‰j        |         |         j        ‰j        |         |         j        k    ¯4d V — Œ9ŒPdS rô   rt   )rD   rv   rw   rM   rN   s      €€r   rx   z]TestTier3CrossFeatureCombinations.test_t3_seed_variation_divergent_layouts.<locals>.<genexpr>q  sv   øè è € ð  Að  A˜½¸b¼h¹¼ð  Að  A°1È2Ì8ÐTUÌ;ÐWXÌ>ÔKcÐgiÔgoÐpqÔgrÐstÔguÔgÒKÐK�1ÐKÐKÐKÐKÐKð  Að  Ar   é2   )r   r)   r*   Úsumru   r   rL   s    @@r   Ú(test_t3_seed_variation_divergent_layoutszJTestTier3CrossFeatureCombinations.test_t3_seed_variation_divergent_layoutsn  s¸   øø€ Ý#Ô,Ð-BÑCÔC×LÒLÈTÑRÔRˆÝ#Ô,Ð-BÑCÔC×LÒLÈTÑRÔRˆÝð  Að  Að  Að  Að  A�e B¤IÑ.Ô.ð  Añ  Aô  Añ  Aô  Að  DFò  Fð  Fð  Fð  Fð  Fð  Fr   c                óÖ   ‡— t          j        d¦  «                             d¦  «        }t          ||j        |j        ¦  «        \  }Št          ˆfd„|j        D ¦   «         ¦  «        sJ ‚d S )Nr$   i»  c              3  óX   •‡K  — | ]#Št          ˆfd „‰D ¦   «         ¦  «        dk    V — Œ$dS )c              3  ó”   •K  — | ]B\  }}t          j        |‰j        ‰j        z   d z  z
  |‰j        ‰j        z   d z  z
  ¦  «        V — ŒCdS )r\   N)rk  ÚhypotrÒ   rÓ   rÔ   rÕ   )rD   r  r  rÄ   s      €r   rx   zfTestTier3CrossFeatureCombinations.test_t3_encounter_zones_along_main_path.<locals>.<genexpr>.<genexpr>v  s_   øè è € ÐuÐuÑflÐfhÐjl•t”z "¨¬°2´8Ñ(;¸qÑ'@Ñ"@À"ÈÌÐSUÔS[ÑH[Ð_`ÑG`ÑB`ÑaÔaÐuÐuÐuÐuÐuÐur   g      (@N)rŠ   )rD   rÄ   rŸ   s    @€r   rx   z\TestTier3CrossFeatureCombinations.test_t3_encounter_zones_along_main_path.<locals>.<genexpr>v  se   øøè è € ð  [ð  [ð  CE•3ÐuÐuÐuÐuÐptÐuÑuÔuÑuÔuÐy}Ò}ð  [ð  [ð  [ð  [ð  [ð  [r   )r   r)   r*   r   rI   rJ   ry   rk   r¤   s      @r   Ú'test_t3_encounter_zones_along_main_pathzITestTier3CrossFeatureCombinations.test_t3_encounter_zones_along_main_paths  s    ø€ Ý"Ô+Ð,AÑBÔB×KÒKÈDÑQÔQˆÝ*¨1¨a¬m¸Q¼[ÑIÔI‰ˆˆ4Ýð  [ð  [ð  [ð  [ð  IJô  IZð  [ñ  [ô  [ñ  [ô  [ð  	[ð  	[ð  [ð  	[ð  	[r   c                óð   — t          j        d¦  «                             d¦  «        }t          ||j        |j        d¬¦  «        d         du sJ ‚t          ||j        |j        d¬¦  «        d         du sJ ‚d S )Nr$   i¤  F©Úallow_sealed_boss_gater   T)r   r)   r*   r   rI   Ú
boss_pointr,   s     r   Ú,test_t3_boss_gate_unreachable_without_breachzNTestTier3CrossFeatureCombinations.test_t3_boss_gate_unreachable_without_breachx  sƒ   € Ý"Ô+Ð,AÑBÔB×KÒKÈDÑQÔQˆÝ'¨¨1¬=¸!¼,Ð_dÐeÑeÔeÐfgÔhÐlqÐqÐqÐqÐqÝ'¨¨1¬=¸!¼,Ð_cÐdÑdÔdÐefÔgÐkoÐoÐoÐoÐoÐoÐor   c                ó®   — t          ¦   «         }|                     dddd¬¦  «        d         du sJ ‚|                     dddd¬¦  «        d         du sJ ‚d S )Nr$   Fg     Àb@)Úis_dummyrw   rv   r   g        T)r   Úvalidate_monster_spawn)r-   Úzes     r   Ú(test_t3_waypoint_safe_radius_in_tile_mapzJTestTier3CrossFeatureCombinations.test_t3_waypoint_safe_radius_in_tile_map}  su   € Ý‰\Œ\ˆØ×(Ò(Ð)>ÈÐRWÐ[`Ð(ÑaÔaÐbcÔdÐhmÐmÐmÐmÐmØ×(Ò(Ð)>ÈÐRUÐY\Ð(Ñ]Ô]Ð^_Ô`ÐdhÐhÐhÐhÐhÐhÐhr   c                óÖ   — t          j        d¦  «                             d¦  «        }t          t	          |¦  «        ¦  «        }t          ||j        |j        ¦  «        d         du sJ ‚d S )Nr$   i�  r   T)r   r)   r*   r   r   r   rI   rJ   rn   s      r   Ú,test_t3_serialize_deserialize_preserves_pathzNTestTier3CrossFeatureCombinations.test_t3_serialize_deserialize_preserves_path‚  sc   € Ý"Ô+Ð,AÑBÔB×KÒKÈDÑQÔQˆÝ Õ!3°AÑ!6Ô!6Ñ7Ô7ˆÝ'¨¨1¬=¸!¼+ÑFÔFÀqÔIÈTÐQÐQÐQÐQÐQÐQr   NrI  )	rJ  rK  rL  rM  rš  rŸ  r¤  r©  r«  r@   r   r   r•  r•  k  s”   € € € € € ØKÐKðFð Fð Fð Fð
[ð [ð [ð [ð
pð pð pð pð
ið ið ið ið
Rð Rð Rð Rð Rð Rr   r•  c                  óB   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Zdd	„Z	d
S )ÚTestTier4RealWorldScenariosz4Tier 4: Real-World End-to-End Application Scenarios.r   r"   c                óX  — t          j        d¦  «                             d¬¦  «        }t          |¦  «        }t	          |¦  «        }|j        \  }}|j        |         |         j        t          j	        t          j
        fv r|j        |         |         j        sJ ‚t          |||f|j        ¦  «        \  }}|du rt          |¦  «        dk    sJ ‚t          |||f|j        d¬¦  «        d         du sJ ‚|j        \  }}	t          j	        ddc|j        |	         |         _        |j        |	         |         _        |j        |	         |         _        d	\  |j        |j                 _        |j        |j                 _        d|_        t          |||f|j        d¬¦  «        d         du sJ ‚d S )
Nr$   i	  )ÚseedTr«   Fr¡  r   )TF)r   r)   r*   r   r   rI   rK   rB   r   r}   r~   r   r   rJ   ri   r£  r–   Ú	obstaclesÚis_destroyedÚblocks_movementÚboss_gate_breached)
r-   r.   Ú
wire_bytesÚ
client_mapr  r  rž   rŸ   rÿ   r   s
             r   Ú&test_t4_full_player_journey_simulationzBTestTier4RealWorldScenarios.test_t4_full_player_journey_simulation‹  sœ  € å"Ô+Ð,AÑBÔB×KÒKÐQTÐKÑUÔUˆÝ'¨Ñ*Ô*ˆ
Ý)¨*Ñ5Ô5ˆ
àÔ'‰ˆˆBØÔ Ô# BÔ'Ô1µh´nÅhÄmÐ5TÐTÐTÐYcÔYiÐjlÔYmÐnpÔYqÔYzÐTÐTÐzå+¨J¸¸R¸À*ÔBVÑWÔW‰ˆˆDØ�Tˆzˆz�c $™iœi¨"šn˜n˜nÐ,å'¨¨B°¨8°Q´\ÐZ_Ð`Ñ`Ô`ÐabÔcÐglÐlÐlÐlÐlà”‰ˆˆBÝ]eÔ]kÐmqÐsxÐZˆŒ�Œ�BŒÔ! 1¤7¨2¤;¨r¤?Ô#;¸Q¼WÀR¼[È¼_Ô=ZØZeÑWˆŒ�A”KÔ Ô-¨q¬{¸1¼;Ô/GÔ/WØ#ˆÔå'¨¨B°¨8°Q´\ÐZ^Ð_Ñ_Ô_Ð`aÔbÐfjÐjÐjÐjÐjÐjÐjr   c                ó  — t           j                             ¦   «         t           j                             ¦   «         }}|dcxk     r|k     sn J ‚t	          d|z
  dz  d¦  «        dk    rt	          |dz
  |z  d¦  «        dk    sJ ‚d S )Ng      ð?r\   gš™™™™™É?g333333Ó?)r   r~   r®   rF  Úround)r-   Ú	path_costÚ
dense_costs      r   Ú'test_t4_terrain_speed_cost_optimizationzCTestTier4RealWorldScenarios.test_t4_terrain_speed_cost_optimization   s™   € Ý (¤× ;Ò ;Ñ =Ô =½xÔ?U×?cÒ?cÑ?eÔ?e�:ˆ	Ø˜3Ð+Ð+Ò+Ð+ Ò+Ð+Ð+Ð+Ð+Ð+Ý�c˜I‘o¨Ñ,¨aÑ0Ô0°DÒ8Ð8½UÀJÐQTÑDTÐXbÑCbÐdeÑ=fÔ=fÐjnÒ=nÐ=nÐ=nÐnÐ=nÐ=nr   c                ó:  — t          j        d¦  «                             d¦  «        }|j        d         \  }}}|j        |         |         j        t          j        k    r|j        |         |         j        sJ ‚t          ||j
        ||f¦  «        d         du sJ ‚d S )Nr$   ix  r   T)r   r)   r*   rj   rK   rB   r   rë   r   r   rI   )r-   r.   Úpoi_xÚpoi_yr¥   s        r   Ú,test_t4_poi_ambush_and_reward_cache_scenariozHTestTier4RealWorldScenarios.test_t4_poi_ambush_and_reward_cache_scenario¥  s–   € Ý"Ô+Ð,AÑBÔB×KÒKÈCÑPÔPˆØœ, qœ/‰ˆˆu�aØŒw�uŒ~˜eÔ$Ô.µ(´,Ò>Ð>À1Ä7È5Ä>ÐRWÔCXÔCaÐ>Ð>ÐaÝ'¨¨1¬=¸5À%¸.ÑIÔIÈ!ÔLÐPTÐTÐTÐTÐTÐTÐTr   c           	     ó&  — ddt          d¦  «        }}}d\  }}}t          t          d||z
  ¦  «        t          |||z   dz   ¦  «        ¦  «        D ]]}t          t          d||z
  ¦  «        t          |||z   dz   ¦  «        ¦  «        D ]%}||z
  dz  ||z
  dz  z   ||z  k    rd|||z  |z   <   Œ&Œ^|d|z  dz            dk    r|d         dk    sJ ‚t          t	          |¦  «        ¦  «        D ]}	||	         dk    rd||	<   Œ|d|z  dz            dk    sJ ‚d S )	Né   r«   r½   )r0  r0  ra   r   r]   r\   r0  )Ú	bytearrayru   r‰   rŠ   ri   )
r-   r:   r;   Úfogr  r  Úrrv   rw   Úis
             r   Ú'test_t4_fog_of_war_reveal_state_machinezCTestTier4RealWorldScenarios.test_t4_fog_of_war_reveal_state_machine«  sL  € Ø˜�I gÑ.Ô.ˆcˆ1ˆØ‰	ˆˆB�Ý•s˜1˜b 1™f‘~”~¥s¨1¨b°1©f°q©jÑ'9Ô'9Ñ:Ô:ð 	'ð 	'ˆAÝ�3˜q " q¡&™>œ>­3¨q°"°q±&¸1±*Ñ+=Ô+=Ñ>Ô>ð 'ð '�Ø˜‘F˜q‘= A¨¡F¨q¡=Ñ0°A¸±EÒ9Ð9Ø%&�C˜˜A™ ™	‘Nøð'ð �2˜‘6˜B‘;Ô 1Ò$Ð$¨¨Q¬°1ª¨¨Ð4Ý•s˜3‘x”x‘”ð 	ð 	ˆAØ�1Œv˜Š{ˆ{Ø��A‘øØ�2˜‘6˜B‘;Ô 1Ò$Ð$Ð$Ð$Ð$Ð$r   c                ó  — t          j        dd¬¦  «                             d¦  «        }|j        dk    r#|j        dk    rt          |j        ¦  «        dk    sJ ‚t          ||j        |j	        ¦  «        d         d	u sJ ‚d S )
Nr4   ÚCORRUPTED_FIEND_RUINSrV   i'  r5   r6   rg   r   T)
r   r)   r*   r   r   ri   rk   r   rI   rJ   r,   s     r   Ú(test_t4_endgame_apex_generation_scenariozDTestTier4RealWorldScenarios.test_t4_endgame_apex_generation_scenario¸  s„   € Ý"Ô+Ð,MÐXoÐpÑpÔp×yÒyÐz~ÑÔˆØŒw˜#Š~ˆ~ !¤(¨b¢. .µS¸Ô9JÑ5KÔ5KÈqÒ5PÐ5PÐ5PÐPÝ'¨¨1¬=¸!¼+ÑFÔFÀqÔIÈTÐQÐQÐQÐQÐQÐQr   c                óL   — t          t          ¦  «        dk    r	dt          v sJ ‚d S )Nr‡   r$   )ri   r   rG  s    r   Ú"test_t4_unit_test_regression_guardz>TestTier4RealWorldScenarios.test_t4_unit_test_regression_guard½  s.   € ÝÕ%Ñ&Ô&¨!Ò+Ð+Ð0EÕI[Ð0[Ð0[Ð0[Ð[Ð0[Ð0[r   NrI  )
rJ  rK  rL  rM  r¶  r»  r¿  rÆ  rÉ  rË  r@   r   r   r­  r­  ˆ  s¨   € € € € € Ø>Ð>ðkð kð kð kð*oð oð oð oð
Uð Uð Uð Uð%ð %ð %ð %ðRð Rð Rð Rð
\ð \ð \ð \ð \ð \r   r­  )r   r   r   r   r   r   r   r   r   r   r   r   )rM  Ú
__future__r   rk  rb   ÚpytestÚtypingr   r   Úserver.world.map_data_typesr   r   r   r	   r
   Ú%server.world.wilderness_map_generatorr   r   Ú"server.world.map_binary_serializerr   r   Ú"server.world.procedural_map_enginer   r   Úserver.world.zone_enginer   r   r!   rO  r•  r­  r@   r   r   ú<module>rÔ     sÌ  ððð ð #Ð "Ð "Ð "Ð "Ð "Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ð Ð à lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lÐ lØ \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ aÐ aÐ aÐ aÐ aÐ aÐ aÐ aØ /Ð /Ð /Ð /Ð /Ð /ð!ð !ð !ð !ðagð agð agð agð agñ agô agð agðHfcð fcð fcð fcð fcñ fcô fcð fcðRRð Rð Rð Rð Rñ Rô Rð Rð:6\ð 6\ð 6\ð 6\ð 6\ñ 6\ô 6\ð 6\ð 6\ð 6\r   