
    daft0                     \   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ ej                  dkD  Z	d4dZ
d Zd Z G d d	ej                        Zej                   Z G d
 de      ZdZ G d de      Z G d de      Z G d de      Z G d dee      Z G d dee      Z G d de      Z G d dej                        Z G d de      Z G d dej                        Z G d d       Z G d! d"e      Z G d# d$eej                        Z G d% d&eej                        Z  G d' d(eej                        Z! G d) d*e      Z" G d+ d,e"ej                        Z# G d- d.e"ej                        Z$ G d/ d0e"ej                        Z% G d1 d2ej                        Z&e'd3k(  r ejP                          yy)5    N)assert_python_ok)Hashable        c                     | dk(  rt        |      S t        |      }t        |      D ]  }d| z  dz   dz  } | dz	  dz  ||<    t        |      S )zLinear congruential generatorr   iC iÞ&       )bytes	bytearrayrange)xlengthoutis       )/root/Python-3.12.4/Lib/test/test_hash.pylcgr      sa    AvV}
F
C6] "aZ'!Z/r'T!A" :    c                 z    d| cxk  rdk  sJ  J | dkD  r| dz
  }n| }| | dz	  z  dz  }|dkD  r	|dz
  }||fS |}||fS )z*Convert SipHash24 output to Py_hash_t
    r   l            l        l    r   r    )uint64int64uint32int32s       r   	pysiphashr      sv     "'"""""'"v|#z1F'" %< %<r   c                 |    t         j                  j                  dv }d}|r| S  t        j                  |      |       S )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(   +   s:    		 	 $E	EB
0C43-8==-d33r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)HashEqualityTestCasec                     t        t        t        |            }|dd  D ]  }||d   k7  s| j                  d|       ! y )N   r   zhashed values differ: )listmaphashfail)selfobjlisthashedhs       r   	same_hashzHashEqualityTestCase.same_hash4   sF     c$() 	CAF1I~		AB	Cr   c                     | j                  dddd       | j                  ddd       | j                  ddd	       | j                  d
dd       y )Nr,   g      ?y      ?        r           y                g      y              g       y               )r5   r1   s    r   test_numeric_literalsz*HashEqualityTestCase.test_numeric_literals<   sD    q!S(+q#x(r4+r4+r   c           
      L   | j                  t        d      t        d      t        d      t        d      t        d      t        d             | j                  t        d      t        d             | j                  t        d      t        d             | j                  t        d      t        d             | j                  t        d      t        d             | j                  t        d      t        d             | j                  t        d	      t        d	             y )
Nr,   1z1.0i   i  r   l        l         l            r5   intfloatcomplexr:   s    r   test_coerced_integersz*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                     | j                  t        d      t        d             | j                  t        d      t        dd             y )Ng쏈b=~g      ?r7   r>   r:   s    r   test_coerced_floatsz(HashEqualityTestCase.test_coerced_floatsM   s1    s8}eHo6uSz73#45r   c                     ddz  }t        d      D ]O  }t        d      D ]?  }||d|z    }t        |      |d|z    }| j                  t        |      t        |             A Q y )Ns#   123456789abcdefghijklmnopqrstuvwxyz   r   )r   
memoryviewassertEqualr/   )r1   br   jaligned	unaligneds         r   test_unaligned_buffersz+HashEqualityTestCase.test_unaligned_buffersQ   ss     3S8r 	AA2Y AAc!e*&qM!CE2	  gY@A	Ar   N)__name__
__module____qualname__r5   r;   rB   rD   rM   r   r   r   r*   r*   2   s    C,	16Ar   r*   c                       e Zd Zy)DefaultHashNrN   rO   rP   r   r   r   rR   rR   ]       r   rR   *   c                       e Zd Zd Zy)	FixedHashc                     t         S N)_FIXED_HASH_VALUEr:   s    r   __hash__zFixedHash.__hash__a   s      r   NrN   rO   rP   r[   r   r   r   rW   rW   `       !r   rW   c                       e Zd Zd Zy)OnlyEqualityc                 
    | |u S rY   r   r1   others     r   __eq__zOnlyEquality.__eq__e   s    u}r   N)rN   rO   rP   rc   r   r   r   r_   r_   d   s    r   r_   c                       e Zd Zd Zy)OnlyInequalityc                 
    | |uS rY   r   ra   s     r   __ne__zOnlyInequality.__ne__i   s    5  r   N)rN   rO   rP   rg   r   r   r   re   re   h   r]   r   re   c                       e Zd Zy)InheritedHashWithEqualityNrS   r   r   r   ri   ri   l   rT   r   ri   c                       e Zd Zy)InheritedHashWithInequalityNrS   r   r   r   rk   rk   m   rT   r   rk   c                       e Zd ZdZy)NoHashNr\   r   r   r   rm   rm   o   s    Hr   rm   c                       e Zd Z e        e        e       gZ e        e        e	       gZ
 e        e       gZd Zd Zd Zd Zd Zy)HashInheritanceTestCasec                 n    | j                   D ]&  }| j                  t        |      t        |             ( y rY   )default_expectedrH   r/   _default_hashr1   objs     r   test_default_hashz)HashInheritanceTestCase.test_default_hash   s0    (( 	<CT#Yc(:;	<r   c                 d    | j                   D ]!  }| j                  t        |      t               # y rY   )fixed_expectedrH   r/   rZ   rs   s     r   test_fixed_hashz'HashInheritanceTestCase.test_fixed_hash   s,    && 	;CT#Y(9:	;r   c                 \    | j                   D ]  }| j                  t        t        |        y rY   )error_expectedassertRaises	TypeErrorr/   rs   s     r   test_error_hashz'HashInheritanceTestCase.test_error_hash   s)    && 	4Cis3	4r   c                 p    | j                   | j                  z   }|D ]  }| j                  |t                y rY   )rq   rw   assertIsInstancer   )r1   objectsrt   s      r   test_hashablez%HashInheritanceTestCase.test_hashable   s:    ((&&' 	1C!!#x0	1r   c                 R    | j                   D ]  }| j                  |t                y rY   )rz   assertNotIsInstancer   rs   s     r   test_not_hashablez)HashInheritanceTestCase.test_not_hashable   s'    && 	4C$$S(3	4r   N)rN   rO   rP   objectrR   re   rq   rW   ri   rk   rw   rm   r_   rz   ru   rx   r}   r   r   r   r   r   ro   ro   r   s`    #&(  k/113N h"nN<;414r   ro   c                   (    e Zd Z ed      Zd Zd Zy)DefaultIterSeq
   c                 ,    t        | j                        S rY   )lenseqr:   s    r   __len__zDefaultIterSeq.__len__   s    488}r   c                      | j                   |   S rY   )r   )r1   indexs     r   __getitem__zDefaultIterSeq.__getitem__   s    xxr   N)rN   rO   rP   r   r   r   r   r   r   r   r   r      s    
)Cr   r   c                   Z    e Zd Z e ed             e e              ed d      gZd Zy)HashBuiltinsTestCaser   c                       y)Nr   r   r   r   r   <lambda>zHashBuiltinsTestCase.<lambda>   s    r   r   c                     t         j                  }| j                  D ]#  }| j                  t	        |       ||             % y rY   )r   r[   hashes_to_checkrH   r/   )r1   rr   rt   s      r   test_hashesz HashBuiltinsTestCase.test_hashes   s9    '' 	<CT#Yc(:;	<r   N)	rN   rO   rP   	enumerater   iterr   r   r   r   r   r   r   r      s/     r+N,-Iq)O
<r   r   c                        e Zd Zd ZddZd Zy)HashRandomizationTestsc                     d|z  S )Nzprint(hash(eval(%a)))r   r1   repr_s     r   get_hash_commandz'HashRandomizationTests.get_hash_command   s    &..r   Nc                    t         j                  j                         }d|d<   |t        |      |d<   n|j	                  dd        t        d| j                  |      fi |}|d   j                         }t        |      S )NT
__cleanenvPYTHONHASHSEEDz-cr,   )	osenvironcopystrpopr   r   stripr?   )r1   r   seedenvr   stdouts         r   get_hashzHashRandomizationTests.get_hash   s}    jjoo L$'IC !GG$d+$''. Q6{r   c                     | j                  | j                  d      }| j                  | j                  d      }| j                  ||       y )Nrandomr   )r   r   assertNotEqual)r1   run1run2s      r   test_randomized_hashz+HashRandomizationTests.test_randomized_hash   s>    }}TZZh}7}}TZZh}7D$'r   rY   )rN   rO   rP   r   r   r   r   r   r   r   r      s    
/(r   r   c            	           e Zd ZdZdZg dg dgg dg dg dg dg dgg d	g d
g dg dg dgg dg dg dg dg dgdZd Zd Zed        Z	ed        Z
y) StringlikeHashRandomizationTestsN)\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                    |t         j                  j                  k  rd}nt         j                  j                  }t         j                  dk(  rt
        rdnd}nt         j                  dk(  sJ t
        rdnd}| j                  |   |   |   S )Nr   littler,   r   big      )r    r!   cutoffr"   	byteorderIS_64BITknown_hashes)r1   positionr   r"   platforms        r   get_expected_hashz2StringlikeHashRandomizationTests.get_expected_hash   ss    CMM(((!I//I==H$$q!H==E)*)$q!H  +H5h??r   c                     | j                  dd      }| j                  | j                  | j                        |       | j	                  | j                  | j                  d      |       y )Nr   r   r   )r   r   r   r   rH   )r1   known_hash_of_objs     r   test_null_hashz/StringlikeHashRandomizationTests.test_null_hash
  sY     221a8 	DMM$**57HI 	tzz:<MNr   c                     | j                  dd      }| j                  | j                  | j                  d      |       y )Nr,   r   rU   r   )r   rH   r   r   r1   r4   s     r   rx   z0StringlikeHashRandomizationTests.test_fixed_hash  s7     ""1a(tzz;Q?r   c                     | j                   y | j                  dd      }| j                  | j                  | j                   d      |       y )Nr      rU   r   )	repr_longr   rH   r   r   s     r   test_long_fixed_hashz5StringlikeHashRandomizationTests.test_long_fixed_hash  sB    >>!""1b)t~~B?Cr   )rN   rO   rP   r   r   r   r   r   r(   rx   r   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                   \    e Zd Z ed      Z ed      Z ed      Zed        Zed        Z	y)StrHashRandomizationTestsabcabcdefghijku
   äú∑ℇc                 :    | j                  t        d      d       y )N r   rH   r/   r:   s    r   test_empty_stringz+StrHashRandomizationTests.test_empty_string)  s    b1%r   c                     | j                  dd      }| j                  | j                  | j                  d      |       | j                  dd      }| j                  | j                  | j                  d      |       y )Nr      r   r      rU   )r   rH   r   	repr_ucs2r   s     r   test_ucs2_stringz*StrHashRandomizationTests.test_ucs2_string-  sh    ""1a(t~~A>B""1a(t~~B?Cr   N)
rN   rO   rP   reprr   r   r   r(   r   r   r   r   r   r   r   #  sG    KE]#I\"I& & D Dr   r   c                   <    e Zd Z ed      Z ed      Zed        Zy)BytesHashRandomizationTestss   abcs   abcdefghijkc                 :    | j                  t        d      d       y Nr   r   r   r:   s    r   r   z-BytesHashRandomizationTests.test_empty_string9  s    cA&r   N)rN   rO   rP   r   r   r   r(   r   r   r   r   r   r   4  s'    LE^$I' 'r   r   c                   $    e Zd ZdZdZed        Zy) MemoryviewHashRandomizationTestszmemoryview(b'abc')zmemoryview(b'abcdefghijk')c                 L    | j                  t        t        d            d       y r   )rH   r/   rG   r:   s    r   r   z2MemoryviewHashRandomizationTests.test_empty_stringB  s    jo.2r   N)rN   rO   rP   r   r   r(   r   r   r   r   r   r   =  s     E,I3 3r   r   c                       e Zd Zd Zy)DatetimeTestsc                     d|z  S )Nz import datetime; print(hash(%s))r   r   s     r   r   zDatetimeTests.get_hash_commandG  s    1E99r   N)rN   rO   rP   r   r   r   r   r   r   F  s    :r   r   c                   @    e Zd Z e ej
                  ddd            Zy)DatetimeDateTestsi*  r      N)rN   rO   rP   r   datetimedater   r   r   r   r   r   J  s    tR,-Er   r   c                   H    e Zd Z e ej                  ddddddd            Zy)	DatetimeDatetimeTestsr,   r   r   r      r      N)rN   rO   rP   r   r   r   r   r   r   r   r   M  s&    """1aAq!Q78Er   r   c                   <    e Zd Z e ej
                  d            Zy)DatetimeTimeTestsr   N)rN   rO   rP   r   r   timer   r   r   r   r   r   P  s    q!"Er   r   c                       e Zd Zd Zy)HashDistributionTestCasec           	         d}t        dt        |            D ]  }|d | }| j                  |      5  t               }t               }t        d      D ]A  }t	        |t        |      z         }|j                  |dz         |j                  |dz         C | j                  t        |      d|       | j                  t        |      d|       d d d         y # 1 sw Y   xY w)	Nabcdefghabcdefgr,   )prefix      r	      rF   )r   r   subTestsetr/   chraddassertGreater)r1   baser   r  s15s255cr4   s           r   test_hash_distributionz/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"	N)rN   rO   rP   r  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   r[   rr   rR   rZ   rW   r_   re   ri   rk   rm   ro   r   r   r   r   r   r   r   r   r   r   r   r   rN   mainr   r   r   <module>r     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HMMO r   