§
    ãÔ¾jç  ã                  óJ  — d Z ddlmZ ddlZddlmc 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                óN  — t          j        ddt          t          ¦  «        gddt          t          ¦  «        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  }t          j        d|j        › d|j        › �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}d}|j        }||v }|sªt          j        d|fd||f¦  «        t          j        |¦  «        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}x}}d}|j        }||v }|sªt          j        d|fd||f¦  «        t          j        |¦  «        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}x}}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   ©ú==)z2%(py2)s
{%(py2)s = %(py0)s.returncode
} == %(py5)sÚproc)Úpy0Úpy2Úpy5zStress harness failed:
STDOUT:
z	
STDERR:
z
>assert %(py7)sÚpy7Nz19/19 PASSED, 0 FAILED©Úin)z.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.stdout
})Úpy1Úpy3r   zassert %(py7)szGC events: 0)Ú
subprocessÚrunÚstrÚCHALLENGER_NODE_SCRIPTÚROOTÚ
returncodeÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚ_format_assertmsgÚstdoutÚstderrÚAssertionErrorÚ_format_explanation)	Úselfr   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8Ú@py_assert0Ú@py_assert2s	            ú@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ÐnÐnÕnÔnÐnÐnÐnÐnˆ !ÐnÑnÔnÐnÕnÔnÑnÔnÐnÐnÕnÔnˆtÑnÔnÐnÕnÔnˆtÑnÔnÐnÐnÕnÔnˆÑnÔnÕnÔn !ÑnÔnÐnÐnÑnÐnÕnÔnÐ%nÈÌÐ%nÐ%nÐaeÔalÐ%nÐ%nÑnÔnÐnÑnÐnÐnÐnÑnÐnÕnÕnÔnÐnÑnÔnÑnÔnÐnÐnÐnÐnÐnÐnÐnØ'Ð6¨4¬;Ð6Ð'¨;Ð6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6Ð'¨;Ð6Ñ6Ô6Õ6Ô6Ð'Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6¨4Ñ6Ô6Ð6Õ6Ô6¨4Ñ6Ô6Ð6Ð6Õ6Ô6¨;Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ØÐ, ¤Ð,ˆ~ Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,ˆ~ Ð,Ñ,Ô,Õ,Ô,ˆ~Ñ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô, Ñ,Ô,Ð,Õ,Ô, Ñ,Ô,Ð,Ð,Õ,Ô, Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r8   © r9   r7   r   r   !   s)   € € € € € Ø=Ð=ð-ð -ð -ð -ð -r9   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°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
z   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}d}||k    }|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t          j        |dz  ¦  «        z  }|dz  }	d}|	|k     }|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}}d}||k    }|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 )zH10,800 tiles must pack into exactly 1,354 raw bytes and < 2.0 KB Base64.é   é   éJ  )ú<=)z%(py0)s <= %(py3)sÚraw_size)r   r   z	Raw size z exceeds 1,354 bytesz
>assert %(py5)sr   Nr   )z%(py0)s == %(py3)súassert %(py5)sé   g      �@g       @)ú<)z%(py0)s < %(py3)sÚ	base64_kbzBase64 size z.3fz KB exceeds 2.0 KB budgeté  Úbase64_length)ÚmathÚceilÚTOTAL_TILESr$   r%   r&   r'   r(   r)   r*   r-   r.   )
r/   Úheader_bytesÚ
data_bytesrH   r6   r0   Ú@py_format4r3   rN   rL   s
             r7   Ú&test_raw_size_and_base64_budget_120x90zQTestBitPackingCompressionMathematicalProof.test_raw_size_and_base64_budget_120x909   s–  € àˆÝ”Y˜tÔ/°!Ñ3Ñ4Ô4ˆ
Ø *Ñ,ˆØÐKˆx˜4ÒÐKÐKÐKÕKÔKÐKÐKÐKÐKˆx˜4ÐKÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔKˆxÑKÔKÐKÕKÔKˆxÑKÔKÐKÐKÕKÔK˜4ÑKÔKÐKÐKÑKÐKÕKÔKÐ!K¨XÐ!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ØÐˆx˜4ÒÐÐÐÕÔÐÐÐÐˆx˜4ÐÑÔÐÕÔÑÔÐÐÕÔˆxÑÔÐÕÔˆxÑÔÐÐÕÔ˜4ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð �DœI h°¡lÑ3Ô3Ñ3ˆØ! FÑ*ˆ	ØÐWˆy˜3ŠÐWÐWÐWÕWÔWÐWÐWÐWÐWˆy˜3ÐWÑWÔWÐWÕWÔWÑWÔWÐWÐWÕWÔWˆyÑWÔWÐWÕWÔWˆyÑWÔWÐWÐWÕWÔW˜3ÑWÔWÐWÐWÑWÐWÕWÔWÐ W¨yÐ 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Ø $Ð$ˆ} Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆ} Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆ}Ñ$Ô$Ð$Õ$Ô$ˆ}Ñ$Ô$Ð$Ð$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$r9   Úpattern_kind)Ú
all_zeroesÚall_onesÚcheckerboardÚbyte_boundariesÚsparse_1pctÚdense_99pctÚpseudorandomr    c                óF  — 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ò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d |
iz  }t          t          j        |¦  «        ¦  «        ‚d!x}x}	}t!          j        |¦  «                             d"¦  «        }t          |¦  «        }d#}||k    }	|	sò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d |
iz  }t          t          j        |¦  «        ¦  «        ‚d!x}x}	}t!          j        |¦  «        }t)          j        d%|d¦  «        \  }}g }| j        }||k    }|}|r| j        }||k    }|}|�sÔt          j	        d|fd&||f¦  «        d't          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd'd(t          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nd(t          j        |¦  «        d)œz  }
d*d |
iz  }|                     |¦  «         |rÉt          j	        d|fd+||f¦  «        d,t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd,d(t          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nd(t          j        |¦  «        d-œz  }d.d/|iz  }|                     |¦  «         t          j        |d¦  «        i z  }d0d1|iz  }t          t          j        |¦  «        ¦  «        ‚d!x}x}x}x}x}}t          | j        ¦  «        }t1          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Út          j	        d|fd2|| f¦  «        d3t          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nd3d4t          j        ¦   «         v st          j        | ¦  «        rt          j        | ¦  «        nd4d5œz  }!t          j        d6|› �¦  «        d7z   d8|!iz  }"t          t          j        |"¦  «        ¦  «        ‚d!}Œÿd!S )9zNCross-validates bit-exact pack and unpack in pure Python mirroring war_fog.js.rW   rX   é   rY   c                ó(   — g | ]}|d z  dk    rdnd‘ŒS )é   r   r_   r>   )Ú.0Úis     r7   ú
<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ÐXr9   rZ   r   é   rE   é   r[   é%   é   éd   ra   r\   r]   iÍ[imNÆAi90  iÿÿÿrD   éÿ   rJ   rF   r   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚpacked_bytes)r   r   r   Úpy6zassert %(py8)sÚpy8NÚasciirM   Úb64z<HH)z)%(py2)s == %(py6)s
{%(py6)s = %(py4)s.W
}Úwr/   )r   Úpy4rm   z%(py8)s)z-%(py10)s == %(py14)s
{%(py14)s = %(py12)s.H
}Úh)Úpy10Úpy12Úpy14z%(py16)sÚpy16zassert %(py19)sÚpy19)z%(py0)s == %(py2)sÚorig_exploredÚrest_explored)r   r   zBit mismatch at index z
>assert %(py4)srr   )Ú	bytearrayrQ   ÚrangerO   rP   ÚWÚHrk   r$   r%   r&   r'   r(   r)   r-   r.   Úbase64Ú	b64encodeÚdecodeÚ	b64decodeÚstructÚunpack_fromÚappendÚ_format_boolopÚminr*   )#r/   rV   ÚgridÚidxrc   Úsrl   r6   Ú@py_assert5r1   Ú@py_format7Ú@py_format9rp   Údecodedrq   rs   r0   r2   r5   Ú@py_assert13Ú@py_assert11Ú@py_format15Ú@py_format17Ú@py_format18Ú@py_format20Úrestored_exploredÚdata_lenÚbyte_idxÚbÚbaseÚbitry   rz   Ú@py_format3Ú@py_format5s#                                      r7   Ú&test_python_cross_validation_bit_exactzQTestBitPackingCompressionMathematicalProof.test_python_cross_validation_bit_exactG   si	  € õ ˜Ô)Ñ*Ô*ˆØ˜<Ò'Ð'ÙØ˜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Ð(Ð  DÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð  DÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(�sÑ(Ô(Ð(Õ(Ô(�sÑ(Ô(Ð(Ð(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(�<Ñ(Ô(Ð(Õ(Ô(�<Ñ(Ô(Ð(Ð(Õ(Ô(Ð Ñ(Ô(Õ(Ô( DÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ÝÔ˜|Ñ,Ô,×3Ò3°GÑ<Ô<ˆÝ�3‰xŒxÐ˜4Ðˆx˜4ÒÐÐÐÕÔÐÐÐÐˆx˜4ÐÑÔÐÕÔÑÔÐÐÕÔ�sÑÔÐÕÔ�sÑÔÐÐÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÕÔˆxÑÔÕÔ˜4ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐõ Ô" 3Ñ'Ô'ˆÝÔ! %¨°!Ñ4Ô4‰ˆˆ1Ø*Ð*�D”FÐ*ˆq�FŠ{Ð*Ð*Ð*Ð*Ð* D¤FÐ*˜q Fš{Ð*Ð*Ð*Ð*Ñ*Õ*Ô*Ð*Ð*Ð*Ð*ˆq�FÐ*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*ˆqÑ*Ô*Ð*Õ*Ô*ˆqÑ*Ô*Ð*Ð*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*�DÑ*Ô*Ð*Õ*Ô*�DÑ*Ô*Ð*Ð*Õ*Ô*�FÑ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Ð*×*Ò*Ð*Ñ*Ô*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*˜q FÐ*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*˜qÑ*Ô*Ð*Õ*Ô*˜qÑ*Ô*Ð*Ð*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô* DÑ*Ô*Ð*Õ*Ô* 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ÐOÐOÐOÕOÔOÐOÐOÐOÐO�= MÐOÑOÔOÐOÕOÔOÑOÔOÐOÐOÕOÔO�=ÑOÔOÐOÕOÔO�=ÑOÔOÐOÐOÐOÕOÔOÑOÔOÐOÐOÕOÔO MÑOÔOÐOÕOÔO MÑOÔOÐOÐOÐOÐOÑOÐOÕOÔOÐ3OÈAÐ3OÐ3OÑOÔOÐOÑOÐOÐOÐOÑOÐOÕOÕOÔOÐOÑOÔOÑOÔOÐOÐOÐOÐOð	Pð 	Pr9   N)rV   r    )r:   r;   r<   r=   r}   r~   rQ   rU   ÚpytestÚmarkÚparametrizer�   r>   r9   r7   r@   r@   2   sŠ   € € € € € ØcÐcà€AØ
€AØ€Kð%ð %ð %ð „[×Ò˜^ð .ð .ð .ñ ô ð@Pð @Pð @Pñô ð@Pð @Pð @Pr9   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                óx  — t                                d¬¦  «        }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}||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  }t          t          j        |¦  «        ¦  «        ‚dx}}dS )z0Verifies getStorageKey formatting in war_fog.js.úutf-8©ÚencodingzSTORAGE_PREFIX = 'fe_fog_'zSTORAGE_PREFIX = "fe_fog_"r   )z%(py3)s in %(py5)sÚwf)r   r   z%(py7)sr   )z%(py10)s in %(py12)s)rt   ru   z%(py14)srv   r_   zassert %(py17)sÚpy17Nz$`${STORAGE_PREFIX}${zoneId}_${seed}`©z%(py1)s in %(py3)s©r   r   rI   r   )Ú
WAR_FOG_JSÚ	read_textr$   r%   r)   r&   r'   r(   r…   r†   r-   r.   )r/   r§   r0   r6   r1   r5   Ú@py_assert9r�   r3   r4   Ú@py_format13r‘   Ú@py_format16r“   rT   s                  r7   Útest_storage_key_isolationz;TestZoneTransitionStateIsolation.test_storage_key_isolation–   sÑ  € å×!Ò!¨7Ð!Ñ3Ô3ˆØWÐWÐ+ÐWÐ+¨rÐ1ÐWÐWÐWÐWÐWÐ5QÐWÐ5QÐUWÐ5WÐWÐWÐWÐWÑWÕWÔWÐWÐWÐWÐWÐ+¨rÐWÑWÔWÕWÔWÐ+ÑWÔWÐWÕWÔWÑWÔWÐWÐWÕWÔW¨rÑWÔWÐWÕWÔW¨rÑ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Ð5QÐUWÐWÑWÔWÕWÔWÐ5QÑWÔWÐWÕWÔWÑWÔWÐWÐWÕWÔWÐUWÑWÔWÐWÕWÔWÐUWÑ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Ø5Ð;Ð5¸Ð;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð;Ð5¸Ð;Ñ;Ô;Õ;Ô;Ð5Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;¸Ñ;Ô;Ð;Õ;Ô;¸Ñ;Ô;Ð;Ð;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;r9   c                ó‚  — t                                d¬¦  «        }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  }t          t          j	        |¦  «        ¦  «        ‚d
x}}d
S )z+Unpack must abort if width/height mismatch.r¤   r¥   z5if (w !== expectedW || h !== expectedH) return false;r   r©   r§   rª   rI   r   N©
r«   r¬   r$   r%   r)   r&   r'   r(   r-   r.   ©r/   r§   r5   r6   rT   r3   s         r7   Útest_dimensions_guard_in_unpackz@TestZoneTransitionStateIsolation.test_dimensions_guard_in_unpackœ   sã   € å×!Ò!¨7Ð!Ñ3Ô3ˆØFÐLÐFÈ"ÐLÐLÐLÐLÕLÔLÐLÐLÐLÐLÐFÈ"ÐLÑLÔLÕLÔLÐFÑLÔLÐLÕLÔLÑLÔLÐLÐLÕLÔLÈ"ÑLÔLÐLÕLÔLÈ"ÑLÔLÐLÐLÐLÐLÑLÐLÐLÐLÐLÐLÑLÐLÕLÕLÔLÐLÑLÔLÑLÔLÐLÐLÐLÐLÐLÐLÐLr9   c                ó‚  — t                                d¬¦  «        }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  }t          t          j	        |¦  «        ¦  «        ‚d
x}}d
S )zPinitFog must reset lastVisX and lastVisY to prevent cross-zone decay corruption.r¤   r¥   z#lastVisX = -9999; lastVisY = -9999;r   r©   r§   rª   rI   r   Nr²   r³   s         r7   Útest_last_vis_reset_on_initz<TestZoneTransitionStateIsolation.test_last_vis_reset_on_init¡   sã   € å×!Ò!¨7Ð!Ñ3Ô3ˆØ4Ð:Ð4¸Ð:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð4¸Ð:Ñ:Ô:Õ:Ô:Ð4Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:¸Ñ:Ô:Ð:Õ:Ô:¸Ñ:Ô:Ð:Ð:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:r9   N)r:   r;   r<   r=   r°   r´   r¶   r>   r9   r7   r¢   r¢   “   sJ   € € € € € ØTÐTð<ð <ð <ðMð Mð Mð
;ð ;ð ;ð ;ð ;r9   r¢   )r=   Ú
__future__r   Úbuiltinsr&   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter$   r   ÚjsonrO   Úpathlibr   rƒ   r   rž   Ú__file__ÚresolveÚparentr"   r!   r«   r   r@   r¢   r>   r9   r7   ú<module>rÁ      so  ððð ð$ #Ð "Ð "Ð "Ð "Ð "Ø  € € € € € € € € € € € € €€€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€à€tˆH�~„~×ÒÑÔÔ&Ô-Ô4€Ø ™¨&Ñ0Ð3TÑTÐ Ø�H‰_˜xÑ'¨$Ñ.°Ñ5¸ÑD€
ð-ð -ð -ð -ð -ñ -ô -ð -ð"^Pð ^Pð ^Pð ^Pð ^Pñ ^Pô ^Pð ^PðB;ð ;ð ;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;r9   