
    0hht0                     `   S SK r S SKrS SKrS SKrS SKJr  S SKJr  \R                  S:  r	S4S jr
S rS r " S S	\R                  5      r\R                   r " S
 S\5      rSr " S S\5      r " S S\5      r " S S\5      r " S S\\5      r " S S\\5      r " S S\5      r " S S\R                  5      r " S S\5      r " S S\R                  5      r " S S 5      r " S! S"\5      r " S# S$\\R                  5      r " S% S&\\R                  5      r  " S' S(\\R                  5      r! " S) S*\5      r" " S+ S,\"\R                  5      r# " S- S.\"\R                  5      r$ " S/ S0\"\R                  5      r% " S1 S2\R                  5      r&\'S3:X  a  \RP                  " 5         gg)5    N)assert_python_ok)Hashable        c                     U S:X  a  [        U5      $ [        U5      n[        U5       H  nSU -  S-   S-  n U S-	  S-  X#'   M     [        U5      $ )zLinear congruential generatorr   iC iÞ&       )bytes	bytearrayrange)xlengthoutis       7/opt/python-3.13.8/usr/lib/python3.13/test/test_hash.pylcgr      sZ    AvV}
F
C6]aZ'!Z/r'T!  :    c                 X    U S:  a  U S-
  nOU nX S-	  -  S-  nUS:  a  US-
  nX14$ UnX14$ )z*Convert SipHash24 output to Py_hash_t
    l    l                l    r   r    )uint64int64uint32int32s       r   	pysiphashr      sW    
 '"|#z1F'" < <r   c                     [         R                  R                  S;   nSnU(       a  U $ [        R                  " U5      " U 5      $ )z8Skip decorator for tests that depend on SipHash24 or FNV>   fnv	siphash13	siphash24z$Requires SipHash13, SipHash24 or FNV)sys	hash_info	algorithmunittestskip)testokmsgs      r   skip_unless_internalhashr(   +   s7    		 	 $E	EB
0C438==-d33r   c                   2    \ rS rSrS rS rS rS rS rSr	g)	HashEqualityTestCase2   c                     [        [        [        U5      5      nUSS   H"  nX2S   :w  d  M  U R                  SU< 35        M$     g )N   r   zhashed values differ: )listmaphashfail)selfobjlisthashedhs       r   	same_hashHashEqualityTestCase.same_hash4   s=     c$()A1I~		AB r   c                     U R                  SSSS5        U R                  SSS5        U R                  SSS	5        U R                  S
SS5        g )Nr-   g      ?y      ?        r           y                g      y              g       y               )r6   r2   s    r   test_numeric_literals*HashEqualityTestCase.test_numeric_literals<   sD    q!S(+q#x(r4+r4+r   c           
      L   U R                  [        S5      [        S5      [        S5      [        S5      [        S5      [        S5      5        U R                  [        S5      [        S5      5        U R                  [        S5      [        S5      5        U R                  [        S5      [        S5      5        U R                  [        S5      [        S5      5        U R                  [        S5      [        S5      5        U R                  [        S	5      [        S	5      5        g )
Nr-   1z1.0i   i  r   l        l         l            r6   intfloatcomplexr<   s    r   test_coerced_integers*HashEqualityTestCase.test_coerced_integersB   s    s1vs1vuQx3xu	/s6{E&M2s7|U7^4s7|U7^4s5z5<0s6{E&M2s5z5<0r   c                     U R                  [        S5      [        S5      5        U R                  [        S5      [        SS5      5        g )Ng쏈b=~g      ?r9   rA   r<   s    r   test_coerced_floats(HashEqualityTestCase.test_coerced_floatsM   s1    s8}eHo6uSz73#45r   c                     SS-  n[        S5       HQ  n[        S5       H?  nXSU-    n[        U5      USU-    nU R                  [        U5      [        U5      5        MA     MS     g )Ns#   123456789abcdefghijklmnopqrstuvwxyz   r   )r   
memoryviewassertEqualr0   )r2   br   jaligned	unaligneds         r   test_unaligned_buffers+HashEqualityTestCase.test_unaligned_buffersQ   sc     3S8rA2Yc!e*&qM!CE2	  gY@  r   r   N)
__name__
__module____qualname____firstlineno__r6   r=   rE   rH   rR   __static_attributes__r   r   r   r*   r*   2   s    C,	16Ar   r*   c                       \ rS rSrSrg)DefaultHash]   r   NrT   rU   rV   rW   rX   r   r   r   rZ   rZ   ]   s    4r   rZ   *   c                       \ rS rSrS rSrg)	FixedHash`   c                     [         $ N)_FIXED_HASH_VALUEr<   s    r   __hash__FixedHash.__hash__a   s      r   r   NrT   rU   rV   rW   rd   rX   r   r   r   r_   r_   `       !r   r_   c                       \ rS rSrS rSrg)OnlyEqualityd   c                     XL $ rb   r   r2   others     r   __eq__OnlyEquality.__eq__e   s
    }r   r   N)rT   rU   rV   rW   rn   rX   r   r   r   ri   ri   d   s    r   ri   c                       \ rS rSrS rSrg)OnlyInequalityh   c                     XL$ rb   r   rl   s     r   __ne__OnlyInequality.__ne__i   s      r   r   N)rT   rU   rV   rW   rt   rX   r   r   r   rq   rq   h   rg   r   rq   c                       \ rS rSrSrg)InheritedHashWithEqualityl   r   Nr\   r   r   r   rw   rw   l   s    $r   rw   c                       \ rS rSrSrg)InheritedHashWithInequalitym   r   Nr\   r   r   r   rz   rz   m   s    dr   rz   c                       \ rS rSrSrSrg)NoHasho   Nr   rf   r   r   r   r}   r}   o   s    Hr   r}   c                       \ rS rSr\" 5       \" 5       \" 5       /r\" 5       \	" 5       \
" 5       /r\" 5       \" 5       /rS rS rS rS rS rSrg)	HashInheritanceTestCaser   c                 r    U R                    H'  nU R                  [        U5      [        U5      5        M)     g rb   )default_expectedrM   r0   _default_hashr2   objs     r   test_default_hash)HashInheritanceTestCase.test_default_hash   s+    ((CT#Yc(:; )r   c                 h    U R                    H"  nU R                  [        U5      [        5        M$     g rb   )fixed_expectedrM   r0   rc   r   s     r   test_fixed_hash'HashInheritanceTestCase.test_fixed_hash   s'    &&CT#Y(9: 'r   c                 `    U R                    H  nU R                  [        [        U5        M      g rb   )error_expectedassertRaises	TypeErrorr0   r   s     r   test_error_hash'HashInheritanceTestCase.test_error_hash   s$    &&Cis3 'r   c                 t    U R                   U R                  -   nU H  nU R                  U[        5        M     g rb   )r   r   assertIsInstancer   )r2   objectsr   s      r   test_hashable%HashInheritanceTestCase.test_hashable   s5    ((&&'C!!#x0 r   c                 V    U R                    H  nU R                  U[        5        M     g rb   )r   assertNotIsInstancer   r   s     r   test_not_hashable)HashInheritanceTestCase.test_not_hashable   s"    &&C$$S(3 'r   r   N)rT   rU   rV   rW   objectrZ   rq   r   r_   rw   rz   r   r}   ri   r   r   r   r   r   r   rX   r   r   r   r   r   r   s`    #&(  k/113N h"nN<;414r   r   c                   0    \ rS rSr\" S5      rS rS rSrg)DefaultIterSeq   
   c                 ,    [        U R                  5      $ rb   )lenseqr<   s    r   __len__DefaultIterSeq.__len__   s    488}r   c                      U R                   U   $ rb   )r   )r2   indexs     r   __getitem__DefaultIterSeq.__getitem__   s    xxr   r   N)	rT   rU   rV   rW   r   r   r   r   rX   r   r   r   r   r      s    
)Cr   r   c                   b    \ rS rSr\" \" S5      5      \" \" 5       5      \" S S5      /rS r	Sr
g)HashBuiltinsTestCase   r   c                      g)Nr   r   r   r   r   <lambda>HashBuiltinsTestCase.<lambda>   s    Ar   r   c                     [         R                  nU R                   H$  nU R                  [	        U5      U" U5      5        M&     g rb   )r   rd   hashes_to_checkrM   r0   )r2   r   r   s      r   test_hashes HashBuiltinsTestCase.test_hashes   s4    ''CT#Yc(:; (r   r   N)rT   rU   rV   rW   	enumerater   iterr   r   r   rX   r   r   r   r   r      s/     r+N,-Iq)O
<r   r   c                   *    \ rS rSrS rSS jrS rSrg)HashRandomizationTests   c                     SU-  $ )Nzprint(hash(eval(%a)))r   r2   repr_s     r   get_hash_command'HashRandomizationTests.get_hash_command   s    &..r   Nc                    [         R                  R                  5       nSUS'   Ub  [        U5      US'   OUR	                  SS 5        [        SU R                  U5      40 UD6nUS   R                  5       n[        U5      $ )NT
__cleanenvPYTHONHASHSEEDz-cr-   )	osenvironcopystrpopr   r   striprB   )r2   r   seedenvr   stdouts         r   get_hashHashRandomizationTests.get_hash   s}    jjoo L$'IC !GG$d+$''. Q6{r   c                     U R                  U R                  SS9nU R                  U R                  SS9nU R                  X5        g )Nrandomr   )r   r   assertNotEqual)r2   run1run2s      r   test_randomized_hash+HashRandomizationTests.test_randomized_hash   s<    }}TZZh}7}}TZZh}7D'r   r   rb   )rT   rU   rV   rW   r   r   r   rX   r   r   r   r   r      s    
/(r   r   c            	           \ rS rSrSrSr/ SQ/ SQ// SQ/ SQ/ SQ/ SQ/ S	Q// S
Q/ SQ/ SQ/ SQ/ SQ// SQ/ SQ/ SQ/ SQ/ SQ/S.rS rS r\	S 5       r
\	S 5       rSrg) StringlikeHashRandomizationTests   N)\r   r   r   )iL̇l   LL//+?iTSlqU:~@[ )0&Owq!~ r   r   )u   uC- r   r   )|#|   |#8
^ r   r   )i=վlBT='8 i\el   \e+=" )i[l$E,; iwmHloa_gv )pG   nYD~ r   r   )SjxY_oWs r   r   )     /l r   r   )iJkl   J:8`~ il)wJ )iQ	l .GUJG iO{l]D] )Г   P'ABS! r   r   )ilm]]Ri ilTe] )iX0l'W=>0 iel;u )il   g,g i5$fl`bTNV)i l9\R>| iQlkT<h4 )djba33xr   r   r   c                    U[         R                  R                  :  a  SnO[         R                  R                  n[         R                  S:X  a  [
        (       a  SOSnO[
        (       a  SOSnU R                  U   U   U   $ )Nr   littler-   r         )r    r!   cutoffr"   	byteorderIS_64BITknown_hashes)r2   positionr   r"   platforms        r   get_expected_hash2StringlikeHashRandomizationTests.get_expected_hash   sg    CMM(((!I//I==H$$Hq!H %Hq!H  +H5h??r   c                     U R                  SS5      nU R                  U R                  U R                  5      U5        U R	                  U R                  U R                  SS9U5        g )Nr   r   r   )r   r   r   r   rM   )r2   known_hash_of_objs     r   test_null_hash/StringlikeHashRandomizationTests.test_null_hash
  sY     221a8 	DMM$**57HI 	tzz:<MNr   c                 |    U R                  SS5      nU R                  U R                  U R                  SS9U5        g )Nr-   r   r]   r   )r   rM   r   r   r2   r5   s     r   r   0StringlikeHashRandomizationTests.test_fixed_hash  s7     ""1a(tzz;Q?r   c                     U R                   c  g U R                  SS5      nU R                  U R                  U R                   SS9U5        g )Nr      r]   r   )	repr_longr   rM   r   r   s     r   test_long_fixed_hash5StringlikeHashRandomizationTests.test_long_fixed_hash  sB    >>!""1b)t~~B?Cr   r   )rT   rU   rV   rW   r   r   r   r   r   r(   r   r   rX   r   r   r   r   r      s    EI :N	 MNNQP
  ONPOR
"##"#
C2Lh
@O @ @ D Dr   r   c                   d    \ rS rSr\" S5      r\" S5      r\" S5      r\S 5       r	\S 5       r
Srg)	StrHashRandomizationTestsi#  abcabcdefghijku
   äú∑ℇc                 :    U R                  [        S5      S5        g )N r   rM   r0   r<   s    r   test_empty_string+StrHashRandomizationTests.test_empty_string)  s    b1%r   c                     U R                  SS5      nU R                  U R                  U R                  SS9U5        U R                  SS5      nU R                  U R                  U R                  SS9U5        g )Nr      r   r      r]   )r   rM   r   	repr_ucs2r   s     r   test_ucs2_string*StrHashRandomizationTests.test_ucs2_string-  sh    ""1a(t~~A>B""1a(t~~B?Cr   r   N)rT   rU   rV   rW   reprr   r   r  r(   r  r  rX   r   r   r   r   r   #  sG    KE]#I\"I& & D Dr   r   c                   D    \ rS rSr\" S5      r\" S5      r\S 5       rSr	g)BytesHashRandomizationTestsi4  s   abcs   abcdefghijkc                 :    U R                  [        S5      S5        g Nr   r   r  r<   s    r   r  -BytesHashRandomizationTests.test_empty_string9  s    cA&r   r   N)
rT   rU   rV   rW   r  r   r   r(   r  rX   r   r   r   r  r  4  s'    LE^$I' 'r   r  c                   ,    \ rS rSrSrSr\S 5       rSrg) MemoryviewHashRandomizationTestsi=  zmemoryview(b'abc')zmemoryview(b'abcdefghijk')c                 L    U R                  [        [        S5      5      S5        g r  )rM   r0   rL   r<   s    r   r  2MemoryviewHashRandomizationTests.test_empty_stringB  s    jo.2r   r   N)	rT   rU   rV   rW   r   r   r(   r  rX   r   r   r   r  r  =  s     E,I3 3r   r  c                       \ rS rSrS rSrg)DatetimeTestsiF  c                     SU-  $ )Nz import datetime; print(hash(%s))r   r   s     r   r   DatetimeTests.get_hash_commandG  s    1E99r   r   N)rT   rU   rV   rW   r   rX   r   r   r   r  r  F  s    :r   r  c                   H    \ rS rSr\" \R                  " SSS5      5      rSrg)DatetimeDateTestsiJ  i*  r      r   N)	rT   rU   rV   rW   r  datetimedater   rX   r   r   r   r  r  J  s    tR,-Er   r  c                   P    \ rS rSr\" \R
                  " SSSSSSS5      5      rS	rg
)DatetimeDatetimeTestsiM  r-   r   r   r
     r	     r   N)rT   rU   rV   rW   r  r  r   rX   r   r   r   r"  r"  M  s#    ""1aAq!Q78Er   r"  c                   D    \ rS rSr\" \R                  " S5      5      rSrg)DatetimeTimeTestsiP  r   r   N)	rT   rU   rV   rW   r  r  timer   rX   r   r   r   r&  r&  P  s    q!"Er   r&  c                       \ rS rSrS rSrg)HashDistributionTestCaseiT  c           	         Sn[        S[        U5      5       H  nUS U nU R                  US9   [        5       n[        5       n[        S5       HB  n[	        U[        U5      -   5      nUR                  US-  5        UR                  US-  5        MD     U R                  [        U5      SU5        U R                  [        U5      SU5        S S S 5        M     g ! , (       d  f       M  = f)	Nabcdefghabcdefgr-   )prefix      r	      rK   )r   r   subTestsetr0   chraddassertGreater)r2   baser   r,  s15s255cr5   s           r   test_hash_distribution/HashDistributionTestCase.test_hash_distributionV  s     q#d)$A"1XFV,eusAVc!f_-AGGAG$HHQX& $
 ""3s8Q7""3t9c6: -, %,,s   BC
C)	r   N)rT   rU   rV   rW   r9  rX   r   r   r   r)  r)  T  s    ;r   r)  __main__)r   ))r  r   r    r#   test.support.script_helperr   collections.abcr   maxsizer   r   r   r(   TestCaser*   r   rd   r   rZ   rc   r_   ri   rq   rw   rz   r}   r   r   r   r   r   r   r  r  r  r  r"  r&  r)  rT   mainr   r   r   <module>rA     s    	 
  7 $;;$4'A8,, 'AT  &  ! !6 !V ! ?	< > B)^ BV !4h// !4JV 	<8,, 	<( (8[D'= [D|D @ ( 1 1D"'"B"*"3"3'3'G'/'8'83:* :.x'8'8 .9M8+<+< 9#x'8'8 #;x00 ;$ zMMO r   