a
    ze=                     @   s   d dl Z d dlmZ d dlZd dlmZ d dlmZm	Z	 d dl
Z
d dlZd dlmZ G dd dZG dd	 d	ZG d
d de jZedkre   dS )    N)WeakSet)
UserString)Set
MutableSet)supportc                   @   s   e Zd ZdS )FooN)__name__
__module____qualname__ r   r   '/usr/lib/python3.9/test/test_weakset.pyr      s   r   c                   @   s   e Zd Zdd ZdS )RefCyclec                 C   s
   | | _ d S N)cycleselfr   r   r   __init__   s    zRefCycle.__init__N)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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/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]S )^TestWeakSetc                 C   s   dd dD | _ dd dD | _dd dD | _dd d	D | _d
d dD | _t| j| _t| j| _t| j| _dd t	j
D | _t| j | _t| j | _td| _t| jg| _d S )Nc                 S   s   g | ]}t |qS r   ustr.0cr   r   r   
<listcomp>       z%TestWeakSet.setUp.<locals>.<listcomp>abr   c                 S   s   g | ]}t |qS r   r   r   r   r   r   r      r   )xyzc                 S   s   g | ]}t |qS r   r   r   r   r   r   r      r   abc                 S   s   g | ]}t |qS r   r   r   r   r   r   r      r   Zabcdec                 S   s   g | ]}t |qS r   r   r   r   r   r   r      r   defc                 S   s   g | ]}t |qS r   r   r   r   r   r   r      r   F)itemsitems2Zab_itemsZabcde_itemsZ	def_itemsr   
ab_weaksetabcde_weaksetdef_weaksetstringascii_lettersletterssdictfromkeysdr   objfsr   r   r   r   setUp   s    
zTestWeakSet.setUpc                 C   s@   t t}t tD ]*}|dks|dr(q| ||d|  qd S )NZ
test_c_api_zWeakSet missing method )dirr   set
startswithassertIn)r   Zweaksetmethodsmethodr   r   r   test_methods%   s    zTestWeakSet.test_methodsc                 C   s   |  ttg d d S )N   )assertRaises	TypeErrorr   r   r   r   r   test_new_or_init-   s    zTestWeakSet.test_new_or_initc                 C   sL   |  t| jt| j |  t| jd | `t  |  t| jd d S )N   r   )assertEquallenr,   r/   r1   r0   r   
gc_collectr   r   r   r   test_len0   s
    zTestWeakSet.test_lenc                 C   sd   | j D ]}| || jv || jv  q| d| j | | j| j | `t	  | t
d| j d S )Nr>   r#   )r+   r?   r,   r/   assertNotInr7   r0   r1   r   rA   r   r   r   r   r   r   test_contains7   s    
zTestWeakSet.test_containsc                 C   s  | j | j}| jD ]$}| ||v || jv p4|| jv  q| | j t| j | t|t | 	t
| j jg g tttjttfD ]4}t| j| j }|| j}| | j || ~q| t|t| jt| j  | j  t  | t|t| jt| j  d S r   )r,   unionr%   r+   r?   r/   r   r$   typer;   r<   r5   	frozensetr-   r.   listtupler@   popgccollect)r   ur   Cr   r   r   r   
test_unionA   s    
"
 
zTestWeakSet.test_unionc                 C   sB   | j | j}| | j t| jB | | | j t| jB | d S r   )r,   rF   r%   r?   r5   rH   r   ir   r   r   test_orR   s    zTestWeakSet.test_orc                 C   s   t | j}|| j}| jD ]$}| ||v || jv o<|| jv  q| |t | j | t|t  tttj	t
tfD ]$}t g }| ||| j| qt| t|t| j | j  t  | t|t| j d S r   )r   r+   intersectionr%   r?   rG   r5   rH   r-   r.   rI   rJ   r$   r@   rK   rL   rM   )r   r,   rR   r   rO   r   r   r   r   test_intersectionW   s    

"
zTestWeakSet.test_intersectionc                 C   s6   |  | jt| j |  | jt| j  d S r   )
assertTruer,   
isdisjointr   r%   r+   r   r   r   r   test_isdisjointf   s    zTestWeakSet.test_isdisjointc                 C   sB   | j | j}| | j t| j@ | | | j t| j@ | d S r   )r,   rT   r%   r?   r5   rH   rQ   r   r   r   test_andj   s    zTestWeakSet.test_andc                 C   sv   | j | j}| jD ]$}| ||v || jv o4|| jv q| | j t| j | t|t | 	t
| j jg g d S r   )r,   
differencer%   r+   r?   r/   r   r$   rG   r;   r<   r   rR   r   r   r   r   test_differenceo   s    
"zTestWeakSet.test_differencec                 C   sB   | j | j}| | j t| j | | | j t| j | d S r   )r,   rZ   r%   r?   r5   rH   rQ   r   r   r   test_subw   s    zTestWeakSet.test_subc                 C   s   | j | j}| jD ]$}| ||v || jv || jv A  q| | j t| j | t|t | 	t
| j jg g | t|t| jt| j  | j  t  | t|t| jt| j  d S r   )r,   symmetric_differencer%   r+   r?   r/   r   r$   rG   r;   r<   r@   rK   rL   rM   r[   r   r   r   test_symmetric_difference|   s    
" 
z%TestWeakSet.test_symmetric_differencec                 C   sB   | j | j}| | j t| jA | | | j t| jA | d S r   )r,   r^   r%   r?   r5   rH   rQ   r   r   r   test_xor   s    zTestWeakSet.test_xorc                 C   s   |  | j| jk |  | j| jk |  | j| jk | | j| jk | | j| jk |  tdd |  tdd | tdd | tdd d S )Nr   abcZcbs)rV   r&   r'   assertFalser(   r5   issubset
issupersetr   r   r   r   test_sub_and_super   s    zTestWeakSet.test_sub_and_superc                 C   sL   |  | j| jk  | | j| jk  | | j| jk  | t t k  d S r   )rV   r&   r'   rb   r(   r   r   r   r   r   test_lt   s    zTestWeakSet.test_ltc                 C   sL   |  | j| jk | | j| jk | | j| jk | t t k d S r   )rV   r'   r&   rb   r(   r   r   r   r   r   test_gt   s    zTestWeakSet.test_gtc                 C   s<   t dd tdD }|D ]}||_||_t |g|_qd S )Nc                 s   s   | ]}t  V  qd S r   )r   r   rR   r   r   r   	<genexpr>   r   z&TestWeakSet.test_gc.<locals>.<genexpr>i  )r   ranger   subr5   )r   r,   elemr   r   r   test_gc   s
    zTestWeakSet.test_gcc                 C   sT   G dd dt }| }t }|| | || || || || d S )Nc                   @   s   e Zd Zdd ZdS )z5TestWeakSet.test_subclass_with_custom_hash.<locals>.Hc                 S   s   t t| d@ S )Ni)intidr   r   r   r   __hash__   s    z>TestWeakSet.test_subclass_with_custom_hash.<locals>.H.__hash__N)r   r	   r
   rp   r   r   r   r   H   s   rq   )r   r5   addr7   removediscard)r   rq   r,   fr   r   r   test_subclass_with_custom_hash   s    


z*TestWeakSet.test_subclass_with_custom_hashc                 C   sd   t  }|| j | || j || j | |t | j | t|j|d | t|jd d S )Nr:   r>   )r   r   r$   r?   r,   r%   r;   r<   )r   r,   r   r   r   	test_init   s    zTestWeakSet.test_initc                 C   s*   t | j}t |}| t|t| d S r   )r   r$   assertNotEqualro   )r   r,   tr   r   r   test_constructor_identity   s    
z%TestWeakSet.test_constructor_identityc                 C   s   |  tt| j d S r   )r;   r<   hashr,   r   r   r   r   	test_hash   s    zTestWeakSet.test_hashc                 C   s2   | j   | | j tg  | t| j d d S )Nr   )r,   clearr?   r   r@   r   r   r   r   
test_clear   s    
zTestWeakSet.test_clearc                 C   s2   | j  }| | j | | t| j t| d S r   )r,   copyr?   rx   ro   )r   dupr   r   r   	test_copy   s    
zTestWeakSet.test_copyc                 C   s   t d}| j| | || j | j }| j| | | j| | t| jjg  | jt	  t
  | t| jdk | j| j | t| jdk d S )NQr>   )r   r,   rr   r7   r   r?   r;   r<   r1   r   r   rA   rV   r@   r0   )r   r   r   r   r   r   test_add   s    
zTestWeakSet.test_addc                 C   sJ   t d}| j| | || j | t| jj| | t| jjg  d S )Nr   )r   r,   rs   rC   r;   KeyErrorr<   )r   r   r   r   r   test_remove   s
    zTestWeakSet.test_removec                 C   sN   t dt d }}| j| | || j | j| | t| jjg  d S )Nr   r   )r   r,   rt   rC   r;   r<   )r   r   qr   r   r   test_discard   s
    zTestWeakSet.test_discardc                 C   s@   t t| jD ]}| j }| || j q| t| jj d S r   )rj   r@   r,   rK   rC   r;   r   )r   rR   rl   r   r   r   test_pop   s    
zTestWeakSet.test_popc                 C   sR   | j | j}| |d  | j| j D ]}| || j  q&| t| j jg g d S r   )r,   updater%   r?   r$   r7   r;   r<   r   Zretvalr   r   r   r   test_update   s
    zTestWeakSet.test_updatec                 C   s6   | j t| j | j| j D ]}| || j  qd S r   )r,   r   r5   r%   r$   r7   rD   r   r   r   test_update_set   s    zTestWeakSet.test_update_setc                 C   s8   |  j t| jO  _ | j| j D ]}| || j  q d S r   )r,   r5   r%   r$   r7   rD   r   r   r   test_ior  s    zTestWeakSet.test_iorc                 C   sv   | j | j}| |d  | j| j D ]6}|| jv rN|| jv rN| || j  q&| || j  q&| t| j jg g d S r   )	r,   intersection_updater%   r?   r$   r7   rC   r;   r<   r   r   r   r   test_intersection_update  s    z$TestWeakSet.test_intersection_updatec                 C   s\   |  j t| jM  _ | j| j D ]6}|| jv rH|| jv rH| || j  q | || j  q d S r   r,   r5   r%   r$   r7   rC   rD   r   r   r   	test_iand  s
    zTestWeakSet.test_iandc                 C   s   | j | j}| |d  | j| j D ]6}|| jv rN|| jvrN| || j  q&| || j  q&| t| j jg g | t| j j	g g d S r   )
r,   difference_updater%   r?   r$   r7   rC   r;   r<   symmetric_difference_updater   r   r   r   test_difference_update  s    z"TestWeakSet.test_difference_updatec                 C   s\   |  j t| j8  _ | j| j D ]6}|| jv rH|| jvrH| || j  q | || j  q d S r   r   rD   r   r   r   	test_isub$  s
    zTestWeakSet.test_isubc                 C   sv   | j | j}| |d  | j| j D ]6}|| jv || jv A rN| || j  q&| || j  q&| t| j jg g d S r   )	r,   r   r%   r?   r$   r7   rC   r;   r<   r   r   r   r    test_symmetric_difference_update,  s    z,TestWeakSet.test_symmetric_difference_updatec                 C   s\   |  j t| jN  _ | j| j D ]6}|| jv || jv A rH| || j  q | || j  q d S r   r   rD   r   r   r   	test_ixor6  s
    zTestWeakSet.test_ixorc                 C   sp   | j  }||O }| || j  ||M }| || j  ||8 }| |t  | j  }||N }| |t  d S r   )r,   r   r?   r   )r   ry   r   r   r   test_inplace_on_self>  s    

z TestWeakSet.test_inplace_on_selfc                 C   s   |  | j| jk |  | jt| jk | | jt| jk | | jt| jk | | jt| jk | | jttgk | | jdk d S )Nr>   )	rV   r,   r   r$   rb   r5   rI   rJ   r   r   r   r   r   test_eqJ  s    zTestWeakSet.test_eqc                 C   s4   |  | jt| jk t }t }| ||k d S r   )rV   r,   r5   r$   r   rb   )r   s1s2r   r   r   test_neT  s    zTestWeakSet.test_nec                 C   sr   dd dD }t |}t|}t| |d= t  | tt|t|t|d g ~| t|t| d S )Nc                 S   s   g | ]}t |qS r   r   r   r   r   r   r   ]  r   zATestWeakSet.test_weak_destroy_while_iterating.<locals>.<listcomp>r   r>   )	r   iternextrL   rM   r7   r@   rI   r?   )r   r$   r,   itr   r   r   !test_weak_destroy_while_iteratingZ  s    $z-TestWeakSet.test_weak_destroy_while_iteratingc                    sn  dd t jD  t tj fdd}| }| | W d    n1 sT0    Y  |  }| tj| W d    n1 s0    Y  | | | }	| W d    n1 s0    Y  | 
|  }| }| W d    n1 s0    Y  | tt| | }  W d    n1 sP0    Y  | td d S )Nc                 S   s   g | ]}t |qS r   r   r   r   r   r   r   l  r   zLTestWeakSet.test_weak_destroy_and_mutate_while_iterating.<locals>.<listcomp>c                  3   sZ   zNt } ttt| }tt  }||kr:t|  t  |V  W d } nd } 0 d S r   )r   r   strr   rK   rL   rM   )r   yieldedrN   r$   r,   r   r   testcontextn  s    zMTestWeakSet.test_weak_destroy_and_mutate_while_iterating.<locals>.testcontextr   )r)   r*   r   
contextlibcontextmanagerrC   r;   r   rs   rr   r7   r   r   r?   r@   r}   )r   r   rN   ry   r   r   r   ,test_weak_destroy_and_mutate_while_iteratingj  s&    *.(*(z8TestWeakSet.test_weak_destroy_and_mutate_while_iteratingc                 C   s   d}dd t |D }t|}~t|}zt| W n tyF   Y n0 t  t|}~t  t  t|}| |d | 	|d d S )N   c                 S   s   g | ]
}t  qS r   r   rh   r   r   r   r     r   z/TestWeakSet.test_len_cycles.<locals>.<listcomp>)r   r>   r   )
rj   r   r   r   StopIterationrL   rM   r@   r7   r?   )r   Nr$   r,   r   n1n2r   r   r   test_len_cycles  s"    zTestWeakSet.test_len_cyclesc              	   C   s   | j tjgt R   tddD ]}d}td t||| dd t|D }t|}~t|}zt| W n t	y   Y n0 t
|}~t
|}| |d | || | |d | || q"d S )Nr>   d   r   r   c                 S   s   g | ]
}t  qS r   r   rh   r   r   r   r     r   z-TestWeakSet.test_len_race.<locals>.<listcomp>)Z
addCleanuprL   Zset_thresholdZget_thresholdrj   rM   r   r   r   r   r@   ZassertGreaterEqualZassertLessEqual)r   thr   r$   r,   r   r   r   r   r   r   test_len_race  s(    
zTestWeakSet.test_len_racec                 C   s   d S r   r   r   r   r   r   	test_repr  s    zTestWeakSet.test_reprc                 C   s    |  | jt |  | jt d S r   )ZassertIsInstancer,   r   r   r   r   r   r   test_abc  s    zTestWeakSet.test_abcN)1r   r	   r
   r2   r9   r=   rB   rE   rP   rS   rU   rX   rY   r\   r]   r_   r`   re   rf   rg   rm   rv   rw   rz   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s\   
	


%r   __main__)Zunittestweakrefr   r)   collectionsr   r   collections.abcr   r   rL   r   testr   r   r   ZTestCaser   r   mainr   r   r   r   <module>   s      3