o
    IXh=                     @   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rKe   dS dS )    N)WeakSet)
UserString)Set
MutableSet)supportc                   @   s   e Zd ZdS )FooN)__name__
__module____qualname__ r   r   ;/opt/python-3.10.19/usr/lib/python3.10/test/test_weakset.pyr      s    r   c                   @      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          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      g | ]}t |qS r   ustr.0cr   r   r   
<listcomp>       z%TestWeakSet.setUp.<locals>.<listcomp>abr   c                 S   r   r   r   r   r   r   r   r      r   )xyzc                 S   r   r   r   r   r   r   r   r      r   abc                 S   r   r   r   r   r   r   r   r      r   Zabcdec                 S   r   r   r   r   r   r   r   r      r   defc                 S   r   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-      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/   r2   r4   r3   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 )NrB   r&   )r.   rC   r/   r2   assertNotInr:   r3   r4   r   rE   r   r   r   r   r   r   test_contains7   s   
zTestWeakSet.test_containsc                 C   s  | j | j}| jD ]}| ||v || jv p|| jv  q
| | j t| j | t|t | 	t
| j jg g tttjttfD ]}t| j| j }|| j}| | j || ~qA| t|t| jt| j  | j  t  | t|t| jt| j  d S r   )r/   unionr(   r.   rC   r2   r   r'   typer>   r?   r8   	frozensetr0   r1   listtuplerD   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/   rJ   r(   rC   r8   rL   r   ir   r   r   test_orR      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| q:| t|t| j | j  t  | t|t| j d S r   )r   r.   intersectionr(   rC   rK   r8   rL   r0   r1   rM   rN   r'   rD   rO   rP   rQ   )r   r/   rV   r   rS   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/   rY   r(   rC   r8   rL   rU   r   r   r   test_andj   rX   zTestWeakSet.test_andc                 C   sv   | j | j}| jD ]}| ||v || jv o|| jv q
| | j t| j | t|t | 	t
| j jg g d S r   )r/   
differencer(   r.   rC   r2   r   r'   rK   r>   r?   r   rV   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/   r_   r(   rC   r8   rL   rU   r   r   r   test_subw   rX   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.   rC   r2   r   r'   rK   r>   r?   rD   rO   rP   rQ   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/   rc   r(   rC   r8   rL   rU   r   r   r   test_xor   rX   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)r[   r)   r*   assertFalser+   r8   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   )r[   r)   r*   rg   r+   r   r   r   r   r   test_lt      zTestWeakSet.test_ltc                 C   sL   |  | j| jk | | j| jk | | j| jk | t t k d S r   )r[   r*   r)   rg   r+   r   r   r   r   r   test_gt   rl   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   rV   r   r   r   	<genexpr>   s    z&TestWeakSet.test_gc.<locals>.<genexpr>i  )r   ranger   subr8   )r   r/   elemr   r   r   test_gc   s   zTestWeakSet.test_gcc                 C   sT   G dd dt }| }t }|| | || || || || d S )Nc                   @   r   )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
   rv   r   r   r   r   H   r   rw   )r   r8   addr:   removediscard)r   rw   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=   rB   )r   r   r'   rC   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'   assertNotEqualru   )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   rA   zTestWeakSet.test_hashc                 C   s2   | j   | | j tg  | t| j d d S )Nr   )r/   clearrC   r   rD   r   r   r   r   
test_clear   s   
zTestWeakSet.test_clearc                 C   s2   | j  }| | j | | t| j t| d S r   )r/   copyrC   r~   ru   )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QrB   )r   r/   rx   r:   r   rC   r>   r?   r4   r   r   rE   r[   rD   r3   )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/   ry   rG   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/   rz   rG   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   )rp   rD   r/   rO   rG   r>   r   )r   rV   rr   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(   rC   r'   r:   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   r8   r(   r'   r:   rH   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/   r8   r(   r'   r:   rH   r   r   r   test_ior  s   zTestWeakSet.test_iorc                 C   sv   | j | j}| |d  | j| j D ]}|| jv r'|| jv r'| || j  q| || j  q| t| j jg g d S r   )	r/   intersection_updater(   rC   r'   r:   rG   r>   r?   r   r   r   r   test_intersection_update     z$TestWeakSet.test_intersection_updatec                 C   s\   |  j t| jM  _ | j| j D ]}|| jv r$|| jv r$| || j  q| || j  qd S r   r/   r8   r(   r'   r:   rG   rH   r   r   r   	test_iand     zTestWeakSet.test_iandc                 C   s   | j | j}| |d  | j| j D ]}|| jv r'|| jvr'| || j  q| || j  q| t| j jg g | t| j j	g g d S r   )
r/   difference_updater(   rC   r'   r:   rG   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 ]}|| jv r$|| jvr$| || j  q| || j  qd S r   r   rH   r   r   r   	test_isub$  r   zTestWeakSet.test_isubc                 C   sv   | j | j}| |d  | j| j D ]}|| jv || jv A r'| || j  q| || j  q| t| j jg g d S r   )	r/   r   r(   rC   r'   r:   rG   r>   r?   r   r   r   r    test_symmetric_difference_update,  r   z,TestWeakSet.test_symmetric_difference_updatec                 C   s\   |  j t| jN  _ | j| j D ]}|| jv || jv A r$| || j  q| || j  qd S r   r   rH   r   r   r   	test_ixor6  r   zTestWeakSet.test_ixorc                 C   sp   | j  }||O }| || j  ||M }| || j  ||8 }| |t  | j  }||N }| |t  d S r   )r/   r   rC   r   )r   r   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 )NrB   )	r[   r/   r   r'   rg   r8   rM   rN   r   r   r   r   r   test_eqJ  s   zTestWeakSet.test_eqc                 C   s4   |  | jt| jk t }t }| ||k d S r   )r[   r/   r8   r'   r   rg   )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   r   r   r   r   r   r   r   r   ]  r   zATestWeakSet.test_weak_destroy_while_iterating.<locals>.<listcomp>r   rB   )	r   iternextrP   rQ   r:   rD   rM   rC   )r   r'   r/   itr   r   r   !test_weak_destroy_while_iteratingZ  s   $z-TestWeakSet.test_weak_destroy_while_iteratingc                    sj  dd t jD  t tj fdd}| }| | W d    n1 s*w   Y  | }| tj| W d    n1 sEw   Y  | | | }	| W d    n1 scw   Y  | 
|  }| }| W d    n1 sw   Y  | tt| | }  W d    n1 sw   Y  | td d S )Nc                 S   r   r   r   r   r   r   r   r   l  r   zLTestWeakSet.test_weak_destroy_and_mutate_while_iterating.<locals>.<listcomp>c                  3   sZ    z(t } ttt| }tt  }||krt|  t  |V  W d } d S d } w r   )r   r   strr   rO   rP   rQ   )r   yieldedrR   r'   r/   r   r   testcontextn  s   zMTestWeakSet.test_weak_destroy_and_mutate_while_iterating.<locals>.testcontextr   )r,   r-   r   
contextlibcontextmanagerrG   r>   r   ry   rx   r:   r   r   rC   rD   r   )r   r   rR   r   r   r   r   ,test_weak_destroy_and_mutate_while_iteratingj  s0   
z8TestWeakSet.test_weak_destroy_and_mutate_while_iteratingc                 C   s   d}dd t |D }t|}~t|}zt| W n	 ty#   Y nw t  t|}~t  t  t|}| |d | 	|d d S )N   c                 S      g | ]}t  qS r   r   rn   r   r   r   r         z/TestWeakSet.test_len_cycles.<locals>.<listcomp>)r   rB   r   )
rp   r   r   r   StopIterationrP   rQ   rD   r:   rC   )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 ]S}d}td t||| dd t|D }t|}~t|}zt| W n	 t	yB   Y nw t
|}~t
|}| |d | || | |d | || qd S )NrB   d   r   r   c                 S   r   r   r   rn   r   r   r   r     r   z-TestWeakSet.test_len_race.<locals>.<listcomp>)Z
addCleanuprP   Zset_thresholdZget_thresholdrp   rQ   r   r   r   r   rD   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
   r5   r<   r@   rF   rI   rT   rW   rZ   r]   r^   ra   rb   rd   re   rj   rk   rm   rs   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   r   r   r      s^    
	


%r   __main__)Zunittestweakrefr   r,   collectionsr   r   collections.abcr   r   rP   r   testr   r   r   ZTestCaser   r   mainr   r   r   r   <module>   s"       3