
    [eV)                        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 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ej                            dd          d             Zd Zej        j        ej                            e	j                   d                         Z!ej        j        ej                            e	j                   d                         Z"dS )    N)ThreadPoolExecutor)LRU)
utils_testc                  p   i } t          d|           }d|d<   d|d<   |d         dk    sJ |d         dk    sJ | dddk    sJ d|d<   t          |           dk    sJ t          |          dk    sJ d| v sJ d|v sJ d| vsJ d| v sJ |d= d| vsJ d|vsJ d|d	<   t          |          dd	hk    sJ d S )
N      xy)r	   r
      z   a)r   lensetdlrus     3lib/python3.11/site-packages/zict/tests/test_lru.pytest_simpler      s   
A
a))CCHCHs8q====s8q====aa      CHq66Q;;;;s88q====!8888#::::a<<<<!8888Ca<<<<c>>>>CHs88Sz!!!!!!    c                     i } t          d|           }d|d<   d|d<   t          |j                  t          |          v sJ t          |j                  t          |          v sJ t          |j                  t          |          v sJ t          |j                  t          |          v sJ dt          |          v sJ dt          |          v sJ d S )Nr   r   r	   r
   dict)r   strtotal_weightreprnr   s     r   test_strr   '   s    
A
a))CCHCHs  CHH,,,,s  DII----su::S!!!!su::c""""SXXT#YYr   c                      i } t          d|           }t          j        |           t          j        |           |                                 |j        rJ |j        rJ |j        rJ |j        rJ dS )z+
    Test mapping interface for LRU().
    d   N)	r   r   check_mappingcheck_closingclearr   weightsr   _cancel_evictr   s     r   test_mappingr%   6   s     	A
c1++CS!!!S!!!IIKKKu{      r   c                      i } t          d|           }d|d<   d|d<   d|d<   t          |          ddhk    sJ |                    ddi           t          |          ddhk    sJ d S )Nr   r   r	   r
   r      )r   r   updater   s     r   test_overwriter)   G   s    
A
a))CCHCHCHs88Sz!!!!JJQxs88Sz!!!!!!r   c                      dgfd} g i }t          d|fd| g          }d|d<   d|d<   d	|d
<   dgk    sJ d         t                    k    sJ d S )Nr   c                 (    dxx         dz  cc<   d S )Nr   r    )kvcounts     r   cbztest_callbacks.<locals>.cbY   s    aAr   r   c                 2                         | |f          S Nappend)r-   r.   Ls     r   <lambda>z test_callbacks.<locals>.<lambda>^   s    188QF+;+; r   on_evictr   r	   r
   r   r   r	   r   )r   r   )r0   r   r   r5   r/   s      @@r   test_callbacksr:   V   s    CE     	A
A
a;;;;R@
A
A
ACCHCHCH
????8s1vvr   c                      G d dt                     fd} g g i }t          d|fd| fdg          }d|d	<   d|d
<   t          j                  5  d|d<   d d d            n# 1 swxY w Y   dgk    sJ g k    sJ |j        dk    sJ |j        ddddk    sJ t          |          h dk    sJ |j        ddddk    sJ t          |j	                  g dk    sJ d S )Nc                       e Zd ZdS ).test_cb_exception_keep_on_lru.<locals>.MyErrorN__name__
__module____qualname__r,   r   r   MyErrorr=   i           r   rB   c                                  r2   r,   r-   r.   rB   s     r   r0   z)test_cb_exception_keep_on_lru.<locals>.cbl   s    giir   r   c                 2                         | |f          S r2   r3   r-   r.   r   s     r   r6   z/test_cb_exception_keep_on_lru.<locals>.<lambda>v       1a&)) r   c                 2                         | |f          S r2   r3   r-   r.   bs     r   r6   z/test_cb_exception_keep_on_lru.<locals>.<lambda>x   rH   r   r7   r   r	   r
   r   r   r9   r	   r
   r   >   r	   r
   r   )
	Exceptionr   pytestraisesr   r#   r   r   listorderr0   r   r   rB   r   rK   s      @@@r   test_cb_exception_keep_on_lrurS   h   s       )        	A
A
A
		))))))))
  C CHCH	w		  C               
????7777q    ;222222s88&&&&5!!!,,,,,,	??ooo------s   A--A14A1c                      G d dt                     fd} g g i }t          d|fd| fdgd           }d	|d
<   t          j                  5  d|d<   d d d            n# 1 swxY w Y   ddgk    sJ dgk    sJ |j        dk    sJ t          |          dhk    sJ |j        ddik    sJ t          |j                  dgk    sJ t          j                  5  d|d<   d d d            n# 1 swxY w Y   g dk    sJ dgk    sJ |j        dk    sJ t          |          ddhk    sJ |j        dddk    sJ t          |j                  ddgk    sJ d S )Nc                       e Zd ZdS )6test_cb_exception_keep_on_lru_weights.<locals>.MyErrorNr>   r,   r   r   rB   rV      rC   r   rB   c                 (    |dk    r
             d S Nr   r,   rE   s     r   r0   z1test_cb_exception_keep_on_lru_weights.<locals>.cb   s    66'))O 6r   r   c                 2                         | |f          S r2   r3   rG   s     r   r6   z7test_cb_exception_keep_on_lru_weights.<locals>.<lambda>   rH   r   c                 2                         | |f          S r2   r3   rJ   s     r   r6   z7test_cb_exception_keep_on_lru_weights.<locals>.<lambda>   rH   r   c                     |S r2   r,   r-   r.   s     r   r6   z7test_cb_exception_keep_on_lru_weights.<locals>.<lambda>   s    A r   r8   weightr   r	   r   r
   r
   r   r9   r'   r   )r_   r9   )r   r'   r_      r
   r   )	rM   r   rN   rO   r   r   r   rP   rQ   rR   s      @@@r   %test_cb_exception_keep_on_lru_weightsrb      s       )        	A
A
A
		))))))))

 ~	 	 	C CH	w		  C              
 8$$$$$
????q    s88u5S!H	??se####	w		  C              
         
????q    s88Sz!!!!5!!$$$$$$	??sCj((((((s$   A**A.1A.)C;;C?C?c                      i } d }t          d| |          }d|d<   |j        dk    sJ d|d<   |j        dk    sJ d	|d
<   | dd	dk    sJ |j        dk    sJ |d
= |j        dk    sJ d|d<   d|vsJ | ddik    sJ d S )Nc                     |S r2   r,   r\   s     r   r6   ztest_weight.<locals>.<lambda>   s    ! r   
   r^   r   r	   r'   r
   	   r   r   ra   r`   i'  r   )r   r   )r   r^   r   s      r   test_weightrh      s    
A^F
b!F
#
#
#CCHq    CHq    CHaa      q    Cq    CHc>>>>a======r   c                  
   g t          di d fd          } |                     dd           |                     dd           |                     d	d
           | j        dk    sJ | j        d	hk    sJ t	          | j                  g dk    sJ g k    sJ |                                  t          |           ddik    sJ d	dgk    sJ | j        ddik    sJ | j        dhk    sJ | j        rJ |                                  t          |           ddik    sJ |                     d           t          |           ddik    sJ |                     d           | rJ | j        rJ | j        rJ g dk    sJ d S )Nr   c                     |S r2   r,   r\   s     r   r6   z&test_manual_eviction.<locals>.<lambda>       1 r   c                 .                         |           S r2   r3   rG   s     r   r6   z&test_manual_eviction.<locals>.<lambda>   s    AHHQKK r   r^   r8   r	   F   r
   2   r   n      rL   r   )r   r	   r
   )	r   set_noevictr   heavyrP   rQ   evict_until_below_targetr   r#   )r   r   s    @r   test_manual_evictionru      s   
A
c2nn7O7O7O7O
P
P
PCOOCOOCOOC},,,,9	??ooo----7777  """99b	!!!!c
????;3)####9y  """99b	!!!!  $$$99b	!!!!  ###NNNy{r   c                     i } t          d|           }d|d<   d|d<   d|d<   t          |           h dk    sJ |                                d	k    sJ t          |           ddhk    sJ |                    d          d
k    sJ t          |           dhk    sJ |                                dk    sJ t          j        t
          d          5  |                                 d d d            n# 1 swxY w Y   d|d<   d|d<   |                    d          dk    sJ t          j        t
          d          5  |                    d           d d d            d S # 1 swxY w Y   d S )Nre   r   r	   r   r
   r   r   >   r	   r
   r   )r	   r   r   )r   r   r   )r
   r   r   z 'evict\(\): dictionary is empty'matchr'   r.   r   w)ry   r   r   notexist)r   r   evictrN   rO   KeyErrorr   s     r   test_explicit_evictr}      s   
A
b!**CCHCHCHq66___$$$$99;;+%%%%q66c3Z99S>>[((((q66cU????99;;+%%%%	x'J	K	K	K  		               CHCH99S>>[((((	xz	2	2	2  		*                 s$   C11C58C5<EE#&E#c                     t          di d           } |                     dd           |                     dd           |                     dd	           |                     d
d           t          dddd	ddd           }| j        |j        cxk    rddd	ddk    sn J | j        |j        cxk    rdddddk    sn J | j        |j        cxk    rdk    sn J t          | j                  t          |j                  cxk    rg dk    sn J t          | j                  t          |j                  cxk    rd
gk    sn J d S )Nr   c                     |dz  S Nr   r,   r\   s     r   r6   z%test_init_not_empty.<locals>.<lambda>  s
    AE r   rf   r   re   r      r      r'   <   )r   r   r   r'   c                     |dz  S r   r,   r\   s     r   r6   z%test_init_not_empty.<locals>.<lambda>  s
    a!e r   (   x      )r   rr   r   r#   r   rP   rQ   rs   )lru1lru2s     r   test_init_not_emptyr     s   sB11222DQQQQsrbR009K9KLLLD6TV;;;;2";;;;;;;;<4<HHHHrbRC+H+HHHHHHH 18888S888888
tDJ//????<<<??????
tDJ//6666A366666666r   c                     t          ddddd          } t          | j                  g dk    sJ t          j        t
          d          5  |                     g d           d d d            n# 1 swxY w Y   t          | j                  g dk    sJ |                     d	d
g          dddk    sJ t          | j                  g dk    sJ d S )Nr   r   r   r   rL   ry   rw   )r	   ry   r
   r
   r	   )r
   r	   )r   r
   r	   )r   rP   rQ   rN   rO   r|   get_all_or_nothingr   s    r   test_get_all_or_nothingr   %  s%   
c++
,
,C	??ooo----	xs	+	+	+ 0 0///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0	??ooo----!!3*--qq1A1AAAAA	??ooo------s   A00A47A4c                      g fd} t          di d |           dd<   dd<   dd<   dd	<   d
d<   j        sJ g dk    sJ t                    dd
dk    sJ d S )Nc                                          |            t                    dk    r                                 d S d S rX   )r4   r   close)r-   r.   evictedr   s     r   r0   z&test_close_aborts_eviction.<locals>.cb2  s?    qw<<1IIKKKKK r   r   c                     |S r2   r,   r\   s     r   r6   z,test_close_aborts_eviction.<locals>.<lambda>7  rk   r   rm   r   r   rK   cr   Z   e)r   rK   r   )r   r   )r   closedr   )r0   r   r   s    @@r   test_close_aborts_evictionr   /  s    G     
 c2nnr
:
:
:CCHCHCHCHCH:ooo%%%%99br********r   c                      dd G fddt           j                  } t          d |                       5 }|                                 d d d            n# 1 swxY w Y   dk    sJ sJ d S )Nr   Fc                   $    e Zd ZfdZ fdZdS )test_flush_close.<locals>.Dc                     dz  d S )Nr   r,   )selfflusheds    r   flushz!test_flush_close.<locals>.D.flushH  s    qLGGGr   c                     dd S )NTr,   )r   r   s    r   r   z!test_flush_close.<locals>.D.closeL  s    FFFr   N)r?   r@   rA   r   r   )r   r   s   r   Dr   G  sG        	 	 	 	 		 	 	 	 	 	 	r   r   re   r   )r   
SimpleDictr   r   )r   r   r   r   s     @@r   test_flush_closer   C  s    GF       J!    
R 		               a<<<<MMMMMs   AA"Ac                      g t          di fdd           } d| d<   rJ d| _        rJ | j        rJ d| d	<   dgk    sJ d
| d<   ddgk    sJ d S )Nre   c                 .                         |           S r2   r3   r-   r.   r   s     r   r6   ztest_update_n.<locals>.<lambda>Y  s    '..*;*; r   c                     |S r2   r,   r\   s     r   r6   ztest_update_n.<locals>.<lambda>Y  s    QR r   r]   r   r	   r   r   r
   r'   r   )r   r   rs   r   r   s    @r   test_update_nr   W  s    GB;;;;NNSSSAAcF ACwAcFseAcFsCj      r   c                      g t          di fdd           } d| _        d| d<   d| d	<   dgk    sJ d
| d<   ddgk    sJ d S )Nr   c                 .                         |           S r2   r3   r   s     r   r6   z$test_update_offset.<locals>.<lambda>j  s    ):): r   c                     |S r2   r,   r\   s     r   r6   z$test_update_offset.<locals>.<lambda>j  s    PQ r   r]   r   r   r	   g      @r
   g      @r   )r   offsetr   s    @r   test_update_offsetr   h  sz    GAr::::>>RRRAAHAcFAcFseAcFsCj      r   event)r   rr   delc                 J   t          j                    t          j                    g fd}fd}t          di ||d           }|                    dd           t	          d          5 }|                    |j                  }                    d	          sJ |                                d
k    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gk    sJ | dv r:|j
        ddik    sJ |j        ddik    sJ t          |j                  dgk    sJ n|j
        rJ |j        rJ |j        rJ |j        rJ dS )z]See also:

    test_buffer.py::test_cancel_evict
    test_buffer.py::test_cancel_restore
    c                 `                                                          d          sJ d S )Nr   timeout)r   wait)r-   r.   ev1ev2s     r   r0   ztest_cancel_evict.<locals>.cb  s0    			xxx"""""""r   c                 6                         | |f           d S r2   r3   )r-   r.   logs     r   	cancel_cbz$test_cancel_evict.<locals>.cancel_cb  s    

Aq6r   r   c                     |S r2   r,   r\   s     r   r6   z#test_cancel_evict.<locals>.<lambda>  s    ST r   )r8   on_cancel_evictr^   r	   r   r   r   )NNr   r   r   rr   r   Nr9   )r   rr   )	threadingEventr   rr   r   submitr{   r   r   resultr   r#   rP   rQ   r$   )	r   r0   r   r   exfutr   r   r   s	         @@@r   test_cancel_evictr   u  sT    /

C
/

C
C# # # # # #     c2Inn
U
U
UCOOC	A		 /"ii	""xxx""""" yy{{o----E>>CHHm##OOC####E>>>>C			zz||...../ / / / / / / / / / / / / / /" 8*&&&ua    {sAh&&&&CI3%'''''5;9      s   1B/D--D14D1c                 .    t          j        d           d S )Ng{Gz?)timesleepr\   s     r   slow_cbr     s    Jtr   c                      t          di d t          t                    } t          j        | d           d| _        t          j        |            d S )Nr   c                 .    t          j        g d          S )N)g??皙?randomchoicer\   s     r   r6   z7test_stress_different_keys_threadsafe.<locals>.<lambda>  s    FM///:: r   r^   r8   r   T)allow_keyerrorr   )r   r   r   check_different_keys_threadsafer   r    r   s    r   %test_stress_different_keys_threadsafer     s`     	
::  C .s4HHHHCES!!!!!r   c                      t          di d t          t                    } t          j        |            d| _        t          j        |            d S )Nr   c                 .    t          j        ddg          S )Nr   r   r   r\   s     r   r6   z1test_stress_same_key_threadsafe.<locals>.<lambda>  s    FM3*55 r   r   r   )r   r   r   check_same_key_threadsafer   r    r   s    r   test_stress_same_key_threadsafer     s[     	
55  C (---CES!!!!!r   )#r   r   r   concurrent.futuresr   rN   zictr   
zict.testsr   r   r   r%   r)   r:   rS   rb   rh   ru   r}   r   r   r   r   r   r   markparametrizer   r   stressrepeatREPEAT_STRESS_TESTSr   r   r,   r   r   <module>r      s         1 1 1 1 1 1        ! ! ! ! ! !" " "6  ! ! !"" " "  $$. $. $.N7) 7) 7)t  .     :  47 7 7. . .+ + +(  (! ! !"
! 
! 
! "?@@.! .! A@.!b   J233" " 43 "  J233" " 43 " " "r   