§
    Ûi½j$  ã                  ó¼   — d Z ddlmZ ddlZddlZddlmZmZmZ ddl	m
Z
mZmZ ddlmZmZmZ ddlmZ d„ Zd	„ Zd
„ Zd„ Zd„ Zej        j        d„ ¦   «         Zd„ ZdS )a	  
Unit Tests for the 4 Autonomous Agent Power Tools in FreeExile:
1. ARPG Crafting & Economy Monte Carlo Simulator
2. Meridian Graph Topology & Passive Tree Inspector
3. Asset Pipeline & Apple Metal Shader QA Linter
4. Headless Protobuf & 2PC Security Stress Fuzzer
é    )ÚannotationsN)ÚArpgCraftingSimulatorÚCraftingTargetÚCraftingMethod)ÚMeridianGraphInspectorÚMeridianNodeÚNodeType)Úis_power_of_twoÚAssetQaReportÚaudit_metal_shader_code)ÚHeadlessPacketFuzzerc                 ó  — t          d¬¦  «        } t          ddd¬¦  «        }|                      t          j        |d¬¦  «        }|j        dk    sJ ‚|j        dk    sJ ‚|j        dk    sJ ‚d	|j        v sJ ‚d
|j        v sJ ‚dS )zQVerifies that the Monte Carlo Crafting engine computes valid probabilistic stats.éU   )Úilvl_filteré   é   )Útarget_tierÚmin_matching_modsÚ
item_levelé   ©Ú
iterationsr   ÚHUYET_HON_THACHÚGOLD_FEEN)	r   r   Úrun_monte_carlor   Ú
CHAOS_SPAMÚtotal_trialsÚsuccessful_craftsÚavg_attempts_per_successÚtotal_currency_spent©ÚsimÚtargetÚress      ú:C:\Projects\FreeExile\tests\unit\test_agent_power_tools.pyÚtest_arpg_crafting_monte_carlor&      s­   € å
¨BÐ
/Ñ
/Ô
/€Cå¨¸QÈ2ÐNÑNÔN€FØ
×
Ò
�nÔ7¸ÈBÐ
Ñ
OÔ
O€CàÔ˜rÒ!Ð!Ð!Ð!ØÔ  BÒ&Ð&Ð&Ð&ØÔ'¨!Ò+Ð+Ð+Ð+Ø Ô 8Ð8Ð8Ð8Ð8Ø˜Ô1Ð1Ð1Ð1Ð1Ð1Ð1ó    c                 óâ   — t          ¦   «         } t          ¦   «         }|                      t          j        |d¬¦  «        }|j        dk    sJ ‚d|j        cxk    rdk    sn J ‚|j        dk    sJ ‚dS )zGVerifies that Corruption Gamble honors the ~25% brick destruction rate.éÈ   r   r   éP   r   N)r   r   r   r   ÚCORRUPTION_GAMBLEr   Úbricked_itemsr   r!   s      r%   Útest_corruption_gamble_ratesr-       sŒ   € å
Ñ
!Ô
!€CÝÑÔ€FØ
×
Ò
�nÔ>ÀÐSVÐ
Ñ
WÔ
W€CàÔ˜sÒ"Ð"Ð"Ð"à�Ô"Ð(Ð(Ò(Ð( bÒ(Ð(Ð(Ð(Ð(Ð(ØÔ  1Ò$Ð$Ð$Ð$Ð$Ð$r'   c                 ó`  — t          ¦   «         } |                      ¦   «          |                      dd¦  «        \  }}|dk    sJ ‚|ddgk    sJ ‚|                      dd¦  «        \  }}|dk    sJ ‚t          |¦  «        dk    sJ ‚|                      d¦  «        }t          |¦  «        dk    sJ ‚dS )zGVerifies shortest path and island node detection on the Meridian Graph.Únode_origin_dantianÚnode_passive_301r   Únode_passive_304r   r   N)r   Úload_canonical_meridian_treeÚdijkstra_shortest_pathÚlenÚfind_isolated_nodes)Ú	inspectorÚcostÚpathÚcost_304Úpath_304Úisolateds         r%   Ú-test_meridian_graph_dijkstra_and_connectivityr<   ,   sÖ   € å&Ñ(Ô(€IØ×*Ò*Ñ,Ô,Ð,ð ×1Ò1Ð2GÐI[Ñ\Ô\�J€Dˆ$Ø�1Š9ˆ9ˆ9ˆ9ØÐ)Ð+=Ð>Ò>Ð>Ð>Ð>ð #×9Ò9Ð:LÐN`ÑaÔaÑ€HˆhØ�aŠ<ˆ<ˆ<ˆ<Ýˆx‰=Œ=˜AÒÐÐÐð ×,Ò,Ð-BÑCÔC€HÝˆx‰=Œ=˜AÒÐÐÐÐÐr'   c                 óÄ   — t          d¦  «        du sJ ‚t          d¦  «        du sJ ‚t          d¦  «        du sJ ‚t          d¦  «        du sJ ‚t          d¦  «        du sJ ‚dS )	z/Verifies texture power-of-two validation logic.é   Ti   i   i,  Fi   N)r
   © r'   r%   Ú test_asset_pipeline_power_of_twor@   @   s…   € å˜3ÑÔ 4Ð'Ð'Ð'Ð'Ý˜3ÑÔ 4Ð'Ð'Ð'Ð'Ý˜4Ñ Ô  DÐ(Ð(Ð(Ð(Ý˜3ÑÔ 5Ð(Ð(Ð(Ð(Ý˜4Ñ Ô  EÐ)Ð)Ð)Ð)Ð)Ð)r'   c                óê   — | dz  }|                      dd¬¦  «         t          ¦   «         }t          t          |¦  «        |¦  «         t	          |j        ¦  «        dk    sJ ‚d|j        d         v sJ ‚dS )	z=Verifies detection of unpadded float3 in Metal shader struct.zBadShader.metalzg
        struct BadUniforms {
            float3 lightDir;
            float intensity;
        };
    zutf-8)Úencodingr   ÚBadUniformsr   N)Ú
write_textr   r   Ústrr4   Úmetal_alignment_warnings)Útmp_pathÚ
bad_shaderÚreports      r%   Ú!test_metal_shader_alignment_auditrJ   I   s�   € àÐ-Ñ-€JØ×Òð ð
 ð ñ ô ð õ ‰_Œ_€FÝ�C 
™OœO¨VÑ4Ô4Ð4ÝˆvÔ.Ñ/Ô/°1Ò4Ð4Ð4Ð4Ø˜FÔ;¸AÔ>Ð>Ð>Ð>Ð>Ð>Ð>r'   c               ƒ  óš   K  — t          d¬¦  «        } |                      d¬¦  «        ƒ d{V —†\  }}}|dk    sJ ‚|dk    sJ ‚|dk    sJ ‚dS )zOVerifies that concurrent double-spend race condition attacks are 100% repelled.é   )Úconcurrencyr   )ÚrunsNé-   é*   )r   Úfuzz_2pc_double_spend_race)ÚfuzzerÚ	total_attÚ
total_succÚ
total_prevs       r%   Ú'test_headless_2pc_double_spend_repelledrV   Y   sy   è è € õ "¨bÐ1Ñ1Ô1€FØ.4×.OÒ.OÐUVÐ.OÑ.WÔ.WÐ(WÐ(WÐ(WÐ(WÐ(WÐ(WÑ%€Iˆz˜:à˜Š?ˆ?ˆ?ˆ?Ø˜Š?ˆ?ˆ?ˆ?Ø˜ÒÐÐÐÐÐr'   c                 ót   — t          ¦   «         } |                      d¬¦  «        \  }}|dk    sJ ‚|dk    sJ ‚dS )z0Verifies that speedhacks are clamped and logged.é2   )ÚattemptsN)r   Úfuzz_movement_speedhacks)rR   rY   Úblockeds      r%   Ú#test_headless_speedhack_interceptedr\   d   sF   € å!Ñ#Ô#€FØ×7Ò7ÀÐ7ÑDÔDÑ€HˆgØ�rŠ>ˆ>ˆ>ˆ>Ø�bŠ=ˆ=ˆ=ˆ=ˆ=ˆ=r'   )Ú__doc__Ú
__future__r   ÚpytestÚasyncioÚ"tools.math.arpg_crafting_simulatorr   r   r   Ú$tools.world.meridian_graph_inspectorr   r   r	   Ú tools.lint.verify_asset_pipeliner
   r   r   Ú%tools.security.headless_packet_fuzzerr   r&   r-   r<   r@   rJ   ÚmarkrV   r\   r?   r'   r%   ú<module>rf      s&  ððð ð #Ð "Ð "Ð "Ð "Ð "Ø €€€Ø €€€Ø dÐ dÐ dÐ dÐ dÐ dÐ dÐ dÐ dÐ dØ _Ð _Ð _Ð _Ð _Ð _Ð _Ð _Ð _Ð _Ø dÐ dÐ dÐ dÐ dÐ dÐ dÐ dÐ dÐ dØ FÐ FÐ FÐ FÐ FÐ Fð2ð 2ð 2ð	%ð 	%ð 	%ðð ð ð(*ð *ð *ð?ð ?ð ?ð  „Ôðð ñ Ôððð ð ð ð r'   