a
    zeҁ                     @   s   d dl Z d dlZd dlmZmZmZ d dlmZmZmZ d dl	Z	d dl
Zg dZG dd dZG dd dZG d	d
 d
ZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dejZedkre  dS )    N)TESTFNunlinkcpython_only)check_free_after_iterating	ALWAYS_EQNEVER_EQ))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	   )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	   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )BasicIterClassc                 C   s   || _ d| _d S Nr   )niselfr    r   $/usr/lib/python3.9/test/test_iter.py__init__   s    zBasicIterClass.__init__c                 C   s"   | j }|| jkrt|d | _ |S Nr   )r   r   StopIterationr   resr   r   r   __next__   s
    

zBasicIterClass.__next__c                 C   s   | S Nr   r   r   r   r   __iter__#   s    zBasicIterClass.__iter__N__name__
__module____qualname__r   r   r   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd Zdd ZdS )IteratingSequenceClassc                 C   s
   || _ d S r   r   r   r   r   r   r   '   s    zIteratingSequenceClass.__init__c                 C   s
   t | jS r   )r   r   r   r   r   r   r   )   s    zIteratingSequenceClass.__iter__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S )IteratorProxyClassc                 C   s
   || _ d S r   r   r   r   r   r   r   r   -   s    zIteratorProxyClass.__init__c                 C   s
   t | jS r   )nextr   r   r   r   r   r   /   s    zIteratorProxyClass.__next__c                 C   s   | S r   r   r   r   r   r   r   1   s    zIteratorProxyClass.__iter__Nr   r   r   r   r   r#   ,   s   r#   c                   @   s   e Zd Zdd Zdd ZdS )SequenceClassc                 C   s
   || _ d S r   r!   r   r   r   r   r   5   s    zSequenceClass.__init__c                 C   s&   d|  kr| j k rn n|S td S r   )r   
IndexErrorr%   r   r   r   __getitem__7   s    zSequenceClass.__getitem__Nr   r   r   r   r)   r   r   r   r   r'   4   s   r'   c                   @   s   e Zd Zdd Zdd ZdS )SequenceProxyClassc                 C   s
   || _ d S r   s)r   r-   r   r   r   r   >   s    zSequenceProxyClass.__init__c                 C   s
   | j | S r   r,   r%   r   r   r   r)   @   s    zSequenceProxyClass.__getitem__Nr*   r   r   r   r   r+   =   s   r+   c                   @   s   e Zd Zdd ZdS )UnlimitedSequenceClassc                 C   s   |S r   r   r%   r   r   r   r)   D   s    z"UnlimitedSequenceClass.__getitem__Nr   r   r   r)   r   r   r   r   r.   C   s   r.   c                   @   s   e Zd ZdS )DefaultIterClassN)r   r   r   r   r   r   r   r0   G   s   r0   c                   @   s   e Zd Zdd ZdZdS )NoIterClassc                 C   s   |S r   r   r%   r   r   r   r)   K   s    zNoIterClass.__getitem__N)r   r   r   r)   r   r   r   r   r   r1   J   s   r1   c                   @   s   e Zd Zdd ZdS )BadIterableClassc                 C   s   t d S r   )ZeroDivisionErrorr   r   r   r   r   P   s    zBadIterableClass.__iter__Nr   r   r   r   r   r   r   r   r2   O   s   r2   c                   @   s  e Zd ZduddZdvd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d0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Z d>d? Z!d@dA Z"dBdC Z#dDdE Z$dFdG Z%dHdI Z&dJdK Z'dLdM Z(dNdO Z)dPdQ Z*dRdS Z+e,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3dbdc Z4ddde Z5dfdg Z6dhdi Z7djdk Z8e,dldm Z9dndo Z:dpdq Z;drds Z<dtS )wTestCaseTc                 C   sT   |r|  || g }zt|}W n ty6   Y qDY n0 || q| || d S r   )check_pickler&   r   appendassertEqual)r   itseqpickler   valr   r   r   check_iteratorX   s    
zTestCase.check_iteratorc                 C   s<   |r|  t|| g }|D ]}|| q| || d S r   )r6   iterr7   r8   )r   exprr:   r;   r   r<   r   r   r   check_for_loope   s    zTestCase.check_for_loopc              	   C   s   t tjd D ]}t||}t|}| t|tjj	 | 
t|| t|}zt| W n tyx   Y qY n0 t||}t|}| 
t||dd   qd S r   )ranger;   HIGHEST_PROTOCOLdumpsloads
assertTrue
isinstancecollectionsabcIteratorr8   listr&   r   )r   Zitorgr:   protodr9   r   r   r   r6   n   s    



zTestCase.check_picklec                 C   s    |  ttdttd d S N
   )r=   r>   rA   rJ   r   r   r   r   test_iter_basic   s    zTestCase.test_iter_basicc                 C   s.   t td}t|}t|}| ||u  d S rM   )rJ   rA   r>   rE   )r   r:   r9   Zit2r   r   r   test_iter_idempotency   s    zTestCase.test_iter_idempotencyc                 C   s    |  ttdttd d S rM   r@   r>   rA   rJ   r   r   r   r   test_iter_for_loop   s    zTestCase.test_iter_for_loopc                 C   sV   t d}g }t|D ]0}t|D ]"}t|D ]}||||f q,q q| |t d S N   )rA   r>   r7   r8   TRIPLETS)r   r:   r   r   jkr   r   r   test_iter_independence   s    zTestCase.test_iter_independencec                    s.   t d  fddt D }| |t d S )NrT   c                    s2   g | ]*}t  D ]}t  D ]}|||fqqqS r   )r>   .0r   rV   rW   r:   r   r   
<listcomp>   s   z<TestCase.test_nested_comprehensions_iter.<locals>.<listcomp>)rA   r>   r8   rU   r   r   r[   r   test_nested_comprehensions_iter   s
    
z(TestCase.test_nested_comprehensions_iterc                    s*   t d  fdd D }| |t d S )NrT   c                    s*   g | ]"} D ]} D ]}|||fqqqS r   r   rY   r[   r   r   r\          z;TestCase.test_nested_comprehensions_for.<locals>.<listcomp>)rA   r8   rU   r   r   r[   r   test_nested_comprehensions_for   s    z'TestCase.test_nested_comprehensions_forc                 C   s   |  tdttd d S rM   )r@   r    rJ   rA   r   r   r   r   test_iter_class_for   s    zTestCase.test_iter_class_forc                 C   s    |  ttdttd d S rM   )r=   r>   r    rJ   rA   r   r   r   r   test_iter_class_iter   s    zTestCase.test_iter_class_iterc                 C   s   |  tdttd d S rM   )r@   r'   rJ   rA   r   r   r   r   test_seq_class_for   s    zTestCase.test_seq_class_forc                 C   s    |  ttdttd d S rM   )r=   r>   r'   rJ   rA   r   r   r   r   test_seq_class_iter   s    zTestCase.test_seq_class_iterc                 C   s  t d}ttjd D ]v}t|}t||f|}t|\}}d|_| t	|t	| | 
t|ttd t| t||f|}t|\}}d|_| t	|t	| | 
t|ttdd tddD ]}t| qt||f|}t|\}}d|_| t	|t	| | 
t|ttdd | tt| t||f|}t|\}}d|_| t|tjj | 
t|g  qd S )N   r      )r'   rA   r;   rB   r>   rC   rD   r   ZassertIstyper8   rJ   r&   assertRaisesr   rE   rF   rG   rH   rI   )r   ZorigrK   ZitorigrL   r9   r:   r   r   r   r   #test_mutating_seq_class_iter_pickle   s6    
z,TestCase.test_mutating_seq_class_iter_picklec                 C   sl   t d}t|}t|}|D ]}t| qd|_| t|g  | t|ddg | t|g d d S )Nrd   re      )r   r   r	   rT      rd   ri   )r'   r>   r&   r   r8   rJ   )r   aZexhitZempitxr   r   r   &test_mutating_seq_class_exhausted_iter   s    
z/TestCase.test_mutating_seq_class_exhausted_iterc                 C   s$   G dd dt }| tt|  d S )Nc                   @   s   e Zd Zdd ZdS )z5TestCase.test_new_style_iter_class.<locals>.IterClassc                 S   s   | S r   r   r   r   r   r   r      s    z>TestCase.test_new_style_iter_class.<locals>.IterClass.__iter__Nr4   r   r   r   r   	IterClass   s   rn   )objectrg   	TypeErrorr>   )r   rn   r   r   r   test_new_style_iter_class   s    z"TestCase.test_new_style_iter_classc                 C   s2   G dd d}| j t| dttddd d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z&TestCase.test_iter_callable.<locals>.Cc                 S   s
   d| _ d S r   r$   r   r   r   r   r      s    z/TestCase.test_iter_callable.<locals>.C.__init__c                 S   s    | j }|d | _ |dkrt|S )Nr   d   )r   r(   r%   r   r   r   __call__   s
    
z/TestCase.test_iter_callable.<locals>.C.__call__N)r   r   r   r   rs   r   r   r   r   C   s   rt   rN   Fr;   r=   r>   rJ   rA   )r   rt   r   r   r   test_iter_callable   s    	zTestCase.test_iter_callablec                 C   s0   dgfdd}| j t|dttddd d S )Nr   c                 S   s   | d }|d | d< |S )Nr   r   r   stater   r   r   r   spam   s    z)TestCase.test_iter_function.<locals>.spamrN   Fru   rv   r   rz   r   r   r   test_iter_function   s    zTestCase.test_iter_functionc                 C   s0   dgfdd}| j t|dttddd d S )Nr   c                 S   s$   | d }|dkrt |d | d< |S )Nr   rN   r   )r   rx   r   r   r   rz     s
    z.TestCase.test_iter_function_stop.<locals>.spam   rN   Fru   rv   r{   r   r   r   test_iter_function_stop  s    z TestCase.test_iter_function_stopc              	   C   sf   dgfdd}g }zt |dD ]}|| qW n& tyV   | |ttd Y n0 | d d S )Nr   c                 S   s$   | d }|d | d< |dkr t |S )Nr   r   rN   )RuntimeErrorrx   r   r   r   rz     s
    z.TestCase.test_exception_function.<locals>.spamr}   rN   should have raised RuntimeError)r>   r7   r   r8   rJ   rA   fail)r   rz   r   rl   r   r   r   test_exception_function  s    z TestCase.test_exception_functionc              	   C   sf   G dd dt }g }z|dD ]}|| qW n& tyV   | |ttd Y n0 | d d S )Nc                   @   s   e Zd Zdd ZdS )z9TestCase.test_exception_sequence.<locals>.MySequenceClassc                 S   s   |dkrt t| |S rM   )r   r'   r)   r%   r   r   r   r)      s    zETestCase.test_exception_sequence.<locals>.MySequenceClass.__getitem__Nr/   r   r   r   r   MySequenceClass  s   r   r}   rN   r   )r'   r7   r   r8   rJ   rA   r   )r   r   r   rl   r   r   r   test_exception_sequence  s    z TestCase.test_exception_sequencec                 C   s0   G dd dt }| j|dttddd d S )Nc                   @   s   e Zd Zdd ZdS )z4TestCase.test_stop_sequence.<locals>.MySequenceClassc                 S   s   |dkrt t| |S rM   )r   r'   r)   r%   r   r   r   r)   0  s    z@TestCase.test_stop_sequence.<locals>.MySequenceClass.__getitem__Nr/   r   r   r   r   r   /  s   r   r}   rN   Fru   )r'   r@   rJ   rA   )r   r   r   r   r   test_stop_sequence.  s    zTestCase.test_stop_sequencec                 C   s    |  ttdttd d S )Ni'  rQ   r   r   r   r   test_iter_big_range7  s    zTestCase.test_iter_big_rangec                 C   s   |  tg g  d S r   r@   r>   r   r   r   r   test_iter_empty;  s    zTestCase.test_iter_emptyc                 C   s   |  tdttd d S )N)
r   r   r	   rT   rj   rd   ri   re      	   rN   )r@   r>   rJ   rA   r   r   r   r   test_iter_tuple?  s    zTestCase.test_iter_tuplec                 C   s    |  ttdttd d S rM   rQ   r   r   r   r   test_iter_rangeC  s    zTestCase.test_iter_rangec                 C   s   |  tdg d d S NZabcde)rk   bcrL   er   r   r   r   r   test_iter_stringG  s    zTestCase.test_iter_stringc                 C   s2   i }t dD ]}d ||< q| |t|  d S rM   )rA   r@   rJ   keys)r   dictr   r   r   r   test_iter_dictK  s    
zTestCase.test_iter_dictc                 C   s   t td}z(tdD ]}|d|  qW |  n
|  0 t td}zP| j|g ddd | j|g dd W |  ztt W q ty   Y q0 n*|  ztt W n ty   Y n0 0 d S )Nwrd   %d
rz0
1
2
3
4
Fru   )openr   rA   writecloser@   r   OSError)r   fr   r   r   r   test_iter_fileR  s&    

zTestCase.test_iter_filec                 C   s\  |  ttdttd |  ttdg  |  tdg  dddd}|  t|t|  | ttt | ttd ttd	}z(tdD ]}|	d
|  qW |
  n
|
  0 ttd}zb|  t|g d |dd |  t|g d W |
  ztt W n ty(   Y n0 n,|
  ztt W n tyT   Y n0 0 d S )Nrd   r   r   r   r	   rT   onetwothree*   r   r   r   r   )r8   rJ   r'   rA   r   rg   rp   r   r   r   r   seekr   r   r   rL   r   r   r   r   r   test_builtin_liste  s:    


zTestCase.test_builtin_listc                 C   sl  |  ttdd |  ttdd |  tg d |  tdd |  tdd ddd	d
}|  t|t|  | ttt | ttd ttd}z(t	dD ]}|
d|  qW |  n
|  0 ttd}zZ|  t|d |dd |  t|d W |  ztt W n ty8   Y n0 n,|  ztt W n tyd   Y n0 0 d S )Nrd   r   r   r	   rT   rj   r   r   rH   rk   r   r   r   r	   rT   r   r   r   r   r   r   )r8   tupler'   r   rg   rp   rJ   r   r   rA   r   r   r   r   r   r   r   r   r   test_builtin_tuple  s>    


zTestCase.test_builtin_tuplec                 C   s<  |  ttd tdttdd |  ttd tdg  |  ttd dg  |  ttd dg d dddd	}|  ttd |t|  | ttd t | ttd d
 G dd d}|d}|d}G dd d}|||gd  }|  ttdd ||gd  |  ttdd t||gd  d S )Nrd   r   r   r   rH   r   r	   rT   r   r   c                   @   s   e Zd Zdd Zdd ZdS )z-TestCase.test_builtin_filter.<locals>.Booleanc                 S   s
   || _ d S r   truth)r   r   r   r   r   r     s    z6TestCase.test_builtin_filter.<locals>.Boolean.__init__c                 S   s   | j S r   r   r   r   r   r   __bool__  s    z6TestCase.test_builtin_filter.<locals>.Boolean.__bool__N)r   r   r   r   r   r   r   r   r   Boolean  s   r   TFc                   @   s   e Zd Zdd Zdd ZdS )z)TestCase.test_builtin_filter.<locals>.Seqc                 W   s
   || _ d S r   vals)r   argsr   r   r   r     s    z2TestCase.test_builtin_filter.<locals>.Seq.__init__c                 S   s   G dd d}|| j S )Nc                   @   s$   e Zd Zdd Zdd Zdd ZdS )zCTestCase.test_builtin_filter.<locals>.Seq.__iter__.<locals>.SeqIterc                 S   s   || _ d| _d S r   )r   r   )r   r   r   r   r   r     s    zLTestCase.test_builtin_filter.<locals>.Seq.__iter__.<locals>.SeqIter.__init__c                 S   s   | S r   r   r   r   r   r   r     s    zLTestCase.test_builtin_filter.<locals>.Seq.__iter__.<locals>.SeqIter.__iter__c                 S   s0   | j }|d | _ |t| jk r(| j| S td S r   )r   lenr   r   r%   r   r   r   r     s
    

zLTestCase.test_builtin_filter.<locals>.Seq.__iter__.<locals>.SeqIter.__next__Nr   r   r   r   r   r   r   r   r   r   SeqIter  s   r   r   )r   r   r   r   r   r     s    z2TestCase.test_builtin_filter.<locals>.Seq.__iter__Nr"   r   r   r   r   Seq  s   r      c                 S   s   |  S r   r   rl   r   r   r   <lambda>  r^   z.TestCase.test_builtin_filter.<locals>.<lambda>c                 S   s   |  S r   r   r   r   r   r   r     r^   )	r8   rJ   filterr'   rA   r   rg   rp   r>   )r   rL   r   ZbTrueZbFalser   r:   r   r   r   test_builtin_filter  s"     zTestCase.test_builtin_filterc                 C   sz  |  ttdd |  ttdd |  tddd |  tddd dddd	}|  t|d
 |  t|d |  t| d |  tt| d ttd}z*|d |d |d W |	  n
|	  0 ttd}zZ|  t|d |
dd |  t|d W |	  ztt W n tyF   Y n0 n,|	  ztt W n tyr   Y n0 0 d S )Nrd   rj   r   r   r   r	   rT   r   r   r   r   zmedium line
zxtra large line
zitty-bitty line
r   )r8   maxr'   minvaluesr>   r   r   r   r   r   r   r   )r   rL   r   r   r   r   test_builtin_max_min  s<    



zTestCase.test_builtin_max_minc                    sL  |  ttdd tdttdd dddd |  tt fd	d t   t   fd
dtdD }ttd}z,tdD ]}|	d| d  qW |
  n
|
  0 ttd}zP|  ttt|ttddd W |
  ztt W n ty   Y n0 n,|
  ztt W n tyD   Y n0 0 d S )Nc                 S   s   | d S r   r   r   r   r   r   r     r^   z+TestCase.test_builtin_map.<locals>.<lambda>rd   r   ri   r	   rT   r   c                 S   s   | ||  fS r   r   )rW   rL   r   r   r   r     r^   c                    s>   g | ]6}|t  k r| pd ||t  k r4| p6d fqS r   )r   rZ   r   rL   Zdkeysr   r   r\     s
   z-TestCase.test_builtin_map.<locals>.<listcomp>r   rN   Zxy
r      )r8   rJ   mapr'   rA   itemsr   r   r   r   r   r   r   r   )r   expectedr   r   r   r   r   test_builtin_map  s:    


$zTestCase.test_builtin_mapc                 C   s  |  tt g  |  ttg  g  |  ttddg ddg | ttd  | tttdd | tttdt |  tttdg d |  tttdg d d	d
dd}|  t| tt||	  G dd d}t
td}z|d W |  n
|  0 t
td}zR|  tt|d||dg d W |  ztt W n tyr   Y n0 n,|  ztt W n ty   Y n0 0 |  tttddd tdD  G dd d}G dd d|}G dd d|}dd }|  t| d |  t| d |  || |td |  || |td |  || |td d d tdD }| | | fD ]0}	| | | fD ]}
|  ||	|
| qqd S )!Nr   r	   ab)r   rk   )r	   r   rN   r   rT   )r   )r   )r	   r   r	   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )z+TestCase.test_builtin_zip.<locals>.IntsFromc                 S   s
   || _ d S r   r$   )r   startr   r   r   r   #  s    z4TestCase.test_builtin_zip.<locals>.IntsFrom.__init__c                 S   s   | S r   r   r   r   r   r   r   &  s    z4TestCase.test_builtin_zip.<locals>.IntsFrom.__iter__c                 S   s   | j }|d | _ |S r   r$   r%   r   r   r   r   )  s    
z4TestCase.test_builtin_zip.<locals>.IntsFrom.__next__Nr   r   r   r   r   IntsFrom"  s   r   r   z	a
bbb
cc
r   r   ))r   a
r   )r   zbbb
i)r	   zcc
ird   c                 S   s   g | ]
}|fqS r   r   r   r   r   r   r\   @  r^   z-TestCase.test_builtin_zip.<locals>.<listcomp>c                   @   s   e Zd Zdd ZdS )z.TestCase.test_builtin_zip.<locals>.NoGuessLen5c                 S   s   |dkrt |S Nrd   )r(   r%   r   r   r   r)   D  s    z:TestCase.test_builtin_zip.<locals>.NoGuessLen5.__getitem__Nr/   r   r   r   r   NoGuessLen5C  s   r   c                   @   s   e Zd Zdd ZdS )z-TestCase.test_builtin_zip.<locals>.Guess3Len5c                 S   s   dS rS   r   r   r   r   r   __len__J  s    z5TestCase.test_builtin_zip.<locals>.Guess3Len5.__len__Nr   r   r   r   r   r   r   r   
Guess3Len5I  s   r   c                   @   s   e Zd Zdd ZdS )z.TestCase.test_builtin_zip.<locals>.Guess30Len5c                 S   s   dS )N   r   r   r   r   r   r   N  s    z6TestCase.test_builtin_zip.<locals>.Guess30Len5.__len__Nr   r   r   r   r   Guess30Len5M  s   r   c                  W   s   t t|  S r   )rJ   zip)r   r   r   r   lzipQ  s    z'TestCase.test_builtin_zip.<locals>.lzipr   c                 S   s   g | ]}||fqS r   r   r   r   r   r   r\   Z  r^   )r8   rJ   r   rg   rp   rA   r    r'   r   r   r   r   r   r   r   r   r   )r   rL   r   r   r   r   r   r   r   rl   yr   r   r   test_builtin_zip  s`    "

&zTestCase.test_builtin_zipc                 C   s   G dd d}t td}z|d W |  n
|  0 t td}zFd||}| |d W |  ztt W q ty   Y q0 n*|  ztt W n ty   Y n0 0 d S )Nc                   @   s$   e Zd Zdd Zdd Zdd ZdS )z4TestCase.test_unicode_join_endcase.<locals>.OhPhooeyc                 S   s   t || _d| _d S r   )r>   r9   r   )r   r:   r   r   r   r   d  s    
z=TestCase.test_unicode_join_endcase.<locals>.OhPhooey.__init__c                 S   s   | S r   r   r   r   r   r   r   h  s    z=TestCase.test_unicode_join_endcase.<locals>.OhPhooey.__iter__c                 S   s&   | j }|d | _ |dkrdS t| jS )Nr   r	   zfooled you!)r   r&   r9   r%   r   r   r   r   k  s
    
z=TestCase.test_unicode_join_endcase.<locals>.OhPhooey.__next__Nr   r   r   r   r   OhPhooeyc  s   r   r   a
b
c
r   z - za
 - b
 - fooled you! - c
)r   r   r   r   joinr8   r   r   )r   r   r   Zgotr   r   r   test_unicode_join_endcase_  s&    

z"TestCase.test_unicode_join_endcasec                 C   sx  t dtdfD ]J}tdD ]}| || qdddddg ddid|f	D ]}| || qHq| tttdg | ttdg | tttt	g | ttt	g | t	tttg | t	ttg | 
tdd	  | 
td
d	  | 
tdd	  ddddd}|D ]"}| || | ||  q| D ]"}| ||  | || qB| D ]2\}}| ||f|  | ||f|  qnttd}z|d W |  n
|  0 ttd}zndD ]:}|dd | || |dd | |d | qW |  ztt W n tyD   Y n0 n,|  ztt W n typ   Y n0 0 d S )Nrd   rH   r   g(\5E@)rT   rj   r   y      @      (c                   S   s   ddv S )NrT      r   r   r   r   r   r     r^   z-TestCase.test_in_and_not_in.<locals>.<lambda>c                   S   s   dt vS rS   )r   r   r   r   r   r     r^   c                   S   s
   dt  v S rS   )r2   r   r   r   r   r     r^   r	   rT                  @r   r   r                 ?r   r   r   r   r   )r    r'   rA   ZassertInZassertNotInr   r#   r>   r+   r   rg   rp   r3   r   r   r   r   r   r   r   r   r   )r   Zsc5r   rL   rW   vr   chunkr   r   r   test_in_and_not_in  sZ    

zTestCase.test_in_and_not_inc                 C   s  ddl m} | |g ddd | |ddd | |ddd | |ddd | t|d	d
 | t||| ddddd}|D ]}| |||d
 q| || dd | || dd
 | || dd ttd}z|d W |	  n
|	  0 ttd}z`dD ],\}}|
dd | |||d | q W |	  ztt W n tyx   Y n0 n,|	  ztt W n ty   Y n0 0 d S )Nr   )countOfr   r	   r	   rT   r	   rd   r	   rT   12232526r   r   r   r   r   r   za
b
c
b
r   ))rk   r   )r   r	   )r   r   )rL   r   r   )operatorr   r8   rg   rp   r   r   r   r   r   r   r   r   )r   r   rL   rW   r   Zlettercountr   r   r   test_countOf  s@    

zTestCase.test_countOfc                 C   s  ddl m} | |g ddd | |ddd | |ddd | |ddd | t|dd | t|dd | |d	d
d | |d	dd | t|d	d | t|dd | t||| | t|t d tt	d}z|
d W |  n
|  0 tt	d}z|t|}| ||dd | ||dd | ||dd | t||d W |  ztt	 W n ty   Y n0 n,|  ztt	 W n ty   Y n0 0 td}tdD ]}| |||| q| t||d d S )Nr   )indexOfr   r   r	   rT   rd   ri   r   r   5r   r   r   z
a
b
c
d
e
r   zb
zd
ze
r   r   )r   r   r8   rg   
ValueErrorrp   r3   r2   r   r   r   r   r>   r   r   r    rA   )r   r   r   ZfiterZiclassr   r   r   r   test_indexOf  sL    

zTestCase.test_indexOfc                    s  t td}z| t|jd  | t|jd |ddg |d |dd i |i  G dd d G  fd	d
d
}||dd |  t t}dd tddD }| t|| W |  zt	t W n t
y   Y n0 n,|  zt	t W n t
y   Y n0 0 d S )Nr   r   r   r   )r   r   z5
c                   @   s$   e Zd Zdd Zdd Zdd ZdS )z*TestCase.test_writelines.<locals>.Iteratorc                 S   s   || _ || _| j | _d S r   )r   finishr   r   r   r   r   r   r   r     s    z3TestCase.test_writelines.<locals>.Iterator.__init__c                 S   s0   | j | jkrtt| j d }|  j d7  _ |S )Nr   r   )r   r   r   str)r   resultr   r   r   r     s
    z3TestCase.test_writelines.<locals>.Iterator.__next__c                 S   s   | S r   r   r   r   r   r   r   !  s    z3TestCase.test_writelines.<locals>.Iterator.__iter__Nr   r   r   r   r   rI     s   rI   c                       s    e Zd Zdd Z fddZdS )z*TestCase.test_writelines.<locals>.Whateverc                 S   s   || _ || _d S r   r   r   r   r   r   r   r   %  s    z3TestCase.test_writelines.<locals>.Whatever.__init__c                    s    | j | jS r   r   r   rI   r   r   r   )  s    z3TestCase.test_writelines.<locals>.Whatever.__iter__Nr"   r   r   r   r   Whatever$  s   r   ri   i  c                 S   s   g | ]}t |d  qS )r   )r   r   r   r   r   r\   0  r^   z,TestCase.test_writelines.<locals>.<listcomp>r   )r   r   rg   rp   
writelinesr   rA   r8   rJ   r   r   )r   r   r   r   r   r   r   test_writelines  s2    


zTestCase.test_writelinesc                 C   s  d\}}|  ||fd td\}}}|  |||fd ztd\}}W n tyZ   Y n0 | d ztd\}}}W n ty   Y n0 | d zt\}}}W n ty   Y n0 | d dddd \}}}|  |||fd	 ttd
}d}z |D ]}|	| qW |
  n
|
  0 ttd}zJ|\}}}|  |||f| W |
  ztt W n tyv   Y n0 n,|
  ztt W n ty   Y n0 0 tdddi \}}\}|  |||fd d S )Nr   rT   r
   zshould have raised ValueErrorr	   zshould have raised TypeErrorr   )r   r	   rT   )r   r   r   r   )r   zbb
zccc
r      )r   r   r   )r8   r    r   r   r   rp   r   r   r   r   r   r   r   )r   rk   r   r   r   linesliner   r   r   test_unpack_iter<  sV    





zTestCase.test_unpack_iterc                 C   s   G dd dt }| }| |jd ~| |jd | | | g}| |jd zt|\}}W n tyt   Y n0 ~| |jd d S )Nc                   @   s    e Zd ZdZdd Zdd ZdS )z.TestCase.test_ref_counting_behavior.<locals>.Cr   c                 S   s   |  j d7  _ t| S r   )r   ro   __new__)clsr   r   r   r  u  s    z6TestCase.test_ref_counting_behavior.<locals>.C.__new__c                 S   s   | j }| jd8  _d S r   )	__class__r   )r   r  r   r   r   __del__x  s    z6TestCase.test_ref_counting_behavior.<locals>.C.__del__N)r   r   r   r   r  r  r   r   r   r   rt   s  s   rt   r   r   rT   )ro   r8   r   r>   r   )r   rt   rl   lrk   r   r   r   r   test_ref_counting_behaviorq  s    	z#TestCase.test_ref_counting_behaviorc                 C   sP   t td}t|}| t |t td |tdd | t |g  d S Nrd   rN   )rJ   rA   r>   r8   extendr   rk   r   r   r   r   test_sinkstate_list  s
    zTestCase.test_sinkstate_listc                 C   s8   d}t |}| t|ttd | t|g  d S )Nr   rd   r>   r8   rJ   rA   r
  r   r   r   test_sinkstate_tuple  s    zTestCase.test_sinkstate_tuplec                 C   s4   d}t |}| t|g d | t|g  d S r   )r>   r8   rJ   r
  r   r   r   test_sinkstate_string  s    zTestCase.test_sinkstate_stringc                 C   sB   t d}t|}| t|ttd d|_| t|g  d S r  )r'   r>   r8   rJ   rA   r   r
  r   r   r   test_sinkstate_sequence  s
    z TestCase.test_sinkstate_sequencec                 C   sD   dgfdd}t |d}| t|ttd | t|g  d S )Nr   c                 S   s(   | d }|d | d< |dkr$t d|S )Nr   r   rN   zshouldn't have gotten this far)AssertionErrorrx   r   r   r   rz     s
    z.TestCase.test_sinkstate_callable.<locals>.spamrd   r  )r   rz   r   r   r   r   test_sinkstate_callable  s    
z TestCase.test_sinkstate_callablec                 C   sb   dddddd}t || | | fD ]0}t |}| tt|d | t|g  q,d S )Nr   r	   r   rj   rT   )r   r	   r   rj   rT   rd   )r>   r   r   r   r8   r   rJ   r
  r   r   r   test_sinkstate_dict  s
     zTestCase.test_sinkstate_dictc                 C   s:   dd }| }|  t|ttd |  t|g  d S )Nc                  s   s   t dD ]
} | V  qd S r   rA   r$   r   r   r   gen  s    z*TestCase.test_sinkstate_yield.<locals>.genrd   )r8   rJ   rA   )r   r  r   r   r   r   test_sinkstate_yield  s    zTestCase.test_sinkstate_yieldc                 C   s<   t d}t|}| t|tt d | t|g  d S r   )rA   r>   r8   rJ   r
  r   r   r   test_sinkstate_range  s    zTestCase.test_sinkstate_rangec                 C   sN   t d}t|}t|}| t|ttt dt d | t|g  d S r   )rA   	enumerater>   r8   rJ   r   )r   rk   r   r   r   r   r   test_sinkstate_enumerate  s
    "z!TestCase.test_sinkstate_enumeratec                    s<   G  fdddt  z  D ]}qW n ty6   Y n0 d S )Nc                       s    e Zd Zdd Z fddZdS )z'TestCase.test_3720.<locals>.BadIteratorc                 S   s   | S r   r   r   r   r   r   r     s    z0TestCase.test_3720.<locals>.BadIterator.__iter__c                    s    ` dS r   )r   r   BadIteratorr   r   r     s    z0TestCase.test_3720.<locals>.BadIterator.__next__N)r   r   r   r   r   r   r  r   r   r    s   r  )ro   rp   r%   r   r  r   	test_3720  s    
zTestCase.test_3720c                 C   sJ   dd }dgd }t dD ]}|d q||  | t|d d S )Nc                  s   s   t dD ]
} | V  qd S )N  r  r$   r   r   r   r    s    zITestCase.test_extending_list_with_iterator_does_not_segfault.<locals>.genr   r     i  )rA   popr	  r8   r   )r   r  Zlstr   r   r   r   3test_extending_list_with_iterator_does_not_segfault  s    
z<TestCase.test_extending_list_with_iterator_does_not_segfaultc                 C   s   t t }|tjd  | t|tjd  | t|tjd  | t t| W d    n1 sn0    Y  | t t| W d    n1 s0    Y  d S )Nr	   r   )	r>   r.   __setstate__sysmaxsizer8   r&   rg   OverflowErrorr   r9   r   r   r   test_iter_overflow  s    
&zTestCase.test_iter_overflowc                 C   s8   t t }|d | t|d | t|d d S )Nir   r   )r>   r.   r   r8   r&   r$  r   r   r   test_iter_neg_setstate   s    

zTestCase.test_iter_neg_setstatec                 C   s   t | ttd d S )Nr   )r   r>   r'   r   r   r   r   test_free_after_iterating  s    z"TestCase.test_free_after_iteratingc                 C   s2   t tfD ]}| tt|  q| ttt  d S r   )r0   r1   rg   rp   r>   r3   r2   )r   typr   r   r   test_error_iter	  s    zTestCase.test_error_iterN)T)T)=r   r   r   r=   r@   r6   rO   rP   rR   rX   r]   r_   r`   ra   rb   rc   rh   rm   rq   rw   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   r   r   r5   U   sv   

	
$
	!- O*1#*55
	
r5   __main__)r!  ZunittestZtest.supportr   r   r   r   r   r   r;   collections.abcrG   rU   r   r    r#   r'   r+   r.   r0   r1   r2   r5   r   mainr   r   r   r   <module>   s2   	       A