§
    sQ»j  ã            
       óN  — d Z ddlZddlZddlZej                             dej                             ej                             ej                             e	¦  «        d¦  «        ¦  «        ¦  «         ddl
mZmZ  G d„ dej        ¦  «        Zedk    r ej        ¦   «          dS dS )z¯
Unit tests for Server-Authoritative Movement and Anti-Speedhack in FreeExile.
Verifies valid velocity integration, speedhack rejection, rubberbanding, and suspicion scoring.
é    Nz../../server)ÚMovementAuthorityEngineÚPlayerCharacterc                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚTestMovementAuthorityc                 ó    — t          dd¬¦  «        | _        t          dddd¬¦  «        | _        | j                             | j        ¦  «         d S )Ng      @gffffffò?)Úmax_base_speedÚtolerance_multiplierée   ç        )Ú	entity_idÚxÚyÚ
move_speed)r   Úenginer   ÚplayerÚregister_player)Úselfs    ú;C:\Projects\FreeExile\tests\unit\test_movement_authority.pyÚsetUpzTestMovementAuthority.setUp   sY   € å-¸SÐW[Ð\Ñ\Ô\ˆŒÝ%ØØØØð	
ñ 
ô 
ˆŒð 	Œ×#Ò# D¤KÑ0Ô0Ð0Ð0Ð0ó    c                 ó  — d}| j                              ddd|¬¦  «        \  }}}|                      |¦  «         |                      |dd¬¦  «         |                      |dd¬¦  «         |                      | j        j        d	¦  «         d
S )z<Player moves in direction (1.0, 0.0) over 0.1s (100ms tick).çš™™™™™¹?r
   g      ð?r   )r   Údir_xÚdir_yÚdtg333333ã?é   )Úplacesr   N)r   Úprocess_move_inputÚ
assertTrueÚassertAlmostEqualÚassertEqualr   Úsuspicion_score©r   r   ÚvalidÚnew_xÚnew_ys        r   Útest_valid_movement_stepz.TestMovementAuthority.test_valid_movement_step   s¡   € àˆà"œk×<Ò<ØØØØð	 =ñ 
ô 
Ñˆˆu�eð 	�Š˜ÑÔÐØ×Ò˜u d°1ÐÑ5Ô5Ð5Ø×Ò˜u c°!ÐÑ4Ô4Ð4Ø×Ò˜œÔ4°aÑ8Ô8Ð8Ð8Ð8r   c                 ó  — d}| j                              ddd|¬¦  «        \  }}}|                      |¦  «         |                      |d¦  «         |                      |d¦  «         |                      | j        j        d¦  «         dS )zKClient attempts to move 5.0m in a 0.1s tick (50 m/s, nearly 10x max speed).r   r
   g      @r   )r   Ú	claimed_xÚ	claimed_yr   r   N)r   Úvalidate_and_reconcile_positionÚassertFalser!   ÚassertGreaterr   r"   r#   s        r   Ú!test_speedhack_injection_rejectedz7TestMovementAuthority.test_speedhack_injection_rejected*   sš   € àˆà"œk×IÒIØØØØð	 Jñ 
ô 
Ñˆˆu�eð 	×Ò˜ÑÔÐà×Ò˜ Ñ$Ô$Ð$Ø×Ò˜ Ñ$Ô$Ð$Ø×Ò˜4œ;Ô6¸Ñ:Ô:Ð:Ð:Ð:r   N)Ú__name__Ú
__module__Ú__qualname__r   r'   r.   © r   r   r   r      sA   € € € € € ð	1ð 	1ð 	1ð9ð 9ð 9ð;ð ;ð ;ð ;ð ;r   r   Ú__main__)Ú__doc__ÚunittestÚsysÚosÚpathÚinsertÚabspathÚjoinÚdirnameÚ__file__Úworld.movement_authorityr   r   ÚTestCaser   r/   Úmainr2   r   r   ú<module>rA      sÚ   ððð ð
 €€€Ø 
€
€
€
Ø 	€	€	€	à „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ>Ñ#ZÔ#ZÑ[Ô[Ñ \Ô \Ð \à MÐ MÐ MÐ MÐ MÐ MÐ MÐ Mð);ð );ð );ð );ð );˜HÔ-ñ );ô );ð );ðX ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   