§
    Åq½j   ã            
       óZ  — d Z ddlZddlZddlZddlm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 NativeEngineBridge and C++ SIMD Simulation Core FFI.
Verifies dynamic library resolution, lifecycle management, fallback resilience,
SoA displacement physics, spatial hash grid AOI queries, and edge cases.
é    N)ÚOptionalz../../server)ÚNativeEngineBridgeÚresolve_sim_core_dll_pathc                   óF   — e 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S )ÚTestNativeEngineBridgeÚreturnNc                 ó~   — t          ¦   «         | _        | j        j        r| j                             d¬¦  «         d S d S )Nç      P@©Ú	cell_size)r   ÚbridgeÚ	is_loadedÚinit)Úselfs    ú=C:\Projects\FreeExile\tests\unit\test_native_engine_bridge.pyÚsetUpzTestNativeEngineBridge.setUp   sE   € Ý(Ñ*Ô*ˆŒØŒ;Ô ð 	-ØŒK×Ò tÐÑ,Ô,Ð,Ð,Ð,ð	-ð 	-ó    c                 ó¶  — t          d¦  «        }|                      |d¦  «         t          j                             d¦  «        }	 dt          j        d<   t          ¦   «         }|                      |d¦  «         |€!t          j                             dd¦  «         nG|t          j        d<   n7# |€!t          j                             dd¦  «         n|t          j        d<   w xY wt          ¦   «         }|                      t          j                             |¦  «        ¦  «         |                      t          j         	                    |¦  «        d|› �¦  «         dS )zDVerifies resolution priority: explicit path > env var > search dirs.zcustom/test_core.dllÚFREEEXILE_SIM_CORE_DLLzcustom/env_core.dllNzResolved DLL does not exist: )
r   ÚassertEqualÚosÚenvironÚgetÚpopÚ
assertTrueÚpathÚisabsÚexists)r   ÚexplicitÚold_envÚenv_resolvedÚresolveds        r   Útest_dll_path_resolutionz/TestNativeEngineBridge.test_dll_path_resolution   s<  € õ -Ð-CÑDÔDˆØ×Ò˜Ð#9Ñ:Ô:Ð:õ ”*—.’.Ð!9Ñ:Ô:ˆð	?Ø3H�BŒJÐ/Ñ0Ý4Ñ6Ô6ˆLØ×Ò˜\Ð+@ÑAÔAÐAàˆÝ”
—’Ð7¸Ñ>Ô>Ð>Ð>à7>•”
Ð3Ñ4Ð4øð ˆÝ”
—’Ð7¸Ñ>Ô>Ð>Ð>à7>•”
Ð3Ñ4Ð>Ð>Ð>Ð>õ -Ñ.Ô.ˆØ�Š�œŸš hÑ/Ô/Ñ0Ô0Ð0Ø�Š�œŸš xÑ0Ô0Ð2\ÐRZÐ2\Ð2\Ñ]Ô]Ð]Ð]Ð]s   Á3B, Â,4C c                 óX  — t          d¬¦  «        }|                      |j        ¦  «         |                     d¦  «         |                     ddd¦  «        }|                      |d¦  «         |                      |                     ¦   «         d¦  «         |                      |                     d¦  «        d	¦  «         |                      |                     dd¦  «        g ¦  «         | 	                    dd
d
¦  «         | 
                    dd¦  «         |                     d¦  «         dS )zHVerifies graceful fallback behavior when native DLL path does not exist.z"non_existent_engine_core_dummy.dll)Údll_pathç      @@éç  ç      $@g      4@éÿÿÿÿr   ©ç        r+   r+   ç      ð?TgL7‰A`å ?N)r   ÚassertFalser   r   Ú
add_entityr   Úget_entity_countÚget_entity_posÚ	query_aoiÚset_velocityÚset_evasionÚ	step_tick)r   Údummy_bridgeÚidxs      r   Útest_fallback_mode_resiliencez4TestNativeEngineBridge.test_fallback_mode_resilience.   s!  € å)Ð3WÐXÑXÔXˆØ×Ò˜Ô/Ñ0Ô0Ð0ð 	×Ò˜$ÑÔÐØ×%Ò% c¨4°Ñ6Ô6ˆØ×Ò˜˜bÑ!Ô!Ð!Ø×Ò˜×6Ò6Ñ8Ô8¸!Ñ<Ô<Ð<Ø×Ò˜×4Ò4°QÑ7Ô7¸ÑIÔIÐIØ×Ò˜×/Ò/°°dÑ;Ô;¸RÑ@Ô@Ð@Ø×!Ò! ! S¨#Ñ.Ô.Ð.Ø× Ò   DÑ)Ô)Ð)Ø×Ò˜uÑ%Ô%Ð%Ð%Ð%r   c           	      óR  — | j         j        s|                      d¦  «         |                      | j                              ¦   «         d¦  «         | j                              ddddddd	¬
¦  «        }|                      |d¦  «         |                      | j                              ¦   «         d¦  «         | j                              |¦  «        }|                      |d         dd¬¦  «         |                      |d         dd¬¦  «         |                      |d         dd¬¦  «         dS )zAVerifies entity spawning, count tracking, and position retrieval.úNative DLL not loadedr   ié  g     Àb@g     @o@r(   g       @g      è?g     p—@©Ú	entity_idÚxÚyÚzÚ
move_speedÚcollision_radiusÚhpé   é   ©Úplacesé   N)r   r   ÚskipTestr   r/   r.   r0   ÚassertAlmostEqual)r   Úidx0Úposs      r   Ú"test_entity_lifecycle_and_positionz9TestNativeEngineBridge.test_entity_lifecycle_and_position>   s+  € àŒ{Ô$ð 	3Ø�MŠMÐ1Ñ2Ô2Ð2à×Ò˜œ×5Ò5Ñ7Ô7¸Ñ;Ô;Ð;àŒ{×%Ò%ØØØØØØ!Øð &ñ 
ô 
ˆð 	×Ò˜˜qÑ!Ô!Ð!Ø×Ò˜œ×5Ò5Ñ7Ô7¸Ñ;Ô;Ð;àŒk×(Ò(¨Ñ.Ô.ˆØ×Ò˜s 1œv u°QÐÑ7Ô7Ð7Ø×Ò˜s 1œv u°QÐÑ7Ô7Ð7Ø×Ò˜s 1œv t°AÐÑ6Ô6Ð6Ð6Ð6r   c           	      ó¢  — | j         j        s|                      d¦  «         | j                              ddddddd¬¦  «        }| j                              |d	d¦  «         | j                              d¦  «         | j                              |¦  «        }|                      |d
         dd¬¦  «         |                      |d         dd¬¦  «         dS )z8Verifies SIMD displacement update under velocity vector.r9   iÑ  ç      Y@r+   r(   g      à?g     @�@r:   r,   r   g     @Z@rC   rD   rB   N)r   r   rG   r.   r2   r4   r0   rH   )r   r6   rJ   s      r   Útest_displacement_step_tickz2TestNativeEngineBridge.test_displacement_step_tickV   sà   € àŒ{Ô$ð 	3Ø�MŠMÐ1Ñ2Ô2Ð2àŒk×$Ò$ØØØØØØ Øð %ñ 
ô 
ˆð 	Œ× Ò   c¨3Ñ/Ô/Ð/ð 	Œ×Ò˜cÑ"Ô"Ð"àŒk×(Ò(¨Ñ-Ô-ˆØ×Ò˜s 1œv u°QÐÑ7Ô7Ð7Ø×Ò˜s 1œv u°QÐÑ7Ô7Ð7Ð7Ð7r   c                 ó  — | j         j        s|                      d¦  «         | j                              ddd¬¦  «         | j                              ddd¬¦  «        }|                      d|¦  «         | j                              d¬¦  «         | j                              dd	d	¬¦  «         | j                              d
dd¬¦  «         | j                              ddd¬¦  «         | j                              d¦  «         | j                              d	d	d¬¦  «        }|                      d|¦  «         |                      d
|¦  «         |                      d|¦  «         | j                              ddd¬¦  «        }|                      d|¦  «         |                      d|¦  «         |                      d
|¦  «         | j                              d¬¦  «         | j                              ddd¬¦  «         | j                              d¦  «         | j                              ddd¬¦  «        }|  	                    | 
                    d¦  «        d¦  «         | j                              ddd¬¦  «        }|                      |t          ¦  «         dS )zUVerifies FlatSpatialGrid AOI 9-cell neighborhood proximity queries and deduplication.r9   r'   g      I@)r;   r<   r=   rB   ©Úradius_cellsr
   r   rM   rF   g      ^@rC   g      Œ@gü©ñÒMbP?ée   r+   iˆ  N)r   r   rG   r.   r1   ÚassertInr   r4   ÚassertNotInr   ÚcountÚassertIsInstanceÚlist)r   Ú	immediateÚaoi_nearÚaoi_farÚ
aoi_originÚclamped_aois         r   Útest_aoi_spatial_hash_queryz2TestNativeEngineBridge.test_aoi_spatial_hash_queryo   s  € àŒ{Ô$ð 	3Ø�MŠMÐ1Ñ2Ô2Ð2ð 	Œ×Ò¨°¸ÐÑ=Ô=Ð=Ø”K×)Ò)¨$°À1Ð)ÑEÔEˆ	Ø�Š�c˜9Ñ%Ô%Ð%ð 	Œ×Ò 4ÐÑ(Ô(Ð(ð 	Œ×Ò¨¨e°uÐÑ=Ô=Ð=àŒ×Ò¨¨e°uÐÑ=Ô=Ð=àŒ×Ò¨¨e°uÐÑ=Ô=Ð=ð 	Œ×Ò˜eÑ$Ô$Ð$ð ”;×(Ò(¨°ÀAÐ(ÑFÔFˆØ�Š�a˜Ñ"Ô"Ð"Ø�Š�a˜Ñ"Ô"Ð"Ø×Ò˜˜HÑ%Ô%Ð%ð ”+×'Ò'¨¨uÀ1Ð'ÑEÔEˆØ�Š�a˜Ñ!Ô!Ð!Ø×Ò˜˜GÑ$Ô$Ð$Ø×Ò˜˜GÑ$Ô$Ð$ð 	Œ×Ò 4ÐÑ(Ô(Ð(ØŒ×Ò¨°¸ÐÑ=Ô=Ð=ØŒ×Ò˜eÑ$Ô$Ð$Ø”[×*Ò*¨3°À!Ð*ÑDÔDˆ
Ø×Ò˜×)Ò)¨#Ñ.Ô.°Ñ2Ô2Ð2ð ”k×+Ò+¨C°À4Ð+ÑHÔHˆØ×Ò˜k­4Ñ0Ô0Ð0Ð0Ð0r   c                 óz  — | j         j        s|                      d¦  «         | j                              ddd¦  «         | j                              ddd¦  «         | j                              dd¦  «         | j                              dd¦  «         | j                              d¦  «        }|                      |d¦  «         | j                              ddd¬	¦  «        }|                      |g ¦  «         | j                              d
¬¦  «         |                      | j          	                    ¦   «         d¦  «         dS )zBVerifies phantom evasion toggle, out-of-bounds indices, and reset.r9   r)   g      @iŸ† Tr*   g     ˆ³ÀrB   rP   r&   r   r   N)
r   r   rG   r2   r3   r0   r   r1   r   r/   )r   Úinvalid_posÚ	empty_aois      r   Útest_evasion_and_edge_casesz2TestNativeEngineBridge.test_evasion_and_edge_casesž   s,  € àŒ{Ô$ð 	3Ø�MŠMÐ1Ñ2Ô2Ð2ð 	Œ× Ò   S¨#Ñ.Ô.Ð.ØŒ× Ò  ¨¨SÑ1Ô1Ð1ØŒ×Ò  DÑ)Ô)Ð)ØŒ×Ò  tÑ,Ô,Ð,Ø”k×0Ò0°Ñ4Ô4ˆØ×Ò˜ oÑ6Ô6Ð6ð ”K×)Ò)¨'°7ÈÐ)ÑKÔKˆ	Ø×Ò˜ BÑ'Ô'Ð'ð 	Œ×Ò 4ÐÑ(Ô(Ð(Ø×Ò˜œ×5Ò5Ñ7Ô7¸Ñ;Ô;Ð;Ð;Ð;r   )r   N)
Ú__name__Ú
__module__Ú__qualname__r   r#   r7   rK   rN   r]   ra   © r   r   r   r      s¥   € € € € € ð-ð -ð -ð -ð
^ð ^ð ^ð ^ð.&ð &ð &ð &ð 7ð 7ð 7ð 7ð08ð 8ð 8ð 8ð2-1ð -1ð -1ð -1ð^<ð <ð <ð <ð <ð <r   r   Ú__main__)Ú__doc__r   ÚsysÚunittestÚtypingr   r   ÚinsertÚabspathÚjoinÚdirnameÚ__file__Úworld.native_engine_bridger   r   ÚTestCaser   rb   Úmainre   r   r   ú<module>rs      sô   ððð ð 
€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð à „‡‚��2”7—?’? 2¤7§<¢<°´·²ÀÑ0IÔ0IÈ>Ñ#ZÔ#ZÑ[Ô[Ñ \Ô \Ð \à TÐ TÐ TÐ TÐ TÐ TÐ TÐ Tð`<ð `<ð `<ð `<ð `<˜XÔ.ñ `<ô `<ð `<ðF ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   