o
    HXh                     @   s6  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red d! dS dS )#    dequeN)support	seq_testsi c                   c   s    t N)SyntaxError r   r   9/opt/python-3.10.19/usr/lib/python3.10/test/test_deque.pyfail   s   r
   c                   @      e Zd Zdd ZdS )BadCmpc                 C      t r   )RuntimeErrorselfotherr   r   r	   __eq__      zBadCmp.__eq__N__name__
__module____qualname__r   r   r   r   r	   r          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^ Z1e2j3Z3e2j4d_d` Z5daS )b	TestBasicc                    s  t tdd  td tddD ]} | qttddD ]} | q"| 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                       g | ]}   qS r   popleft.0idr   r	   
<listcomp>)       z)TestBasic.test_basics.<locals>.<listcomp>   2   c                    r"   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   sX  |  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|dd  d ttdd d}| t|d d S )Nabc
      maxlenzdeque([7, 8, 9], maxlen=3))      	   )rE   rF   r@   rD      )rF   r@   rG   rE   r   iz, 198, 199, [...]], maxlen=10)z%deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))assertRaises
ValueErrorr   iterr1   r5   r6   reprr2   r4   extend
extendleftr   itr)   r   r   r	   test_maxlen2   s*   


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   rB   )rJ   r1   r   r5   r6   rL   rM   rN   r   r   r	   test_maxlen_zeroI   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    d S 1 sJw   Y  d S )Nr=      rB      r   r@   )r5   r   rC   rH   AttributeErrorr   r)   r   r   r	   test_maxlen_attributeX   s   "zTestBasic.test_maxlen_attributec              	   C   sZ  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  r=   abcdefghijklmnopqrstuvwxyz   rT   c                   @   r   )z(TestBasic.test_count.<locals>.BadComparec                 S   r   r   )ArithmeticErrorr   r   r   r	   r   k   r   z/TestBasic.test_count.<locals>.BadCompare.__eq__Nr   r   r   r   r	   
BadComparej   r   r]   rA   r[   rT   rA   c                   @   r   )z-TestBasic.test_count.<locals>.MutatingComparec                 S   s   | j   dS )NT)r)   r/   r   r   r   r	   r   r   s   
z4TestBasic.test_count.<locals>.MutatingCompare.__eq__Nr   r   r   r   r	   MutatingCompareq   r   r_   rS         r>   r   )r6   r   r5   countrH   	TypeErrorr\   r)   r   r1   r7   rotate)r   sr)   Zletterr]   r_   mr'   r   r   r	   
test_countb   s0   "
zTestBasic.test_countc                 C   sz  t d}|  |t dt dt  t|fD ]/}| ||kt|t|ko,t|t|k | ||kt|t|koBt|t|k  qtt d}|D ]m}|D ]h}| ||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 qQqMd S )Nxabcr=   ab)	rX   abri   Zbar=   Zxbarh   Zcba)r   r$   r6   r5   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 sBw   Y  t t|}t ||d < | t ||v  W d    d S 1 siw   Y  d S )Nr   r[   FrT   )r   r1   
assertTruer   rH   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 s%w   Y  t | | g | t  d}W d    d S 1 sHw   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    rw   rA   )r   rH   r   rb   )r   rw   _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 )Nrj   r[   bcdabcdabcdabcd)r   rH   rc   rL   r5   r6   rV   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    d S 1 sw   Y  d S )	Nr=   defabcdefabcabcrS   rB   ZghZefgh)r   r5   assertIsNotrH   rc   )r   r)   rn   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 )Nrj   rz   r{   r|   )r   r5   r6   rV   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 )Nrj   r[   rz   r{   Zabcddcba  )
r   rH   rc   rM   r5   r6   r3   r1   r   r
   rV   r   r   r	   test_extendleft   s   

zTestBasic.test_extendleftc                 C   s   d}t t|}tt|}t|D ]3}|  |d t dk r-|| || tdt| t|D ]}|| || ksDJ q8qt d}| |d d | |d d t  }| 	t
|jd | 	t
|jd d S )	Nr   r   g      ?r[   Zsupermanre   r>   rt   )r   r1   r6   r$   r/   randomr2   r7   r5   rH   
IndexError__getitem__)r   rt   r)   lr'   jr   r   r	   test_getitem   s$   


zTestBasic.test_getitemc                 C   sH  dD ]}t t|}t|D ]}| ||| q| t ||d  W d    n1 s1w   Y  t t|}t|d||d < | t || W d    n1 sZw   Y  t t|}t ||d < | t || W d    n1 sw   Y  qd}d}t |d }t	|d }tdt
|d  dt
|d  D ]W}tdt
|d  dt
|d  D ]C}|d D ]<}	z	||	||}
W n% ty   | t ||	|| W d    n1 sw   Y  Y qw | ||	|||
 qqqt td	d
d}tdD ]}|dd}| || d |  qd S )N)r[   rT      (   r   r[   FrT   	ABCDEFGHIZr`   r   i'  r@   rQ   i4!  i  )r   r1   r5   indexrH   rI   r   r   r   r6   r7   rd   )r   rt   r)   r'   elementsZ
nonelementre   startstopelementtargetstepr   r   r	   
test_index   sT   &&zTestBasic.test_indexc                 C   sF   t d}| t |ddd}W d    d S 1 sw   Y  d S )NZAAAzHello worldr   rS   )r   rH   rI   r   )r   r)   r'   r   r   r	   test_index_bug_24913%  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   rT   r`   r   )r1   r7   r   r6   insertr5   )r   r   r'   r)   re   r   r   r	   test_insert*  s   &zTestBasic.test_insertc                 C   s   d}t |t|d}| t |dd  W d    n1 s w   Y  d}tt| t|D ])}t |t|d d}||d |dkrP| || d q1| ||d  d q1d S )NABCrB   rT   r   r[   r   r   )r   r7   rH   r   r   r1   r5   )r   datar)   r   r'   r   r   r	   test_insert_bug_261944  s   zTestBasic.test_insert_bug_26194c              	   C   s4  dD ]}t  }||9 }| |t   | |j qdD ]}t d}||9 }| |t d|  | |j qdD ]}t dd}||9 }| |t dt|d  | |jd q8dD ]}t d}||9 }| |t d|  | |j qZdD ] }t dd}||9 }| |t d| dd   | |jd qwd S )N)r>   r   r[   rT   r@   r   rj   )
r   r>   r   r[   rT   r@   i  rY   i  r   rY   r   i)r   r5   ZassertIsNonerC   min)r   rt   r)   r   r   r	   	test_imulC  s4   

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 )Nr=   r   r   r[   rT   r   rA   Z	abcabcabcr`   rB   Zbcabcr   )r   r5   r   rV   r   r   r	   test_mulb  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| ||< q0| 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>   rD   )r   r1   r5   r6   )r   rt   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|}|| }| 	|| ||= | 
|| q| t|d d S )NrY   r[   r   )r   r1   rH   r   __delitem__r5   r7   r   	randrangeZassertInZassertNotIn)r   rt   r)   r'   r   valr   r   r	   test_delitem  s   zTestBasic.test_delitemc              	   C   s   d}dd t |D }t |D ]4}t|d | }| }| t|tt|d |  | |d  |  | t||d |  q| t|jd d S )NrY   c                 S      g | ]}t   qS r   r   r%   r   r   r	   r*     r+   z*TestBasic.test_reverse.<locals>.<listcomp>r[   )	r1   r   r8   r5   r6   r3   ZassertIsrH   rc   )r   rt   r   r'   r)   rr   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 ]B}t|}t|}|| t|D ]}|d qQ| t |t | ||  | t || |||  | t || q>t|d D ]B}t|}t|}||  t|D ]}|d q| t |t | || | t || |||  | t || qt|}t|}|td  |j}ttd D ]}|  q| t |t | | t	|jd	 | t	|jdd
 t }|  | |t  d S )Nabcder[   rX   Zeabcdr>   ZbcdearA      rp   r@   )
tupler7   r   rd   r5   joinr1   BIGrH   rc   )r   re   rt   r)   r'   rn   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 )Nri   rT   r[   r   cr)   )
r   r5   r7   r$   r/   rH   r   r2   r4   r   rV   r   r   r	   test_len  s   

zTestBasic.test_lenc                 C   s&   t  }| t|j | t|j d S r   )r   rH   r   r/   r$   rV   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 )NrQ   r   )r   r1   r5   r7   r   r6   rV   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  qHdD ] }t dg}|	t
||dg | t|jd | |t   qVd S )	NZabcdefghcijr   Z
abdefghcijZ	abdefghijrj   rk   )TFri   )r   remover5   rH   rI   r   r   ziprs   rL   r   r   )r   r)   rn   rp   rq   matchr   r   r	   test_remove  s$   


zTestBasic.test_removec                 C   sR   t td}tt|}| t|t| || | t|dd  d d S )Nr   iz7, 198, 199, [...]]))r   r1   evalrK   r5   r6   r2   r   r)   rn   r   r   r	   	test_repr  s
   
zTestBasic.test_reprc                 C   s$   |  ttddd |  ttd d S )Nr=   rT   rA   r[   )rH   rc   r   r   r   r   r	   	test_init  s   zTestBasic.test_initc                 C   s   |  tttd d S )Nr=   )rH   rc   hashr   r   r   r   r	   	test_hash  s   zTestBasic.test_hashc                 C   s   dD ];}t t|}|j|j}}t|tD ]}|| | }||| kr-| |||  q| t|ttt| t qd S N)r   r[   rT   rQ   r   )r   r1   r2   r$   r   r5   r6   r   sizer)   r2   r/   r'   rp   r   r   r	   #test_long_steadystate_queue_popleft  s    z-TestBasic.test_long_steadystate_queue_popleftc                 C   s   dD ]A}t tt|}|j|j}}t|tD ]}|| | }||| kr/| |||  q| ttt|ttt| t qd S r   )r   r3   r1   r4   r/   r   r5   r6   r   r   r   r	   $test_long_steadystate_queue_popright&  s   z.TestBasic.test_long_steadystate_queue_poprightc                 C   sX   	 t  }|j|j}}ttD ]}|| qttD ]}| }||kr)| || qd S r   )r   r2   r$   r1   r   r5   r   r)   r2   r/   r'   rp   r   r   r	   test_big_queue_popleft2  s   
z TestBasic.test_big_queue_popleftc                 C   sV   t  }|j|j}}ttD ]}|| qttD ]}| }||kr(| || qd S r   )r   r4   r/   r1   r   r5   r   r   r   r	   test_big_queue_popright=  s   
z!TestBasic.test_big_queue_poprightc                 C   j   t  }|j|j}}ttD ]}|| qtttD ]}| }||kr*| || q| t|d d S Nr   )r   r2   r/   r1   r   r3   r5   r7   r   r   r   r	   test_big_stack_rightG     
zTestBasic.test_big_stack_rightc                 C   r   r   )r   r4   r$   r1   r   r3   r5   r7   r   r   r   r	   test_big_stack_leftR  r   zTestBasic.test_big_stack_leftc                 C   s@   t td}t |}| t|t| | t|t| d S )Nr   )r   r1   assertNotEqualidr5   r6   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 ]3}ttjd D ])}t||}t|}| t|t| | t	|t	| | |j
|j
 qqd S )Nr   rQ   r[   )r   r1   pickleHIGHEST_PROTOCOLdumpsloadsr   r   r5   r6   rC   )r   r)   r'   re   rn   r   r   r	   test_picklec  s   
zTestBasic.test_picklec                 C   s   t dt ddfD ]8}|| ttjd D ])}tt||}| t|t| | 	t|d t| | 	|j
|j
 qq	d S )Nr=   rA   r[   r>   )r   r2   r1   r   r   r   r   r   r   r5   rC   )r   r)   r'   rn   r   r   r	   test_pickle_recursivel  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| qt||f|}t|\}}t|D ]\}}	|	||< q| 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*   w  r+   z2TestBasic.test_iterator_pickle.<locals>.<listcomp>r[   )r   r1   r   r   rJ   r   r   	enumerater5   rl   r6   nextr7   rH   StopIteration)
r   Zorigr   protoZitorgdumprO   r)   r'   rp   r   r   r	   test_iterator_pickleu  sB   




zTestBasic.test_iterator_picklec                 C   sb   dg}t |g}t|}| t|t| d|d< | t|t| | t|t| d S Nr@   rG   r   )r   copydeepcopyr5   r6   r   r   r   mutr)   rn   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 ]A}tddD ]9}dd t|D }|dkrMt |nt ||}| }| || | |j|j | t	d	d
 t
||D  q:q3d S )Nr@   rG   r   r`   r>      c                 S   r   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&   rp   rq   r   r   r	   	<genexpr>  s    z&TestBasic.test_copy.<locals>.<genexpr>)r   r   r5   r6   r   r   r1   rC   rs   allr   )r   r   r)   rn   r'   rC   re   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   r5   r6   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{     )r1   r5   r6   r3   r   )r   re   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   )rl   r3   r   r1   r5   r6   )r   klassre   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   rQ   r[   )gcr   r1   r2   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 ]1}| }t|}|dkr!t|dg}ntt|dg}t||_~~t	  | 
| d u d qd S )Nc                   @      e Zd ZdS )z,TestBasic.test_container_iterator.<locals>.CNr   r   r   r   r   r   r	   C      r   rT   r   r[   zCycle was not collected)objectr1   weakrefrefr   r3   rJ   rp   r   r   rs   )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%dPPrj   r[   rT   *   +   )	r   Zcalcvobjsizestructcalcsizer5   r   
__sizeof__r   check_sizeof)r   ZBLOCKLENZbasesize	blocksizecheckr   r   r	   test_sizeof  s   
"zTestBasic.test_sizeofN)6r   r   r   r<   rP   rR   rW   rg   rr   ru   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  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 ]A}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123rX   r   )Zdog333333?r   i  r`   )r1   r   SequenceZIterFuncZIterGenZIterFuncStopZ	itermultiZiterfuncr5   r6   r   rH   rc   ZIterNextOnlyZ
IterNoNextZeroDivisionErrorZ
IterGenExc)r   re   r   r   r   r	   test_constructor  s   "z(TestVariousIteratorArgs.test_constructorc                 C   s*   t d}t|}|  | tt| d S )NZabcdefg)r   rJ   r/   rH   r   r   r   r)   rO   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   rJ   r2   rH   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                   @   r   )DequeNr   r   r   r   r	   r    r   r  c                   @   r   )DequeWithBadIterc                 C   r   r   )rc   r   r   r   r	   __iter__  r   zDequeWithBadIter.__iter__Nr   r   r   r  r   r   r   r	   r    r   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 ]} | q!| 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                    r"   r   r#   r%   r(   r   r	   r*     r+   z,TestSubclass.test_basics.<locals>.<listcomp>r,   r-   c                    r"   r   r.   r%   r(   r   r	   r*   "  r+   r0   )r  r1   r   r2   r3   r4   r5   r6   r7   r8   r   r9   r   r(   r	   r<     s"   zTestSubclass.test_basicsc                 C   s  t d}| }| t|t| | t|t| t |}| t|t| | t|t| ttjd D ]+}t||}t	|}| 
t|t| | t|t| | t|t| q;t ddd}| }| t|t| | t|t| t |}| t|t| | t|t| ttjd D ]+}t||}t	|}| 
t|t| | t|t| | t|t| qd S )Nr=   r[   r   rS   rB   )r  __copy__r5   rl   r6   r1   r   r   r   r   r   r   )r   r)   rn   r   re   r   r   r	   test_copy_pickle*  s6   

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|| qwqd S )Nr[   r=   rA   rT   )r1   r   r   r  r2   r   r   r   r   r5   rl   rC   r/   rp   r  rH   rc   )r   r   r)   rn   ddeer   r   r	   r   N  s$   
z"TestSubclass.test_pickle_recursivec                 C   sD   t d}t|}| t|t| d }t  | tt| d S )NZgallahad)	r   r   proxyr5   strr   
gc_collectrH   ReferenceError)r   r)   pr   r   r	   test_weakrefc  s   
zTestSubclass.test_weakrefc                 C   s4   G dd dt }|g d}|g d}||k d S )Nc                   @   r   )z-TestSubclass.test_strange_subclass.<locals>.Xc                 S   s   t g S r   )rJ   r   r   r   r	   r  m  s   z6TestSubclass.test_strange_subclass.<locals>.X.__iter__Nr  r   r   r   r	   Xl  r   r  r^   )rS   r`   r   r   )r   r  Zd1Zd2r   r   r	   test_strange_subclassk  s   z"TestSubclass.test_strange_subclassc                 C   s   G dd dt }| }dd }||_| t |d  W d    n1 s&w   Y  | t |t g d  W d    d S 1 sDw   Y  d S )Nc                   @   r   )z&TestSubclass.test_bug_31608.<locals>.XNr   r   r   r   r	   r  x  r   r  c                 _   s   dgS )Nr   r   )clsro   kwargsr   r   r	   bad___new__{  s   z0TestSubclass.test_bug_31608.<locals>.bad___new__r   r^   )r   __new__rH   rc   )r   r  r)   r#  r   r   r	   test_bug_31608t  s   
"zTestSubclass.test_bug_31608N)r   r   r   r<   r  r   r  r   r   r  r%  r   r   r   r	   r    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                   @   r   )TestSubclassWithKwargsc                 C   s   t dd d S )Nr[   )r'  )r&  r   r   r   r	   test_subclass_with_kwargs     z0TestSubclassWithKwargs.test_subclass_with_kwargsN)r   r   r   r)  r   r   r   r	   r(    r   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      d S r   r   r   r   r   r	   r        zTestSequence.test_getitemc                 C   r,  r   r   r   r   r   r	   test_getslice  r-  zTestSequence.test_getslicec                 C   r,  r   r   r   r   r   r	   test_subscript  r-  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  r*  z&TestSequence.test_free_after_iteratingN)	r   r   r   r   Z	type2testr   r.  r/  r0  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|  | r<t|dr<dd l	}d gd }t
t|D ]}tj|  |  | ||< q&t| ddlm} t||  d S )Nr   gettotalrefcountr`   )
test_deque)sysr   r  r  r(  r+  r   Zrun_unittesthasattrr   r1   r7   r   r2  printtestr3  Zrun_doctest)verboser4  Ztest_classesr   countsr'   r3  r   r   r	   	test_main  s$   


r:  __main__T)r8  r   )collectionsr   Zunittestr7  r   r   r   r   r   r   r   r   r   r
   r   r   ZTestCaser   r  r  r  r  r&  r(  Z
CommonTestr+  r1  Z__test__r:  r   r   r   r   r	   <module>   s@         [rg
