
                             d dl Z d dlmZmZmZ  G d d      Z G d d      Z G d d      Z G d	 d
e j                        Z	y)    N)LRUCachecachedmethodkeysc                   h    e Zd ZddZ ed       d        Z ed ej                        d        Zy)	Cachedc                      || _         || _        y Ncachecount)selfr   r   s      Aplatform/gsutil/third_party/cachetools/tests/test_cachedmethod.py__init__zCached.__init__   s    

    c                     | j                   S r	   r   r   s    r   <lambda>zCached.<lambda>       tzzr   c                 H    | j                   }| xj                   dz  c_         |S N   r   r   valuer   s      r   getz
Cached.get       



a
r   c                     | j                   S r	   r   r   s    r   r   zCached.<lambda>   r   r   keyc                 H    | j                   }| xj                   dz  c_         |S r   r   r   s      r   get_typedmethodzCached.get_typedmethod   r   r   N)r   )	__name__
__module____qualname__r   r   r   r   typedmethodkeyr"    r   r   r   r      sD     )* +
 )t/B/BC Dr   r   c                   B    e Zd Zd Z ed d       d        Zd Zd Zy)	Lockedc                      || _         d| _        y )Nr   r
   r   r   s     r   r   zLocked.__init__   s    

r   c                     | j                   S r	   r   r   s    r   r   zLocked.<lambda>   r   r   c                     | S r	   r'   r   s    r   r   zLocked.<lambda>   s    Tr   )lockc                     | j                   S r	   r   r   r   s     r   r   z
Locked.get   s    zzr   c                 .    | xj                   dz  c_         y r   r   r   s    r   	__enter__zLocked.__enter__!   s    

a
r   c                      y r	   r'   )r   excs     r   __exit__zLocked.__exit__$   s    r   N)r#   r$   r%   r   r   r   r2   r5   r'   r   r   r)   r)      s/     )0AB Cr   r)   c                   l    e Zd Zd Z ed       d        Z ed ej                        d        Zd Z	y)	
Unhashablec                     || _         y r	   r   r+   s     r   r   zUnhashable.__init__)   s	    
r   c                     | j                   S r	   r   r   s    r   r   zUnhashable.<lambda>,   r   r   c                     |S r	   r'   r0   s     r   get_defaultzUnhashable.get_default,       r   c                     | j                   S r	   r   r   s    r   r   zUnhashable.<lambda>0   r   r   r   c                     |S r	   r'   r0   s     r   get_hashkeyzUnhashable.get_hashkey0   r<   r   c                     t        d      )Nzunhashable type)	TypeErrorr   s    r   __hash__zUnhashable.__hash__5   s    )**r   N)
r#   r$   r%   r   r   r;   r   hashkeyr?   rB   r'   r   r   r7   r7   (   sF     )* + )t||< =+r   r7   c                   l    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zy)CachedMethodTestc                    t        i       }| j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       |j                  j	                          | j                  |j                  d      d       y )Nr   r         ?   )r   assertEqualr   r   clearr   cacheds     r   	test_dictzCachedMethodTest.test_dict:   s    A*A*A*C!,C!,A*r   c                    t        t        d            }| j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       y 	NrH   maxsizer   r   rG   g              r   r   rI   r"   rK   s     r   test_typedmethod_dictz&CachedMethodTest.test_typedmethod_dictF       +,//2A6//2A6//2A6//4a8//4a8//4a8//2A6r   c                    t        t        d            }| j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       |j                  j                          | j                  |j                  d      d       y )NrH   rP   r   r   rG   )r   r   rI   r   r   rJ   rK   s     r   test_lruzCachedMethodTest.test_lruQ   s    +,A*A*A*C!,C!,A*r   c                    t        t        d            }| j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       y rO   rT   rK   s     r   test_typedmethod_lruz%CachedMethodTest.test_typedmethod_lru]   rV   r   c                 x   t        t        d            }| j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       y )Nr   rP   r   rH   rG   rR   rS   )r   r   rI   r   rK   s     r   test_nospacezCachedMethodTest.test_nospaceh       +,A*A*A*C!,C!,r   c                 d   t        d       }| j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       y )Nr   r   rH   rG   rR   rS   )r   rI   r   rK   s     r   test_nocachezCachedMethodTest.test_nocacheq       A*A*A*C!,C!,r   c                 @   dd l }dd ldd l} G fddj                        t	        |j                          d            }| j                  |j                  d      d       |j                          | j                  |j                  d      d       |j                  d      }| j                  |d       | j                  |j                  d      d       | j                  |j                  d      d       |j                  d      }| j                  |d       | j                  |j                  d      d       | j                  |j                  d      d	       |j                  j                          | j                  |j                  d      d
       y )Nr   c                       e Zd Z fdZy)*CachedMethodTest.test_weakref.<locals>.Intc                 H     j                   j                  | |            S r	   )Fraction__add__)r   otherInt	fractionss     r   rf   z2CachedMethodTest.test_weakref.<locals>.Int.__add__   s!    9--55dEBCCr   N)r#   r$   r%   rf   )rh   ri   s   r   rh   rc      s	    Dr   rh   r   r   rH   rG   rR   rS      )weakrefri   gcre   r   WeakValueDictionaryrI   r   collectr"   r   rJ   )r   rk   rl   rL   refrh   ri   s        @@r   test_weakrefzCachedMethodTest.test_weakrefz   s?   	D)$$ 	D 335SVDA*


A*jjma A*C!,$$Q'a //2A6//4a8A*r   c                 d   t        i       }| j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       y )Nr   r   rR   rG   g       @   r)   rI   r   rK   s     r   test_locked_dictz!CachedMethodTest.test_locked_dict   s    A*A*A*C!,C!,r   c                 d   t        d       }| j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       y )Nr   r   rG   rs   rK   s     r   test_locked_nocachez$CachedMethodTest.test_locked_nocache   r`   r   c                 x   t        t        d            }| j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       y )	Nr   rP   r   rR   rj   rG   rr   	   )r)   r   rI   r   rK   s     r   test_locked_nospacez$CachedMethodTest.test_locked_nospace   r]   r   c                 (   t        t        d            }| j                  |j                  d      d       | j                  |j                  d      d       | j	                  t
              5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   rP   r   )r7   r   rI   r;   assertRaisesrA   r?   rK   s     r   test_unhashablez CachedMethodTest.test_unhashable   so    HQ/0++A.2++A.2y)q! *))s   -BBc                    i }t        |      }| j                  t        |      d       | j                  |j                  j	                  |d      d       | j                  t        |      d       | j                  |j                  d      d       | j                  t        |      d       | j                  |j                  d      d       | j                  t        |      d       y Nr   r   )r   rI   lenr   __wrapped__r   r   rL   s      r   test_wrappedzCachedMethodTest.test_wrapped   s    UQ'//:A>UQ'A*UQ'A*UQ'r   c                 (   i }t        |      }| j                  |j                  j                  |      |       | j                  |j                  j                  t
        j                         | j                  |j                  j                  d        y r	   )r   assertIsr   r   	cache_keyr   	methodkey
cache_lockr   s      r   test_attributesz CachedMethodTest.test_attributes   sa    fjj&&v.6fjj**DNN;fjj++T2r   c                 2   i }t        |      }| j                  |j                  j                  |      |       | j                  |j                  j                  t
        j                         | j                  |j                  j                  |      |       y r	   )r)   r   r   r   r   r   r   r   r   s      r   test_attributes_lockz%CachedMethodTest.test_attributes_lock   sf    fjj&&v.6fjj**DNN;fjj++F3V<r   c                    i }t        |      }| j                  |j                  d      d       | j                  t        |      d       |j                  j	                  |       | j                  t        |      d       y r~   )r   rI   r   r   cache_clearr   s      r   
test_clearzCachedMethodTest.test_clear   sb    A*UQ'

v&UQ'r   c                 r   i }t        |      }| j                  |j                  d      d       | j                  t        |      d       | j                  |j                  d       |j                  j                  |       | j                  t        |      d       | j                  |j                  d       y )Nr   r   rH   rR   )r)   rI   r   r   r   r   r   s      r   test_clear_lockedz"CachedMethodTest.test_clear_locked   s    A*UQ'q)

v&UQ'q)r   N)r#   r$   r%   rM   rU   rX   rZ   r\   r_   rp   rt   rv   ry   r|   r   r   r   r   r   r'   r   r   rE   rE   9   sR    
+	7
+	7--+<---"
(3=(	*r   rE   )
unittest
cachetoolsr   r   r   r   r)   r7   TestCaserE   r'   r   r   <module>r      s@     3 3 $  + +"q*x(( q*r   