a
    ze}                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlZd dl	Z	d dl
Z
d dlZd dlmZ d dlmZmZ ejddgdZejddgdZejd	d
 ZG dd dZG dd dee
jZG dd de
jZd D ]Zeeeeee q[e
edG dd dee
jZG dd deZ G dd deZ!G dd dej"Z#e
edG dd dej"Z$G dd dej"Z%e
edG dd  d ej"Z&e'd!kre
(  dS )"    N)	randrangeshuffle)MutableMapping)mapping_testssupportcollections_collections)Zblocked)Zfreshc              	   c   s:   t j|  }|t j| < zd V  W |t j| < n|t j| < 0 d S N)sysmodules)nameZreplacementZoriginal_module r   ,/usr/lib/python3.9/test/test_ordered_dict.pyreplaced_module   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]d^ Z1e2j3d_d` Z4daS )bOrderedDictTestsc                 C   s^  | j }| t |ddgd  W d    n1 s40    Y  g d}| t|t| | | t|f i t| | | t|| | | t|g dddd | | t|dd	 d
g | t|dd dg | t|d | t|dd | t|j |g d}|jddgddd | t| g d d S )Na   b   r   r   c   d   e   r   r   )r   	   r   r   r    r   r   *   self)r&   r$   other)r(   r$   r   r   r   r   )r   ,   )r   7   r   f      r   gr   r   r   r   r   r   r,   )r1   r/   )	OrderedDictassertRaises	TypeErrorassertEqualsorteddictitemslist__init__)r&   r3   pairsr   r   r   r   	test_init   s,    ,"
zOrderedDictTests.test_initc                 C   sD   | j }g d}t| ||}|f i |}| t| | d S )Nr2   )r3   r   r6   r:   r9   )r&   r3   r9   Zargdictr   r   r   r   test_4687   s    zOrderedDictTests.test_468c                 C   s  | j }| t" | ddgd  W d    n1 s80    Y  g d}| }|t| | t| | | }|jf i t| | t| | | }|| | t| | | }|jg dddd | t| | | }|jdd	 | t| d
g | }|ji d | t| di fg | }|jddddd | tt| g d |g d}|jddgddd | t| g d | t| jd | t| jdd | t|j | t| jd | t| jdd | t|j d S )Nr   r   r   r!   r   r    r#      r%   )r&   r?   r'   r(   r.   r/      )redbluer(   r&   ))rB   r.   )r(   r/   )rA   r    )r&   r@   r)   r   r,   r   r0   r2   r$   r   )	r3   r4   r5   updater8   r6   r7   r9   r:   )r&   r3   r<   odr   r   r   r   test_update?   sL    0
zOrderedDictTests.test_updatec                    s4   g  G  fddd}|  |  |  dg d S )Nc                       s$   e Zd Z fddZ fddZdS )z.OrderedDictTests.test_init_calls.<locals>.Spamc                    s     d dS )Nkeysr   appendr%   Zcallsr   r   rF   p   s    
z3OrderedDictTests.test_init_calls.<locals>.Spam.keysc                    s     d dS )Nr9   r   rG   r%   rI   r   r   r9   s   s    
z4OrderedDictTests.test_init_calls.<locals>.Spam.itemsN)__name__
__module____qualname__rF   r9   r   rI   r   r   Spamo   s   rM   rF   )r3   r6   )r&   rM   r   rI   r   test_init_callsm   s    z OrderedDictTests.test_init_callsc                 C   s   | j }|d}| t| dd dD  |jdd d}| t| dd dD  |jddd}| t| dd dD  d S )Nabcc                 S   s   g | ]}|d fqS r	   r   .0r   r   r   r   
<listcomp>}       z2OrderedDictTests.test_fromkeys.<locals>.<listcomp>valuec                 S   s   g | ]}|d fqS r	   r   rP   r   r   r   rR      rS   r   c                 S   s   g | ]}|d fqS r   r   rP   r   r   r   rR      rS   )r3   fromkeysr6   r:   r9   r&   r3   rD   r   r   r   test_fromkeysz   s    
zOrderedDictTests.test_fromkeysc                 C   s(   | j }| | t | t|t d S r	   )r3   assertIsInstancer   
assertTrue
issubclass)r&   r3   r   r   r   test_abc   s    zOrderedDictTests.test_abcc                 C   sN   | j }g d}t| ||}| t|t| |  | t|d d S N)r   r   r   )r   r   r   r   r,   r   )r3   r   r6   lenclearr&   r3   r<   rD   r   r   r   
test_clear   s    zOrderedDictTests.test_clearc                 C   s   | j }g d}||}|d= | d| | t |d= W d    n1 sN0    Y  | t| |d d |dd    d S )Nr_   r   r   r   )r3   assertNotInr4   KeyErrorr6   r:   r9   rb   r   r   r   test_delitem   s    $zOrderedDictTests.test_delitemc                 C   s>   | j }|g d}d|d< d|d< | t| g d d S )N)r   r   r   r   r   r   r   
   r      r-   )rg   r   )r   ri   rh   r   )r-   rj   r3   r6   r:   r9   rX   r   r   r   test_setitem   s    zOrderedDictTests.test_setitemc                 C   s  | j }g d}t| ||}| t|dd |D  | t| dd |D  | t| dd |D  | t| | | tt|dd t|D  | tt| dd t|D  | tt| dd t|D  | tt| tt| d S )	Nr_   c                 S   s   g | ]}|d  qS rV   r   rQ   tr   r   r   rR      rS   z3OrderedDictTests.test_iterators.<locals>.<listcomp>c                 S   s   g | ]}|d  qS rV   r   rm   r   r   r   rR      rS   c                 S   s   g | ]}|d  qS r   r   rm   r   r   r   rR      rS   c                 S   s   g | ]}|d  qS rV   r   rm   r   r   r   rR      rS   c                 S   s   g | ]}|d  qS rV   r   rm   r   r   r   rR      rS   c                 S   s   g | ]}|d  qS ro   r   rm   r   r   r   rR      rS   )r3   r   r6   r:   rF   valuesr9   reversedrb   r   r   r   test_iterators   s$    zOrderedDictTests.test_iteratorsc                 C   s\   | j }|d}t|}t|}||= | t t| W d    n1 sN0    Y  d S )NrO   )r3   rW   iternextr4   	Exception)r&   r3   rD   itkeyr   r   r   %test_detect_deletion_during_iteration   s    
z6OrderedDictTests.test_detect_deletion_during_iterationc                 C   s   | j }| t |ddgd  W d    n1 s40    Y  g d}||}| t|dd |D  | t| dd |D  | t| dd |D  | t| | | tt|tdd t|D  d S )	Nr   r   r   c                 S   s   g | ]}|d  qS rV   r   rm   r   r   r   rR      rS   z:OrderedDictTests.test_sorted_iterators.<locals>.<listcomp>c                 S   s   g | ]}|d  qS rV   r   rm   r   r   r   rR      rS   c                 S   s   g | ]}|d  qS ro   r   rm   r   r   r   rR      rS   c                 S   s   g | ]}|d  qS rV   r   rm   r   r   r   rR      rS   )	r3   r4   r5   r6   r7   rF   rp   r9   rq   rb   r   r   r   test_sorted_iterators   s    ,z&OrderedDictTests.test_sorted_iteratorsc                 C   s   | j }| }g }| t|| | t| | | t| | | t| | | tt|| | tt| | | tt| | | tt| | d S r	   )r3   r6   r:   rF   rp   r9   rq   )r&   r3   rD   emptyr   r   r   test_iterators_empty   s    z%OrderedDictTests.test_iterators_emptyc                 C   s~   | j }g d}t| ||}|r8| | |  q| t |  W d    n1 s`0    Y  | t|d d S r^   )r3   r   r6   popitempopr4   re   r`   rb   r   r   r   test_popitem   s    &zOrderedDictTests.test_popitemc                 C   sb   | j }dd tdD }||}tdD ]}|d q(|d |jdd | t|d d S )Nc                 S   s   g | ]}||fqS r   r   rQ   ir   r   r   rR      rS   z6OrderedDictTests.test_popitem_last.<locals>.<listcomp>   r@   TZlastrj   )r3   ranger|   r6   r`   )r&   r3   r<   objr   r   r   r   test_popitem_last   s    
z"OrderedDictTests.test_popitem_lastc                 C   sH  | j }g d}t| ||}t| |rJ| \}}| ||| q&| t |d W d    n1 st0    Y  | t|d | ||dd G dd d|}|dd}| |d	d
d
 | |ddd | |ddd | |jdddd | t |d W d    n1 s:0    Y  d S )Nr_   Zxyzr   i90  c                   @   s   e Zd Zdd ZdS )z*OrderedDictTests.test_pop.<locals>.Missingc                 S   s   dS Nr   r   r&   rw   r   r   r   __missing__   s    z6OrderedDictTests.test_pop.<locals>.Missing.__missing__NrJ   rK   rL   r   r   r   r   r   Missing   s   r   r   r   r   r    r   r.   default)r3   r   r}   r6   r4   re   r`   )r&   r3   r<   rD   kvr   mr   r   r   test_pop   s(    (
zOrderedDictTests.test_popc                 C   s   | j }g d}t| ||}||}| || |dd  |d d  }||}| || | |t| | t|| | |||d d  d S )Nr_   r   )r3   r   r6   ZassertNotEqualr8   )r&   r3   r<   Zod1Zod2r   r   r   test_equality	  s    zOrderedDictTests.test_equalityc              
      s  j }g d}||  fdd}|   |t  |t  tdjf ttjd D ]F}j|d& |t	t
 | W d    qh1 s0    Y  qhW d    n1 s0    Y  |tt  | }|  || ||  d S )Nr_   c                    sn   d|  f } |  | |   t|  t   t| t  t| t  d S )Nz
copy: %s
od: %s)assertIsNotr6   r:   r9   r`   type)dupmsgrD   r&   r   r   check  s    z,OrderedDictTests.test_copying.<locals>.checkr   r   )proto)r3   copydeepcopyr   moduler   pickleHIGHEST_PROTOCOLsubTestloadsdumpsevalreprrC   )r&   r3   r<   r   r   Zupdate_testr   r   r   test_copying  s     T
zOrderedDictTests.test_copyingc                 C   s:   | j }g d}||}| tdd | d D  d S )Nr_   c                 s   s   | ]}t |tkV  qd S r	   )r   r:   )rQ   Zpairr   r   r   	<genexpr><  rS   z5OrderedDictTests.test_yaml_linkage.<locals>.<genexpr>r   )r3   r[   all
__reduce__rb   r   r   r   test_yaml_linkage4  s    z"OrderedDictTests.test_yaml_linkagec                 C   sj   | j }g d}||}| |jt | | d  d|_| |jd d | | d ddi d S )Nr_   r   ri   x)r3   rZ   __dict__r8   assertIsNoner   r   r6   rb   r   r   r   test_reduce_not_too_fat>  s    z(OrderedDictTests.test_reduce_not_too_fatc                 C   s   | j }| }||d< td| jj tdtjd D ]H}tt||}| || | 	t
| dg | |d | q2W d    n1 s0    Y  d S )Nr   r   r   )r3   r   r   r   r   r   r   r   r   r6   r:   rF   assertIs)r&   r3   rD   r   r   r   r   r   test_pickle_recursiveI  s    z&OrderedDictTests.test_pickle_recursivec                 C   sL   | j }|g d}| t|d | tt|| | t| d d S )Nr_   zIOrderedDict([('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)])zOrderedDict())r3   r6   r   r   rX   r   r   r   	test_reprV  s    
zOrderedDictTests.test_reprc                 C   s,   | j }|d}||d< | t|d d S )NrO   r   z@OrderedDict([('a', None), ('b', None), ('c', None), ('x', ...)]))r3   rW   r6   r   rX   r   r   r   test_repr_recursive^  s    

z$OrderedDictTests.test_repr_recursivec                 C   sP   | j }| }| |d< t|}| |t | |d< t|}| |t d S )Nr$   )r3   rp   r   rZ   strr9   )r&   r3   rD   rr   r   r   test_repr_recursive_valuesf  s    z+OrderedDictTests.test_repr_recursive_valuesc                 C   s   | j }g d}t| ||}t| }| |ddd | t| | | |ddd | t| d d | |jdd	d
d	 G dd d|}| | dd	d	 d S )Nr_   r   ri   r   r   r   )r   ri   r1   r"   r   c                   @   s   e Zd Zdd ZdS )z1OrderedDictTests.test_setdefault.<locals>.Missingc                 S   s   dS r   r   r   r   r   r   r     s    z=OrderedDictTests.test_setdefault.<locals>.Missing.__missing__Nr   r   r   r   r   r     s   r   r    )r3   r   r:   r9   r6   
setdefault)r&   r3   r<   rD   Z
pair_orderr   r   r   r   test_setdefaultt  s    z OrderedDictTests.test_setdefaultc                 C   s\   | j }| }d|d< d|d< |d= | t| dg d|d< | t| ddg d S )Nr   r   r   r   r   r   rk   rX   r   r   r   test_reinsert  s    zOrderedDictTests.test_reinsertc                 C   s2  | j }|d}| t|td |d | t|td |dd | t|td |dd | t|td |d | t|td |jddd | t|td	 | t |d
 W d    n1 s0    Y  | t |d
d W d    n1 s$0    Y  d S )Nabcder   ZabdecFZcabder   r   r   Zbcader   )r3   rW   r6   r:   move_to_endr4   re   rX   r   r   r   test_move_to_end  s"    


(z!OrderedDictTests.test_move_to_endc                 C   s   | j }|d}|jddd | t|td |jddd | t|td |d}|d | t|td |d | t|td	 d S )
NrO   r   Fr   Zcabr   ZacbZbcaZbac)r3   rW   r   r6   r:   rX   r   r   r   test_move_to_end_issue25406  s    



z,OrderedDictTests.test_move_to_end_issue25406c                 C   s:   | j }tdd}|f i |}| t|t| d S )Nr   r   )r3   r8   ZassertGreaterr
   	getsizeof)r&   r3   r   rD   r   r   r   test_sizeof  s    
zOrderedDictTests.test_sizeofc                 C   sL   | j }d }||}| | t|  | | t|  d S )Nz@the quick brown fox jumped over a lazy dog yesterday before dawn)r3   splitrW   r6   rF   r8   r9   )r&   r3   srD   r   r   r   
test_views  s
    
zOrderedDictTests.test_viewsc                 C   s:   | j }G dd d|}g d}| t|| | d S )Nc                   @   s   e Zd Zdd ZdS )z3OrderedDictTests.test_override_update.<locals>.MyODc                 _   s
   t  d S r	   )ru   )r&   argskwdsr   r   r   rC     s    z:OrderedDictTests.test_override_update.<locals>.MyOD.updateN)rJ   rK   rL   rC   r   r   r   r   MyOD  s   r   )r   r   r   rk   )r&   r3   r   r9   r   r   r   test_override_update  s    z%OrderedDictTests.test_override_updatec                 C   s4   | j }d }tdD ]}|d |fg}q~t  d S )Ni  )r3   r   r   
gc_collect)r&   r3   r   _r   r   r   test_highly_nested  s    z#OrderedDictTests.test_highly_nestedc                    sj   | j }g  G  fddd|}d }tdD ]}|d |fg}||_q*~t  |  tttd d S )Nc                       s   e Zd Z fddZdS )z:OrderedDictTests.test_highly_nested_subclass.<locals>.MyODc                    s     | j d S r	   )rH   r   r%   Zdeletedr   r   __del__  s    zBOrderedDictTests.test_highly_nested_subclass.<locals>.MyOD.__del__N)rJ   rK   rL   r   r   r   r   r   r     s   r   d   )r3   r   r   r   r   r6   r:   rq   )r&   r3   r   r   r   r   r   r   test_highly_nested_subclass  s    z,OrderedDictTests.test_highly_nested_subclassc           	      C   s   | j }G dd d}dd }d}||}||}|||}| }d||< d||< d||< d|d< ||= ||= | t| |dfdg d S )	Nc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
z9OrderedDictTests.test_delitem_hash_collision.<locals>.Keyc                 S   s   || _ tt| | _d S r	   )_hashr   idrU   )r&   hashr   r   r   r;     s    zBOrderedDictTests.test_delitem_hash_collision.<locals>.Key.__init__c                 S   s   | j S r	   )r   r%   r   r   r   __hash__  s    zBOrderedDictTests.test_delitem_hash_collision.<locals>.Key.__hash__c                 S   s(   z| j |j kW S  ty"   Y dS 0 d S )NF)rU   AttributeError)r&   r(   r   r   r   __eq__  s    z@OrderedDictTests.test_delitem_hash_collision.<locals>.Key.__eq__c                 S   s   | j S r	   rT   r%   r   r   r   __repr__  s    zBOrderedDictTests.test_delitem_hash_collision.<locals>.Key.__repr__N)rJ   rK   rL   r;   r   r   r   r   r   r   r   Key  s   r   c                 S   s$   d}| |d @ }|d> | |  d S )Nr@   r   r   r   )r   ZMINSIZEr   r   r   r   blocking_hash  s    zCOrderedDictTests.test_delitem_hash_collision.<locals>.blocking_hashr   .after)r   .rk   )	r&   r3   r   r   Z	COLLIDINGrw   Z	collidingblockingrD   r   r   r   test_delitem_hash_collision  s    z,OrderedDictTests.test_delitem_hash_collisionc                 C   s
  | j }G dd d}| }tdD ]}| }|||< q"| t t|  W d    n1 sb0    Y  | t t|  W d    n1 s0    Y  | t t| W d    n1 s0    Y  | t |  W d    n1 s0    Y  d S )Nc                   @   s   e Zd Zdd ZdS )z-OrderedDictTests.test_issue24347.<locals>.Keyc                 S   s   t dS )Ni )r   r%   r   r   r   r     s    z6OrderedDictTests.test_issue24347.<locals>.Key.__hash__NrJ   rK   rL   r   r   r   r   r   r     s   r   r   )	r3   r   r4   re   r:   rp   r9   r   r   )r&   r3   r   rD   r   rw   r   r   r   test_issue24347  s    
**&z OrderedDictTests.test_issue24347c                 C   s0   | j }G dd d}| }d|| < |  d S )Nc                   @   s   e Zd Zdd ZdS )z-OrderedDictTests.test_issue24348.<locals>.Keyc                 S   s   dS )Nr   r   r%   r   r   r   r   *  s    z6OrderedDictTests.test_issue24348.<locals>.Key.__hash__Nr   r   r   r   r   r   )  s   r   r   )r3   r|   )r&   r3   r   rD   r   r   r   test_issue24348&  s
    
z OrderedDictTests.test_issue24348c                 C   sL   | j }| }dD ]6}dD ],}t|dkr4|jdd || }|||< qqd S )NZ0123456789ABCDEFr   Fr   )r3   r`   r|   )r&   r3   rD   Zc0c1rw   r   r   r   test_issue246672  s    z OrderedDictTests.test_issue24667c                 C   s.   | j }| }t|dd | dt| d S Nspamr   NULL)r3   r8   __setitem__rd   r   rX   r   r   r   test_dict_setitemK  s    z"OrderedDictTests.test_dict_setitemc                 C   s^   | j }| }d|d< d|d< t|d | t t| W d    n1 sP0    Y  d S Nr   r   r   ham)r3   r8   __delitem__r4   re   r   rX   r   r   r   test_dict_delitemQ  s    z"OrderedDictTests.test_dict_delitemc                 C   s:   | j }| }d|d< d|d< t| | dt| d S )Nr   r   r   r   r   )r3   r8   ra   rd   r   rX   r   r   r   test_dict_clearZ  s    
z OrderedDictTests.test_dict_clearc                 C   s^   | j }| }d|d< d|d< t|d | t t| W d    n1 sP0    Y  d S r   )r3   r8   r}   r4   re   r   rX   r   r   r   test_dict_popb  s    zOrderedDictTests.test_dict_popc                 C   s\   | j }| }d|d< d|d< t| | t t| W d    n1 sN0    Y  d S r   )r3   r8   r|   r4   re   r   rX   r   r   r   test_dict_popitemk  s    
z"OrderedDictTests.test_dict_popitemc                 C   s.   | j }| }t|dd | dt| d S r   )r3   r8   r   rd   r   rX   r   r   r   test_dict_setdefaultt  s    z%OrderedDictTests.test_dict_setdefaultc                 C   s.   | j }| }t|dg | dt| d S )N)r   r   r   )r3   r8   rC   rd   r   rX   r   r   r   test_dict_updatez  s    z!OrderedDictTests.test_dict_updatec                    sF   | j  G  fddd}d |j|< t|}~t  | |  d S )Nc                       s   e Zd Z  ZdS )z/OrderedDictTests.test_reference_loop.<locals>.AN)rJ   rK   rL   rD   r   r3   r   r   A  s   r   )r3   rD   weakrefrefgccollectr   )r&   r   r   r   r   r   test_reference_loop  s    

z$OrderedDictTests.test_reference_loopc                 C   sP   t | t| j t | dd | j t | dd | j t | dd | j d S )Nc                 S   s   t |  S r	   )rs   rF   r   r   r   r   <lambda>  rS   z<OrderedDictTests.test_free_after_iterating.<locals>.<lambda>c                 S   s   t |  S r	   )rs   rp   r   r   r   r   r     rS   c                 S   s   t |  S r	   )rs   r9   r   r   r   r   r     rS   )r   Zcheck_free_after_iteratingrs   r3   r%   r   r   r   test_free_after_iterating  s    z*OrderedDictTests.test_free_after_iteratingc                 C   s^  | j }|dddd}|dddd}| }| }||O }|t| O }|ddddd}| |t|B | | ||B | | || | || | }||O }|ddddd}| t||B | | ||B | | || | t||B | | tt||B | | t|t|B | | }|d	O }|d
O }| || | t	 |d B  W d    n1 s0    Y  | t	 |d	B  W d    n1 s0    Y  | t	 |dB  W d    n1 s0    Y  | t	 |d
B  W d    n1 s0    Y  | t
 |dO }W d    n1 sP0    Y  d S )Nr   r   )r   r   r   r   r   )r   r   r   )r   r   r   r   )r   r   r   r   r    ZBAD)r3   r   r:   r9   r6   r8   r   r   r4   r5   
ValueError)r&   r3   r   r   r   r   expectedr   r   r   test_merge_operator  sF    ((((z$OrderedDictTests.test_merge_operatorc                 C   s6   t | d g i }t  | tt| d S r	   )rs   r3   r9   r   r   r[   Z
is_trackedrt   )r&   rv   r   r   r   !test_ordered_dict_items_result_gc  s    z2OrderedDictTests.test_ordered_dict_items_result_gcN)5rJ   rK   rL   r=   r>   rE   rN   rY   r]   rc   rf   rl   rr   rx   ry   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   r   r   r   cpython_onlyr   r   r   r   r   r      sb   .		

	'			+r   c                   @   s   e Zd ZeZejZdS )PurePythonOrderedDictTestsNrJ   rK   rL   py_collr   r3   r   r   r   r   r     s   r   c                   @   s   e Zd ZeZeZdS )CPythonBuiltinDictTestsN)rJ   rK   rL   builtinsr   r8   r3   r   r   r   r   r     s   r   ztest_init test_update test_abc test_clear test_delitem test_setitem test_detect_deletion_during_iteration test_popitem test_reinsert test_override_update test_highly_nested test_highly_nested_subclass test_delitem_hash_collision z0requires the C version of the collections modulec                   @   sH   e Zd ZeZejZejZejdd Z	dd Z
dd Zejdd Zd	S )
CPythonOrderedDictTestsc                 C   s|  | j }tj}tj}| j}|d|d }|d}|d}|d}| }	||	|d d|   d|	_||	|d d|   |	d	d
 tdD  ||	|d|  d d|  d|   |	dd
 tddD  ||	|d|  d d|  d|   ||		 |d ||	
 |d ||	 |d |d}
|t|	|
 |t|		 |
 |t|	
 |
 |t|	 |
 d S )NZnQ2P3PnPn2PZ2nP2nZn2PPZPn2Pr@   r    r   c                 S   s   g | ]}||fqS r   r   r   r   r   r   rR     rS   z=CPythonOrderedDictTests.test_sizeof_exact.<locals>.<listcomp>r   c                 S   s   g | ]}||fqS r   r   r   r   r   r   rR     rS   ri      ZiP2n2P)r3   structcalcsizer   Zcalcobjsizecheck_sizeofr   rC   r   rF   r9   rp   rs   )r&   r3   r  sizer   Z	basicsizeZ	entrysizepZnodesizerD   Zitersizer   r   r   test_sizeof_exact  s0    &&z)CPythonOrderedDictTests.test_sizeof_exactc                 C   s  | j }|d}| t|td | t8 t|D ]\}}|| | |d q8W d    n1 sl0    Y  | t" |D ]}d |d< qW d    n1 s0    Y  | t  |D ]
}|d= qW d    n1 s0    Y  | t|td d S )Nr   r    r-   r   Zbdeaf)	r3   rW   r6   r:   r4   RuntimeError	enumerater   Z
assertLess)r&   r3   rD   r   r   r   r   r    test_key_change_during_iteration  s    

,(&z8CPythonOrderedDictTests.test_key_change_during_iterationc              
   C   s   | j }g d}||}dD ]}t||}t| dd  }ttjd D ]z}| j||dX t| }t| t	||}	t
|	}
| t|
| | t|| W d    qH1 s0    Y  qHqd S )Nr_   )rF   rp   r9   r   )method_nameprotocol)r3   getattrr:   r   r   r   r   rs   rt   r   r   r6   )r&   r3   r<   rD   r  methr   r   rv   r  Z	unpickledr   r   r   test_iterators_pickling  s    


z/CPythonOrderedDictTests.test_iterators_picklingc                 C   sJ   t   |  }||_g }|| t|}|| ~~~t   d S r	   )r   r   r3   cyclerH   r   r   )r&   r   r  Zx_refr   r   r   "test_weakref_list_is_not_traversed*  s    


z:CPythonOrderedDictTests.test_weakref_list_is_not_traversedN)rJ   rK   rL   c_collr   r3   r   r  r   r  r  r  r  r   r   r   r   r     s   
r   c                   @   s"   e Zd ZeZG dd dejZdS )"PurePythonOrderedDictSubclassTestsc                   @   s   e Zd ZdS )z.PurePythonOrderedDictSubclassTests.OrderedDictNrJ   rK   rL   r   r   r   r   r3   B  s   r3   Nr   r   r   r   r   r  ?  s   r  c                   @   s"   e Zd ZeZG dd dejZdS )CPythonOrderedDictSubclassTestsc                   @   s   e Zd ZdS )z+CPythonOrderedDictSubclassTests.OrderedDictNr  r   r   r   r   r3   I  s   r3   N)rJ   rK   rL   r  r   r3   r   r   r   r   r  F  s   r  c                   @   s    e Zd Zedd Zdd ZdS )PurePythonGeneralMappingTestsc                 C   s   t j| _d S r	   r   r3   	type2testclsr   r   r   
setUpClassO  s    z(PurePythonGeneralMappingTests.setUpClassc                 C   s   |   }| t|j d S r	   Z_empty_mappingr4   re   r|   r&   r   r   r   r   r~   S  s    z*PurePythonGeneralMappingTests.test_popitemNrJ   rK   rL   classmethodr  r~   r   r   r   r   r  M  s   
r  c                   @   s    e Zd Zedd Zdd ZdS )CPythonGeneralMappingTestsc                 C   s   t j| _d S r	   r  r3   r  r  r   r   r   r  [  s    z%CPythonGeneralMappingTests.setUpClassc                 C   s   |   }| t|j d S r	   r  r  r   r   r   r~   _  s    z'CPythonGeneralMappingTests.test_popitemNr  r   r   r   r   r!  X  s   
r!  c                   @   s    e Zd Zedd Zdd ZdS )PurePythonSubclassMappingTestsc                 C   s   G dd dt j}|| _d S )Nc                   @   s   e Zd ZdS )z@PurePythonSubclassMappingTests.setUpClass.<locals>.MyOrderedDictNr  r   r   r   r   MyOrderedDicth  s   r$  r  r  r$  r   r   r   r  f  s    z)PurePythonSubclassMappingTests.setUpClassc                 C   s   |   }| t|j d S r	   r  r  r   r   r   r~   l  s    z+PurePythonSubclassMappingTests.test_popitemNr  r   r   r   r   r#  d  s   
r#  c                   @   s    e Zd Zedd Zdd ZdS )CPythonSubclassMappingTestsc                 C   s   G dd dt j}|| _d S )Nc                   @   s   e Zd ZdS )z=CPythonSubclassMappingTests.setUpClass.<locals>.MyOrderedDictNr  r   r   r   r   r$  v  s   r$  r"  r%  r   r   r   r  t  s    z&CPythonSubclassMappingTests.setUpClassc                 C   s   |   }| t|j d S r	   r  r  r   r   r   r~   z  s    z(CPythonSubclassMappingTests.test_popitemNr  r   r   r   r   r&  q  s   
r&  __main__))r   
contextlibr   r   r   randomr   r   r  r
   Zunittestr   collections.abcr   testr   r   Zimport_fresh_moduler   r  contextmanagerr   r   ZTestCaser   r   r   methodsetattrr  Z
skipUnlessr   r  r  ZBasicTestMappingProtocolr  r!  r#  r&  rJ   mainr   r   r   r   <module>   sN   
	     0


]


