a
    ze                     @   s4  d dl m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
Z
d dlZdZdd ZG dd dZG d	d
 d
ZG dd dejZG dd dejZG dd deZG dd deZG dd dejZG dd deZG dd dejZG dd dejZdZdeiZd"ddZedkr0ed d! dS )#    dequeN)support	seq_testsi c                   c   s   t dV  d S )N   )SyntaxError r   r   %/usr/lib/python3.9/test/test_deque.pyfail   s    r
   c                   @   s   e Zd Zdd ZdS )BadCmpc                 C   s   t d S N)RuntimeErrorselfotherr   r   r	   __eq__   s    zBadCmp.__eq__N__name__
__module____qualname__r   r   r   r   r	   r      s   r   c                   @   s   e Zd Zdd Zdd ZdS )	MutateCmpc                 C   s   || _ || _d S r   )r   result)r   r   r   r   r   r	   __init__   s    zMutateCmp.__init__c                 C   s   | j   | jS r   )r   clearr   r   r   r   r	   r      s    
zMutateCmp.__eq__N)r   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]d^ Z1d_d` Z2e3j4Z4e3j5dadb Z6dcS )d	TestBasicc                    s  t tdd  td tddD ]} | q&ttddD ]} | qD| t ttdd | t d  fdd	td
D }| |ttdd | t ttdd  fdd	td
D }|	  | |ttdd | t ttdd d S )Niix     8r   X  c                    s   g | ]}   qS r   popleft.0idr   r	   
<listcomp>)       z)TestBasic.test_basics.<locals>.<listcomp>   2   c                    s   g | ]}   qS r   popr!   r$   r   r	   r&   -   r'      )
r   ranger   appendreversed
appendleftassertEquallistlenreverser   r#   leftrightr   r$   r	   test_basics   s    zTestBasic.test_basicsc              	   C   s0  |  ttdd |  ttdd ttd}t|dd}| t|g  | t|d | t|g d | |ttdd |d | t|g d	 |	d
 | t|g d |
ddg | t|g d |dd
g | t|g d ttddd}|| ttj ttjd}zN|t| |  ttjd}| | t| W |  ttj n|  ttj 0 ttdd d}| t|d ttjd}zN|t| |  ttjd}| | t| W |  ttj n|  ttj 0 d S )Nabc
      maxlenzdeque([7, 8, 9], maxlen=3))      	   )rA   rB   r<   r@      )rB   r<   rC   rA   r   wrz%deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))assertRaises
ValueErrorr   iterr-   r1   r2   reprr.   r0   extend
extendleftr   unlinkTESTFNopenwritestrcloseread)r   itr%   for   r   r	   test_maxlen2   sR    


zTestBasic.test_maxlenc                 C   s   t td}t|dd | t|g  t td}tdd}|| | t|g  t td}tdd}|| | t|g  d S )Nd   r   r>   )rH   r-   r   r1   r2   rJ   rK   )r   rS   r%   r   r   r	   test_maxlen_zero\   s    



zTestBasic.test_maxlen_zeroc                 C   s   |  t jd  |  tdjd  |  tdddjd |  tdddjd |  tdddjd | t td}d|_W d    n1 s0    Y  d S )Nr9      r>      r   r<   )r1   r   r?   rF   AttributeErrorr   r%   r   r   r	   test_maxlen_attributek   s    zTestBasic.test_maxlen_attributec              	   C   s\  dddd d fD ]>}t |}t|}dD ]$}| |||||||f q*q| t|j | t|jdd G d	d
 d
}tdd| dg}| t|jd tg d}| t|j|  G dd d}| }tddd|ddg}||_| t|jd td gd }t	t
|D ]}|d q|d | |dd | |d d d S )N ZabracadabraZ
simsalabim  r9   abcdefghijklmnopqrstuvwxyzr   rY   c                   @   s   e Zd Zdd ZdS )z(TestBasic.test_count.<locals>.BadComparec                 S   s   t d S r   )ArithmeticErrorr   r   r   r	   r   ~   s    z/TestBasic.test_count.<locals>.BadCompare.__eq__Nr   r   r   r   r	   
BadCompare}   s   ra   r=   r   rY   r=   c                   @   s   e Zd Zdd ZdS )z-TestBasic.test_count.<locals>.MutatingComparec                 S   s   | j   dS )NT)r%   r+   r   r   r   r	   r      s    
z4TestBasic.test_count.<locals>.MutatingCompare.__eq__Nr   r   r   r   r	   MutatingCompare   s   rc   rX         r:   r   )r2   r   r1   countrF   	TypeErrorr`   r%   r   r-   r3   rotate)r   sr%   Zletterra   rc   mr#   r   r   r	   
test_countu   s.    $
zTestBasic.test_countc                 C   sz  t d}|  |t dt dt  t|fD ]^}| ||kt|t|koXt|t|k | ||kt|t|kot|t|k  q,tt d}|D ]}|D ]}| ||kt|t|k||f | ||kt|t|k||f | ||k t|t|k ||f | ||kt|t|k||f | ||kt|t|k||f | ||kt|t|k||f qqd S )Nxabcr9   ab)	r]   abrm   Zbar9   Zxbarl   Zcba)r   r    r2   r1   typemap)r   r%   eargsxyr   r   r	   test_comparisons   s     ,0
"""""zTestBasic.test_comparisonsc                 C   s   d}t t|}t|D ]}| ||v  q| |d |v t t|}t|d||d < | t ||v  W d    n1 s0    Y  t t|}t ||d < | t ||v  W d    n1 s0    Y  d S )Nr   r   FrY   )r   r-   
assertTruer   rF   r   r   )r   nr%   r#   r   r   r	   test_contains   s    &zTestBasic.test_containsc                    s   G  fddd}t | | g | t d v }W d    n1 sJ0    Y  t | | g | t  d}W d    n1 s0    Y  d S )Nc                       s   e Zd Z fddZdS )z5TestBasic.test_contains_count_stop_crashes.<locals>.Ac                    s       tS r   )r   NotImplementedr   r$   r   r	   r      s    z<TestBasic.test_contains_count_stop_crashes.<locals>.A.__eq__Nr   r   r$   r   r	   A   s   r{   r=   )r   rF   r   rf   )r   r{   _r   r$   r	    test_contains_count_stop_crashes   s    &z*TestBasic.test_contains_count_stop_crashesc                 C   sX   t d}| t|jd |d | t|td || | t|td d S )Nrn   r   bcdabcdabcdabcd)r   rF   rg   rJ   r1   r2   r[   r   r   r	   test_extend   s    

zTestBasic.test_extendc                 C   s  t  }t d}t d}| || t   | || t d | || t d | || t d | || t d | || t   | || t d | || t d t ddd}t d}| || t d | t t dd  W d    n1 s0    Y  d S )	Nr9   defabcdefabcabcrX   r>   ZghZefgh)r   r1   assertIsNotrF   rg   )r   r%   rr   fghr   r   r	   test_add   s     zTestBasic.test_addc                 C   sD   t d}|d7 }| t|td ||7 }| t|td d S )Nrn   r~   r   r   )r   r1   r2   r[   r   r   r	   	test_iadd   s
    zTestBasic.test_iaddc                 C   s   t d}| t|jd |d | t|ttd || | t|td t  }|td | t|tttd | t|jt	  d S )Nrn   r   r~   r   Zabcddcba  )
r   rF   rg   rK   r1   r2   r/   r-   r   r
   r[   r   r   r	   test_extendleft   s    

zTestBasic.test_extendleftc                 C   s   d}t t|}tt|}t|D ]R}|  |d t dk rZ|| || tdt| t|D ]}qpq$t d}| |d d | |d d t  }| 	t
|jd | 	t
|jd d S )	Nr   r   g      ?r   Zsupermanri   r:   rx   )r   r-   r2   r    r+   randomr.   r3   r1   rF   
IndexError__getitem__)r   rx   r%   lr#   jr   r   r	   test_getitem   s"    


zTestBasic.test_getitemc                 C   sV  dD ]
}t t|}t|D ]}| ||| q| t ||d  W d    n1 sd0    Y  t t|}t|d||d < | t || W d    n1 s0    Y  t t|}t ||d < | t || W d    q1 s0    Y  qd}d}t |d }t	|d }tdt
|d  dt
|d  D ]}tdt
|d  dt
|d  D ]}|d D ]~}	z||	||}
W nN ty   | t ||	|| W d    n1 s0    Y  Y n0 | ||	|||
 qqzqTt td	d
d}tdD ]*}|dd}| || d |  q&d S )N)r   rY      (   r   r   FrY   	ABCDEFGHIZrd   r   i'  r<   rV   i4!  i  )r   r-   r1   indexrF   rG   r   r   r   r2   r3   rh   )r   rx   r%   r#   elementsZ
nonelementri   startstopelementtargetstepr   r   r	   
test_index
  s@    
,(,&&4"zTestBasic.test_indexc                 C   sD   t d}| t |ddd}W d    n1 s60    Y  d S )NZAAAzHello worldr   rX   )r   rF   rG   r   )r   r%   r#   r   r   r	   test_index_bug_249138  s    zTestBasic.test_index_bug_24913c                 C   sh   d}t dt|d  dt|d  D ]<}td}td}||d ||d | t|| q&d S )Nr   r   rY   rd   r   )r-   r3   r   r2   insertr1   )r   r   r#   r%   ri   r   r   r	   test_insert=  s    &zTestBasic.test_insertc                 C   s   d}t |t|d}| t |dd  W d    n1 s@0    Y  d}tt| t|D ]R}t |t|d d}||d |dkr| || d qb| ||d  d qbd S )NABCr>   rY   r   r   r   r   )r   r3   rF   r   r   r-   r1   )r   datar%   r   r#   r   r   r	   test_insert_bug_26194G  s    *zTestBasic.test_insert_bug_26194c              	   C   s4  dD ],}t  }||9 }| |t   | |j qdD ]4}t d}||9 }| |t d|  | |j q6dD ]>}t dd}||9 }| |t dt|d  | |jd qpdD ]4}t d}||9 }| |t d|  | |j qdD ]@}t dd}||9 }| |t d| dd   | |jd qd S )N)r:   r   r   rY   r<   r   rn   )
r   r:   r   r   rY   r<   i  r^   i  r   r^   r   i)r   r1   ZassertIsNoner?   min)r   rx   r%   r   r   r	   	test_imulV  s2    

zTestBasic.test_imulc                 C   s  t d}| |d t   | |d t   | |d t d | |d t d | |d t d | |d | | t  d t   | t  d t   | t  d	 t   | d| t   | d| t   | d| t d | d| t d | d| t d t dd	d
}| |d t   | |d t   | |d t d | |d t d | |d t d d S )Nr9   r   r   r   rY   r   r=   Z	abcabcabcrd   r>   Zbcabcr   )r   r1   r   r[   r   r   r	   test_mulu  s*    zTestBasic.test_mulc                 C   s   d}t t|}t|D ]}d| ||< q| t|dd t|D  t|}td| ddD ]}d| ||< d| ||< q`| t|| d S )	Nr   r<   c                 S   s   g | ]}d | qS )r<   r   r!   r   r   r	   r&     r'   z*TestBasic.test_setitem.<locals>.<listcomp>r   r   r:   r@   )r   r-   r1   r2   )r   rx   r%   r#   r   r   r   r	   test_setitem  s    zTestBasic.test_setitemc                 C   s   d}t t|}| t|j| d  | t|j| t|D ]T}| t|||  tt| t|}|| }| 	|| ||= | 
|| q>| t|d d S )Nr^   r   r   )r   r-   rF   r   __delitem__r1   r3   r   	randrangeassertInZassertNotIn)r   rx   r%   r#   r   valr   r   r	   test_delitem  s    zTestBasic.test_delitemc              	   C   s   d}dd t |D }t |D ]h}t|d | }| }| t|tt|d |  | |d  |  | t||d |  q| t|jd d S )Nr^   c                 S   s   g | ]}t   qS r   r   r!   r   r   r	   r&     r'   z*TestBasic.test_reverse.<locals>.<listcomp>r   )	r-   r   r4   r1   r2   r/   ZassertIsrF   rg   )r   rx   r   r#   r%   rE   r   r   r	   test_reverse  s     zTestBasic.test_reversec                 C   s,  t d}t|}t|}|d | d|d t|}|d | d|d |  | t || t|d D ]}t|}t|}|| t|D ]}|d q| t |t | ||  | t || |||  | t || q|t|d D ]}t|}t|}||  t|D ]}|d q6| t |t | || | t || |||  | t || qt|}t|}|td  |j}ttd D ]}|  q| t |t | | t	|jd	 | t	|jdd
 t }|  | |t  d S )Nabcder   r]   Zeabcdr:   Zbcdear=      rt   r<   )
tupler3   r   rh   r1   joinr-   BIGrF   rg   )r   ri   rx   r%   r#   rr   r   Zdrr   r   r	   test_rotate  sX    




zTestBasic.test_rotatec                 C   s   t d}| t|d |  | t|d |  | t|d | t|j | t|d |d | t|d |d | t|d |	  | t|d d S )Nrm   rY   r   r   cr%   )
r   r1   r3   r    r+   rF   r   r.   r0   r   r[   r   r   r	   test_len  s    

zTestBasic.test_lenc                 C   s&   t  }| t|j | t|j d S r   )r   rF   r   r+   r    r[   r   r   r	   test_underflow  s    zTestBasic.test_underflowc                 C   s`   t td}| t|d |  | t|d | t|g  |  | t|g  d S )NrV   r   )r   r-   r1   r3   r   r2   r[   r   r   r	   
test_clear  s    zTestBasic.test_clearc                 C   s   t d}|d | |t d |d | |t d | t|jd | |t d t ddt dg}t |}| t|jd t||D ]\}}| ||u  qdD ]@}t dg}|	t
||dg | t|jd | |t   qd S )	NZabcdefghcijr   Z
abdefghcijZ	abdefghijrn   ro   )TFrm   )r   remover1   rF   rG   r   r   ziprw   rJ   r   r   )r   r%   rr   rt   ru   matchr   r   r	   test_remove  s"    


zTestBasic.test_removec                 C   sJ   t td}tt|}| t|t| || | dt| d S )Nr   z...)r   r-   evalrI   r1   r2   r.   r   r   r%   rr   r   r   r	   	test_repr   s
    
zTestBasic.test_reprc              	   C   s   t td}|| zfttj ttjd}t||dd |  ttjd}| 	|
 t| W |  ttj n|  ttj 0 d S )Nr   rD   r]   )fileendrE   )r   r-   r.   r   rL   rM   rN   printrQ   r1   rR   rI   )r   r%   rT   r   r   r	   
test_print'  s    
zTestBasic.test_printc                 C   s$   |  ttddd |  ttd d S )Nr9   rY   r=   r   )rF   rg   r   r   r   r   r	   	test_init5  s    zTestBasic.test_initc                 C   s   |  tttd d S )Nr9   )rF   rg   hashr   r   r   r   r	   	test_hash9  s    zTestBasic.test_hashc                 C   s   dD ]v}t t|}|j|j }}t|tD ].}|| | }||| kr,| |||  q,| t|ttt| t qd S N)r   r   rY   rV   r   )r   r-   r.   r    r   r1   r2   r   sizer%   r.   r+   r#   rt   r   r   r	   #test_long_steadystate_queue_popleft<  s    z-TestBasic.test_long_steadystate_queue_popleftc                 C   s   dD ]}t tt|}|j|j }}t|tD ].}|| | }||| kr0| |||  q0| ttt|ttt| t qd S r   )r   r/   r-   r0   r+   r   r1   r2   r   r   r   r	   $test_long_steadystate_queue_poprightG  s    z.TestBasic.test_long_steadystate_queue_poprightc                 C   sV   t  }|j|j }}ttD ]}|| qttD ]}| }||kr2| || q2d S r   )r   r.   r    r-   r   r1   r   r%   r.   r+   r#   rt   r   r   r	   test_big_queue_popleftS  s    
z TestBasic.test_big_queue_popleftc                 C   sV   t  }|j|j }}ttD ]}|| qttD ]}| }||kr2| || q2d S r   )r   r0   r+   r-   r   r1   r   r   r   r	   test_big_queue_popright^  s    
z!TestBasic.test_big_queue_poprightc                 C   sj   t  }|j|j }}ttD ]}|| qtttD ]}| }||kr6| || q6| t|d d S Nr   )r   r.   r+   r-   r   r/   r1   r3   r   r   r   r	   test_big_stack_righth  s    
zTestBasic.test_big_stack_rightc                 C   sj   t  }|j|j }}ttD ]}|| qtttD ]}| }||kr6| || q6| t|d d S r   )r   r0   r    r-   r   r/   r1   r3   r   r   r   r	   test_big_stack_lefts  s    
zTestBasic.test_big_stack_leftc                 C   s@   t td}t |}| t|t| | t|t| d S )Nr   )r   r-   assertNotEqualidr1   r2   r   r   r   r	   test_roundtrip_iter_init~  s    z"TestBasic.test_roundtrip_iter_initc                 C   s   t tdt tddfD ]f}ttjd D ]R}t||}t|}| t|t| | t	|t	| | |j
|j
 q,qd S )Nr   rV   r   )r   r-   pickleHIGHEST_PROTOCOLdumpsloadsr   r   r1   r2   r?   )r   r%   r#   ri   rr   r   r   r	   test_pickle  s    
zTestBasic.test_picklec                 C   s   t dt ddfD ]p}|| ttjd D ]R}tt||}| t|t| | 	t|d t| | 	|j
|j
 q.qd S )Nr9   r=   r   r:   )r   r.   r-   r   r   r   r   r   r   r1   r?   )r   r%   r#   rr   r   r   r	   test_pickle_recursive  s    
zTestBasic.test_pickle_recursivec           
      C   s  t td}dd |D }ttjd D ]}t|}t||f|}t|\}}t|D ]\}}	|	||< q\| t	|t	| | t
|| t| t||f|}t|\}}t|D ]\}}	|	||< q| t	|t	| | t
||dd   tdt|D ]}t| qt||f|}t|\}}t|D ]\}}	|	||< qB| t	|t	| | t
|g  | tt| t||f|}t|\}}t|D ]\}}	|	||< q| t	|t	| | t
|g  q(d S )Nr   c                 S   s   g | ]}|d  qS )g)\(?r   r!   r   r   r	   r&     r'   z2TestBasic.test_iterator_pickle.<locals>.<listcomp>r   )r   r-   r   r   rH   r   r   	enumerater1   rp   r2   nextr3   rF   StopIteration)
r   Zorigr   protoZitorgdumprS   r%   r#   rt   r   r   r	   test_iterator_pickle  s@    

zTestBasic.test_iterator_picklec                 C   sb   dg}t |g}t|}| t|t| d|d< | t|t| | t|t| d S Nr<   rC   r   )r   copydeepcopyr1   r2   r   r   r   mutr%   rr   r   r   r	   test_deepcopy  s    

zTestBasic.test_deepcopyc              	   C   s   dg}t |g}t|}| t|t| d|d< | t|t| | t|t| tdD ]}tddD ]r}dd t|D }|dkrt |nt ||}| }| || | |j|j | t	d	d
 t
||D  qtqfd S )Nr<   rC   r   rd   r:      c                 S   s   g | ]}t   qS r   r   )r"   r   r   r   r	   r&     r'   z'TestBasic.test_copy.<locals>.<listcomp>c                 s   s   | ]\}}||u V  qd S r   r   )r"   rt   ru   r   r   r	   	<genexpr>  r'   z&TestBasic.test_copy.<locals>.<genexpr>)r   r   r1   r2   r   r   r-   r?   rw   allr   )r   r   r%   rr   r#   r?   ri   r   r   r	   	test_copy  s    

zTestBasic.test_copyc                 C   s`   dg}t |g}| }| t|t| d|d< | t|t| | t|t| d S r   )r   r   r1   r2   r   r   r   r   r   r	   test_copy_method  s    
zTestBasic.test_copy_methodc                 C   s6   dt dfD ]$}| ttt|tt| qd S Nr     )r-   r1   r2   r/   r   )r   ri   r   r   r	   test_reversed  s    zTestBasic.test_reversedc                 C   sD   t tt }dtdfD ]$}| t|t|tt| qd S r   )rp   r/   r   r-   r1   r2   )r   klassri   r   r   r	   test_reversed_new  s    zTestBasic.test_reversed_newc                 C   s2   dd l }t }tdD ]}|d |  qd S )Nr   rV   r   )gcr   r-   r.   collect)r   r   r%   r#   r   r   r	   test_gc_doesnt_blowup  s
    
zTestBasic.test_gc_doesnt_blowupc                 C   s   G dd dt }tdD ]b}| }t|}|dkrBt|dg}ntt|dg}t||_~~t	  | 
| d u d qd S )Nc                   @   s   e Zd ZdS )z,TestBasic.test_container_iterator.<locals>.CNr   r   r   r   r   r   r	   C  s   r   rY   r   r   zCycle was not collected)objectr-   weakrefrefr   r/   rH   rt   r   r   rw   )r   r   r#   objr   	containerr   r   r	   test_container_iterator  s    

z!TestBasic.test_container_iteratorc                 C   s   d}t d}td| }| tt | | j}|t ||  |td||  |td|d  ||  |td| |d|   |tdd|  |d|   d S )	N@   Z2P4nPzP%dPPrn   r   rY   *   +   )	r   Zcalcvobjsizestructcalcsizer1   r   
__sizeof__r   check_sizeof)r   ZBLOCKLENZbasesize	blocksizecheckr   r   r	   test_sizeof  s    
zTestBasic.test_sizeofN)7r   r   r   r8   rU   rW   r\   rk   rv   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   r   r   r   r   r   r   r  cpython_onlyr	  r   r   r   r	   r      sf   *
!.
5	
		)			r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestVariousIteratorArgsc                 C   s   ddt ddt dddfD ]}tjtjtjtjtjtjfD ]$}| t	t
||t	|| q:| tt
t| | tt
t| | tt
t| qd S )NZ123r]   r   )Zdog333333?r   i  rd   )r-   r   SequenceZIterFuncZIterGenZIterFuncStopZ	itermultiZiterfuncr1   r2   r   rF   rg   ZIterNextOnlyZ
IterNoNextZeroDivisionErrorZ
IterGenExc)r   ri   r   r   r   r	   test_constructor  s    "z(TestVariousIteratorArgs.test_constructorc                 C   s*   t d}t|}|  | tt| d S )NZabcdefg)r   rH   r+   rF   r   r   r   r%   rS   r   r   r	   test_iter_with_altered_data   s    z3TestVariousIteratorArgs.test_iter_with_altered_datac                 C   s*   t  }t|}|d | tt| d S )Nr<   )r   rH   r.   rF   r   r   r  r   r   r	   !test_runtime_error_on_empty_deque&  s    
z9TestVariousIteratorArgs.test_runtime_error_on_empty_dequeN)r   r   r   r  r  r  r   r   r   r	   r    s   
r  c                   @   s   e Zd ZdS )DequeNr   r   r   r   r	   r  ,  s   r  c                   @   s   e Zd Zdd ZdS )DequeWithBadIterc                 C   s   t d S r   )rg   r   r   r   r	   __iter__0  s    zDequeWithBadIter.__iter__Nr   r   r   r  r   r   r   r	   r  /  s   r  c                   @   sB   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zej	dd Z
dS )TestSubclassc                    s,  t td  td tddD ]} | q$ttddD ]} | qB| t ttdd | t d  fddtd	D }| |ttdd
 | t ttd
d  fddtd	D }|	  | |ttdd | t ttd
d  
  | t d d S )N   r   r   r   r   r   c                    s   g | ]}   qS r   r   r!   r$   r   r	   r&   ?  r'   z,TestSubclass.test_basics.<locals>.<listcomp>r(   r)   c                    s   g | ]}   qS r   r*   r!   r$   r   r	   r&   C  r'   r,   )r  r-   r   r.   r/   r0   r1   r2   r3   r4   r   r5   r   r$   r	   r8   5  s"    zTestSubclass.test_basicsc                 C   s  t d}| }| t|t| | t|t| t |}| t|t| | t|t| ttjd D ]V}t||}t	|}| 
t|t| | t|t| | t|t| qvt ddd}| }| t|t| | t|t| t |}| t|t| | t|t| ttjd D ]X}t||}t	|}| 
t|t| | t|t| | t|t| qHd S )Nr9   r   r   rX   r>   )r  __copy__r1   rp   r2   r-   r   r   r   r   r   r   )r   r%   rr   r   ri   r   r   r	   test_copy_pickleK  s4    

zTestSubclass.test_copy_picklec                 C   s  t tjd D ]}tdtddfD ]}|| tt||}| t|t| | 	t
|t
| | 	|j|j | }| }| 	t|t| | 	|| ||_tt||}| 	t|jt| q$tdtddfD ]}| ttj|| qqd S )Nr   r9   r=   rY   )r-   r   r   r  r.   r   r   r   r   r1   rp   r?   r+   rt   r  rF   rg   )r   r   r%   rr   ddeer   r   r	   r   o  s     
z"TestSubclass.test_pickle_recursivec                 C   sD   t d}t|}| t|t| d }t  | tt| d S )NZgallahad)	r   r   proxyr1   rP   r   
gc_collectrF   ReferenceError)r   r%   pr   r   r	   test_weakref  s    
zTestSubclass.test_weakrefc                 C   s4   G dd dt }|g d}|g d}||k d S )Nc                   @   s   e Zd Zdd ZdS )z-TestSubclass.test_strange_subclass.<locals>.Xc                 S   s   t g S r   )rH   r   r   r   r	   r    s    z6TestSubclass.test_strange_subclass.<locals>.X.__iter__Nr  r   r   r   r	   X  s   r!  rb   )rX   rd   r   r   )r   r!  Zd1Zd2r   r   r	   test_strange_subclass  s    z"TestSubclass.test_strange_subclassc                 C   s   G dd dt }| }dd }||_| t |d  W d    n1 sL0    Y  | t  |t g d  W d    n1 s0    Y  d S )Nc                   @   s   e Zd ZdS )z&TestSubclass.test_bug_31608.<locals>.XNr   r   r   r   r	   r!    s   r!  c                 _   s   dgS )Nr  r   )clsrs   kwargsr   r   r	   bad___new__  s    z0TestSubclass.test_bug_31608.<locals>.bad___new__r  rb   )r   __new__rF   rg   )r   r!  r%   r%  r   r   r	   test_bug_31608  s    &zTestSubclass.test_bug_31608N)r   r   r   r8   r  r   r   r"  r   r
  r'  r   r   r   r	   r  3  s   $	r  c                   @   s   e Zd ZdddZdS )SubclassWithKwargsr   c                 C   s   t |  d S r   )r   r   )r   newargr   r   r	   r     s    zSubclassWithKwargs.__init__N)r   )r   r   r   r   r   r   r   r	   r(    s   r(  c                   @   s   e Zd Zdd ZdS )TestSubclassWithKwargsc                 C   s   t dd d S )Nr   )r)  )r(  r   r   r   r	   test_subclass_with_kwargs  s    z0TestSubclassWithKwargs.test_subclass_with_kwargsN)r   r   r   r+  r   r   r   r	   r*    s   r*  c                   @   s0   e Zd ZeZdd Zdd Zdd Zdd Zd	S )
TestSequencec                 C   s   d S r   r   r   r   r   r	   r     s    zTestSequence.test_getitemc                 C   s   d S r   r   r   r   r   r	   test_getslice  s    zTestSequence.test_getslicec                 C   s   d S r   r   r   r   r   r	   test_subscript  s    zTestSequence.test_subscriptc                 C   s   |  d d S )Nz-Exhausted deque iterator doesn't free a deque)ZskipTestr   r   r   r	   test_free_after_iterating  s    z&TestSequence.test_free_after_iteratingN)	r   r   r   r   Z	type2testr   r-  r.  r/  r   r   r   r	   r,    s
   r,  a
  
Example from the Library Reference:  Doc/lib/libcollections.tex

>>> from collections import deque
>>> d = deque('ghi')                 # make a new deque with three items
>>> for elem in d:                   # iterate over the deque's elements
...     print(elem.upper())
G
H
I
>>> d.append('j')                    # add a new entry to the right side
>>> d.appendleft('f')                # add a new entry to the left side
>>> d                                # show the representation of the deque
deque(['f', 'g', 'h', 'i', 'j'])
>>> d.pop()                          # return and remove the rightmost item
'j'
>>> d.popleft()                      # return and remove the leftmost item
'f'
>>> list(d)                          # list the contents of the deque
['g', 'h', 'i']
>>> d[0]                             # peek at leftmost item
'g'
>>> d[-1]                            # peek at rightmost item
'i'
>>> list(reversed(d))                # list the contents of a deque in reverse
['i', 'h', 'g']
>>> 'h' in d                         # search the deque
True
>>> d.extend('jkl')                  # add multiple elements at once
>>> d
deque(['g', 'h', 'i', 'j', 'k', 'l'])
>>> d.rotate(1)                      # right rotation
>>> d
deque(['l', 'g', 'h', 'i', 'j', 'k'])
>>> d.rotate(-1)                     # left rotation
>>> d
deque(['g', 'h', 'i', 'j', 'k', 'l'])
>>> deque(reversed(d))               # make a new deque in reverse order
deque(['l', 'k', 'j', 'i', 'h', 'g'])
>>> d.clear()                        # empty the deque
>>> d.pop()                          # cannot pop from an empty deque
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in -toplevel-
    d.pop()
IndexError: pop from an empty deque

>>> d.extendleft('abc')              # extendleft() reverses the input order
>>> d
deque(['c', 'b', 'a'])



>>> def delete_nth(d, n):
...     d.rotate(-n)
...     d.popleft()
...     d.rotate(n)
...
>>> d = deque('abcdef')
>>> delete_nth(d, 2)   # remove the entry at d[2]
>>> d
deque(['a', 'b', 'd', 'e', 'f'])



>>> def roundrobin(*iterables):
...     pending = deque(iter(i) for i in iterables)
...     while pending:
...         task = pending.popleft()
...         try:
...             yield next(task)
...         except StopIteration:
...             continue
...         pending.append(task)
...

>>> for value in roundrobin('abc', 'd', 'efgh'):
...     print(value)
...
a
d
e
b
f
c
g
h


>>> def maketree(iterable):
...     d = deque(iterable)
...     while len(d) > 1:
...         pair = [d.popleft(), d.popleft()]
...         d.append(pair)
...     return list(d)
...
>>> print(maketree('abcdefgh'))
[[[['a', 'b'], ['c', 'd']], [['e', 'f'], ['g', 'h']]]]


libreftestc                 C   s   dd l }tttttf}tj|  | rxt|drxdd l	}d gd }t
t|D ]"}tj|  |  | ||< qLt| ddlm} t||  d S )Nr   gettotalrefcountrd   )
test_deque)sysr   r  r  r*  r,  r   Zrun_unittesthasattrr   r-   r3   r   r1  r   testr2  Zrun_doctest)verboser3  Ztest_classesr   countsr#   r2  r   r   r	   	test_main,  s$    


r8  __main__T)r6  )N)collectionsr   Zunittestr5  r   r   r   r   r   r   r   r  r   r
   r   r   ZTestCaser   r  r  r  r  r(  r*  Z
CommonTestr,  r0  Z__test__r8  r   r   r   r   r	   <module>   s<        |rg

