B
    `4o                 @   s   d dl Z d dlZd dlZyeZW n ek
r4   Y nX G dd dej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eZG dd dejZdd ZdS )    Nc               @   s\   e Z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S )UnboundedCacheTestsc             C   s   ddl m} |S )Nr   )UnboundedCache)
repoze.lrur   )selfr    r   X/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/repoze/lru/tests.py_getTargetClass   s    z#UnboundedCacheTests._getTargetClassc             C   s
   |    S )N)r   )r   r   r   r   _makeOne   s    zUnboundedCacheTests._makeOnec             C   s   |   }| |ji  d S )N)r	   assertEqual_data)r   cacher   r   r   	test_ctor   s    zUnboundedCacheTests.test_ctorc             C   s   |   }| |d d S )Nnonesuch)r	   assertIsNoneget)r   r   r   r   r   test_get_miss_no_default   s    z,UnboundedCacheTests.test_get_miss_no_defaultc             C   s&   |   }t }| |d|| d S )Nr   )r	   objectassertIsr   )r   r   defaultr   r   r   test_get_miss_explicit_default   s    z2UnboundedCacheTests.test_get_miss_explicit_defaultc             C   s.   |   }t  }|jd< | |d| d S )Nextant)r	   r   r   r   r   )r   r   r   r   r   r   test_get_hit!   s    z UnboundedCacheTests.test_get_hitc             C   s4   |   }t  }|jd< |  | |d d S )Nr   )r	   r   r   clearr   r   )r   r   r   r   r   r   
test_clear&   s    zUnboundedCacheTests.test_clearc             C   s   |   }|d d S )Nr   )r	   
invalidate)r   r   r   r   r   test_invalidate_miss,   s    z(UnboundedCacheTests.test_invalidate_missc             C   s6   |   }t  }|jd< |d | |d d S )Nr   )r	   r   r   r   r   r   )r   r   r   r   r   r   test_invalidate_hit0   s    
z'UnboundedCacheTests.test_invalidate_hitc             C   s0   |   }t }|d| | |jd | d S )Nr   )r	   r   putr   r   )r   r   r   r   r   r   test_put6   s    zUnboundedCacheTests.test_putN)__name__
__module____qualname__r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r      s   r   c               @   st   e Z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S )LRUCacheTestsc             C   s   ddl m} |S )Nr   )LRUCache)r   r#   )r   r#   r   r   r   r   ?   s    zLRUCacheTests._getTargetClassc             C   s   |   |S )N)r   )r   sizer   r   r   r	   C   s    zLRUCacheTests._makeOnec             C   s8  |  |jt|jk  |  |jdk | |j|jd  | t|j|j | t|jt|j |  t|jt|jk x|j	 D ]z\}}|\}}|  t
|t
dkpt
|t
dd k |  |dk |  ||jk |j| }|  ||k |j| }qW x(|jD ]}|  |dkp*|dk qW d S )Nr      *         TF)
assertTruehandlen
clock_keysr
   maxposr$   
clock_refsdataitemstype)r   r   keyvalueposval	clock_key	clock_refr   r   r   check_cache_is_consistentF   s$    
z'LRUCacheTests.check_cache_is_consistentc             C   s   |  t| jd d S )Nr   )assertRaises
ValueErrorr	   )r   r   r   r   test_size_lessthan_1e   s    z"LRUCacheTests.test_size_lessthan_1c             C   s   |  d}| |d | |d | |d | |d  | |d | |t  | |ddd | |jdddd | | d S )Nr%   foor&   )r<   r&    bar)r   )r	   r   r   r   r
   r8   )r   r   r   r   r   test_geth   s    
zLRUCacheTests.test_getc             C   s$  |  d}| | |dd |dd |dd |d d |d	d
 |dd t }||d | | | |dd | |dd | |ddd | |d d | |d	d
 | |dd | ||d |dd | |dd | | d S )N   r<   FOOr&   Zfortytwo)r<   r&   Ztuple_as_keyZNone_as_keyr=   Zempty_string_as_keygT㥛 	@Zfloat_as_keyZobject_as_keyzfortytwo again)r	   r8   r   r   r
   r   )r   r   Z	my_objectr   r   r   r   w   s*    


zLRUCacheTests.test_putc             C   s   |  d}|dd |dd |d | |d | |dd | | |d | |d | |d | |ji  | | |dd |d | |dd | |d | | d S )N   r<   r>   rA   BARZnonexistingkey)r	   r   r   r   r   r
   r8   r/   )r   r   r   r   r   test_invalidate   s"    





zLRUCacheTests.test_invalidatec             C   s*  |  d}|dd | |dd | | |dd | |dd | |d | | |dd | |dd | |d | | |d | | | |d | |d |dd | |dd |  | | | |d | |d d S )Nr%   r<   r>   rA   rC   )r	   r   r
   r   r8   r   r   r   )r   r   r   r   r   test_small_cache   s,    






zLRUCacheTests.test_small_cachec             C   s   |  d}d}d}||d | ||d | ||d | | |  d}||d || | || | || d S )Nr%   )r%   r%   r&   )r	   r   r
   r   r8   r   r   )r   r   Z	tuple_oneZ	tuple_twor   r   r   test_equal_but_not_identical   s    



z*LRUCacheTests.test_equal_but_not_identicalc             C   s   d}|  |}x t|D ]}||d|  qW xRtdD ]F}td|d }tdrp| ||d|  q:||d|  q:W | |jd | |j	d | 
| d S )Ni  zitem%si'  r   r%   )r	   ranger   random	randrangegetrandbitsr
   r   misses	evictionsr8   )r   r$   r   countcache_opitemr   r   r   test_perfect_hitrate   s    

z"LRUCacheTests.test_perfect_hitratec             C   sV  d}|  |d }x t|D ]}||d|  qW d}d}d}xtdD ]v}td|d }tdr||}	|d7 }| |	d| kp|	d k |	d kr|d7 }q|d7 }qJ||d|  qJW |t| d }
| |
dk | |
d	k  d|j	 |j
 }| |dk | |d	k  d|j |j
 }| |dk | |d	k  | | d S )
Ni  r'   zitem%sr   i'  r%   d   -   7   )r	   rG   r   rH   rI   rJ   r   r)   floathitslookupsrK   r8   )r   r$   r   rM   rU   rK   Z
total_getsrN   rO   entryZ	hit_ratioZinternal_hit_ratioZinternal_miss_ratior   r   r   test_imperfect_hitrate   s:    




z$LRUCacheTests.test_imperfect_hitratec             C   s   |  d}|dd |dd | |jd |dd |dd | |jd |dd |dd | |jd |  | |jd d S )Nr'   r%   r   rB      )r	   r   r
   rL   r   )r   r   r   r   r   test_eviction_counter  s    
z#LRUCacheTests.test_eviction_counterc             C   sd  |  d}| |d |dd |jd\}}| |j| d | |j| d | |d | |dd | |j|d  |jd\}}| |j| d | |j|d  | t	|jd |dd |jd\}}| |j| d | |j| d | t	|jd |d	d
 |jd	\}}| |j| d | |j| d	 | t	|jd |jd\}}| |j| d |d |dd | t	|jd | |jd |dd | t	|jd | |jd | |dd | |dd | |d | |d | |d	d
 | 
| d S )NrB   a1Tr%   b2r'   c3d4e5)r	   r   r   r   r/   r
   r.   r,   r*   r+   r8   )r   r   r4   r3   r   r   r   test_it-  sL    

zLRUCacheTests.test_itN)r   r    r!   r   r	   r8   r;   r?   r   rD   rE   rF   rP   rX   rZ   re   r   r   r   r   r"   =   s   !+r"   c               @   sF   e Zd Zdd ZdddZdd Zdd	 Zd
d Zdd Zdd Z	dS )ExpiringLRUCacheTestsc             C   s   ddl m} |S )Nr   )ExpiringLRUCache)r   rg   )r   rg   r   r   r   r   e  s    z%ExpiringLRUCacheTests._getTargetClassNc             C   s(   |d kr|   |S |   ||dS d S )N)default_timeout)r   )r   r$   rh   r   r   r   r	   i  s    zExpiringLRUCacheTests._makeOnec       	      C   sP  |  |jt|jk  |  |jdk | |j|jd  | t|j|j | t|jt|j |  t|jt|jk x|j	 D ]\}}|\}}}|  t
|t
dkpt
|t
dd k |  |dk |  ||jk |j| }|  ||k |j| }|  t
|t
dk qW x(|jD ]}|  |dkpB|dk q*W d S )	Nr   r%   r&   r'   r(   gT㥛 	@TF)r)   r*   r+   r,   r
   r-   r$   r.   r/   r0   r1   )	r   r   r2   r3   r4   r5   timeoutr6   r7   r   r   r   r8   p  s$    
&

z/ExpiringLRUCacheTests.check_cache_is_consistentc             C   sn  |  d}| |d |dd |jd\}}}| |j| d | |j| d | |d | |dd | |j|d  |jd\}}}| |j| d | |j|d  | t	|jd |dd |jd\}}}| |j| d | |j| d | t	|jd |d	d
 |jd	\}}}| |j| d | |j| d	 | t	|jd |jd\}}}| |j| d |d |dd | t	|jd | |jd |dd | t	|jd | |jd | |dd | |dd | |d | |d | |d	d
 | 
| d S )NrB   r[   r\   Tr%   r]   r^   r'   r_   r`   ra   rb   rc   rd   )r	   r   r   r   r/   r
   r.   r,   r*   r+   r8   )r   r   r4   r3   expiresr   r   r   re     sL    

zExpiringLRUCacheTests.test_itc             C   s   |  d}|dd td |dd | |dd | |dd | | | j ddd}|dd td |dd | |d | |dd | | d S )NrB   r<   r>   g?rA   rC   )rh   )r	   r   timesleepr
   r   r8   r   )r   r   r   r   r   test_default_timeout  s    



z*ExpiringLRUCacheTests.test_default_timeoutc             C   s2  | j ddd}|dd |jdddd	 |jd
ddd	 | |dd | |dd | |d
d td | |d | |dd | |d
d td | |d | |d | |d
d td | |d | |d | |d
 | | d S )NrB   g?)rh   oner%   twor'   g?)ri   threeg333333?)r	   r   r
   r   rk   rl   r   r8   )r   r   r   r   r   test_different_timeouts  s(    


z-ExpiringLRUCacheTests.test_different_timeoutsc             C   s   | j ddd}|dd |jdddd	 |jd
ddd	 td | |dd | |dd | |d
d | | |dd |jdddd	 |d
d td | |dd | |d | |d
d | | d S )NrB   g?)rh   r<   r>   Zfoo2Zbar2
   )ri   Zfoo3Zbar3g?)r	   r   rk   rl   r
   r   r8   r   )r   r   r   r   r   test_renew_timeout  s"    


z(ExpiringLRUCacheTests.test_renew_timeout)N)
r   r    r!   r   r	   r8   re   rm   rq   rs   r   r   r   r   rf   c  s   
#8!rf   c               @   s|   e Z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S )DecoratorTestsc             C   s   ddl m} |S )Nr   )	lru_cache)r   ru   )r   ru   r   r   r   r      s    zDecoratorTests._getTargetClassc             O   s   |   ||S )N)r   )r   argskwr   r   r   r	   $  s    zDecoratorTests._makeOnec             C   s:   ddl m} | jd d}| |j| | |jji  d S )Nr   )r   )maxsize)r   r   r	   assertIsInstancer   r
   r   )r   r   	decoratorr   r   r   test_ctor_no_size'  s    z DecoratorTests.test_ctor_no_sizec             C   s:   ddl m} | jdd}| |j| | |jjd d S )Nr   )r#   rr   )rx   )r   r#   r	   ry   r   r
   r$   )r   r#   rz   r   r   r   test_ctor_w_size_no_timeout-  s    z*DecoratorTests.test_ctor_w_size_no_timeoutc             C   sL   ddl m} | jddd}| |j| | |jjd | |jjd d S )Nr   )rg   rr      )rx   ri   )r   rg   r	   ry   r   r
   r$   rh   )r   rg   rz   r   r   r   test_ctor_w_size_w_timeout3  s
    z)DecoratorTests.test_ctor_w_size_w_timeoutc             C   s    |  dd }| |jjd d S )Nrr   )r	   r
   r   r$   )r   rz   r   r   r   test_ctor_nocache:  s    z DecoratorTests.test_ctor_nocachec             C   s   t  }| d|}dd }||}|d}| |d d | |d | t|d |d}| |d d | |d | t|d |d}| |d d | |d | t|d d S )Nr   c             S   s   | S )Nr   )r2   r   r   r   wrappedA  s    z.DecoratorTests.test_singlearg.<locals>.wrappedr%   )r%   r'   )r'   )DummyLRUCacher	   r
   r+   )r   r   rz   r   	decoratedresultr   r   r   test_singlearg>  s     zDecoratorTests.test_singleargc             C   s6   t  }| d|}dd }||}| |j|k d S )Nr   c             S   s   | S )Nr   )r2   r   r   r   r   T  s    z/DecoratorTests.test_cache_attr.<locals>.wrapped)r   r	   r)   _cache)r   r   rz   r   r   r   r   r   test_cache_attrQ  s
    zDecoratorTests.test_cache_attrc             C   s^   t  }| d|}dd }||}|ddd}| |d d | |d | t|d d S )	Nr   c              W   s   | S )Nr   )rv   r   r   r   moreargs\  s    z/DecoratorTests.test_multiargs.<locals>.moreargsrB   rY      )rB   rY   r   r%   )r   r	   r
   r+   )r   r   rz   r   r   r   r   r   r   test_multiargsY  s    zDecoratorTests.test_multiargsc             C   s   t  }| d|}dd }||}|ddddddd	}| |d
tdddgf d
dddd	f | |d
dddd	f | t|d d S )Nr   c              _   s   | |fS )Nr   )rv   kwargsr   r   r   r   g  s    z8DecoratorTests.test_multiargs_keywords.<locals>.moreargsrB   rY   r   r%   r'   )r[   r]   r_   )rB   rY   r   )r[   r%   )r]   r'   )r_   rB   )r   r	   r
   	frozensetr+   )r   r   rz   r   r   r   r   r   r   test_multiargs_keywordsd  s    z&DecoratorTests.test_multiargs_keywordsc             C   sn   t  }| jd|dd}dd }||}|dddd	d	d
dgd}| t|d | |dd	d	d
dgdf d S )Nr   T)ignore_unhashable_argsc              _   s   | |fS )Nr   )rv   r   r   r   r   r   t  s    zODecoratorTests.test_multiargs_keywords_ignore_unhashable_true.<locals>.moreargsrB   rY   r   r%   r'   )r[   r]   )rB   rY   r   )r   r	   r
   r+   )r   r   rz   r   r   r   r   r   r   .test_multiargs_keywords_ignore_unhashable_trueq  s    z=DecoratorTests.test_multiargs_keywords_ignore_unhashable_truec          	   C   sX   t  }| jd|dd}dd }||}| t |dddd	d	d
dgd W d Q R X d S )Nr   F)r   c              _   s   | |fS )Nr   )rv   r   r   r   r   r     s    zJDecoratorTests.test_multiargs_keywords_ignore_unhashable.<locals>.moreargsrB   rY   r   r%   r'   )r[   r]   )r   r	   r9   	TypeError)r   r   rz   r   r   r   r   r   )test_multiargs_keywords_ignore_unhashable{  s    z8DecoratorTests.test_multiargs_keywords_ignore_unhashablec             C   s   | j dd dddd }t }|d}t }| |d | || dk t }|d}t }| |d | || dk  td t }|d}t }| |d | || dk d S )Nr%   g?)ri   c             S   s   t d d|  S )Ng?r'   )rk   rl   )paramr   r   r   sleep_a_bit  s    
z/DecoratorTests.test_expiry.<locals>.sleep_a_bitZhelloZ
hellohello)r	   rk   r
   r)   rl   )r   r   startZresult1stopZresult2Zresult3r   r   r   test_expiry  s"    
zDecoratorTests.test_expiryc             C   sJ   dd }ddl m} ddlm} ||d}|d|}| |dd	 d S )
Nc             S   s   | | S )Nr   )r[   r]   r   r   r   add  s    z(DecoratorTests.test_partial.<locals>.addr   )partial)ru   r      rB   r@   )	functoolsr   r   ru   r
   )r   r   r   ru   Zadd_fiver   r   r   r   test_partial  s    
zDecoratorTests.test_partialN)r   r    r!   r   r	   r{   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   rt     s   
rt   c               @   s   e Zd Zdd ZdS )r   c             C   s   |  ||S )N)__setitem__)r   kvr   r   r   r     s    zDummyLRUCache.putN)r   r    r!   r   r   r   r   r   r     s   r   c               @   s\   e Z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S )CacherMakerc             C   s   ddl m} |S )Nr   )
CacheMaker)r   r   )r   r   r   r   r   r     s    zCacherMaker._getTargetClassc             O   s   |   ||S )N)r   )r   rv   rw   r   r   r   r	     s    zCacherMaker._makeOnec             C   sz   |   }d}d}|j||dt}| t|j |g | |j| j| |d |d | t|j| j	d d S )Nrr   name)rx   r      r'   )
r	   lrucache_adderr
   listr   keysr$   r+   r/   )r   makerr$   r   r   r   r   r   test_named_cache  s    zCacherMaker.test_named_cachec             C   sH   |   }d}d}|j||dt}| jt|j||d | t|j d S )Nrr   r   )rx   r   )r	   r   r   r9   KeyErrorr:   )r   r   r$   r   r   r   r   r   test_exception  s    zCacherMaker.test_exceptionc             C   s   d}| j |d}x$tdD ]}| t}|d qW | t|jd x2|j D ]$}| |j| | t|j	d qTW |
  x2|j D ]$}| |j| | t|j	d qW d S )Nrr   )rx   rQ   r%   r   )r	   rG   r   r   r
   r+   r   valuesr$   r/   r   )r   r$   r   ir   r   r   r   r   test_defaultvalue_and_clear  s    z'CacherMaker.test_defaultvalue_and_clearc             C   s   | j dd}|jddt}|jddt}x tdD ]}||}||}q6W | t|jd jd | t|jd jd |d | t|jd jd | t|jd jd d S )Nrr   )rx   rn   )r   ro   rQ   r   )	r	   r   r   rG   r
   r+   r   r/   r   )r   r   rn   ro   r   _r   r   r   test_clear_with_single_name  s    
z'CacherMaker.test_clear_with_single_namec             C   s  | j dd}|jddt}|jddt}|jddt}x(tdD ]}||}||}||}qFW | t|jd jd | t|jd jd | t|jd jd |dd | t|jd jd | t|jd jd | t|jd jd d S )	Nrr   )rx   rn   )r   ro   rp   rQ   r   )	r	   r   r   rG   r
   r+   r   r/   r   )r   r   rn   ro   rp   r   r   r   r   r   test_clear_with_multiple_names  s    z*CacherMaker.test_clear_with_multiple_namesc             C   s`   ddl m} ddl m} | jdd}|d}| || | |j| | |j|jd  d S )Nr   )ru   )r   rr   )rx   test)	r   ru   r   r	   Zmemoizedry   r   r   r   )r   ru   r   r   memor   r   r   test_memoized   s    
zCacherMaker.test_memoizedc       	      C   s  d}d}d}| j ||d}xftdD ]Z}|sV|j|d}|t}| |j| j| n | }|t}| |jj| |d q$W | t	|jd x@|j
 D ]2}| |j| | |j| | t	|jd qW |  x2|j
 D ]$}| |j| | t	|jd qW d S )Nrr   r   )rx   ri   rQ   )r   r%   r   )r	   rG   expiring_lrucacher   r
   r   r$   r   rh   r+   r   r/   r   )	r   r$   ri   r   r   r   rz   r   r   r   r   r   test_expiring	  s,    zCacherMaker.test_expiringc             C   s@   d}d}d}d}| j ||d}|j|dd}| |jj| d S )Nrr   r   r   )rx   ri   )r   ri   )r	   r   r
   r   rh   )r   r$   Zmaker_timeoutri   r   r   rz   r   r   r   test_expiring_w_timeout$  s    z#CacherMaker.test_expiring_w_timeoutN)r   r    r!   r   r	   r   r   r   r   r   r   r   r   r   r   r   r   r     s   	r   c             C   s   | d S )Nrr   r   )xr   r   r   r   -  s    r   )rH   rk   ZunittestxrangerG   	NameErrorZTestCaser   r"   rf   rt   dictr   r   r   r   r   r   r   <module>   s"   2  ( < x