
    [e                        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ej                            dd	          ej                            d
d          ej                            dg d          d                                     Zej                            dd          ej                            dd          ej                            dd	          ej                            dd	          ej                            dd          ej                            dd          ej                            dg 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)Sieve)
utils_testc                     i } i }i }d }| ||d}t          ||          }t          |          dk    sJ d|d<   d|d<   d|d	<   d
|d<   d|d<   d|d<   |d         dk    sJ |d         dk    sJ t          |          dk    sJ t          |          g dk    sJ t          |                                          g dk    sJ t          |                                          t          g d          k    sJ | ddd
dk    sJ |ddik    sJ |dddk    sJ d|d	<   d|d<   |d	         dk    sJ |d         dk    sJ t          |          dk    sJ t          |                                          t          g d          k    sJ | ddddk    sJ |dddk    sJ |ddik    sJ |d= |d	= t          |          dk    sJ d|vsJ d	|vsJ t          |                                          t          g d          k    sJ d S )Nc                 &    t          |          dz  S N   )lenkvs     5lib/python3.11/site-packages/zict/tests/test_sieve.pyselectorztest_simple.<locals>.selector   s    1vvz    r         r      theu   bigr      brownw   foxx   jumpsy   overz   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   )r   r      lazy   dog)r   r   r!   r"   r   r   )r   r      )r   r"   r   r   )r   r   sortedkeysvalues)abcr   mappingsds         r   test_simpler,      s   
A
A
A   q!!Hh!!Aq66Q;;;;AcFAcFAcFAcFAcFAcFS6VS6Vq66Q;;;;!996666666!&&((=======!((**===" "     f6777777ghX...... AcFAcFS6WS6Vq66Q;;;;!((**<<<" "     f6777777gG,,,,,,h	#	#q66Q;;;;a<<<<a<<<<!((**(K(K(K!L!LLLLLLLr   c                      i } i }d }| |d}t          ||          }t          j        |           t          j        |           |                                 |j        i i dk    sJ |j        rJ dS )z-
    Test mapping interface for Sieve().
    c                 @    t          t          |                    dz  S )Nr   )sum	bytearray)keyvalues     r   r   ztest_mapping.<locals>.selectorK   s    9U##$$q((r   r   r   N)r   r   check_mappingcheck_closingclearr*   key_to_mapping)r'   r(   r   r*   r   s        r   test_mappingr8   D   s     	A
A) ) ) ||Hh!!AQQGGIII:RB''''r   method)__setitem__updateset_when)beforeafterseed)Fsame	differentc                 <   t          j                    t          j                     G fddt                    }t          i  |            dd           }|dk    rB                                 d|d<                                                                     n|d	k    rd
|d<   t          d          5 }| dk    r|                    |j        dd          }n%| dk    sJ |                    |j	        ddi          }
                    d          sJ 	 |d= n# t          $ r Y nw xY w                                 |                                 ddd           n# 1 swxY w Y   |j        d
         rJ |j        d         rJ |j        rJ dS )zOTest race conditions between __delitem__ and __setitem__/update on the same keyc                       e Zd Z fdZdS )5test_multithread_race_condition_del_set.<locals>.Slowc                     dk    r8|| j         |<                                                        d          sJ d S                                                      d          sJ || j         |<   d S )Nr=      timeoutdatasetwait)selfr   r   	block_setin_setr<   s      r   r:   zAtest_multithread_race_condition_del_set.<locals>.Slow.__setitem__a   s|    8## 	!

 ~~a~0000000

 ~~a~00000 	!r   N__name__
__module____qualname__r:   )rN   rO   r<   s   r   SlowrD   `   s8        	! 	! 	! 	! 	! 	! 	! 	! 	!r   rT   r3   c                     |dz  S )Nr    r   s     r   <lambda>z9test_multithread_race_condition_del_set.<locals>.<lambda>k   s
    A r   r   r@   r   r   rA   r   r:   r
   r;   rF   rG   N)	threadingEventr   r   rK   r6   r   submitr:   r;   rL   KeyErrorresultr*   r7   )	r9   r<   r?   rT   r   exset_futrN   rO   s	    `     @@r   'test_multithread_race_condition_del_setr`   X   s&   
 _F!!I	! 	! 	! 	! 	! 	! 	! 	! 	!x 	! 	! 	! 	"  +=+=>>>Av~~#			#	A		 "]""iisA66GGX%%%%ii3(33G{{1{%%%%%	# 	 	 	D	               z!}z!}s7    A!E*"D&%E*&
D30E*2D33+E**E.1E.	set1_when	set2_whenset1_methodset2_methodstarts_firstr   r   
ends_first)Fr   r   r   c                    | |d||d}t          j                    t          j                    dt          j                    t          j                    d G fddt                    }t          i  |             |            dd           }	|dur||	d<   t	          d	          5 }
i }|d
k    rd	nd
}||fD ]}||         dk    r#|
                    |	j        d|dz             ||<   n1||         dk    sJ |
                    |	j        d|dz   i          ||<   |                             d          sJ |         	                                 ||         
                                 |d
k    rd	nd
}|         	                                 ||         
                                 ddd           n# 1 swxY w Y   t          |	          ddiddifv sJ |	j        d         i k    sJ |	d         dk    rD|	j        d
         ddik    sJ |	j        d	         i k    sJ |	j        d|	j        d
         ik    sJ dS |	j        d
         i k    sJ |	j        d	         ddik    sJ |	j        d|	j        d	         ik    sJ dS )zATest __setitem__/update in race condition with __setitem__/updaterf   c                       e Zd Z fdZdS )5test_multithread_race_condition_set_set.<locals>.Slowc                 Z   |dk     r|| j         |<   d S |dz  }|         dk    rD|| j         |<   |                                          |                             d          sJ d S |                                          |                             d          sJ || j         |<   d S )Nr
   r=   rF   rG   rI   )rM   r   r   mkeyrN   rO   whens       r   r:   zAtest_multithread_race_condition_set_set.<locals>.Slow.__setitem__   s    1uu 	!q5DDzX%% 	!t  """ ++A+6666666t  """ ++A+66666 	!r   NrP   )rN   rO   rm   s   r   rT   rj      s8        	! 	! 	! 	! 	! 	! 	! 	! 	!r   rT   r   c                     |dz  S r	   rV   r   s     r   rW   z9test_multithread_race_condition_set_set.<locals>.<lambda>   s
    1q5 r   rX   Fr   r   r   r:   r
   r;   rF   rG   Nr#   r   )rY   rZ   r   r   r   r[   r:   r;   rL   rK   r]   dictr*   r7   )ra   rb   rc   rd   re   rg   r?   r9   rT   r   r^   futuresstarts_secondidxends_secondrN   rO   rm   s                  @@@r   'test_multithread_race_condition_set_setrt      sV    Y''D--F""y'8'899FO%%)/*;*;<<I! ! ! ! ! ! ! ! !x ! ! !" 	"DDFF++6H6HIIIA5#	A		 &")Q..A -0 	/ 	/Cc{m++!yyS1WEEc{h....!yyCq>BB#;##A#......*!!###
""$$$%??aa+""$$$##%%%& & & & & & & & & & & & & & &" 77Qx#q*****:a=Bv{{z!}a((((z!}""""CA#7777777z!}""""z!}a((((CA#7777777s   1DGGGc                      i } i }t          | |dd           }t          j        |           | rJ |rJ |j        rJ t          j        |           d S )Nr3   c                 .    t          j        ddg          S Nr   r   randomchoicer   s     r   rW   z7test_stress_different_keys_threadsafe.<locals>.<lambda>       1v)>)> r   )r   r   check_different_keys_threadsafer7   r4   r'   r(   r   s      r   %test_stress_different_keys_threadsafer~      sp     	A
A!ll>>??A.q111LLLLLLQr   c                      t          j        d          } t          j        d          }t          | |dd           }t          j        |           | rJ |rJ |j        rJ t          j        |           d S )NgMbP?r3   c                 .    t          j        ddg          S rw   rx   r   s     r   rW   z1test_stress_same_key_threadsafe.<locals>.<lambda>   r{   r   )r   SlowDictr   check_same_key_threadsafer7   r4   r}   s      r   test_stress_same_key_threadsafer      s     	E""AE""A!ll>>??A(+++LLLLLLQr   )ry   rY   collectionsr   concurrent.futuresr   pytestzictr   
zict.testsr   r,   r8   markparametrizer`   rt   stressrepeatREPEAT_STRESS_TESTSr~   r   rV   r   r   <module>r      sq                    1 1 1 1 1 1        ! ! ! ! ! !5M 5M 5Mp     ( #<==%899!=!=!=>>)  )  ?> :9 >=) X &9::&9::(ABB(ABB00v..!1!1!12288 88 32 /. 10 CB CB ;: ;:88v J233    43   J233    43      r   