B
    u9a~                 @   s   d dl Z d dlZd dlmZmZmZmZ d dlmZ d dlZd dl	Z
dddddd	d
ddddddddddddddddddddg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d-d. Zed/kre  dS )0    N)run_unittestTESTFNunlinkcpython_only)check_free_after_iterating)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.7/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 )N)r
   )r   r
   r   r   r   r   '   s    zIteratingSequenceClass.__init__c             C   s
   t | jS )N)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S )SequenceClassc             C   s
   || _ d S )N)r
   )r   r
   r   r   r   r   -   s    zSequenceClass.__init__c             C   s&   d|  kr| j k rn n|S td S )Nr   )r
   
IndexError)r   r   r   r   r   __getitem__/   s    zSequenceClass.__getitem__N)r   r   r   r   r   r   r   r   r   r   ,   s   r   c               @   s   e Zd Zdd ZdS )UnlimitedSequenceClassc             C   s   |S )Nr   )r   r   r   r   r   r   6   s    z"UnlimitedSequenceClass.__getitem__N)r   r   r   r   r   r   r   r   r   5   s   r   c               @   s   e Zd ZdS )DefaultIterClassN)r   r   r   r   r   r   r   r   9   s   r   c               @   s   e Zd Zdd ZdZdS )NoIterClassc             C   s   |S )Nr   )r   r   r   r   r   r   =   s    zNoIterClass.__getitem__N)r   r   r   r   r   r   r   r   r   r   <   s   r   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   sX   |r|  || g }x2yt|}W n tk
r8   P Y nX || qW | || d S )N)check_picklenextr   appendassertEqual)r   itseqpickler   valr   r   r   check_iteratorF   s    zTestCase.check_iteratorc             C   s@   |r|  t|| g }x|D ]}|| qW | || d S )N)r   iterr!   r"   )r   exprr$   r%   r   r&   r   r   r   check_for_loopS   s    
zTestCase.check_for_loopc          	   C   s   xt tjd D ]}t||}t|}| t|tjj	 | 
t|| t|}yt| W n tk
rz   wY nX t||}t|}| 
t||dd   qW d S )Nr   )ranger%   HIGHEST_PROTOCOLdumpsloads
assertTrue
isinstancecollectionsabcIteratorr"   listr    r   )r   Zitorgr$   protodr#   r   r   r   r   \   s    


zTestCase.check_picklec             C   s    |  ttdttd d S )N
   )r'   r(   r+   r4   )r   r   r   r   test_iter_basicp   s    zTestCase.test_iter_basicc             C   s.   t td}t|}t|}| ||k d S )Nr7   )r4   r+   r(   r/   )r   r$   r#   Zit2r   r   r   test_iter_idempotencyt   s    zTestCase.test_iter_idempotencyc             C   s    |  ttdttd d S )Nr7   )r*   r(   r+   r4   )r   r   r   r   test_iter_for_loop{   s    zTestCase.test_iter_for_loopc             C   sb   t d}g }xDt|D ]8}x2t|D ]&}x t|D ]}||||f q2W q$W qW | |t d S )N   )r+   r(   r!   r"   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 )Nr;   c                s2   g | ]*}t  D ]}t  D ]}|||fqqqS r   )r(   ).0r   r=   r>   )r$   r   r   
<listcomp>   s   z<TestCase.test_nested_comprehensions_iter.<locals>.<listcomp>)r+   r(   r"   r<   )r   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 )Nr;   c                s*   g | ]"} D ]} D ]}|||fqqqS r   r   )r@   r   r=   r>   )r$   r   r   rA      s    z;TestCase.test_nested_comprehensions_for.<locals>.<listcomp>)r+   r"   r<   )r   r   r   )r$   r   test_nested_comprehensions_for   s    z'TestCase.test_nested_comprehensions_forc             C   s   |  tdttd d S )Nr7   )r*   r   r4   r+   )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 )Nr7   )r'   r(   r   r4   r+   )r   r   r   r   test_iter_class_iter   s    zTestCase.test_iter_class_iterc             C   s   |  tdttd d S )Nr7   )r*   r   r4   r+   )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 )Nr7   )r'   r(   r   r4   r+   )r   r   r   r   test_seq_class_iter   s    zTestCase.test_seq_class_iterc             C   s  t d}xttjd D ]z}t|}t||f|}t|\}}d|_| t	|t	| | 
t|ttd t| t||f|}t|\}}d|_| t	|t	| | 
t|ttdd xtddD ]}t| qW t||f|}t|\}}d|_| t	|t	| | 
t|ttdd | tt| t||f|}t|\}}d|_| t|tjj | 
t|g  qW d S )N   r      )r   r+   r%   r,   r(   r-   r.   r
   ZassertIstyper"   r4   r    assertRaisesr   r/   r0   r1   r2   r3   )r   Zorigr5   Zitorigr6   r#   r$   r   r   r   r   #test_mutating_seq_class_iter_pickle   s6    z,TestCase.test_mutating_seq_class_iter_picklec          
   C   sz   t d}t|}t|}x|D ]}t| qW d|_| t|g  | t|ddg | t|dddddddg d S )	NrH   rI      r   r   r   r;      )r   r(   r    r
   r"   r4   )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 )Nr   )r   r   r   r   r      s    z>TestCase.test_new_style_iter_class.<locals>.IterClass.__iter__N)r   r   r   r   r   r   r   r   	IterClass   s   rR   )objectrK   	TypeErrorr(   )r   rR   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 )Nr   )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   r   __call__   s
    
z/TestCase.test_iter_callable.<locals>.C.__call__N)r   r   r   r   rW   r   r   r   r   C   s   rX   r7   F)r%   )r'   r(   r4   r+   )r   rX   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>.spamr7   F)r%   )r'   r(   r4   r+   )r   r[   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   r7   r   )r   )rZ   r   r   r   r   r[      s
    z.TestCase.test_iter_function_stop.<locals>.spam   r7   F)r%   )r'   r(   r4   r+   )r   r[   r   r   r   test_iter_function_stop   s    z TestCase.test_iter_function_stopc          	   C   sl   dgfdd}g }y"xt |dD ]}|| q W W n( tk
r\   | |ttd Y nX | d d S )Nr   c             S   s$   | d }|d | d< |dkr t |S )Nr   r   r7   )RuntimeError)rZ   r   r   r   r   r[      s
    z.TestCase.test_exception_function.<locals>.spamr]   r7   zshould have raised RuntimeError)r(   r!   r_   r"   r4   r+   fail)r   r[   r   rP   r   r   r   test_exception_function   s    z TestCase.test_exception_functionc          	   C   sl   G dd dt }g }y x|dD ]}|| q W W n( tk
r\   | |ttd Y nX | 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 )Nr7   )r_   r   r   )r   r   r   r   r   r     s    zETestCase.test_exception_sequence.<locals>.MySequenceClass.__getitem__N)r   r   r   r   r   r   r   r   MySequenceClass  s   rb   r]   r7   zshould have raised RuntimeError)r   r!   r_   r"   r4   r+   r`   )r   rb   r   rP   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 )Nr7   )r   r   r   )r   r   r   r   r   r     s    z@TestCase.test_stop_sequence.<locals>.MySequenceClass.__getitem__N)r   r   r   r   r   r   r   r   rb     s   rb   r]   r7   F)r%   )r   r*   r4   r+   )r   rb   r   r   r   test_stop_sequence  s    zTestCase.test_stop_sequencec             C   s    |  ttdttd d S )Ni'  )r*   r(   r+   r4   )r   r   r   r   test_iter_big_range%  s    zTestCase.test_iter_big_rangec             C   s   |  tg g  d S )N)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   r;   rN   rH   rM   rI      	   r7   )r*   r(   r4   r+   )r   r   r   r   test_iter_tuple-  s    zTestCase.test_iter_tuplec             C   s    |  ttdttd d S )Nr7   )r*   r(   r+   r4   )r   r   r   r   test_iter_range1  s    zTestCase.test_iter_rangec             C   s   |  tddddddg d S )NabcderO   bcr6   e)r*   r(   )r   r   r   r   test_iter_string5  s    zTestCase.test_iter_stringc             C   s6   i }xt dD ]}d ||< qW | |t|  d S )Nr7   )r+   r*   r4   keys)r   dictr   r   r   r   test_iter_dict9  s    zTestCase.test_iter_dictc             C   s   t td}z$xtdD ]}|d|  qW W d |  X t td}z.| j|ddddd	gd
d | j|g d
d W d |  ytt W n tk
r   Y nX X d S )NwrH   z%d
rz0
z1
z2
z3
z4
F)r%   )openr   r+   writecloser*   r   OSError)r   fr   r   r   r   test_iter_file@  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$xtdD ]}|	d
|  qW W d |
  X ttd}zD|  t|dddddg |dd |  t|dddddg W d |
  ytt W n tk
r4   Y nX X d S )NrH   r   r   r   r   r;   )onetwothree*   rs   z%d
rt   z0
z1
z2
z3
z4
)r"   r4   r   r+   rp   rK   rT   ru   r   rv   rw   seekr   rx   )r   r6   ry   r   r   r   r   test_builtin_listS  s.    



zTestCase.test_builtin_listc             C   s@  |  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$xt	dD ]}|
d|  qW W d |  X ttd}z0|  t|d |dd |  t|d W d |  ytt W n tk
r8   Y nX X d S )NrH   )r   r   r   r;   rN   r   r   r2   )rO   rl   rm   r   r   r;   )r{   r|   r}   r~   rs   z%d
rt   )z0
z1
z2
z3
z4
)r"   tupler   rp   rK   rT   r4   ru   r   r+   rv   rw   r   r   rx   )r   r6   ry   r   r   r   r   test_builtin_tupler  s2    




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dddg 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 )NrH   r   r   r   r2   rO   rl   rm   r   r;   )r{   r|   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 )N)truth)r   r   r   r   r   r     s    z6TestCase.test_builtin_filter.<locals>.Boolean.__init__c             S   s   | j S )N)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 )N)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 )Nr   )r   r   )r   r   r   r   r   r     s    zLTestCase.test_builtin_filter.<locals>.Seq.__iter__.<locals>.SeqIter.__init__c             S   s   | S )Nr   )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 )Nr   )r   lenr   r   )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__N)r   r   r   r   r   r   r   r   r   Seq  s   r      c             S   s   |  S )Nr   )rP   r   r   r   <lambda>      z.TestCase.test_builtin_filter.<locals>.<lambda>c             S   s   |  S )Nr   )rP   r   r   r   r     r   )	r"   r4   filterr   r+   rp   rK   rT   r(   )r   r6   r   ZbTrueZbFalser   r$   r   r   r   test_builtin_filter  s      zTestCase.test_builtin_filterc             C   sJ  |  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 d |	  X ttd}z0|  t|d |
dd |  t|d W d |	  ytt W n tk
rB   Y nX X d S )NrH   rN   r   rg   r   r   r;   )r{   r|   r}   r|   r{   rs   zmedium line
zxtra large line
zitty-bitty line
rt   )r"   maxr   minvaluesr(   ru   r   rv   rw   r   r   rx   )r   r6   ry   r   r   r   test_builtin_max_min  s2    




zTestCase.test_builtin_max_minc                s   |  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(x"tdD ]}|	d| d  qW W d |
  X ttd}z&|  ttt|ttddd W d |
  ytt W n tk
r   Y nX X d S )Nc             S   s   | d S )Nr   r   )rP   r   r   r   r     r   z+TestCase.test_builtin_map.<locals>.<lambda>rH   r   rM   r   r;   )r{   r|   r}   c             S   s   | ||  fS )Nr   )r>   r6   r   r   r   r     r   c                s>   g | ]6}|t  k r| pd ||t  k r4| p6d fqS )N)r   )r@   r   )r6   dkeysr   r   rA     s   z-TestCase.test_builtin_map.<locals>.<listcomp>rs   r7   Zxy
rt      )r"   r4   mapr   r+   itemsrp   ru   r   rv   rw   r   r   rx   )r   expectedry   r   r   )r6   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dd	d
g |  tttddd	d
g dddd}|  t| tt||	  G dd d}t
td}z|d W d |  X t
td}z*|  tt|d||ddddg W d |  ytt W n tk
rt   Y nX X |  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 }xH| | | fD ]4}	x,| | | fD ]}
|  ||	|
| qW qjW d S )%N)r   r   Zab)r   rO   )r   rl   r7   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 )z+TestCase.test_builtin_zip.<locals>.IntsFromc             S   s
   || _ d S )N)r   )r   startr   r   r   r     s    z4TestCase.test_builtin_zip.<locals>.IntsFrom.__init__c             S   s   | S )Nr   )r   r   r   r   r     s    z4TestCase.test_builtin_zip.<locals>.IntsFrom.__iter__c             S   s   | j }|d | _ |S )Nr   )r   )r   r   r   r   r   r     s    
z4TestCase.test_builtin_zip.<locals>.IntsFrom.__next__N)r   r   r   r   r   r   r   r   r   r   IntsFrom  s   r   rs   z	a
bbb
cc
rt   r   i)r   za
i)r   zbbb
i)r   zcc
irH   c             S   s   g | ]
}|fqS r   r   )r@   r   r   r   r   rA   .  s    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 )NrH   )r   )r   r   r   r   r   r   2  s    z:TestCase.test_builtin_zip.<locals>.NoGuessLen5.__getitem__N)r   r   r   r   r   r   r   r   NoGuessLen51  s   r   c               @   s   e Zd Zdd ZdS )z-TestCase.test_builtin_zip.<locals>.Guess3Len5c             S   s   dS )Nr;   r   )r   r   r   r   __len__8  s    z5TestCase.test_builtin_zip.<locals>.Guess3Len5.__len__N)r   r   r   r   r   r   r   r   
Guess3Len57  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   <  s    z6TestCase.test_builtin_zip.<locals>.Guess30Len5.__len__N)r   r   r   r   r   r   r   r   Guess30Len5;  s   r   c              W   s   t t|  S )N)r4   zip)r   r   r   r   lzip?  s    z'TestCase.test_builtin_zip.<locals>.lzipr   c             S   s   g | ]}||fqS r   r   )r@   r   r   r   r   rA   H  s    )r"   r4   r   rK   rT   r+   r   r   r   r   ru   r   rv   rw   r   rx   r   )r   r6   r   ry   r   r   r   r   r   rP   yr   r   r   test_builtin_zip  sT    "


&zTestCase.test_builtin_zipc             C   s   G dd d}t td}z|d W d |  X t td}zd||}| |d W d |  ytt W n tk
r   Y nX X 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 )Nr   )r(   r#   r   )r   r$   r   r   r   r   R  s    
z=TestCase.test_unicode_join_endcase.<locals>.OhPhooey.__init__c             S   s   | S )Nr   )r   r   r   r   r   V  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    r#   )r   r   r   r   r   r   Y  s
    
z=TestCase.test_unicode_join_endcase.<locals>.OhPhooey.__next__N)r   r   r   r   r   r   r   r   r   r   OhPhooeyQ  s   r   rs   za
b
c
rt   z - za
 - b
 - fooled you! - c
)ru   r   rv   rw   joinr"   r   rx   )r   r   ry   Zgotr   r   r   test_unicode_join_endcaseM  s    


z"TestCase.test_unicode_join_endcasec             C   s  xft dtdfD ]R}xtdD ]}| || q W x.dddddg ddid|f	D ]}| || qPW qW | tdd	  | td
d	  ddddd}x(|D ] }| || | ||  qW x,| D ] }| ||  | || qW x<| D ]0\}}| ||f|  | ||f|  qW t	t
d}z|d W d |  X t	t
d}zHxBdD ]:}|dd | || |dd | |d | qbW W d |  ytt
 W n tk
r   Y nX X d S )NrH   r2   r   g(\5E@)r;   rN   r   y      @      (c               S   s   ddkS )Nr;      r   r   r   r   r   r   ~  r   z-TestCase.test_in_and_not_in.<locals>.<lambda>c               S   s   dt kS )Nr;   )r   r   r   r   r   r     r   r   r;   y               @)r{   r|   r}   y              ?rs   za
b
c
rt   r   r   )r   r   r+   ZassertInZassertNotInrK   rT   r   r   ru   r   rv   rw   r   r   rx   )r   Zsc5r   r6   r>   vry   chunkr   r   r   test_in_and_not_inw  sB     




zTestCase.test_in_and_not_inc             C   s  ddl m} | |ddddddgdd | |ddd | |dd	d | |dd
d | t|dd | t||| ddddd}x|D ]}| |||d qW | || dd | || dd | || dd ttd}z|d W d |	  X ttd}z:x4dD ],\}}|
dd | |||d | q&W W d |	  ytt W n tk
r   Y nX X d S )Nr   )countOfr   r   r;   rH   )r   r   r   r;   r   rH   12232526r~   y               @)r{   r|   r}   y              ?y              ?rs   za
b
c
b
rt   ))rO   r   )rl   r   )rm   r   )r6   r   r   )operatorr   r"   rK   rT   r   ru   r   rv   rw   r   r   rx   )r   r   r6   r>   ry   Zlettercountr   r   r   test_countOf  s6    



 zTestCase.test_countOfc             C   s  ddl m} | |ddddddg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}z|d W d |	  X ttd}zRt
|}| ||dd | ||dd | ||dd | t||d W d |	  ytt W n tk
r   Y nX X td}x$tdD ]}| |||| qW | t||d d S )Nr   )indexOfr   r   r;   rH   )r   r   r   r;   r   rH   rM   r   r   5r   r~   rs   z
a
b
c
d
e
rt   zb
zd
ze
za
r   )r   r   r"   rK   
ValueErrorrT   ru   r   rv   rw   r(   r   rx   r   r+   )r   r   ry   ZfiterZiclassr   r   r   r   test_indexOf  s@    


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 d |  yt	t W n t
k
r   Y nX X d S )Nrs   r~   z1
z2
)z3
z4
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 )N)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 )Nr   )r   r   r   r   r     s    z3TestCase.test_writelines.<locals>.Iterator.__iter__N)r   r   r   r   r   r   r   r   r   r   r3     s   r3   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 )N)r   r   )r   r   r   r   r   r   r   
  s    z3TestCase.test_writelines.<locals>.Whatever.__init__c                s    | j | jS )N)r   r   )r   )r3   r   r   r     s    z3TestCase.test_writelines.<locals>.Whatever.__iter__N)r   r   r   r   r   r   )r3   r   r   Whatever	  s   r   rM   i  c             S   s   g | ]}t |d  qS )r   )r   )r@   r   r   r   r   rA     s    z,TestCase.test_writelines.<locals>.<listcomp>r   )ru   r   rK   rT   
writelinesrw   r+   r"   r4   r   rx   )r   ry   r   r   r   )r3   r   test_writelines  s(    


zTestCase.test_writelinesc             C   s  d\}}|  ||fd td\}}}|  |||fd ytd\}}W n tk
r\   Y nX | d ytd\}}}W n tk
r   Y nX | d yt\}}}W n tk
r   Y nX | d dddd \}}}|  |||fd	 ttd
}d}zx|D ]}|	| qW W d |
  X ttd}z |\}}}|  |||f| W d |
  ytt W n tk
r~   Y nX X tdddi \}}\}|  |||fd d S )N)r   r   r;   )r   r   r   zshould have raised ValueErrorr   zshould have raised TypeErrorr~   )r   r   r;   )r~   r~   r~   rs   )za
zbb
zccc
rt      )r   r   r~   )r"   r   r   r`   r   rT   r   ru   r   rv   rw   r   rx   )r   rO   rl   rm   ry   linesliner   r   r   test_unpack_iter!  sL    







zTestCase.test_unpack_iterc             C   s   G dd dt }| }| |jd ~| |jd | | | g}| |jd yt|\}}W n tk
rv   Y nX ~| |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 )Nr   )r   rS   __new__)clsr   r   r   r   Z  s    z6TestCase.test_ref_counting_behavior.<locals>.C.__new__c             S   s&   | j }|jdkst| jd8  _d S )Nr   r   )	__class__r   AssertionError)r   r   r   r   r   __del__]  s    z6TestCase.test_ref_counting_behavior.<locals>.C.__del__N)r   r   r   r   r   r   r   r   r   r   rX   X  s   rX   r   r   r;   )rS   r"   r   r(   r   )r   rX   rP   lrO   rl   r   r   r   test_ref_counting_behaviorV  s    	z#TestCase.test_ref_counting_behaviorc             C   sP   t td}t|}| t |t td |tdd | t |g  d S )NrH   r7   )r4   r+   r(   r"   extend)r   rO   rl   r   r   r   test_sinkstate_lists  s
    zTestCase.test_sinkstate_listc             C   s8   d}t |}| t|ttd | t|g  d S )N)r   r   r   r;   rN   rH   )r(   r"   r4   r+   )r   rO   rl   r   r   r   test_sinkstate_tuple{  s    zTestCase.test_sinkstate_tuplec             C   s:   d}t |}| t|dddddg | t|g  d S )Nrk   rO   rl   rm   r6   rn   )r(   r"   r4   )r   rO   rl   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 )NrH   r7   )r   r(   r"   r4   r+   r
   )r   rO   rl   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   r7   zshouldn't have gotten this far)r   )rZ   r   r   r   r   r[     s
    z.TestCase.test_sinkstate_callable.<locals>.spamrH   )r(   r"   r4   r+   )r   r[   rl   r   r   r   test_sinkstate_callable  s    
z TestCase.test_sinkstate_callablec             C   sf   dddddd}xPt || | | fD ]0}t |}| tt|d | t|g  q.W d S )Nr   r   r   rN   r;   )r   r   r   rN   r;   rH   )r(   rp   r   r   r"   r   r4   )r   rO   rl   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   xt dD ]
} | V  q
W d S )NrH   )r+   )r   r   r   r   gen  s    z*TestCase.test_sinkstate_yield.<locals>.genrH   )r"   r4   r+   )r   r   rl   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 )NrH   )r+   r(   r"   r4   )r   rO   rl   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 )NrH   )r+   	enumerater(   r"   r4   r   )r   rO   rn   rl   r   r   r   test_sinkstate_enumerate  s
    "z!TestCase.test_sinkstate_enumeratec                sB   G  fdddt  yx  D ]}qW W n tk
r<   Y nX 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 )Nr   )r   r   r   r   r     s    z0TestCase.test_3720.<locals>.BadIterator.__iter__c                s    ` dS )Nr   )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   )rS   rT   )r   r   r   )r   r   	test_3720  s    zTestCase.test_3720c             C   sN   dd }dgd }xt dD ]}|d qW ||  | t|d d S )Nc              s   s   xt dD ]
} | V  q
W d S )Ni  )r+   )r   r   r   r   r     s    zITestCase.test_extending_list_with_iterator_does_not_segfault.<locals>.genr   i     i  )r+   popr   r"   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 Q R X | t t| W d Q R X d S )Nr   r   )	r(   r   __setstate__sysmaxsizer"   r    rK   OverflowError)r   r#   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   r"   r    )r   r#   r   r   r   test_iter_neg_setstate  s    

zTestCase.test_iter_neg_setstatec             C   s   t | ttd d S )N)r   )r   r(   r   )r   r   r   r   test_free_after_iterating  s    z"TestCase.test_free_after_iteratingc             C   s&   x t tfD ]}| tt|  q
W d S )N)r   r   rK   rT   r(   )r   typr   r   r   test_error_iter  s    zTestCase.test_error_iterN)T)T)=r   r   r   r'   r*   r   r8   r9   r:   r?   rB   rC   rD   rE   rF   rG   rL   rQ   rU   rY   r\   r^   ra   rc   rd   re   rf   ri   rj   ro   rr   rz   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   sr   

	
$
	!- O*)#)55	r   c               C   s   t t d S )N)r   r   r   r   r   r   	test_main  s    r   __main__)r   ZunittestZtest.supportr   r   r   r   r   r%   Zcollections.abcr1   r<   r	   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s>   
	       7