§
    ãÔ¾jç  ã                  ó0  — d Z ddlmZ ddlZddlZddlZddlmZ ddlZddl	Z	ddl
Z
 ee¦  «                             ¦   «         j        j        j        Zedz  dz  dz  Zedz  d	z  d
z  dz  dz  Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        ZdS )aõ  
Empirical Adversarial Stress Test Suite for Milestone M4 (Challenger M4 1):
1. Zero-Heap Allocation & Zero GC Pressure:
   - 5,000 rapid player movements with updatePlayerVision(x, y, 8) in Node.js runtime.
   - Verified 0 GC collections via PerformanceObserver gc event tracking.
   - Verified 0 memory leaks across 5,000 discrete tile-crossing updates.
2. Bit-Packing Compression:
   - Round-trip serialization/deserialization across 10,800 tiles (120x90).
   - Raw binary buffer is exactly 1,354 bytes (<= 1,354 bytes).
   - Base64 encoded string is exactly 1,808 characters (< 2.0 KB).
   - 100% bit-exact restoration across all bit patterns (Zeroes, Ones, Checkerboard,
     Sparse 1%, Dense 99%, Byte Boundaries, Pseudo-random, Prime Strides).
3. Rapid Zone Transition:
   - State isolation across rapid zone hopping and procedural seed mutations.
   - Verification that vision decay does not demote out-of-bounds coordinates from prior zones.
   - Safe rejection of corrupted/mismatched storage payloads.
é    )ÚannotationsN)ÚPathÚtestsÚunitztest_challenger_m4_empirical.jsÚclientÚwebappÚjsÚuiz
war_fog.jsc                  ó   — e Zd ZdZd„ ZdS )ÚTestNodeEmpiricalStressHarnessz3Executes the full Node.js empirical stress harness.c                óü   — t          j        ddt          t          ¦  «        gddt          t          ¦  «        d¬¦  «        }|j        dk    sJ d|j        › d|j        › �¦   «         ‚d	|j        v sJ ‚d
|j        v sJ ‚dS )zTRuns test_challenger_m4_empirical.js with --expose-gc and asserts all 19 tests pass.Únodez--expose-gcTF)Úcapture_outputÚtextÚcwdÚcheckr   zStress harness failed:
STDOUT:
z	
STDERR:
z19/19 PASSED, 0 FAILEDzGC events: 0N)Ú
subprocessÚrunÚstrÚCHALLENGER_NODE_SCRIPTÚROOTÚ
returncodeÚstdoutÚstderr)ÚselfÚprocs     ú@C:\Projects\FreeExile\tests\unit\test_challenger_m4_empirical.pyÚtest_run_node_stress_harnessz;TestNodeEmpiricalStressHarness.test_run_node_stress_harness$   s�   € åŒ~Ø�]¥CÕ(>Ñ$?Ô$?Ð@ØØÝ•D‘	”	Øð
ñ 
ô 
ˆð Œ !Ò#Ð#Ð#Ð%nÈÌÐ%nÐ%nÐaeÔalÐ%nÐ%nÑ#Ô#Ð#Ø'¨4¬;Ð6Ð6Ð6Ð6Ø ¤Ð,Ð,Ð,Ð,Ð,Ð,ó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   © r   r   r   r   !   s)   € € € € € Ø=Ð=ð-ð -ð -ð -ð -r   r   c                  ór   — e Zd ZdZdZdZdZd„ Zej	         
                    dg d¢¦  «        dd	„¦   «         Zd
S )Ú*TestBitPackingCompressionMathematicalProofzYVerifies mathematical guarantees of bit-packing compression across 10,800 tiles (120x90).éx   éZ   i0*  c                óü   — d}t          j        | j        dz  ¦  «        }||z   }|dk    sJ d|› d�¦   «         ‚|dk    sJ ‚dt          j        |dz  ¦  «        z  }|dz  }|dk     sJ d	|d
›d�¦   «         ‚|dk    sJ ‚dS )zH10,800 tiles must pack into exactly 1,354 raw bytes and < 2.0 KB Base64.é   é   éJ  z	Raw size z exceeds 1,354 bytesé   g      �@g       @zBase64 size z.3fz KB exceeds 2.0 KB budgeté  N)ÚmathÚceilÚTOTAL_TILES)r   Úheader_bytesÚ
data_bytesÚraw_sizeÚbase64_lengthÚ	base64_kbs         r   Ú&test_raw_size_and_base64_budget_120x90zQTestBitPackingCompressionMathematicalProof.test_raw_size_and_base64_budget_120x909   s»   € àˆÝ”Y˜tÔ/°!Ñ3Ñ4Ô4ˆ
Ø *Ñ,ˆØ˜4ÒÐÐÐ!K¨XÐ!KÐ!KÐ!KÑÔÐØ˜4ÒÐÐÐð �DœI h°¡lÑ3Ô3Ñ3ˆØ! FÑ*ˆ	Ø˜3ŠˆˆÐ W¨yÐ WÐ WÐ WÐ W‰ŒˆØ Ò$Ð$Ð$Ð$Ð$Ð$r   Úpattern_kind)Ú
all_zeroesÚall_onesÚcheckerboardÚbyte_boundariesÚsparse_1pctÚdense_99pctÚpseudorandomr   c                óÚ  — t          | j        ¦  «        }|dk    r�n'|dk    rt          dg| j        z  ¦  «        }�n|dk    r,t          d„ t          | j        ¦  «        D ¦   «         ¦  «        }nÕ|dk    r!ddd	d
| j        d	z
  | j        dz
  fD ]}d||<   Œn®|dk    r,t          | j        ¦  «        D ]}|dz  dz   dz  dk    rd||<   Œn||dk    rDt          dg| j        z  ¦  «        }t          | j        ¦  «        D ]}|dz  dz   dz  dk    rd||<   Œn2|dk    r,d}t          | j        ¦  «        D ]}|dz  dz   dz  }|dz  ||<   Œt          dt          j        | j        d	z  ¦  «        z   ¦  «        }| j        dz  |d<   | j        d	z	  dz  |d<   | j        dz  |d<   | j        d	z	  dz  |d<   t          | j        ¦  «        D ]*}||         dk    r|d|dz	  z   xx         d|dz  z  z  cc<   Œ+t          |¦  «        dk    sJ ‚t          j	        |¦  «         
                    d¦  «        }t          |¦  «        dk    sJ ‚t          j        |¦  «        }t          j        d|d¦  «        \  }	}
|	| j        k    r|
| j        k    sJ ‚t          | j        ¦  «        }t          t          |¦  «        dz
  t          j        | j        d	z  ¦  «        ¦  «        }t          |¦  «        D ]L}|d|z            }|dk    rŒ|dz  }t          d	¦  «        D ]#}||z   }|| j        k     r|d|z  z  dk    rd||<   Œ$ŒMt          | j        ¦  «        D ]-}||         dk    rdnd}||         }||k    sJ d|› �¦   «         ‚Œ.dS )zNCross-validates bit-exact pack and unpack in pure Python mirroring war_fog.js.r9   r:   é   r;   c                ó(   — g | ]}|d z  dk    rdnd‘ŒS )é   r   rA   r$   )Ú.0Úis     r   ú
<listcomp>zeTestBitPackingCompressionMathematicalProof.test_python_cross_validation_bit_exact.<locals>.<listcomp>Y   s(   € ÐXÐXÐX¸1 A¨¡E¨Q¢J J˜q˜q°AÐXÐXÐXr   r<   r   é   r+   é   r=   é%   é   éd   rC   r>   r?   iÍ[imNÆAi90  iÿÿÿr*   éÿ   r-   r,   Úasciir.   z<HHzBit mismatch at index N)Ú	bytearrayr1   Úranger/   r0   ÚWÚHÚlenÚbase64Ú	b64encodeÚdecodeÚ	b64decodeÚstructÚunpack_fromÚmin)r   r8   ÚgridÚidxrE   ÚsÚpacked_bytesÚb64ÚdecodedÚwÚhÚrestored_exploredÚdata_lenÚbyte_idxÚbÚbaseÚbitÚorig_exploredÚrest_exploreds                      r   Ú&test_python_cross_validation_bit_exactzQTestBitPackingCompressionMathematicalProof.test_python_cross_validation_bit_exactG   sE  € õ ˜Ô)Ñ*Ô*ˆØ˜<Ò'Ð'ÙØ˜ZÒ'Ð'Ý˜a˜S 4Ô#3Ñ3Ñ4Ô4ˆD‰DØ˜^Ò+Ð+ÝÐXÐXÅÀdÔFVÑ@WÔ@WÐXÑXÔXÑYÔYˆDˆDØÐ.Ò.Ð.Ø˜1˜a  TÔ%5¸Ñ%9¸4Ô;KÈaÑ;OÐPð ð �Ø��S‘	�	ðà˜]Ò*Ð*Ý˜4Ô+Ñ,Ô,ð  ð  �Ø˜‘F˜R‘K 3Ñ&¨!Ò+Ð+Ø�D˜‘Gøð ð ˜]Ò*Ð*Ý˜a˜S 4Ô#3Ñ3Ñ4Ô4ˆDÝ˜4Ô+Ñ,Ô,ð  ð  �Ø˜‘F˜R‘K 3Ñ&¨!Ò+Ð+Ø�D˜‘Gøð ð ˜^Ò+Ð+ØˆAÝ˜4Ô+Ñ,Ô,ð "ð "�Ø˜‘^ eÑ+¨zÑ9�Ø˜q™5��Q‘�õ ! ¥T¤Y¨tÔ/?À!Ñ/CÑ%DÔ%DÑ!DÑEÔEˆØœ& 4™-ˆ�Q‰Øœ6 Q™;¨$Ñ.ˆ�Q‰Øœ& 4™-ˆ�Q‰Øœ6 Q™;¨$Ñ.ˆ�Q‰å�tÔ'Ñ(Ô(ð 	=ð 	=ˆAØ�AŒw˜Š{ˆ{Ø˜Q ! q¡&™\Ð*Ð*Ô*¨q°Q¸±U©|Ñ<Ð*Ð*Ñ*øå�<Ñ Ô  DÒ(Ð(Ð(Ð(ÝÔ˜|Ñ,Ô,×3Ò3°GÑ<Ô<ˆÝ�3‰xŒx˜4ÒÐÐÐõ Ô" 3Ñ'Ô'ˆÝÔ! %¨°!Ñ4Ô4‰ˆˆ1Ø�D”FŠ{ˆ{˜q D¤Fš{˜{˜{Ð*å% dÔ&6Ñ7Ô7ÐÝ•s˜7‘|”| aÑ'­¬°4Ô3CÀaÑ3GÑ)HÔ)HÑIÔIˆÝ˜h™œð 	/ð 	/ˆHØ˜˜H™Ô%ˆAØ�AŠvˆvØØ˜q‘=ˆDÝ˜Q‘x”xð /ð /�Ø˜S‘j�Ø˜Ô)Ò)Ð)¨q°A¸±H©~À!Ò.CÐ.CØ-.Ð% cÑ*øð/õ �tÔ'Ñ(Ô(ð 	Pð 	PˆAØ!% a¤¨1¢ ˜A˜A°!ˆMØ-¨aÔ0ˆMØ  MÒ1Ð1Ð1Ð3OÈAÐ3OÐ3OÑ1Ô1Ð1Ð1ð	Pð 	Pr   N)r8   r   )r    r!   r"   r#   rP   rQ   r1   r7   ÚpytestÚmarkÚparametrizerj   r$   r   r   r&   r&   2   sŠ   € € € € € ØcÐcà€AØ
€AØ€Kð%ð %ð %ð „[×Ò˜^ð .ð .ð .ñ ô ð@Pð @Pð @Pñô ð@Pð @Pð @Pr   r&   c                  ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )Ú TestZoneTransitionStateIsolationzJVerifies storage key namespacing and zero-leakage during zone transitions.c                ó\   — t                                d¬¦  «        }d|v sd|v sJ ‚d|v sJ ‚dS )z0Verifies getStorageKey formatting in war_fog.js.úutf-8©ÚencodingzSTORAGE_PREFIX = 'fe_fog_'zSTORAGE_PREFIX = "fe_fog_"z$`${STORAGE_PREFIX}${zoneId}_${seed}`N©Ú
WAR_FOG_JSÚ	read_text©r   Úwfs     r   Útest_storage_key_isolationz;TestZoneTransitionStateIsolation.test_storage_key_isolation–   sL   € å×!Ò!¨7Ð!Ñ3Ô3ˆØ+¨rÐ1Ð1Ð5QÐUWÐ5WÐ5WÐ5WÐWØ5¸Ð;Ð;Ð;Ð;Ð;Ð;r   c                óH   — t                                d¬¦  «        }d|v sJ ‚dS )z+Unpack must abort if width/height mismatch.rq   rr   z5if (w !== expectedW || h !== expectedH) return false;Nrt   rw   s     r   Útest_dimensions_guard_in_unpackz@TestZoneTransitionStateIsolation.test_dimensions_guard_in_unpackœ   s/   € å×!Ò!¨7Ð!Ñ3Ô3ˆØFÈ"ÐLÐLÐLÐLÐLÐLr   c                óH   — t                                d¬¦  «        }d|v sJ ‚dS )zPinitFog must reset lastVisX and lastVisY to prevent cross-zone decay corruption.rq   rr   z#lastVisX = -9999; lastVisY = -9999;Nrt   rw   s     r   Útest_last_vis_reset_on_initz<TestZoneTransitionStateIsolation.test_last_vis_reset_on_init¡   s/   € å×!Ò!¨7Ð!Ñ3Ô3ˆØ4¸Ð:Ð:Ð:Ð:Ð:Ð:r   N)r    r!   r"   r#   ry   r{   r}   r$   r   r   ro   ro   “   sJ   € € € € € ØTÐTð<ð <ð <ðMð Mð Mð
;ð ;ð ;ð ;ð ;r   ro   )r#   Ú
__future__r   rS   Újsonr/   Úpathlibr   rW   r   rk   Ú__file__ÚresolveÚparentr   r   ru   r   r&   ro   r$   r   r   ú<module>r„      sU  ððð ð$ #Ð "Ð "Ð "Ð "Ð "Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€à€tˆH�~„~×ÒÑÔÔ&Ô-Ô4€Ø ™¨&Ñ0Ð3TÑTÐ Ø�H‰_˜xÑ'¨$Ñ.°Ñ5¸ÑD€
ð-ð -ð -ð -ð -ñ -ô -ð -ð"^Pð ^Pð ^Pð ^Pð ^Pñ ^Pô ^Pð ^PðB;ð ;ð ;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;r   