§
    I¾j,  ã                   óŽ   — d Z ddlZddlmc mZ ddlmZ ddl	Z	ddl
Z
ddlmZ ddlmZ ddddd	d
ddddddœZ G d„ d¦  «        ZdS )z´
Empirical Challenger Test Suite for Milestone 1 (R1: Wilderness Map Expansion).
Tests all 11 zones, SQLite database values, boundary physics, ambient tile math, and file hygiene.
é    N)ÚPath)Ú
ZoneEngine)ÚZoneType)Tç      ‰@r   )Fç     @Ÿ@r   )Fç     À¢@r   )Fç     p§@r	   )Fç      ©@r
   )Fç      ¬@r   )Fç     @¯@r   )Fç     0±@r   )Fç     À²@r   )Fç     ˆ³@r   )Úzone_boundless_sanctuaryÚzone_player_hideoutÚzone_tang_kiem_nhaiÚzone_ancient_sword_barrowÚzone_boundless_sandstormÚzone_blood_scale_ruinsÚzone_five_elements_altarÚzone_abyssal_ice_pondÚzone_infinite_blood_riftÚzone_purgatory_lava_cavernÚzone_boundless_celestial_palacec                   ót   — e Zd Z ej        d¬¦  «        dd„¦   «         Zdd„Zdd„Zdd„Zdd	„Z	dd
„Z
dd„ZdS )ÚTestChallengerMilestone1T)ÚautouseÚreturnNc                 ó,   — t          ¦   «         | _        d S )N)r   Úengine)Úselfs    ú@C:\Projects\FreeExile\tests\unit\test_challenger_m1_expansion.pyÚsetup_enginez%TestChallengerMilestone1.setup_engine   s   € å ‘l”lˆŒˆˆó    c                 ó<	  — t          | j        j                             ¦   «         ¦  «        }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  }t          j        dt	          |¦  «        › �¦  «        dz   d	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}d„ |D ¦   «         }d„ |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  }t          j        dt	          |¦  «        › �¦  «        dz   d	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}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  }t          j        dt	          |¦  «        › �¦  «        dz   d	|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}x}}d„ |D ¦   «         }	ddh}|	|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}
}d
S )z8Verify exactly 11 zones: 2 sanctuaries and 9 wilderness.é   ©ú==©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚzones©Úpy0Úpy1Úpy3Úpy6zExpected 11 zones, found ú
>assert %(py8)sÚpy8Nc                 ó<   — g | ]}|j         t          j        k    ¯|‘ŒS © )Ú	zone_typer   Ú	SANCTUARY©Ú.0Úzs     r"   ú
<listcomp>zSTestChallengerMilestone1.test_zone_counts_and_type_distribution.<locals>.<listcomp>(   s'   € ÐMÐMÐM˜Q¨1¬;½(Ô:LÒ+LÐ+L�qÐ+LÐ+LÐ+Lr$   c                 ó<   — g | ]}|j         t          j        k    ¯|‘ŒS r4   )r5   r   Ú
OPEN_WORLDr7   s     r"   r:   zSTestChallengerMilestone1.test_zone_counts_and_type_distribution.<locals>.<listcomp>)   s'   € ÐMÐMÐM˜A¨!¬+½Ô9LÒ*LÐ*L�aÐ*LÐ*LÐ*Lr$   é   ÚsanctuarieszExpected 2 sanctuaries, found é	   Ú
wildernessz#Expected 9 wilderness zones, found c                 ó   — h | ]	}|j         ’Œ
S r4   )Úzone_idr7   s     r"   ú	<setcomp>zRTestChallengerMilestone1.test_zone_counts_and_type_distribution.<locals>.<setcomp>.   s   € Ð8Ð8Ð8 q˜œÐ8Ð8Ð8r$   r   r   )z%(py0)s == %(py3)sÚsanctuary_ids©r-   r/   zassert %(py5)sÚpy5)Úlistr    r+   Úvaluesr*   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚ_format_assertmsgÚAssertionErrorÚ_format_explanation)r!   r+   Ú@py_assert2Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9r>   r@   rD   Ú@py_assert1Ú@py_format4Ú@py_format6s                r"   Ú&test_zone_counts_and_type_distributionz?TestChallengerMilestone1.test_zone_counts_and_type_distribution#   sâ  € å�T”[Ô&×-Ò-Ñ/Ô/Ñ0Ô0ˆÝ�5‰zŒzÐI˜RÐIˆz˜RÒÐIÐIÑIÕIÔIÐIÐIÐIÐIˆz˜RÐ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�5ÑIÔIÐIÕIÔI�5ÑIÔIÐIÐIÕIÔIˆzÑIÔIÕIÔI˜RÑIÔIÐIÐIÑIÐIÕIÔIÐ!I½SÀ¹Z¼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àMÐM %ÐMÑMÔMˆØMÐM ÐMÑMÔMˆ
å�;ÑÔÐY 1ÐYÐ 1Ò$ÐYÐYÑYÕYÔYÐYÐYÐYÐYÐ 1Ð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�;ÑYÔYÐYÕYÔY�;ÑYÔYÐYÐYÕYÔYÐÑYÔYÕYÔY 1ÑYÔYÐYÐYÑYÐYÕYÔYÐ&YÅsÈ;ÑGWÔGWÐ&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Ý�:‰ŒÐ\ !Ð\ˆ !Ò#Ð\Ð\Ñ\Õ\Ô\Ð\Ð\Ð\Ð\ˆ !Ð\Ñ\Ô\Ð\Õ\Ô\Ñ\Ô\Ð\Ð\Õ\Ô\�sÑ\Ô\Ð\Õ\Ô\�sÑ\Ô\Ð\Ð\Ð\Õ\Ô\Ñ\Ô\Ð\Ð\Õ\Ô\�:Ñ\Ô\Ð\Õ\Ô\�:Ñ\Ô\Ð\Ð\Õ\Ô\ˆÑ\Ô\Õ\Ô\ !Ñ\Ô\Ð\Ð\Ñ\Ð\Õ\Ô\Ð%\Í3ÈzÉ?Ì?Ð%\Ð%\Ñ\Ô\Ð\Ñ\Ð\Ð\Ð\Ñ\Ð\Õ\Õ\Ô\Ð\Ñ\Ô\Ñ\Ô\Ð\Ð\Ð\Ð\Ð\Ð\Ð\à8Ð8¨KÐ8Ñ8Ô8ˆØ!;Ð=RÐ 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Ô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ÐSr$   c                 óø  — t                                ¦   «         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  }t	          j
        d|› �¦  «        dz   d|iz  }	t          t	          j        |	¦  «        ¦  «        ‚dx}}|�rŸ|j        }t          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        t          ¦  «        rt	          j	        t          ¦  «        ndt	          j	        |
¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}
|j        |j        f}d}||k    }|slt	          j        d	|fd||f¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}�Œ�|j        }t          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        t          ¦  «        rt	          j	        t          ¦  «        ndt	          j	        |
¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}
|j        |j        f}||f}||k    }|slt	          j        d	|fd||f¦  «        t	          j	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}|dk    �r·g }|j        }d}||k    }
|
}|
r|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  }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	        |¦  «        t	          j	        |¦  «        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 )#z)Verify exact dimensions for all 11 zones.N)úis not)z%(py0)s is not %(py3)sÚzonerE   zMissing zone ú
>assert %(py5)srF   r'   )zP%(py2)s
{%(py2)s = %(py0)s.zone_type
} == %(py6)s
{%(py6)s = %(py4)s.SANCTUARY
}r   )r-   Úpy2Úpy4r0   zassert %(py8)sr2   )r   r   ©z%(py1)s == %(py4)s©r.   r`   zassert %(py6)sr0   )zQ%(py2)s
{%(py2)s = %(py0)s.zone_type
} == %(py6)s
{%(py6)s = %(py4)s.OPEN_WORLD
}r   g      ™@)ú>=)z4%(py4)s
{%(py4)s = %(py2)s.bounds_width
} >= %(py7)s)r_   r`   Úpy7z%(py9)sÚpy9)z9%(py13)s
{%(py13)s = %(py11)s.bounds_height
} >= %(py16)s)Úpy11Úpy13Úpy16z%(py18)sÚpy18r   zassert %(py21)sÚpy21)ÚBASELINE_AND_EXPANDED_SPECSÚitemsr    Úget_zonerI   rJ   rK   rL   rM   rN   rO   rP   rQ   r5   r   r6   Úbounds_widthÚbounds_heightr<   ÚappendÚ_format_boolop)r!   rB   Úis_sanctuaryÚexp_wÚexp_hr]   rR   rW   rX   rY   rS   Ú@py_assert3rU   rV   Ú@py_assert0Ú@py_format5Ú@py_assert6Ú@py_assert12Ú@py_assert15Ú@py_assert14Ú@py_format8Ú@py_format10Ú@py_format17Ú@py_format19Ú@py_format20Ú@py_format22s                             r"   Ú"test_all_11_zones_exact_dimensionsz;TestChallengerMilestone1.test_all_11_zones_exact_dimensions1   s  € å5P×5VÒ5VÑ5XÔ5Xð 
	Xñ 
	XÑ1ˆGÑ1�l E¨5Ø”;×'Ò'¨Ñ0Ô0ˆDØ#Ð>�4˜tÐ#Ð>Ð>Ð>Õ>Ô>Ð>Ð>Ð>Ð>�4˜tÐ>Ñ>Ô>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>�4Ñ>Ô>Ð>Õ>Ô>�4Ñ>Ô>Ð>Ð>Õ>Ô>˜tÑ>Ô>Ð>Ð>Ñ>Ð>Õ>Ô>Ð%>°WÐ%>Ð%>Ñ>Ô>Ð>Ñ>Ð>Ð>Ð>Ñ>Ð>Õ>Õ>Ô>Ð>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Øñ XØ”~Ð;­Ô);Ð;�~Ð);Ò;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð;�~Ð);Ð;Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;�tÑ;Ô;Ð;Õ;Ô;�tÑ;Ô;Ð;Ð;Õ;Ô;�~Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;­Ñ;Ô;Ð;Õ;Ô;­Ñ;Ô;Ð;Ð;Õ;Ô;Ð);Ñ;Ô;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ØÔ)¨4Ô+=Ð>ÐPÀ.ÐPÐ>À.ÒPÐPÐPÐPÕPÔPÐPÐPÐPÐPÐ>À.ÐPÑPÔPÕPÔPÐ>ÑPÔPÕPÔPÀ.ÑPÔPÐPÐPÑPÐPÐPÐPÐPÐPÑPÐPÕPÕPÔPÐPÑPÔPÑPÔPÐPÐPÐPÐPÐPÐPÐPÑPà”~Ð<­Ô)<Ð<�~Ð)<Ò<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð<�~Ð)<Ð<Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<�tÑ<Ô<Ð<Õ<Ô<�tÑ<Ô<Ð<Ð<Õ<Ô<�~Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<­Ñ<Ô<Ð<Õ<Ô<­Ñ<Ô<Ð<Ð<Õ<Ô<Ð)<Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ØÔ)¨4Ô+=Ð>ÐPÀ5È%À.ÐPÐ>À.ÒPÐPÐPÐPÕPÔPÐPÐPÐPÐPÐ>À.ÐPÑPÔPÕPÔPÐ>ÑPÔPÕPÔPÀ.ÑPÔPÐPÐPÑPÐPÐPÐPÐPÐPÑPÐPÕPÕPÔPÐPÑPÔPÑPÔPÐPÐPÐPÐPÐPÐPÐPØÐ3Ò3Ñ3ØWÐW˜4Ô,ÐW°ÐWÐ,°Ò6ÐWÐWÐWÐWÐW¸4Ô;MÐWÐQWÐWÐ;MÐQWÒ;WÐWÐWÐWÐWÑWÕWÔWÐWÐWÐWÐWÐ,°ÐWÑWÔWÐWÕWÔWÑWÔWÐWÐWÕWÔW˜4ÑWÔWÐWÕWÔW˜4Ñ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ÔWÐWÐWÐWÕWÔWÐWÐWÐWÐWÐ;MÐQWÐWÑWÔWÐWÕWÔWÑWÔWÐWÐWÕWÔW¸4ÑWÔWÐWÕWÔW¸4ÑWÔWÐWÐWÕWÔWÐ;MÑWÔWÕWÔWÐQWÑ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Ð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ÐWÐWÐWÐWÐWùð
	Xð 
	Xr$   c           
      ó˜  — | j         j                             ¦   «         D �])}|j        dz  }|j        dz  }|j                             ¦   «         D �]ö\  }}|j        }t          |¦  «        }||k    }|�sSt          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  }	t          j        d|› d	|j        › d
|› �¦  «        dz   d|	iz  }
t!          t          j        |
¦  «        ¦  «        ‚dx}x}}|j        }t          |¦  «        }||k    }|�sSt          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  }	t          j        d|› d|j        › d|› �¦  «        dz   d|	iz  }
t!          t          j        |
¦  «        ¦  «        ‚dx}x}}�Œø|j                             ¦   «         D �]æ\  }}|j        }t          |¦  «        }||k    }|�sKt          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  }	t          j        d|› d|› �¦  «        dz   d|	iz  }
t!          t          j        |
¦  «        ¦  «        ‚dx}x}}|j        }t          |¦  «        }||k    }|�sKt          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  }	t          j        d|› d|› �¦  «        dz   d|	iz  }
t!          t          j        |
¦  «        ¦  «        ‚dx}x}}�Œè�Œ+dS )zNAdversarial check: ensure no waypoints or portals are outside expanded bounds.ç       @©ú<=)zG%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.x
})
} <= %(py7)sÚabsÚwpÚhalf_w)r-   r.   r/   rF   rd   z	Waypoint z x=z outside half-width z
>assert %(py9)sre   N)zG%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.y
})
} <= %(py7)sÚhalf_hz y=z outside half-height )zN%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.source_x
})
} <= %(py7)sÚportalzPortal z src_x outside )zN%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.source_y
})
} <= %(py7)sz src_y outside )r    r+   rH   rn   ro   Ú	waypointsrl   Úxr‡   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   ÚyÚportalsÚsource_xÚsource_y)r!   r]   r‰   rŠ   Úwp_idrˆ   rR   rT   rx   r|   r}   Ú	portal_idr‹   s                r"   Ú(test_waypoints_and_portals_within_boundszATestChallengerMilestone1.test_waypoints_and_portals_within_bounds?   s£  € à”KÔ%×,Ò,Ñ.Ô.ð 
	dñ 
	dˆDØÔ&¨Ñ,ˆFØÔ'¨#Ñ-ˆFà!œ^×1Ò1Ñ3Ô3ð fñ f‘	��rØœ4Ðd•s˜4‘y”yÐd�y FÒ*ÐdÐdÑdÕdÔdÐdÐdÐdÐd�y FÐdÑdÔdÐdÕdÔdÑdÔdÐdÐdÕdÔd•sÑdÔdÐdÕdÔd•sÑdÔdÐdÐdÐdÕdÔdÑdÔdÐdÐdÕdÔd˜2ÑdÔdÐdÕdÔd˜2ÑdÔdÐdÐdÕdÔd˜4ÑdÔdÕdÔd�yÑdÔdÐdÕdÔdÑdÔdÐdÐdÕdÔd FÑdÔdÐdÕdÔd FÑdÔdÐdÐdÐdÐdÑdÐdÕdÔdÐ,d¸Ð,dÐ,dÀ"Ä$Ð,dÐ,dÐ\bÐ,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Øœ4Ðe•s˜4‘y”yÐe�y FÒ*ÐeÐeÑeÕeÔeÐeÐeÐeÐe�y FÐeÑeÔeÐeÕeÔeÑeÔeÐeÐeÕeÔe•sÑeÔeÐeÕeÔe•sÑeÔeÐeÐeÐeÕeÔeÑeÔeÐeÐeÕeÔe˜2ÑeÔeÐeÕeÔe˜2ÑeÔeÐeÐeÕeÔe˜4ÑeÔeÕeÔe�yÑeÔeÐeÕeÔeÑeÔeÐeÐeÕeÔe FÑeÔeÐeÕeÔe FÑeÔeÐeÐeÐeÐeÑeÐeÕeÔeÐ,e¸Ð,eÐ,eÀ"Ä$Ð,eÐ,eÐ]cÐ,eÐ,eÑeÔeÐeÑeÐeÐeÐeÑeÐeÕeÕeÔeÐeÑeÔeÑeÔeÐeÐeÐeÐeÐeÐeÐeÑeà%)¤\×%7Ò%7Ñ%9Ô%9ð dñ dÑ!�	˜6Ø!œ?Ðc•s˜?Ñ+Ô+ÐcÐ+¨vÒ5ÐcÐcÑcÕcÔcÐcÐcÐcÐcÐ+¨vÐ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ÔcÑcÔcÐcÐcÕcÔc˜6ÑcÔcÐcÕcÔc˜6ÑcÔcÐcÐcÕcÔc˜?ÑcÔcÕcÔcÐ+ÑcÔcÐcÕcÔcÑcÔcÐcÐcÕcÔc¨vÑcÔcÐcÕcÔc¨vÑcÔcÐcÐcÐcÐcÑcÐcÕcÔcÐ7cÀÐ7cÐ7cÐ[aÐ7cÐ7cÑ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˜?Ñ+Ô+ÐcÐ+¨vÒ5ÐcÐcÑcÕcÔcÐcÐcÐcÐcÐ+¨vÐ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ÔcÑcÔcÐcÐcÕcÔc˜6ÑcÔcÐcÕcÔc˜6ÑcÔcÐcÐcÕcÔc˜?ÑcÔcÕcÔcÐ+ÑcÔcÐcÕcÔcÑcÔcÐcÐcÕcÔc¨vÑcÔcÐcÕcÔc¨vÑcÔcÐcÐcÐcÐcÑcÐcÕcÔcÐ7cÀÐ7cÐ7cÐ[aÐ7cÐ7cÑ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ñdð
	dð 
	dr$   c                 ó„
  — t          d¦  «        }|j        } |¦   «         }|s t          j        d¦  «        dz   dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          t          j	        |¦  «        ¦  «        ‚dx}}t          j        t          |¦  «        ¦  «        }	 |                     ¦   «         }|                     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  }t          j        dt!          |¦  «        › �¦  «        dz   d|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}
}	d„ |D ¦   «         }t$                               ¦   «         D �]�\  }\  }}}||v }|sÛt          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dœz  }t          j        d|› d�¦  «        dz   d|iz  }t          t          j	        |¦  «        ¦  «        ‚d}||         \  }}}|rdnd}||k    }|sàt          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dœz  }t          j        d|› d |› d!|› �¦  «        dz   d|iz  }t          t          j	        |¦  «        ¦  «        ‚d}||f}||f}||k    }|s‘t          j        d	|fd"||f¦  «        t          j        |¦  «        t          j        |¦  «        d#œz  }t          j        d|› d$|› d%|› d&|› d%|› d'�¦  «        d(z   d)|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}x}}�Œ’	 |                     ¦   «          dS # |                     ¦   «          w xY w)*zIEmpirically query data/game_design_matrix.db and assert exact dimensions.zdata/game_design_matrix.dbzgame_design_matrix.db missingúC
>assert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}Údb_path©r-   r_   r`   NzASELECT zone_id, zone_type, bounds_width, bounds_height FROM zonesr&   r'   r)   r*   Úrowsr,   z%Expected 11 rows in zones table, got r1   r2   c           	      ó~   — i | ]:}|d          |d         t          |d         ¦  «        t          |d         ¦  «        f“Œ;S )r   é   r=   é   )Úfloat)r8   Úrs     r"   ú
<dictcomp>zMTestChallengerMilestone1.test_sqlite_matrix_db_invariants.<locals>.<dictcomp>Z   s=   € ÐKÐKÐKÀ�a˜”d˜Q˜qœT¥5¨¨1¬¡;¤;µ°a¸´d±´Ð<ÐKÐKÐKr$   )Úin)z%(py0)s in %(py2)srB   Údb_map©r-   r_   zZone z missing from SQLite DBú
>assert %(py4)sr`   r6   r<   )z%(py0)s == %(py2)sÚz_typeÚexpected_typez type mismatch: z vs ra   rb   z DB bounds mismatch: (ú,z) vs (ú)z
>assert %(py6)sr0   )r   ÚexistsrI   rO   rK   rL   rM   rN   rP   rQ   Úsqlite3ÚconnectÚstrÚcursorÚexecuteÚfetchallr*   rJ   rk   rl   Úclose)r!   r—   rW   ru   rw   Úconnr¬   r™   rR   rS   rT   rU   rV   r¡   rB   rr   rs   rt   Ú@py_format3r¤   ÚwÚhr¥   rv   s                           r"   Ú test_sqlite_matrix_db_invariantsz9TestChallengerMilestone1.test_sqlite_matrix_db_invariantsM   sÐ  € åÐ3Ñ4Ô4ˆØŒ~Ð@ˆ~ˆ~ÑÔÐ@ÐÐ@Õ@Ô@Ð!@Ñ@Ô@Ð@Ñ@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@ˆwÑ@Ô@Ð@Õ@Ô@ˆwÑ@Ô@Ð@Ð@Õ@Ô@ˆ~Ñ@Ô@Õ@Ô@ÐÑ@Ô@Ð@Ð@Ñ@Ð@Õ@Õ@Ô@Ð@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@åŒ�s 7™|œ|Ñ,Ô,ˆð	Ø—[’[‘]”]ˆFØ—>’>ØSñô çŠh‰jŒjð õ �t‘9”9ÐW ÐW�9 ’?ÐWÐWÑWÕWÔWÐWÐWÐWÐW�9 ÐWÑWÔWÐWÕWÔWÑWÔWÐWÐWÕWÔW•3ÑWÔWÐWÕWÔW•3ÑWÔWÐWÐWÐWÕWÔWÑWÔWÐWÐWÕWÔW�tÑWÔWÐWÕWÔW�tÑWÔWÐWÐWÕWÔW�9ÑWÔWÕWÔW ÑWÔWÐWÐWÑWÐWÕWÔWÐ$WÍCÐPTÉIÌIÐ$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àKÐKÀdÐKÑKÔKˆFÝ9T×9ZÒ9ZÑ9\Ô9\ð vñ vÑ5�Ñ5˜,¨¨uØ &Ð(ÐRÐRÐRÕRÔRÐRÐRÐRÐR�w &ÐRÑRÔRÐRÕRÔRÑRÔRÐRÐRÕRÔR�wÑRÔRÐRÕRÔR�wÑ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Ð*RÐ*RÑRÔRÐRÑRÐRÐRÐRÑRÐRÕRÕRÔRÐRÑRÔRÑRÔRÐRÐRÐRØ% gœ‘�˜˜1Ø/;Ð M  À�Ø Ò.ÐlÐlÐlÕlÔlÐlÐlÐlÐl�v ÐlÑlÔlÐlÕlÔlÑlÔlÐlÐlÕlÔl�vÑlÔlÐlÕlÔl�vÑlÔlÐlÐlÐlÕlÔlÑlÔlÐlÐlÕlÔl ÑlÔlÐlÕlÔl ÑlÔlÐlÐlÐlÐlÑlÐlÕlÔlÐ0l¸Ð0lÐ0lÐQWÐ0lÐ0lÐ]jÐ0lÐ0lÑlÔlÐlÑlÐlÐlÐlÑlÐlÕlÕlÔlÐlÑlÔlÑlÔlÐlÐlÐlØ˜1�vÐu %¨ Ðu�v Ò/ÐuÐuÐuÕuÔuÐuÐuÐuÐu�v ÐuÑuÔuÕuÔu�vÑuÔuÕuÔu ÑuÔuÐuÐuÑuÐuÕuÔuÐ1u¸Ð1uÐ1uÐXYÐ1uÐ1uÐ\]Ð1uÐ1uÐejÐ1uÐ1uÐmrÐ1uÐ1uÐ1uÑuÔuÐuÑuÐuÐuÐuÑuÐuÕuÕuÔuÐuÑuÔuÑuÔuÐuÐuÐuÐuÐuÐuÐuÑuðvð �JŠJ‰LŒLˆLˆLˆLøˆD�JŠJ‰LŒLˆLˆLøøøs   Ã)P)T) Ô)T?c           	      ól  — t          d¦  «        dt          d¦  «        dt          d¦  «        dt          d¦  «        di}|                     ¦   «         D �]ß\  }}|j        } |¦   «         }|s¤t          j        d|› d�¦  «        d	z   d
t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd
t          j        |¦  «        t          j        |¦  «        dœz  }t          t          j
        |¦  «        ¦  «        ‚dx}}t          |                     d¬¦  «                             ¦   «         ¦  «        }||k    }|sßt          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dœz  }t          j        |› d|› d|› �¦  «        dz   d|iz  }t          t          j
        |¦  «        ¦  «        ‚d}�ŒádS )z0Verify strict line limits across affected files.zserver/world/zone_catalog.pyi¼  z+client/webapp/js/engine/collision_engine.jsiô  z)client/webapp/js/engine/world_renderer.jsz(tests/unit/test_zone_bounds_expansion.pyzFile z
 not foundr–   Ú	file_pathr˜   Nzutf-8)Úencodingr…   )z%(py0)s <= %(py2)sÚlinesÚ	max_linesr¢   z has z lines, exceeding limit r£   r`   )r   rl   r¨   rI   rO   rK   rL   rM   rN   rP   rQ   r*   Ú	read_textÚ
splitlinesrJ   )	r!   Úlimitsr¶   r¹   rW   ru   rw   r¸   r±   s	            r"   Útest_hygiene_line_limitsz1TestChallengerMilestone1.test_hygiene_line_limitsd   sp  € õ Ð/Ñ0Ô0°#ÝÐ>Ñ?Ô?ÀÝÐ<Ñ=Ô=¸sÝÐ;Ñ<Ô<¸cð	
ˆð %+§L¢L¡N¤Nð 	eñ 	eÑ ˆI�yØÔ#ÐDÐ#Ð#Ñ%Ô%ÐDÐ%ÐDÕDÔDÐ'D¨yÐ'DÐ'DÐ'DÑDÔDÐDÑDÐDÕDÔDÑDÔDÐDÐDÕDÔD�9ÑDÔDÐDÕDÔD�9Ñ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Ý˜	×+Ò+°WÐ+Ñ=Ô=×HÒHÑJÔJÑKÔKˆEØ˜IÒ%ÐdÐdÐdÕdÔdÐdÐdÐdÐd�5˜IÐdÑdÔdÐdÕdÔdÑdÔdÐdÐdÕdÔd�5ÑdÔdÐdÕdÔd�5ÑdÔdÐdÐdÐdÕdÔdÑdÔdÐdÐdÕdÔd˜IÑdÔdÐdÕdÔd˜IÑdÔdÐdÐdÐdÐdÑdÐdÕdÔd¨)Ð'dÐ'd¸%Ð'dÐ'dÐYbÐ'dÐ'dÑdÔdÐdÑdÐdÐdÐdÑdÐdÕdÕdÔdÐdÑdÔdÑdÔdÐdÐdÐdÑdð	eð 	er$   c                 óœ  ‡‡‡‡ — dŠ dŠd}d}|dz  Š|dz  Šdt           dt           dt           d	t           d
t          t           t           f         f
ˆˆˆˆ fd„}g d¢}t          t          ||¦  «        ‰dz  z  dz   ¦  «        }|D �]É\  }}t	          |¦  «        }t	          |¦  «        }	d}
d}t          ||z
  ||z   dz   ¦  «        D ]Z}t          |	|z
  |	|z   dz   ¦  «        D ]>} |||||¦  «        \  }}|‰  k     s||‰ z   k    s|‰ k     s	||‰z   k    r|dz  }Œ9|
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  }t          j        d|› d|› d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|
|z   }d}||z  }d}||z   }d}||z  }||k    }|�s9t          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        |¦  «        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}x}x}x}}�ŒËdS )!zBStress-test ambient tile mathematics for extreme camera positions.é@   é    i€  i8  r„   ÚwxÚwyÚcam_xÚcam_yr   c                 óP   •— | |z
  }||z
  }||z
  ‰	dz  z  ‰z   ||z   ‰dz  z  ‰z   fS )Nr„   r4   )
rÁ   rÂ   rÃ   rÄ   Úrel_wxÚrel_wyÚcxÚcyÚtile_hÚtile_ws
         €€€€r"   Úworld_to_isozLTestChallengerMilestone1.test_ambient_tile_math_stress.<locals>.world_to_isoz   sI   ø€ Ø˜%‘ZˆFØ˜%‘ZˆFà˜&‘ V¨c¡\Ñ2°RÑ7Ø˜&‘ V¨c¡\Ñ2°RÑ7ðð r$   ))ç        rÍ   )g    €„.Ág    €„.A)g    ÐcAg    ÐcÁ)g      6Àg      1@)ç     ˆ£@rÎ   )ç     ˆ£ÀrÏ   r=   r   r›   )ú>)z%(py0)s > %(py3)sÚdrawnrE   z"Expected visible tiles at camera (z, r§   r^   rF   Nr'   )zD(%(py0)s + %(py1)s) == (((%(py5)s * %(py6)s) + %(py9)s) ** %(py12)s)ÚculledÚtile_radius)r-   r.   rF   r0   re   Úpy12zassert %(py15)sÚpy15)r�   ÚtupleÚintÚmaxÚroundÚrangerI   rJ   rK   rL   rM   rN   rO   rP   rQ   )!r!   Ú
viewport_wÚ
viewport_hrÌ   Útest_camerasrÓ   rÃ   rÄ   Úcam_wxÚcam_wyrÑ   rÒ   r�   rŽ   Úpt_xÚpt_yrR   rW   rX   rY   rT   Ú@py_assert7Ú@py_assert8Ú@py_assert10Ú@py_assert11Ú@py_assert13ru   Ú@py_format14Ú@py_format16rÈ   rÉ   rÊ   rË   s!                                @@@@r"   Útest_ambient_tile_math_stressz6TestChallengerMilestone1.test_ambient_tile_math_stressq   sR  øøøø€ àˆØˆØˆ
Øˆ
Ø˜#ÑˆØ˜#Ñˆð	�Uð 	­ð 	µeð 	ÅEð 	ÍeÕTYÕ[`ÐT`ÔNað 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð
ð 
ð 
ˆõ �3˜z¨:Ñ6Ô6¸&À1¹*ÑEÈÑJÑKÔKˆà(ð 	@ñ 	@‰LˆE�5Ý˜5‘\”\ˆFÝ˜5‘\”\ˆFØˆEØˆFÝ˜6 KÑ/°¸+Ñ1EÈÑ1IÑJÔJð ð �Ý˜v¨Ñ3°V¸kÑ5IÈAÑ5MÑNÔNð 
ð 
�AØ!- ¨a°°E¸5Ñ!AÔ!A‘J�D˜$à ˜wš˜Ø *¨vÑ"5Ò5Ð5Ø 6 'š>˜>Ø *¨vÑ"5Ò5Ð5à !™˜Ø Ø˜Q‘J�E�Eð
ð ÐT�5˜1’9ÐTÐTÐTÕTÔTÐTÐTÐTÐT�5˜1ÐTÑTÔTÐTÕTÔTÑTÔTÐTÐTÕTÔT�5ÑTÔTÐTÕTÔT�5ÑTÔTÐTÐTÕTÔT˜1ÑTÔTÐTÐTÑTÐTÕTÔTÐTÀ5ÐTÐTÈEÐ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Ø˜6‘>Ð? aÐ? a¨+¡oÐ?¸Ð? o¸Ñ&9Ð?¸aÐ?Ð&9¸aÑ%?Ð?�>Ð%?Ò?Ð?Ð?Ñ?Õ?Ô?Ð?Ð?Ð?Ð?�>Ð%?Ð?Ñ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?�5Ñ?Ô?Ð?Õ?Ô?�5Ñ?Ô?Ð?Ð?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?˜6Ñ?Ô?Ð?Õ?Ô?˜6Ñ?Ô?Ð?Ð?Õ?Ô? aÑ?Ô?Ð?Õ?Ô?Ñ?Ô?Ð?Ð?Õ?Ô?¨+Ñ?Ô?Ð?Õ?Ô?¨+Ñ?Ô?Ð?Ð?Õ?Ô?¸Ñ?Ô?Õ?Ô?¸aÑ?Ô?Ð?Ð?Ñ?Ð?Ð?Ð?Ð?Ð?Ñ?Ð?Õ?Õ?Ô?Ð?Ñ?Ô?Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ñ?ð'	@ð 	@r$   )r   N)Ú__name__Ú
__module__Ú__qualname__ÚpytestÚfixturer#   rZ   r‚   r”   r´   r½   ré   r4   r$   r"   r   r      sÐ   € € € € € Ø€V„^˜DÐ!Ñ!Ô!ð#ð #ð #ñ "Ô!ð#ðTð Tð Tð TðXð Xð Xð Xðdð dð dð dðð ð ð ð.eð eð eð eð/@ð /@ð /@ð /@ð /@ð /@r$   r   )Ú__doc__ÚbuiltinsrK   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterI   Úpathlibr   r©   rí   Úserver.world.zone_enginer   Úserver.world.zone_typesr   rk   r   r4   r$   r"   ú<module>r÷      sê   ððð ð
 € € € € € € € € € € € € Ð Ð Ð Ð Ð Ð Ø €€€Ø €€€à /Ð /Ð /Ð /Ð /Ð /Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ð
 !5Ø/Ø2Ø!8Ø 7Ø5Ø 7Ø4Ø 7Ø"9Ø'>ðð Ð ð B@ð B@ð B@ð B@ð B@ñ B@ô B@ð B@ð B@ð B@r$   