B
    18\-                 @   s  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kZ	d8ddZ
dd	 Zd
d ZG dd dejZejZG dd deZdZG dd deZG dd deZG dd deZG dd deeZG dd deeZG dd deZG dd dejZG dd  d eZG d!d" d"ejZG d#d$ d$ZG d%d& d&eZG d'd( d(eejZG d)d* d*eejZ G d+d, d,eejZ!G d-d. d.eZ"G d/d0 d0e"ejZ#G d1d2 d2e"ejZ$G d3d4 d4e"ejZ%G d5d6 d6ejZ&e'd7kre(  dS )9    N)assert_python_ok)Hashablel           c             C   sR   | dkrt |S t|}x0t|D ]$}d|  d d@ } | d? d@ ||< q"W t |S )zLinear congruential generatorr   iC iÞ& ir      )bytes	bytearrayrange)xlengthouti r   R/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_hash.pylcg   s    r   c             C   s^   d|   krdk sn t | dkr,| d }n| }| | d? A d@ }|dkrR|d }n|}||fS )z*Convert SipHash24 output to Py_hash_t
    r   l            l        l    il        )AssertionError)Zuint64Zint64Zuint32Zint32r   r   r   	pysiphash   s    

r   c             C   s&   t jjdk}d}|r| S t|| S )z8Skip decorator for tests that depend on SipHash24 or FNV>   fnv	siphash24zRequires SipHash24 or FNV)sys	hash_info	algorithmunittestskip)testokmsgr   r   r   skip_unless_internalhash+   s    r   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )HashEqualityTestCasec             G   sD   t tt|}x0|dd  D ] }||d kr| d|f  qW d S )N   r   zhashed values differ: %r)listmaphashfail)selfZobjlistZhashedhr   r   r   	same_hash4   s    zHashEqualityTestCase.same_hashc             C   s>   |  dddd |  ddd |  ddd	 |  d
dd d S )Nr   g      ?y      ?        r   g        y                g      y              g       y               )r&   )r$   r   r   r   test_numeric_literals<   s    z*HashEqualityTestCase.test_numeric_literalsc          	   C   s   |  tdtdtdtdtdtd |  tdtd |  tdtd |  tdtd |  tdtd |  tdtd |  td	td	 d S )
Nr   1z1.0i   i  il        l         l            )r&   intfloatcomplex)r$   r   r   r   test_coerced_integersB   s    z*HashEqualityTestCase.test_coerced_integersc             C   s.   |  tdtd |  tdtdd d S )Ng쏈b=~g      ?g        )r&   r+   r,   r-   )r$   r   r   r   test_coerced_floatsM   s    z(HashEqualityTestCase.test_coerced_floatsc             C   sh   dd }xZt dD ]N}xHt dD ]<}||d|  }t||d|  }| t|t| q W qW d S )Ns#   123456789abcdefghijklmnopqrstuvwxyz   r   )r   
memoryviewassertEqualr"   )r$   br   jZalignedZ	unalignedr   r   r   test_unaligned_buffersQ   s    z+HashEqualityTestCase.test_unaligned_buffersN)__name__
__module____qualname__r&   r)   r.   r/   r5   r   r   r   r   r   2   s
   r   c               @   s   e Zd ZdS )DefaultHashN)r6   r7   r8   r   r   r   r   r9   ]   s    r9   *   c               @   s   e Zd Zdd ZdS )	FixedHashc             C   s   t S )N)_FIXED_HASH_VALUE)r$   r   r   r   __hash__a   s    zFixedHash.__hash__N)r6   r7   r8   r=   r   r   r   r   r;   `   s   r;   c               @   s   e Zd Zdd ZdS )OnlyEqualityc             C   s   | |kS )Nr   )r$   otherr   r   r   __eq__e   s    zOnlyEquality.__eq__N)r6   r7   r8   r@   r   r   r   r   r>   d   s   r>   c               @   s   e Zd Zdd ZdS )OnlyInequalityc             C   s   | |k	S )Nr   )r$   r?   r   r   r   __ne__i   s    zOnlyInequality.__ne__N)r6   r7   r8   rB   r   r   r   r   rA   h   s   rA   c               @   s   e Zd ZdS )InheritedHashWithEqualityN)r6   r7   r8   r   r   r   r   rC   l   s    rC   c               @   s   e Zd ZdS )InheritedHashWithInequalityN)r6   r7   r8   r   r   r   r   rD   m   s    rD   c               @   s   e Zd ZdZdS )NoHashN)r6   r7   r8   r=   r   r   r   r   rE   o   s   rE   c               @   s`   e Zd Ze e e gZe e e	 gZ
e e gZdd Zdd Zdd Zdd Zd	d
 ZdS )HashInheritanceTestCasec             C   s(   x"| j D ]}| t|t| qW d S )N)default_expectedr2   r"   _default_hash)r$   objr   r   r   test_default_hash   s    z)HashInheritanceTestCase.test_default_hashc             C   s$   x| j D ]}| t|t qW d S )N)fixed_expectedr2   r"   r<   )r$   rI   r   r   r   test_fixed_hash   s    z'HashInheritanceTestCase.test_fixed_hashc             C   s"   x| j D ]}| tt| qW d S )N)error_expectedassertRaises	TypeErrorr"   )r$   rI   r   r   r   test_error_hash   s    z'HashInheritanceTestCase.test_error_hashc             C   s*   | j | j }x|D ]}| |t qW d S )N)rG   rK   assertIsInstancer   )r$   ZobjectsrI   r   r   r   test_hashable   s    
z%HashInheritanceTestCase.test_hashablec             C   s    x| j D ]}| |t qW d S )N)rM   assertNotIsInstancer   )r$   rI   r   r   r   test_not_hashable   s    z)HashInheritanceTestCase.test_not_hashableN)r6   r7   r8   objectr9   rA   rG   r;   rC   rD   rK   rE   r>   rM   rJ   rL   rP   rR   rT   r   r   r   r   rF   r   s   rF   c               @   s$   e Zd ZedZdd Zdd ZdS )DefaultIterSeq
   c             C   s
   t | jS )N)lenseq)r$   r   r   r   __len__   s    zDefaultIterSeq.__len__c             C   s
   | j | S )N)rY   )r$   indexr   r   r   __getitem__   s    zDefaultIterSeq.__getitem__N)r6   r7   r8   r   rY   rZ   r\   r   r   r   r   rV      s   rV   c               @   s6   e Zd Zeedee edd dgZdd ZdS )HashBuiltinsTestCaserW   c               C   s   dS )Nr   r   r   r   r   r   <lambda>       zHashBuiltinsTestCase.<lambda>r   c             C   s.   t j}x"| jD ]}| t||| qW d S )N)rU   r=   hashes_to_checkr2   r"   )r$   rH   rI   r   r   r   test_hashes   s    z HashBuiltinsTestCase.test_hashesN)	r6   r7   r8   	enumerater   iterrV   r`   ra   r   r   r   r   r]      s   
r]   c               @   s&   e Zd Zdd ZdddZdd ZdS )	HashRandomizationTestsc             C   s   d| S )Nzprint(hash(eval(%a)))r   )r$   repr_r   r   r   get_hash_command   s    z'HashRandomizationTests.get_hash_commandNc             C   s\   t j }d|d< |d k	r(t||d< n|dd  td| |f|}|d  }t|S )NTZ
__cleanenvZPYTHONHASHSEEDz-cr   )	osenvironcopystrpopr   rf   stripr+   )r$   re   seedenvr   stdoutr   r   r   get_hash   s    
zHashRandomizationTests.get_hashc             C   s0   | j | jdd}| j | jdd}| || d S )Nrandom)rm   )rp   re   assertNotEqual)r$   Zrun1Zrun2r   r   r   test_randomized_hash   s    z+HashRandomizationTests.test_randomized_hash)N)r6   r7   r8   rf   rp   rs   r   r   r   r   rd      s   
rd   c            
   @   s   e Zd ZdZdZddddgddddggddddgd	d
d	d
gddddgddddgddddggddddgddddgddddgdd d!d"gd#d$d%d&ggd'Zd(d) Zd*d+ Zed,d- Z	ed.d/ Z
dS )0 StringlikeHashRandomizationTestsNi\iL̇l   LL//+?iTSlqU:~@[ ipGl   nYD~ iSljxY_oWs i l    /l iJkl   J:8`~ il)wJ iQ	l .GUJG iO{l]D] iГl   P'ABS! ilm]]Ri ilTe] iX0l'W=>0 iel;u il   g,g i5$fl`bTNVi l9\R>| iQlkT<h4 )djba33xr   r   c             C   s^   |t jjk rd}nt jj}t jdkr2tr,dnd}nt jdks@ttrHdnd}| j| | | S )Nru   littler   r   big      )r   r   cutoffr   	byteorderIS_64BITr   known_hashes)r$   Zpositionr
   r   platformr   r   r   get_expected_hash   s    
z2StringlikeHashRandomizationTests.get_expected_hashc             C   s<   |  dd}| | | j| | | j| jdd| d S )Nr   rx   )rm   )r   rr   rp   re   r2   )r$   Zknown_hash_of_objr   r   r   test_null_hash   s    z/StringlikeHashRandomizationTests.test_null_hashc             C   s(   |  dd}| | j| jdd| d S )Nr   rx   r:   )rm   )r   r2   rp   re   )r$   r%   r   r   r   rL     s    z0StringlikeHashRandomizationTests.test_fixed_hashc             C   s6   | j d krd S | dd}| | j| j dd| d S )Nry      r:   )rm   )	repr_longr   r2   rp   )r$   r%   r   r   r   test_long_fixed_hash  s    
z5StringlikeHashRandomizationTests.test_long_fixed_hash)r6   r7   r8   re   r   r}   r   r   r   rL   r   r   r   r   r   rt      s.   





rt   c               @   s<   e Zd ZedZedZedZedd Zedd Z	dS )	StrHashRandomizationTestsabcZabcdefghijku
   äú∑ℇc             C   s   |  tdd d S )N r   )r2   r"   )r$   r   r   r   test_empty_string  s    z+StrHashRandomizationTests.test_empty_stringc             C   sL   |  dd}| | j| jdd| |  dd}| | j| jdd| d S )Nrx      r   )rm      r:   )r   r2   rp   	repr_ucs2)r$   r%   r   r   r   test_ucs2_string   s    z*StrHashRandomizationTests.test_ucs2_stringN)
r6   r7   r8   reprre   r   r   r   r   r   r   r   r   r   r     s
   r   c               @   s(   e Zd ZedZedZedd ZdS )BytesHashRandomizationTestss   abcs   abcdefghijkc             C   s   |  tdd d S )Nr_   r   )r2   r"   )r$   r   r   r   r   ,  s    z-BytesHashRandomizationTests.test_empty_stringN)r6   r7   r8   r   re   r   r   r   r   r   r   r   r   '  s   r   c               @   s    e Zd ZdZdZedd ZdS ) MemoryviewHashRandomizationTestszmemoryview(b'abc')zmemoryview(b'abcdefghijk')c             C   s   |  ttdd d S )Nr_   r   )r2   r"   r1   )r$   r   r   r   r   5  s    z2MemoryviewHashRandomizationTests.test_empty_stringN)r6   r7   r8   re   r   r   r   r   r   r   r   r   0  s   r   c               @   s   e Zd Zdd ZdS )DatetimeTestsc             C   s   d| S )Nz import datetime; print(hash(%s))r   )r$   re   r   r   r   rf   :  s    zDatetimeTests.get_hash_commandN)r6   r7   r8   rf   r   r   r   r   r   9  s   r   c               @   s   e Zd ZeedddZdS )DatetimeDateTestsi*  rW      N)r6   r7   r8   r   datetimedatere   r   r   r   r   r   =  s   r   c            
   @   s&   e Zd ZeedddddddZdS )	DatetimeDatetimeTestsr   ry   rx   r      r      N)r6   r7   r8   r   r   re   r   r   r   r   r   @  s   r   c               @   s   e Zd ZeedZdS )DatetimeTimeTestsr   N)r6   r7   r8   r   r   timere   r   r   r   r   r   C  s   r   c               @   s   e Zd Zdd ZdS )HashDistributionTestCasec          
   C   s   d}xt dt|D ]}|d | }| j|dt t }t }x<t dD ]0}t|t| }||d@  ||d@  qHW | t|d| | t|d| W d Q R X qW d S )	NZabcdefghabcdefgr   )prefix      r      r0   )r   rX   subTestsetr"   chraddassertGreater)r$   baser   r   Zs15Zs255cr%   r   r   r   test_hash_distributionI  s    z/HashDistributionTestCase.test_hash_distributionN)r6   r7   r8   r   r   r   r   r   r   G  s   r   __main__)r   ))r   rg   r   r   Ztest.support.script_helperr   collections.abcr   maxsizer|   r   r   r   TestCaser   rU   r=   rH   r9   r<   r;   r>   rA   rC   rD   rE   rF   rV   r]   rd   rt   r   r   r   r   r   r   r   r   r6   mainr   r   r   r   <module>   sJ   


*%Q
