U
    /eV)                     @   s"  d dl Z d dlZd dlZd dlmZ d dlZd dlmZ d dlm	Z	 dd Z
dd Zd	d
 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zejd%d&d'd( Zd)d* Zejjeje	j d+d, Z!ejjeje	j d-d. Z"dS )/    N)ThreadPoolExecutor)LRU)
utils_testc                  C   s   i } t d| }d|d< d|d< |d dks.t|d dks>t| dddksPtd|d< t| dkshtt|dksxtd| kstd|kstd| kstd| kst|d= d| kstd|kstd|d	< t|dd	hkstd S )
N      xy)r   r      z   a)r   AssertionErrorlensetdlru r   7/tmp/pip-unpacked-wheel-z3s6s24u/zict/tests/test_lru.pytest_simple   s&    
r   c                  C   s   i } t d| }d|d< d|d< t|jt|ks4tt|jt|ksJtt|jt|ks`tt|jt|ksvtdt|kstdt|kstd S )Nr   r   r   r   dict)r   strtotal_weightr   reprnr   r   r   r   test_str'   s    
r   c                  C   sV   i } t d| }t| t| |  |jr4t|jr>t|jrHt|j	rRtdS )z+
    Test mapping interface for LRU().
    d   N)
r   r   check_mappingZcheck_closingclearr   r   weightsr   _cancel_evictr   r   r   r   test_mapping6   s    





r!   c                  C   s`   i } t d| }d|d< d|d< d|d< t|ddhks:t|ddi t|ddhks\td S )Nr   r   r   r   r	      )r   r   r   updater   r   r   r   test_overwriteG   s    
r$   c                     sr   dgfdd} g  i }t d| fdd| gd}d|d	< d|d
< d|d<  dgksZtd t ksntd S )Nr   c                    s    d  d7  < d S )Nr   r   r   kv)countr   r   cbY   s    ztest_callbacks.<locals>.cbr   c                    s     | |fS Nappendr%   )Lr   r   <lambda>^       z test_callbacks.<locals>.<lambda>on_evictr   r   r   r	   r
   r   r   )r   r   r   r)   r   r   r   )r-   r(   r   test_callbacksV   s    r4   c               	      s   G dd dt   fdd} g g i }td|fdd| fddgd	}d
|d< d|d< t  d|d< W 5 Q R X dgkstg kst|jdkst|jd
d
d
dkstt|dddhkst|jd
dddkstt	|j
dddgkstd S )Nc                   @   s   e Zd ZdS )z.test_cb_exception_keep_on_lru.<locals>.MyErrorN__name__
__module____qualname__r   r   r   r   MyErrori   s   r9   c                    s
     d S r*   r   r%   r9   r   r   r)   l   s    z)test_cb_exception_keep_on_lru.<locals>.cbr   c                    s     | |fS r*   r+   r%   r   r   r   r.   v   r/   z/test_cb_exception_keep_on_lru.<locals>.<lambda>c                    s     | |fS r*   r+   r%   br   r   r.   x   r/   r0   r   r   r   r	   r
   r2   r   r   r
   )	Exceptionr   pytestraisesr   r   r   r   r   listorderr3   r   r9   r   r=   r   test_cb_exception_keep_on_lruh   s0    


rE   c               	      sx  G dd dt   fdd} g g i }td|fdd| fddgd	d d
}d|d< t  d|d< W 5 Q R X ddgkstdgkst|jdkstt|dhkst|jddikstt|j	dgkstt  d|d< W 5 Q R X ddddgkstdgks t|jdks0tt|ddhksFt|jdddks\tt|j	ddgksttd S )Nc                   @   s   e Zd ZdS )z6test_cb_exception_keep_on_lru_weights.<locals>.MyErrorNr5   r   r   r   r   r9      s   r9   c                    s   |dkr  d S Nr	   r   r%   r:   r   r   r)      s    z1test_cb_exception_keep_on_lru_weights.<locals>.cbr   c                    s     | |fS r*   r+   r%   r;   r   r   r.      r/   z7test_cb_exception_keep_on_lru_weights.<locals>.<lambda>c                    s     | |fS r*   r+   r%   r<   r   r   r.      r/   c                 S   s   |S r*   r   r%   r   r   r   r.      r/   r1   weightr   r   r	   r   )r   r	   r2   r"   r
   )r
   r"      r   r
   )
r?   r   r@   rA   r   r   r   r   rB   rC   r3   r   rD   r   %test_cb_exception_keep_on_lru_weights   sH    

rK   c                  C   s   i } dd }t d| |d}d|d< |jdks0td|d< |jd	ksFtd
|d< | dd
dks`t|jdksnt|d= |jdkstd|d< d|kst| ddikstd S )Nc                 S   s   |S r*   r   r%   r   r   r   r.      r/   ztest_weight.<locals>.<lambda>
   rH   r   r   r"   r   	   r	   r
   rJ   rI   i'  r   )r   r   r   )r   rH   r   r   r   r   test_weight   s    rO   c                     s^  g  t di dd  fddd} | dd | dd	 | d
d | jdksRt| jd
hksbtt| jddd
gkszt g kst|   t| dd	ikst d
dgkst| j	dd	ikst| jdhkst| jrt|   t| dd	ikst| d	 t| dd	ikst| d | r.t| jr:t| j	rFt d
ddgksZtd S )Nr   c                 S   s   |S r*   r   r%   r   r   r   r.      r/   z&test_manual_eviction.<locals>.<lambda>c                    s
     | S r*   r+   r%   r;   r   r   r.      r/   rH   r1   r   F   r   2   r
   n      r   )
r   set_noevictr   r   heavyrB   rC   Zevict_until_below_targetr   r   r   r   r;   r   test_manual_eviction   s0    



rX   c               	   C   s   i } t d| }d|d< d|d< d|d< t| dddhks<t| dksLtt| ddhks`t|dd	ksrtt| dhkst| d
ksttjtdd |  W 5 Q R X d|d< d|d< |ddksttjtdd |d W 5 Q R X d S )NrL   r   r   r   r   r	   r
   )r   r   r   )r
   r	   r   )r   r   r   z 'evict\(\): dictionary is empty'matchr"   r'   r   w)r[   r   r   Znotexist)r   r   r   evictr@   rA   KeyErrorr   r   r   r   test_explicit_evict   s$    
r^   c                  C   s*  t di dd d} | dd | dd | d	d
 | dd t dddd
dddd d}| j|j  krddd
ddksn t| j|j  krdddddksn t| j|j  krdksn tt| jt|j  krddd	dgksn tt| jt|j  kr dgks&n td S )Nr   c                 S   s   |d S Nr   r   r%   r   r   r   r.     r/   z%test_init_not_empty.<locals>.<lambda>rM   r   rL   r      r	      r"   <   )r   r   r	   r"   c                 S   s   |d S r_   r   r%   r   r   r   r.     r/   (   x      )	r   rU   r   r   r   r   rB   rC   rV   )Zlru1Zlru2r   r   r   test_init_not_empty  s    ((.rf   c               	   C   s   t ddddd} t| jdddgks*ttjtd	d
 | dd	dg W 5 Q R X t| jdddgkslt| ddgdddkstt| jdddgkstd S )Nr   r   r   r	   r>   r   r   r
   r[   rY   )r   r   )r   rB   rC   r   r@   rA   r]   Zget_all_or_nothingrW   r   r   r   test_get_all_or_nothing%  s    rg   c                     s   g   fdd} t di dd | ddd< dd	< dd
< dd< dd< jsXt dd	d
gksjttdddkstd S )Nc                    s"     |  t dkr  d S rF   )r,   r   closer%   evictedr   r   r   r)   2  s    
z&test_close_aborts_eviction.<locals>.cbr   c                 S   s   |S r*   r   r%   r   r   r   r.   7  r/   z,test_close_aborts_eviction.<locals>.<lambda>rP   r`   r   r=   cr   Z   e)r   rm   )r   closedr   r   )r)   r   ri   r   test_close_aborts_eviction/  s    
ro   c               	      sX   dd G  fdddt j} td|  }|  W 5 Q R X dksLt sTtd S )Nr   Fc                       s$   e Zd ZfddZ fddZdS )ztest_flush_close.<locals>.Dc                    s    d7  d S )Nr   r   self)flushedr   r   flushH  s    z!test_flush_close.<locals>.D.flushc                    s   d d S )NTr   rp   )rn   r   r   rh   L  s    z!test_flush_close.<locals>.D.closeN)r6   r7   r8   rs   rh   r   rn   rr   r   r   DG  s   ru   rL   r   )r   Z
SimpleDictr   rs   r   )ru   r   r   rt   r   test_flush_closeC  s    	rv   c                     sz   g  t di  fdddd d} d| d<  r0td| _ r>t| jrHtd	| d
<  dgks^td| d<  ddgksvtd S )NrL   c                    s
     | S r*   r+   r%   rj   r   r   r.   Y  r/   ztest_update_n.<locals>.<lambda>c                 S   s   |S r*   r   r%   r   r   r   r.   Y  r/   rG   r   r   r	   r   r   r"   r
   )r   r   r   rV   r
   r   rw   r   test_update_nW  s    
ry   c                     s`   g  t di  fdddd d} d| _d| d< d	| d
<  dgksDtd| d<  ddgks\td S )Nr   c                    s
     | S r*   r+   r%   rw   r   r   r.   j  r/   z$test_update_offset.<locals>.<lambda>c                 S   s   |S r*   r   r%   r   r   r   r.   j  r/   rG   r   r   r   g      @r   g      @r
   )r   offsetr   rx   r   rw   r   test_update_offseth  s    r{   event)r   rU   delc              	      sn  t   t  g  fdd}fdd}tdi ||dd d}|d	d
 td
}||j} jddsvt| dkst| dkrd|d	< n(| dkr|d	d n| dkst|d	= 	  |
 dkstW 5 Q R X dgkst| dkr:|jd	dikst|jd	diks"tt|jd	gks^tn$|jrFt|jrRt|jr^t|jrjtdS )z]See also:

    test_buffer.py::test_cancel_evict
    test_buffer.py::test_cancel_restore
    c                    s       jddstd S )Nr   timeout)r   waitr   r%   )ev1ev2r   r   r)     s    ztest_cancel_evict.<locals>.cbc                    s     | |f d S r*   r+   r%   )logr   r   	cancel_cb  s    z$test_cancel_evict.<locals>.cancel_cbr   c                 S   s   |S r*   r   r%   r   r   r   r.     r/   z#test_cancel_evict.<locals>.<lambda>)r1   on_cancel_evictrH   r   r   r   r~   )NNr   r   r   rU   r}   r2   )r   rU   N)	threadingEventr   rU   r   Zsubmitr\   r   r   r   resultr   r   rB   rC   r    )r|   r)   r   r   exZfutr   )r   r   r   r   test_cancel_evictu  s8    


r   c                 C   s   t d d S )Ng{Gz?)timesleepr%   r   r   r   slow_cb  s    r   c                  C   s8   t di dd ttd} tj| dd d| _t|  d S )Nr   c                 S   s   t dddgS )Ng??皙?randomchoicer%   r   r   r   r.     r/   z7test_stress_different_keys_threadsafe.<locals>.<lambda>rH   r1   r   T)Zallow_keyerrorr   )r   r   r   Zcheck_different_keys_threadsafer   r   rW   r   r   r   %test_stress_different_keys_threadsafe  s    r   c                  C   s4   t di dd ttd} t|  d| _t|  d S )Nr   c                 S   s   t ddgS )Nr   r   r   r%   r   r   r   r.     r/   z1test_stress_same_key_threadsafe.<locals>.<lambda>r   r   )r   r   r   Zcheck_same_key_threadsafer   r   rW   r   r   r   test_stress_same_key_threadsafe  s    
r   )#r   r   r   concurrent.futuresr   r@   Zzictr   Z
zict.testsr   r   r   r!   r$   r4   rE   rK   rO   rX   r^   rf   rg   ro   rv   ry   r{   markZparametrizer   r   ZstressrepeatZREPEAT_STRESS_TESTSr   r   r   r   r   r   <module>   s>   ':

1