§
    Î ½j®   ã                   ó¤   — d Z ddlZddlmc mZ ddlZddlm	Z	m
Z
 ddlZddlmZ ddlmZmZmZ ej        defd„¦   «         Z G d„ d	¦  «        ZdS )
a   
Adversarial Stress Testing & Security Fuzzing Suite for ZoneEngine (Milestone 1).
Validates:
1. Zone ID Fuzzing (Fail-Safe Closed: Unicode, Null Bytes, SQLi, Path Traversal, Empty).
2. Safe Haven Purity & Zero Hostile Leaks in Hideout and Sanctuary.
3. Spawn Validation Matrix across Diverse Types & Values.
4. Extreme Boundary Coordinate Gating in Player Hideout.
5. Immutability of ZoneDefinition Dataclasses against Direct Tampering.
6. Empirical Verification of Adversarial Edge Cases (Unhashable Types, NaN Coordinates & Type Confusion).
é    N)ÚAnyÚList©Ú
ZoneEngine)ÚZoneTypeÚZoneDefinitionÚZoneEnvironmentÚreturnc                  ó   — t          ¦   «         S )Nr   © ó    úLC:\Projects\FreeExile\tests\security_fuzzing\test_zone_engine_adversarial.pyÚenginer      s   € å‰<Œ<Ðr   c                   ó¢   — e Zd ZdZdeddfd„Zdeddfd„Zdeddfd„Zdeddfd„Zdeddfd	„Z	deddfd
„Z
deddfd„Zdeddfd„Zdeddfd„ZdS )Ú TestZoneEngineAdversarialFuzzingz?Empirical adversarial fuzzing and stress testing of ZoneEngine.r   r
   Nc                 ó^	  — ddddddddd	d
ddddddz  dddg}|D �]‘}|j         } ||¦  «        }d}||u }|�s!t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        dt          |¦  «        › d�¦  «        dz   d|iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}x}x}}|                     |d¬¦  «        \  }
}d}|
|u }|s½t          j        d|fd|
|f¦  «        d t          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        nd t          j        |¦  «        d!œz  }t          j        d"t          |¦  «        › d#�¦  «        d$z   d%|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}}g }t          |t          ¦  «        }|}|rt          |¦  «        }d}||k    }|}|�s$d&d't          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd'd(t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd(d)t          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd)t          j        |¦  «        d*œz  }|                     |¦  «         |ræt          j        d+|fd,||f¦  «        d-t          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd-d(t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd(t          j        |¦  «        t          j        |¦  «        d.œz  }d/d0|iz  }|                     |¦  «         t          j        |d¦  «        i z  }d1d2|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}x}x}}�Œ“dS )3z°
        Fuzzes can_spawn_hostile_monsters and validate_monster_spawn with malformed,
        malicious, and boundary string values. All must fail safe (return False).
        Ú ú z   	
Nzzone_player_hideout zzone_player_hideout
zzone_player_hideout
ÚZONE_PLAYER_HIDEOUTÚZone_Player_Hideoutz../../etc/passwdz..\..\windows\win.iniz' OR '1'='1z<script>alert(1)</script>u   ðŸ’€âš”ðŸ”¥Úai'  r   i90  )é   é   é   F©Úis©z`%(py5)s
{%(py5)s = %(py2)s
{%(py2)s = %(py0)s.can_spawn_hostile_monsters
}(%(py3)s)
} is %(py8)sr   Úzid©Úpy0Úpy2Úpy3Úpy5Úpy8z#Security breach: malformed zone_id z allowed hostile spawning!z
>assert %(py10)sÚpy10©Úis_dummy©z%(py0)s is %(py3)sÚok©r    r"   z?Security breach: validate_monster_spawn allowed hostile mob in ú!ú
>assert %(py5)sr#   z.%(py6)s
{%(py6)s = %(py2)s(%(py3)s, %(py4)s)
}Ú
isinstanceÚmsgÚstr)r!   r"   Úpy4Úpy6)ú>)z2%(py11)s
{%(py11)s = %(py8)s(%(py9)s)
} > %(py14)sÚlen)r$   Úpy9Úpy11Úpy14z%(py16)sÚpy16zassert %(py19)sÚpy19)Úcan_spawn_hostile_monstersÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚ_format_assertmsgÚreprÚAssertionErrorÚ_format_explanationÚvalidate_monster_spawnr-   r/   r3   ÚappendÚ_format_boolop)Úselfr   Úmalformed_zone_idsr   Ú@py_assert1Ú@py_assert4Ú@py_assert7Ú@py_assert6Ú@py_format9Ú@py_format11r)   r.   Ú@py_assert2Ú@py_format4Ú@py_format6Ú@py_assert5Ú@py_assert0Ú@py_assert10Ú@py_assert13Ú@py_assert12Ú@py_format7Ú@py_format15Ú@py_format17Ú@py_format18Ú@py_format20s                            r   Ú#test_fuzz_zone_ids_fail_safe_closedzDTestZoneEngineAdversarialFuzzing.test_fuzz_zone_ids_fail_safe_closed   s{  € ð ØØØØ%Ø#Ø%Ø!Ø!ØØ&ØØ'Ø,Ø�%‰KØØØð%)
Ðð* &ð 	9ñ 	9ˆCàÔ4ð Ð4Ð4°SÑ9Ô9ð ¸Uð Ð9¸UÐBð ð ñ õ ìðð ð ð Ð9¸Uð ñ ô ð õ äñô ð ð õ ìð ñ ô ð õ äð ñ ô ð ð õ äð 5ñ ô ð õ äñô ð ð õ ìð 69ñ ô ð õ äð 69ñ ô ð ð õ äð :ñ ô õ äð >Cñ ô ð ð ñ ð õ ìð \µd¸3±i´iÐ[Ð[Ð[ñô ð ñ ð ð ð ñ ð õ õ ìðñ ô ñ ô ð ð ð ð ð ð ð ð ð ð
 ×3Ò3°CÀ%Ð3ÑHÔH‰GˆB�Øð �2˜�;ð ð ð õ ìðð ð ð �2˜ð ñ ô ð õ äñô ð ð õ ìð ñ ô ð õ äð ñ ô ð ð õ äð ñ ô ð ð ñ ð õ ìð _ÕRVÐWZÑR[ÔR[Ð^Ð^Ð^ñô ð ñ ð ð ð ñ ð õ õ ìðñ ô ñ ô ð ð ð ð ð ð 9Ð8•:˜c¥3Ñ'Ô'Ð8Ð'Ð8Ð'Ð8­C°©H¬HÐ8°qÐ8¨H°qªLÐ8Ð8Ð8Ð8Ñ8Ð8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8•:Ñ8Ô8Ð8Õ8Ô8•:Ñ8Ô8Ð8Ð8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8˜cÑ8Ô8Ð8Õ8Ô8˜cÑ8Ô8Ð8Ð8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8¥3Ñ8Ô8Ð8Õ8Ô8¥3Ñ8Ô8Ð8Ð8Õ8Ô8Ð'Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8×8Ò8Ð8Ñ8Ô8Ð8Ð'Ð8Õ8Ô8Ð8Ð8Ð8Ð8¨H°qÐ8Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8­CÑ8Ô8Ð8Õ8Ô8­CÑ8Ô8Ð8Ð8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8°Ñ8Ô8Ð8Õ8Ô8°Ñ8Ô8Ð8Ð8Õ8Ô8¨HÑ8Ô8Õ8Ô8°qÑ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Ð8×8Ò8Ð8Ñ8Ô8Ð8Õ8Ô8Ð8Ð8Ñ8Ô8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ñ8ð	9ð 	9r   c           	      ón  — ddg}|D �],}|j         } ||¦  «        }d}||u }|sût          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        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}}| 	                    |d¬¦  «        \  }
}d}|
|u }|s—t          j        d|fd|
|f¦  «        dt          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}g }d}||v }|}|sd}||v }|}|sd}||v }|}|�sæt          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }| 
                    |¦  «         |�st          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }| 
                    |¦  «         |s‹t          j        d|fd||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndd œz  }d!d"|iz  }| 
                    |¦  «         t          j        |d#¦  «        i z  }d$d%|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}x}x}x}}| 	                    |d&¬¦  «        \  }}d&}||u }|s—t          j        d|fd||f¦  «        d't          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd't          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}g }d(}||v }|}|sd)}||v }|}|�sXt          j        d|fd||f¦  «        t          j        |¦  «        d*t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd*dœz  }dd|iz  }| 
                    |¦  «         |s‹t          j        d|fd||f¦  «        t          j        |¦  «        d*t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd*dœz  }dd|iz  }| 
                    |¦  «         t          j        |d#¦  «        i z  }d+d,|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}x}}�Œ.dS )-z’
        Guarantees 100% safe haven purity:
        Neither zone_player_hideout nor zone_boundless_sanctuary can ever spawn hostile mobs.
        Úzone_player_hideoutÚzone_boundless_sanctuaryFr   r   r   Úzone_idr   úassert %(py10)sr%   Nr&   r(   r)   r*   úassert %(py5)sr#   u   An ToÃ nÚ	Sanctuaryu   NghiÃªm cáº¥m©Úin©z%(py3)s in %(py5)sÚreason©r"   r#   ú%(py7)sÚpy7©z%(py10)s in %(py12)s©r%   Úpy12ú%(py14)sr6   )z%(py17)s in %(py19)s)Úpy17r8   z%(py21)sÚpy21r   zassert %(py24)sÚpy24TÚok_dummyzTarget Dummyu   KhÃ´i Lá»—iÚreason_dummyúassert %(py17)sro   )r9   r:   r;   r<   r=   r>   r?   rB   rC   rD   rE   rF   )rG   r   Ú
safe_zonesr`   rI   rJ   rK   rL   rM   rN   r)   rg   rO   rP   rQ   rS   Ú@py_assert9Ú@py_assert11Ú@py_assert16Ú@py_assert18Ú@py_format8Ú@py_format13rX   r[   Ú@py_format22Ú@py_format23Ú@py_format25rr   rs   Ú@py_format16rZ   s                                  r   Ú)test_safe_haven_purity_zero_hostile_leakszJTestZoneEngineAdversarialFuzzing.test_safe_haven_purity_zero_hostile_leaksC   sÆ  € ð
 ,Ð-GÐHˆ
à!ð 
	Xñ 
	XˆGàÔ4ÐFÐ4Ð4°WÑ=Ô=ÐFÀÐFÐ=ÀÐFÐFÐFÐFÕFÔFÐFÐFÐFÐFÐ=ÀÐFÑFÔFÐFÕFÔFÑFÔFÐFÐFÕFÔF�6ÑFÔFÐFÕFÔF�6ÑFÔFÐFÐFÕFÔFÐ4ÑFÔFÐFÕFÔFÑFÔFÐFÐFÕFÔF°WÑFÔFÐFÕFÔF°WÑFÔFÐFÐFÕFÔFÐ=ÑFÔFÕFÔFÀÑFÔFÐFÐFÑFÐFÐFÐFÐFÐFÑFÐFÕFÕFÔFÐFÑFÔFÑFÔFÐFÐFÐFÐFÐFÐFÐFÐFÐFØ×6Ò6°wÈÐ6ÑOÔO‰JˆB�ØÐ�2˜�;ÐÐÐÕÔÐÐÐÐ�2˜ÐÑÔÐÕÔÑÔÐÐÕÔ�2ÑÔÐÕÔ�2ÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØdÐd�<Ðd�< 6Ð)ÐdÐdÐdÐdÐd¨[Ðd¨[¸FÐ-BÐdÐdÐdÐdÐdÐFZÐdÐFZÐ^dÐFdÐdÐdÐdÐdÑdÕdÔdÐdÐdÐdÐd�< 6ÐdÑdÔdÕdÔd�<ÑdÔdÐdÕdÔdÑdÔdÐdÐdÕdÔd 6ÑdÔdÐdÕdÔd 6Ñ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¨[¸FÐdÑdÔdÕdÔd¨[Ñ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×dÒdÐdÑdÔdÐdÐdÐdÕdÔdÐdÐdÐdÐdÐFZÐ^dÐdÑdÔdÕdÔdÐFZÑdÔdÐdÕdÔdÑdÔdÐdÐdÕdÔdÐ^dÑdÔdÐdÕdÔdÐ^dÑdÔdÐdÐdÐdÐdÑdÐdÐdÐdÐdÐdÑdÐdÐd×dÒdÐdÑdÔdÐdÕdÔdÐdÐdÑdÔdÐdÑdÐdÐdÐdÐdÐdÑdÐdÕdÕdÔdÐdÑdÔdÑdÔdÐdÐdÐdÐdÐdÐdÐdÐdÐdÐdÐdÐdÐdÐdÐdÐdÐdð &,×%BÒ%BÀ7ÐUYÐ%BÑ%ZÔ%ZÑ"ˆH�lØ#Ð#�8˜tÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#�8˜tÐ#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#�8Ñ#Ô#Ð#Õ#Ô#�8Ñ#Ô#Ð#Ð#Õ#Ô#˜tÑ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#ØWÐW�>ÐW�> \Ð1ÐWÐWÐWÐWÐWÐ5GÐWÐ5GÈ<Ð5WÐ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ÐWÐWÐ5GÈ<ÐWÑWÔWÕWÔWÐ5GÑ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ÔWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÐWÑWð
	Xð 
	Xr   c           	      óÐ  — g d¢}|D �]Ý}|j         } ||¦  «        }d}||u }|sût          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d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}}| 	                    |d¬¦  «        \  }
}d}|
|u }|s—t          j        d|fd|
|f¦  «        dt          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d
x}}�Œßd
S )z@Verifies outer exploration zones allow hostile monster spawning.)Úzone_tang_kiem_nhaiÚzone_ancient_sword_barrowÚzone_boundless_sandstormTr   r   r   r`   r   ra   r%   NFr&   r(   r)   r*   rb   r#   )
r9   r:   r;   r<   r=   r>   r?   rB   rC   rD   )rG   r   Úouter_zonesr`   rI   rJ   rK   rL   rM   rN   r)   Ú_rO   rP   rQ   s                  r   Ú,test_wilderness_zones_allow_hostile_spawningzMTestZoneEngineAdversarialFuzzing.test_wilderness_zones_allow_hostile_spawningV   sG  € àfÐfÐfˆØ"ð 	ñ 	ˆGØÔ4ÐEÐ4Ð4°WÑ=Ô=ÐEÀÐEÐ=ÀÐEÐEÐEÐEÕEÔEÐEÐEÐEÐEÐ=ÀÐEÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔE�6ÑEÔEÐEÕEÔE�6ÑEÔEÐEÐEÕEÔEÐ4ÑEÔEÐEÕEÔEÑEÔEÐEÐEÕEÔE°WÑEÔEÐEÕEÔE°WÑ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ÔEÑEÔEÐEÐEÐEÐEÐEÐEÐEÐEÐEØ×1Ò1°'ÀEÐ1ÑJÔJ‰EˆB�ØÐ�2˜�:ÐÐÐÕÔÐÐÐÐ�2˜ÐÑÔÐÕÔÑÔÐÐÕÔ�2ÑÔÐÕÔ�2ÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÑð	ð 	r   c                 óâ  — d}g d¢}|D ]å}|                      ||¬¦  «        \  }}d}||u }|s½t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }	t          j        d	t          |¦  «        › d
�¦  «        dz   d|	iz  }
t          t          j
        |
¦  «        ¦  «        ‚dx}}ŒædS )zš
        Stress-tests validate_monster_spawn across falsy types to ensure
        falsy values are treated as hostile and rejected in safe zones.
        r^   )FNr   ç        r   r   y                r&   Fr   r(   r)   r*   zFalsy value z( incorrectly bypassed safe haven gating!r,   r#   N)rD   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   )rG   r   Ú	safe_zoneÚfalsy_inputsÚvalr)   r†   rO   rI   rP   rQ   s              r   Ú'test_validate_monster_spawn_type_matrixzHTestZoneEngineAdversarialFuzzing.test_validate_monster_spawn_type_matrix^   s4  € ð
 *ˆ	Ø8Ð8Ð8ˆàð 	cð 	cˆCØ×1Ò1°)ÀcÐ1ÑJÔJ‰EˆB�ØÐb�2˜�;ÐbÐbÐbÕbÔbÐbÐbÐbÐb�2˜ÐbÑbÔbÐbÕbÔbÑbÔbÐbÐbÕbÔb�2ÑbÔbÐbÕbÔb�2ÑbÔbÐbÐbÕbÔb˜ÑbÔbÐbÐbÑbÐbÕbÔbÐ b­t°C©y¬yÐ bÐ bÐ bÑbÔbÐbÑbÐbÐbÐbÑbÐbÕbÕbÔbÐbÑbÔbÑbÔbÐbÐbÐbÐbÐbÐbð	cð 	cr   c                 ó:  — d}|                      |d¦  «         |                     |¦  «        }|j        }d}||k    }|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd	|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}}|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  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}}ddddddddt          d¦  «        dft          d¦  «         dfdt          d¦  «        fdt          d¦  «         fg}	|	D �]Ü\  }
}|                     ||
|¦  «        \  }}d}||u }|s³t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }t          j        d|
› d|› d�¦  «        dz   d|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}}g }d}||v }|}|sd }||v }|}|�sXt          j        d!|fd"||f¦  «        t          j        |¦  «        d#t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd#d$œz  }d%d	|iz  }|                     |¦  «         |s‹t          j        d!|fd&||f¦  «        t          j        |¦  «        d#t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd#d'œz  }d(d)|iz  }|                     |¦  «         t          j        |d*¦  «        i z  }d+d,|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}x}x}x}}|j        }d}||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  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}}|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  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}}�ŒÞ|                     |d-d-¦  «        \  }}d.}||u }|s—t          j        d|fd||f¦  «        d/t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd/t          j        |¦  «        dœz  }d0d|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}}|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  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}}|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  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}}d
S )1z±
        Verifies that update_player_position strictly rejects out-of-bounds coordinates
        in zone_player_hideout (bounds: 800x800 -> half_w=400.0, half_h=400.0).
        Úadversary_player_01r^   r‰   )ú==)z)%(py2)s
{%(py2)s = %(py0)s.x
} == %(py5)sÚloc)r    r!   r#   zassert %(py7)srj   N)z)%(py2)s
{%(py2)s = %(py0)s.y
} == %(py5)s)ç     ˆÃ@ç     ˆÃÀ)r“   r’   )ç¼t“ y@r‰   )ç¼t“ yÀr‰   )r‰   r”   )r‰   r•   )g   ¢”mBr‰   )g   ¢”mÂr‰   ÚinfFr   r(   Úvalidr*   zCoordinate (z, z) bypassed map boundary check!r,   r#   u   VÆ°á»£t quÃ¡ ranh giá»›iu   ranh giá»›ird   rf   r.   rh   ri   rk   rl   rn   r6   r   rt   ro   g      y@TÚ
valid_edgerb   )Úspawn_playerÚget_player_locationÚxr:   r;   r<   r=   r>   r?   rB   rC   ÚyÚfloatÚupdate_player_positionr@   rE   rF   )rG   r   Úpidr‘   rI   rJ   Ú@py_assert3rQ   rz   Úextreme_coordinatesr›   rœ   r—   r.   rO   rP   rS   rv   rw   r{   rX   r   rZ   r˜   r†   s                            r   Ú)test_extreme_coordinates_bounds_rejectionzJTestZoneEngineAdversarialFuzzing.test_extreme_coordinates_bounds_rejectionj   s§	  € ð
 $ˆØ×Ò˜CÐ!6Ñ7Ô7Ð7ð ×(Ò(¨Ñ-Ô-ˆØŒuÐ˜Ðˆu˜Š|ÐÐÐÕÔÐÐÐÐˆu˜ÐÑÔÐÕÔÑÔÐÐÕÔˆsÑÔÐÕÔˆsÑÔÐÐÕÔˆuÑÔÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØŒuÐ˜Ðˆu˜Š|ÐÐÐÕÔÐÐÐÐˆu˜ÐÑÔÐÕÔÑÔÐÐÕÔˆsÑÔÐÕÔˆsÑÔÐÐÕÔˆuÑÔÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐð  ØØØØØØØÝ�5‰\Œ\˜3ÐÝ�E‰lŒlˆ]˜CÐ Ø•%˜‘,”,ÐØ•5˜‘<”<�-Ð ð
Ðð (ð 	 ñ 	 ‰DˆAˆqØ×6Ò6°s¸A¸qÑAÔA‰JˆE�3Ø!ÐX�5˜E�>ÐXÐXÐXÕXÔXÐXÐXÐXÐX�5˜EÐXÑXÔXÐXÕXÔXÑXÔXÐXÐXÕXÔX�5ÑXÔXÐXÕXÔX�5ÑXÔXÐXÐXÕXÔX˜EÑXÔXÐXÐXÑXÐXÕXÔXÐ#X°!Ð#XÐ#X°qÐ#XÐ#XÐ#XÑXÔXÐXÑXÐXÐXÐXÑXÐXÕXÕXÔXÐXÑXÔXÑXÔXÐXÐXÐXÐXÐXØ[Ð[Ð9Ð[Ð9¸SÐ@Ð[Ð[Ð[Ð[Ð[ÐDTÐ[ÐDTÐX[ÐD[Ð[Ð[Ð[Ð[Ñ[Õ[Ô[Ð[Ð[Ð[Ð[Ð9¸SÐ[Ñ[Ô[Õ[Ô[Ð9Ñ[Ô[Ð[Õ[Ô[Ñ[Ô[Ð[Ð[Õ[Ô[¸SÑ[Ô[Ð[Õ[Ô[¸SÑ[Ô[Ð[Ð[Ð[Ð[Ñ[Ð[Ð[Ð[Ð[Ð[Ñ[Ð[Ð[×[Ò[Ð[Ñ[Ô[Ð[Ð[Ð[Õ[Ô[Ð[Ð[Ð[Ð[ÐDTÐX[Ð[Ñ[Ô[Õ[Ô[ÐDTÑ[Ô[Ð[Õ[Ô[Ñ[Ô[Ð[Ð[Õ[Ô[ÐX[Ñ[Ô[Ð[Õ[Ô[ÐX[Ñ[Ô[Ð[Ð[Ð[Ð[Ñ[Ð[Ð[Ð[Ð[Ð[Ñ[Ð[Ð[×[Ò[Ð[Ñ[Ô[Ð[Õ[Ô[Ð[Ð[Ñ[Ô[Ð[Ñ[Ð[Ð[Ð[Ð[Ð[Ñ[Ð[Õ[Õ[Ô[Ð[Ñ[Ô[Ñ[Ô[Ð[Ð[Ð[Ð[Ð[Ð[Ð[Ð[Ð[Ð[Ð[Ð[Ð[à”5Ð˜CÐ�5˜C’<ÐÐÐÕÔÐÐÐÐ�5˜CÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÕÔ�5ÑÔÕÔ˜CÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØ”5Ð˜CÐ�5˜C’<ÐÐÐÕÔÐÐÐÐ�5˜CÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÕÔ�5ÑÔÕÔ˜CÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐÑð ×5Ò5°c¸5À%ÑHÔH‰ˆ
�AØ!Ð!ˆz˜TÐ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆz˜TÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆzÑ!Ô!Ð!Õ!Ô!ˆzÑ!Ô!Ð!Ð!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!ØŒuÐ˜Ðˆu˜Š~ÐÐÐÕÔÐÐÐÐˆu˜ÐÑÔÐÕÔÑÔÐÐÕÔˆsÑÔÐÕÔˆsÑÔÐÐÕÔˆuÑÔÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØŒuÐ˜Ðˆu˜Š~ÐÐÐÕÔÐÐÐÐˆu˜ÐÑÔÐÕÔÑÔÐÐÕÔˆsÑÔÐÕÔˆsÑÔÐÐÕÔˆuÑÔÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐÐÐr   c                 ó¶   — |                      d¦  «        }t          j        t          ¦  «        5  t          j        |_        ddd¦  «         dS # 1 swxY w Y   dS )z•
        Verifies that ZoneDefinition instances are frozen dataclasses and cannot
        be directly mutated at runtime to alter zone_type.
        r^   N)Úget_zoneÚpytestÚraisesÚ	Exceptionr   Ú
OPEN_WORLDÚ	zone_type)rG   r   Úhideouts      r   Ú2test_zone_definition_dataclass_frozen_immutabilityzSTestZoneEngineAdversarialFuzzing.test_zone_definition_dataclass_frozen_immutability”   s•   € ð
 —/’/Ð"7Ñ8Ô8ˆÝŒ]�9Ñ%Ô%ð 	4ð 	4Ý (Ô 3ˆGÔð	4ð 	4ð 	4ñ 	4ô 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4øøøð 	4ð 	4ð 	4ð 	4ð 	4ð 	4s   ¯AÁAÁAc                 óÂ   — g i t          ¦   «         g}|D ]J}t          j        t          d¬¦  «        5  |                     |¦  «         ddd¦  «         n# 1 swxY w Y   ŒKdS )zÒ
        EMPIRICAL CHALLENGER FINDING:
        Demonstrates that unhashable types (list, dict) cause TypeError in dictionary lookup
        because zone_id is not guarded with isinstance(zone_id, str).
        zunhashable type)ÚmatchN)Úsetr¥   r¦   Ú	TypeErrorr9   )rG   r   Úunhashable_inputsÚbad_ids       r   Ú+test_adversarial_unhashable_zone_id_anomalyzLTestZoneEngineAdversarialFuzzing.test_adversarial_unhashable_zone_id_anomaly�   s­   € ð   ¥S¡U¤U˜OÐØ'ð 	:ð 	:ˆFÝ”�yÐ0AÐBÑBÔBð :ð :Ø×1Ò1°&Ñ9Ô9Ð9ð:ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :øð	:ð 	:s   ±AÁA	ÁA	c                 óh  — d}|                      |d¦  «         |                     |t          d¦  «        t          d¦  «        ¦  «        \  }}d}||u }|s¬t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }t          j	        d	¦  «        d
z   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|                     |¦  «        }	t          j        }|	j        }
 ||
¦  «        }|sæddt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        ndt          j        |
¦  «        t          j        |¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}t          j        }|	j        }
 ||
¦  «        }|sæddt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        ndt          j        |
¦  «        t          j        |¦  «        dœz  }t          t          j        |¦  «        ¦  «        ‚dx}x}
}dS )zÒ
        EMPIRICAL CHALLENGER FINDING:
        Demonstrates that IEEE 754 NaN passes boundary check (abs(nan) > 400.0 is False),
        highlighting the need for math.isnan / math.isfinite validation.
        Únan_adversaryr^   ÚnanTr   r(   r)   r*   z.Empirical reproduction of NaN bypass conditionr,   r#   Nz^assert %(py7)s
{%(py7)s = %(py2)s
{%(py2)s = %(py0)s.isnan
}(%(py5)s
{%(py5)s = %(py3)s.x
})
}Úmathr‘   )r    r!   r"   r#   rj   z^assert %(py7)s
{%(py7)s = %(py2)s
{%(py2)s = %(py0)s.isnan
}(%(py5)s
{%(py5)s = %(py3)s.y
})
})r™   rž   r�   r:   r;   r<   r=   r>   r?   r@   rB   rC   rš   r¶   Úisnanr›   rœ   )rG   r   rŸ   r)   r†   rO   rI   rP   rQ   r‘   rJ   rL   rz   s                r   Ú1test_adversarial_nan_coordinate_anomaly_detectionzRTestZoneEngineAdversarialFuzzing.test_adversarial_nan_coordinate_anomaly_detection¨   s1  € ð ˆØ×Ò˜CÐ!6Ñ7Ô7Ð7Ø×-Ò-¨cµ5¸±<´<ÅÀuÁÄÑNÔN‰ˆˆAàÐKˆr�TˆzÐKÐKÐKÕKÔKÐKÐKÐKÐKˆr�TÐKÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔKˆrÑKÔKÐKÕKÔKˆrÑKÔKÐKÐKÕKÔK�TÑKÔKÐKÐKÑKÐKÕKÔKÐKÑKÔKÐKÑKÐKÐKÐKÑKÐKÕKÕKÔKÐKÑKÔKÑKÔKÐKÐKÐKÐKÐKØ×(Ò(¨Ñ-Ô-ˆÝŒzÐ ˜#œ%Ð ˆzˆz˜%Ñ Ô Ð Ð Ð Ð Ð Õ Ô Ñ Ô Ð Ð Õ Ô �tÑ Ô Ð Õ Ô �tÑ Ô Ð Ð Õ Ô ˆzÑ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˜#Ñ Ô Ð Õ Ô ˜#Ñ Ô Ð Ð Õ Ô ˜%Ñ Ô Õ Ô Ð Ñ Ô Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð ÝŒzÐ ˜#œ%Ð ˆzˆz˜%Ñ Ô Ð Ð Ð Ð Ð Õ Ô Ñ Ô Ð Ð Õ Ô �tÑ Ô Ð Õ Ô �tÑ Ô Ð Ð Õ Ô ˆzÑ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˜#Ñ Ô Ð Õ Ô ˜#Ñ Ô Ð Ð Õ Ô ˜%Ñ Ô Õ Ô Ð Ñ Ô Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð Ð Ð r   c                 óª  — |                      dd¬¦  «        \  }}d}||u }|s¬t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }t          j        d	¦  «        d
z   d|iz  }t          t          j	        |¦  «        ¦  «        ‚dx}}dS )zã
        EMPIRICAL CHALLENGER FINDING:
        Demonstrates that string 'False' evaluates truthily under `if is_dummy:`.
        If caller passes deserialized string 'False' instead of bool False, it permits the spawn.
        r^   ÚFalser&   Tr   r(   r)   r*   z=Empirical reproduction of string 'False' truthiness conditionr,   r#   N)
rD   r:   r;   r<   r=   r>   r?   r@   rB   rC   )rG   r   r)   r†   rO   rI   rP   rQ   s           r   Ú4test_adversarial_string_false_type_confusion_anomalyzUTestZoneEngineAdversarialFuzzing.test_adversarial_string_false_type_confusion_anomaly·   sú   € ð ×-Ò-Ð.CÈgÐ-ÑVÔV‰ˆˆAàÐZˆr�TˆzÐZÐZÐZÕZÔZÐZÐZÐZÐZˆr�TÐZÑZÔZÐZÕZÔZÑZÔZÐZÐZÕZÔZˆrÑZÔZÐZÕZÔZˆrÑZÔZÐZÐZÕZÔZ�TÑZÔZÐZÐZÑZÐZÕZÔZÐZÑZÔZÐZÑZÐZÐZÐZÑZÐZÕZÕZÔZÐZÑZÔZÑZÔZÐZÐZÐZÐZÐZÐZÐZr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r\   r€   r‡   r�   r¢   r«   r²   r¸   r»   r   r   r   r   r      sg  € € € € € ØIÐIð%9¸*ð %9Èð %9ð %9ð %9ð %9ðNXÀ
ð XÈtð Xð Xð Xð Xð&À:ð ÐRVð ð ð ð ð
c¸jð 
cÈTð 
cð 
cð 
cð 
cð(À
ð (Ètð (ð (ð (ð (ðT4Èð 4ÐX\ð 4ð 4ð 4ð 4ð	:À*ð 	:ÐQUð 	:ð 	:ð 	:ð 	:ð!È
ð !ÐW[ð !ð !ð !ð !ð[È:ð [ÐZ^ð [ð [ð [ð [ð [ð [r   r   )r¿   Úbuiltinsr<   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter:   r¶   Útypingr   r   r¥   Úserver.world.zone_enginer   Úserver.world.zone_typesr   r   r	   Úfixturer   r   r   r   r   ú<module>rÈ      sô   ðð	ð 	ð € € € € € € € € € € € € €€€€Ø Ð Ð Ð Ð Ð Ð Ð Ø €€€à /Ð /Ð /Ð /Ð /Ð /Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ Mð „ð�
ð ð ð ñ „ððf[ð f[ð f[ð f[ð f[ñ f[ô f[ð f[ð f[ð f[r   