
    [e'                     z   d dl Z d dlZd dlmZ d dlmZ d dlZd dlmZ d dl	m
Z
 d Zd Zd Zd	 Zd
 Zd Zd Zd Zej                            dd          ej                            dd          d                         Zej                            dd          ej                            dd          d                         Zej        j        ej                            e
j                  d                         Zej        j        ej                            e
j                  d                         ZdS )    N)UserDict)ThreadPoolExecutorBuffer)
utils_testc                  (   i } i }t          | |dd           }d|d<   d|d<   |d         dk    sJ |d         dk    sJ | dddk    sJ |j        j        d	k    sJ d
|d<   | dd
dk    sJ |ddik    sJ |d         dk    sJ | dd
dk    sJ |ddik    sJ d|v sJ d|v sJ d|vsJ d|d<   | ddd
dk    sJ |j        j        dk    sJ |i k    sJ |d= | dddk    sJ |j        j        dk    sJ |i k    sJ |d= | ddik    sJ |j        j        dk    sJ |i k    sJ d|vsJ d|d<   t          |          t          |                                          cxk    rddhk    sn J t          |j                  }t          |j                  }||z  rJ ||z  t          |          k    sJ d|d<   d|j        v sJ t          |j                  |k    sJ t          |j                  dh|z  k    sJ d|v sJ |d         dk    sJ d S )N
   c                     |S N kvs     6lib/python3.11/site-packages/zict/tests/test_buffer.py<lambda>ztest_simple.<locals>.<lambda>       !     nweight   x   yr   r         zr   r   )r   r   missingr   r   r      ai  b)r   fasttotal_weightsetkeysslow)r#   r$   buff	fast_keys	slow_keyss        r   test_simpler-      s    
A
A!Q"^^444DDIDI9>>>>9>>>>aa      9!Q&&&&DIaa      a====9>>>>aa      a====$;;;;$;;;;D    DIaaa((((((9!R''''7777S	aa      9!Q&&&&7777S	a====9!Q&&&&7777d????DIt99DIIKK((6666S#J666666DIIDIII%&&&y CII---- DI$)ty>>Y&&&&ty>>cUY.....$;;;;9r   c                  J   i } i }t          | |dd           }dD ]\  }}||d<   |d         |k    sJ ||d<   |d         |k    sJ t          |j                  }t          |j                  }||z  rJ ||z  t          |          k    sJ |d= d|vsJ d| vsJ d|vsJ d S )Nr	   c                     |S r   r   r   s     r   r   z8test_setitem_avoid_fast_slow_duplicate.<locals>.<lambda>J   r   r   r   ))r      )r0   r   r#   )r   r'   r%   r)   )r#   r$   r*   firstsecondr+   r,   s          r   &test_setitem_avoid_fast_slow_duplicater3   G   s    
A
A!Q"^^444D+  vS	CyE!!!!S	CyF""""	NN		NN		)***9$D		1111I$!||||!||||| r   c                  P   i } i }t          | |d          }t          j        |           t          j        |           |                                 |j        rJ |j        rJ |j        rJ |j        j        rJ |j        j	        rJ |j        j
        rJ |j        j        rJ dS )z.
    Test mapping interface for Buffer().
    r   r   N)r   r   check_mappingcheck_closingclearr)   _cancel_restorer%   dweightsr&   _cancel_evict)r#   r$   r*   s      r   test_mappingr=   \   s     	A
A!Q!DT"""T"""JJLLLy####yy{y    y%%%%y&&&&&&r   c                  J   g fd} g fd}i }i }t          ||dd | |          }d|d<   d|d	<   |d         dk    sJ |d	         dk    sJ rJ rJ d
|d<   dgk    sJ g k    sJ |d          dgk    sJ g k    sJ |d          dd	gk    sJ dgk    sJ d S )Nc                 2                         |            d S r   appendr   r   f2ss     r   f2s_cbztest_callbacks.<locals>.f2s_cbs       

1r   c                 2                         |            d S r   r@   r   r   s2fs     r   s2f_cbztest_callbacks.<locals>.s2f_cbx   rE   r   r	   c                     |S r   r   r   s     r   r   z test_callbacks.<locals>.<lambda>       A r   r   r   fast_to_slow_callbacksslow_to_fast_callbacksr   r   r   r   r   r   r   )rD   rI   r#   r$   r*   rC   rH   s        @@r   test_callbacksrO   p   s9   
C     C     	A
A		
~%%  D DIDI9>>>>9>>>>NNNNNNDI3%<<<<"9999II3%<<<<"9999II3*3%<<<<<<r   c                      G d dt                     g fd} g fd}i }i }t          ||dd | |          }d|d	<   d
|d<   |d	         dk    sJ |d         d
k    sJ rJ rJ |dd
dk    sJ |rJ d|d<   d	gk    sJ g k    sJ |d
ddk    sJ |d	dik    sJ t          j                  5  d|d<   d d d            n# 1 swxY w Y   g dk    sJ g k    sJ |ddik    sJ |dd
ddk    sJ d S )Nc                       e Zd ZdS )/test_callbacks_exception_catch.<locals>.MyErrorN)__name__
__module____qualname__r   r   r   MyErrorrR      s        r   rV   c                 R    |dk    r
                                  |            d S )Nr	   r@   )r   r   rV   rC   s     r   rD   z.test_callbacks_exception_catch.<locals>.f2s_cb   s*    r66'))O

1r   c                 2                         |            d S r   r@   rG   s     r   rI   z.test_callbacks_exception_catch.<locals>.s2f_cb   rE   r   r	   c                     |S r   r   r   s     r   r   z0test_callbacks_exception_catch.<locals>.<lambda>   rK   r   rL   r   r   r   r   r   r   r   r      wr!   )	Exceptionr   pytestraises)rD   rI   r#   r$   r*   rV   rC   rH   s        @@@r   test_callbacks_exception_catchr_      s)       )    C     
 C     	A
A		
~%%  D DIDI9>>>>9>>>>NNNNNNaa      LLL DI3%<<<<"9999aa      a==== 
w		  S	               ///!!!!"9999b	>>>>aaa((((((((s   <CCCc                  $   t          i i d          } | j        dk    sJ | j        j        dk    sJ d| _        | j        j        dk    sJ | j        dk    sJ | j        j        dk    sJ d| _        | j        dk    sJ | j        j        dk    sJ d S )Nr"   r5   r   r   r   )r   r   r%   offsetr*   s    r   test_n_offsetrc      s    "bAD6Q;;;;9;!DF9;!;!9q    DK;!9q      r   c            	         i } i }g g t          | |dd fdfd          }|                    dd           |                    dd           |                    d	d
           | ddd
dk    sJ |i k    sJ cxk    rg k    sn J |                                 | ddik    sJ |d
ddk    sJ d	dgk    sJ g k    sJ                                  |                    dd           | dddk    sJ |d	d
ik    sJ cxk    rg k    sn J |                    d           | i k    sJ |d
dddk    sJ ddgk    sJ g k    sJ d S )Nr"   c                     |S r   r   r   s     r   r   z"test_set_noevict.<locals>.<lambda>   rK   r   c                 .                         |           S r   r@   rB   s     r   r   z"test_set_noevict.<locals>.<lambda>       CJJqMM r   c                 .                         |           S r   r@   rG   s     r   r   z"test_set_noevict.<locals>.<lambda>   rg   r   rL   r   r   r   r      r!   )r   r   r   )r   r   r   )r   r   r   )r   set_noevictevict_until_below_targetr8   )r#   r$   r*   rC   rH   s      @@r   test_set_noevictrl      s   
A
A
C
C		
~99999999  D 	S!S!S!aaa((((((7777#!!###a====aa      3*"9999 IIKKKS!aa      a====# 	!!!$$$7777aaa((((((3*"999999r   c                     t          dddddid          } t          |           g dk    sJ t          |           }t          |          d	k    sJ | j                            d	           t          |          d
k    sJ | d	         dk    sJ t          |          dk    sJ t          j        t                    5  t          |           ddd           dS # 1 swxY w Y   dS )zPTest that __iter__ won't be disrupted if another thread evicts or restores a keyr   r   r   r   r   r"   r5   r!   r   r   N)	r   listiternextr%   evictr]   r^   StopIteration)r*   its     r   test_evict_restore_during_iterrt     s%   ""S!H222D::((((	dB88s????IOOC88s????9>>>>88s????	}	%	%  R                 s   >CC"Cevent)r'   rj   delwhen)beforeafterc                    t          j                    t          j                     G fddt                    }t          i  |            dd           }|                    dd           t          d          5 }|                    |j        j                  }	                    d	          sJ | d
k    rd|d<   n(| dk    r|                    dd           n| dk    sJ |d= 
                                 |                                dk    sJ 	 ddd           n# 1 swxY w Y   | dv rM|j        ddik    sJ |j        rJ |j        j        ddik    sJ t          |j        j                  dgk    sJ n.|j        rJ |j        rJ |j        j        rJ |j        j        rJ |j        j        rJ dS )zJSee also:

    test_cancel_restore
    test_lru.py::test_cancel_evict
    c                   &     e Zd Z fdZ xZS )test_cancel_evict.<locals>.Slowc                 P   dk    rP                                                      d          sJ t                                          ||           d S t                                          ||                                                                 d          sJ d S Nrx   r"   timeout)r'   waitsuper__setitem__)selfr   r   	__class__ev1ev2rw   s      r   r   z+test_cancel_evict.<locals>.Slow.__setitem__%  s    x			xxx*****##Aq)))))##Aq)))			xxx*******r   )rS   rT   rU   r   __classcell__r   r   r   rw   s   @r   Slowr|   $  sH        	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+r   r   d   c                     |S r   r   r   s     r   r   z#test_cancel_evict.<locals>.<lambda>/       r   r   r   r   r"   r   r'   r   rj   rv   )NNr   Nr'   rj   )	threadingEventr   r   rj   r   submitr%   rq   r   r'   resultr)   r;   rn   orderr<   ru   rw   r   r*   exfutr   r   s    `    @@r   test_cancel_evictr     s^    /

C
/

C	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+x 	+ 	+ 	+ "ddffNN;;;DS!	A		 /"ii	((xxx""""" E>>DIIm##S!$$$$E>>>>S				zz||...../ / / / / / / / / / / / / / / &&&yS!H$$$$9y S!H,,,,DIO$$-----999$$$$9?"""y&&&&&&s   BD))D-0D-c                 F   t          j                    t          j                     G fddt                    }t          i  |            dd           }|                    dd           |j                                         |j        rJ t          |j                  dhk    sJ t          d          5 }|
                    |j        d          }                    d	          sJ | d
k    rd|d<   n(| dk    r|                    dd           n| dk    sJ |d=                                  t          j        t          d          5  |                                 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   | dv rM|j        ddik    sJ |j        rJ |j        j        ddik    sJ t%          |j        j                  dgk    sJ n.|j        rJ |j        rJ |j        j        rJ |j        j        rJ |j        rJ dS )zHSee also:

    test_cancel_evict
    test_lru.py::test_cancel_evict
    c                   &     e Zd Z fdZ xZS )!test_cancel_restore.<locals>.Slowc                 H   dk    rM                                                      d          sJ t                                          |          S t                                          |          }                                                      d          sJ |S r~   )r'   r   r   __getitem__)r   r   outr   r   r   rw   s      r   r   z-test_cancel_restore.<locals>.Slow.__getitem__Z  s    x			xxx*****ww**1---gg))!,,			xxx*****
r   )rS   rT   rU   r   r   r   s   @r   r   r   Y  sH        		 		 		 		 		 		 		 		 		 		 		 		r   r   r   c                     |S r   r   r   s     r   r   z%test_cancel_restore.<locals>.<lambda>e  r   r   r   r   r   r"   r   r'   r   rj   rv   )matchNr   )r   r   r   r   rj   r%   rq   r'   r)   r   r   r   r   r]   r^   KeyErrorr   r;   rn   r   r9   r   s    `    @@r   test_cancel_restorer   N  s    /

C
/

C
 
 
 
 
 
 
 
 
x 
 
 
 "ddffNN;;;DS!IOOyty>>cU""""	A		 "ii(#..xxx""""" E>>DIIm##S!$$$$E>>>>S				]83/// 	 	JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	              " &&&yS!H$$$$9y S!H,,,,DIO$$-----999$$$$9?"""######s7   ?BFE7+F7E;	;F>E;	?FFFc                      t          i t          j        d          dd           } t          j        |            | j        rJ | j        rJ t          j        |            d S )NMbP?r   c                 .    t          j        g d          S )N)g??皙?randomchoicer   s     r   r   z7test_stress_different_keys_threadsafe.<locals>.<lambda>  s    FM///:: r   r   )r   r   SlowDictcheck_different_keys_threadsafer%   r)   r6   rb   s    r   %test_stress_different_keys_threadsafer     sx     
E""
::	  D .t444yyT"""""r   c                      t          i t          j        d          dd           } t          j        |            | j        rJ | j        rJ t          j        |            d S )Nr   r   c                 .    t          j        ddg          S )Nr   r   r   r   s     r   r   z1test_stress_same_key_threadsafe.<locals>.<lambda>  s    FM3*55 r   r   )r   r   r   check_same_key_threadsafer%   r)   r6   rb   s    r   test_stress_same_key_threadsafer     sx     
E""
55	  D (...yyT"""""r   )r   r   collectionsr   concurrent.futuresr   r]   zictr   
zict.testsr   r-   r3   r=   rO   r_   rc   rl   rt   markparametrizer   r   stressrepeatREPEAT_STRESS_TESTSr   r   r   r   r   <module>r      s                    1 1 1 1 1 1        ! ! ! ! ! !8 8 8v  *' ' '() ) )X5) 5) 5)p
! 
! 
!' ' 'T   "?@@!4550' 0' 65 A@0'f "?@@!4557$ 7$ 65 A@7$t J233# # 43 #  J233# # 43 # # #r   