B
    u9a8                 @   s   d Z ddlZddlZddlZddlmZ 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ddlmZ dd ZG dd deZG dd deZG dd dejZdS )z3
Tests common to tuple, list and UserList.UserList
    N)supportc             c   s   x| D ]
}|V  qW dS )zRegular generatorN )seqnir   r   /usr/lib/python3.7/seq_tests.pyiterfunc   s    
r   c               @   s    e Zd ZdZdd Zdd ZdS )SequencezSequence using __getitem__c             C   s
   || _ d S )N)r   )selfr   r   r   r   __init__   s    zSequence.__init__c             C   s
   | j | S )N)r   )r	   r   r   r   r   __getitem__   s    zSequence.__getitem__N)__name__
__module____qualname____doc__r
   r   r   r   r   r   r      s   r   c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	IterFuncz Sequence using iterator protocolc             C   s   || _ d| _d S )Nr   )r   r   )r	   r   r   r   r   r
      s    zIterFunc.__init__c             C   s   | S )Nr   )r	   r   r   r   __iter__   s    zIterFunc.__iter__c             C   s2   | j t| jkrt| j| j  }|  j d7  _ |S )N   )r   lenr   StopIteration)r	   vr   r   r   __next__   s
     zIterFunc.__next__N)r   r   r   r   r
   r   r   r   r   r   r   r      s   r   c               @   s    e Zd ZdZdd Zdd ZdS )IterGenz9Sequence using iterator protocol defined with a generatorc             C   s   || _ d| _d S )Nr   )r   r   )r	   r   r   r   r   r
   '   s    zIterGen.__init__c             c   s   x| j D ]
}|V  qW d S )N)r   )r	   valr   r   r   r   *   s    zIterGen.__iter__N)r   r   r   r   r
   r   r   r   r   r   r   %   s   r   c               @   s    e Zd ZdZdd Zdd ZdS )IterNextOnlyz Missing __getitem__ and __iter__c             C   s   || _ d| _d S )Nr   )r   r   )r	   r   r   r   r   r
   0   s    zIterNextOnly.__init__c             C   s2   | j t| jkrt| j| j  }|  j d7  _ |S )Nr   )r   r   r   r   )r	   r   r   r   r   r   3   s
     zIterNextOnly.__next__N)r   r   r   r   r
   r   r   r   r   r   r   .   s   r   c               @   s    e Zd ZdZdd Zdd ZdS )
IterNoNextzIterator missing __next__()c             C   s   || _ d| _d S )Nr   )r   r   )r	   r   r   r   r   r
   ;   s    zIterNoNext.__init__c             C   s   | S )Nr   )r	   r   r   r   r   >   s    zIterNoNext.__iter__N)r   r   r   r   r
   r   r   r   r   r   r   9   s   r   c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	
IterGenExczTest propagation of exceptionsc             C   s   || _ d| _d S )Nr   )r   r   )r	   r   r   r   r   r
   C   s    zIterGenExc.__init__c             C   s   | S )Nr   )r	   r   r   r   r   F   s    zIterGenExc.__iter__c             C   s   dd  d S )N   r   r   )r	   r   r   r   r   H   s    zIterGenExc.__next__N)r   r   r   r   r
   r   r   r   r   r   r   r   A   s   r   c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	IterFuncStopzTest immediate stopc             C   s   d S )Nr   )r	   r   r   r   r   r
   M   s    zIterFuncStop.__init__c             C   s   | S )Nr   )r	   r   r   r   r   O   s    zIterFuncStop.__iter__c             C   s   t d S )N)r   )r	   r   r   r   r   Q   s    zIterFuncStop.__next__N)r   r   r   r   r
   r   r   r   r   r   r   r   K   s   r   )chainc             C   s   t tdd ttt| S )z Test multiple tiers of iteratorsc             S   s   | S )Nr   )xr   r   r   <lambda>W       zitermulti.<locals>.<lambda>)r   mapr   r   r   )r   r   r   r   	itermultiU   s    r#   c               @   s   e Zd Zdd ZdS )
LyingTuplec             c   s
   dV  d S )Nr   r   )r	   r   r   r   r   Z   s    zLyingTuple.__iter__N)r   r   r   r   r   r   r   r   r$   Y   s   r$   c               @   s   e Zd Zdd ZdS )	LyingListc             c   s
   dV  d S )Nr   r   )r	   r   r   r   r   ^   s    zLyingList.__iter__N)r   r   r   r   r   r   r   r   r%   ]   s   r%   c               @   s   e Zd 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S )*
CommonTestNc             C   s  g }dg}ddg}|   }|  |}|  |}|  |}|  |}|  |}	|  |}
|  |}|  t|}G dd d}||}|  |}| t|t| d}|  |}| t|t| xddtdd	td
ddfD ]}x2ttttt	fD ] }| |  |||  | qW | |  t
||    | |  dd dD |  d | t| j t| | t| j t| | t| j t| qW | |  td|  d | |  tdg|  dg d S )Nr   r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )z.CommonTest.test_constructors.<locals>.OtherSeqc             S   s
   || _ d S )N)_OtherSeq__data)r	   Zinitseqr   r   r   r
   v   s    z7CommonTest.test_constructors.<locals>.OtherSeq.__init__c             S   s
   t | jS )N)r   r'   )r	   r   r   r   __len__x   s    z6CommonTest.test_constructors.<locals>.OtherSeq.__len__c             S   s
   | j | S )N)r'   )r	   r   r   r   r   r   z   s    z:CommonTest.test_constructors.<locals>.OtherSeq.__getitem__N)r   r   r   r
   r(   r   r   r   r   r   OtherSequ   s   r)   zthis is also a sequenceZ123 i  )Zdog333333?i  i     c             s   s   | ]
}|V  qd S )Nr   ).0cr   r   r   	<genexpr>   s    z/CommonTest.test_constructors.<locals>.<genexpr>)   )r   r/   )	type2testtupleassertEqualr   ranger   r   r   r#   r   r   assertRaises	TypeErrorr   r   ZeroDivisionErrorr   r$   r%   )r	   Zl0l1l2uZu0u1u2uuZuu0Zuu1Zuu2r   r)   sZv0Zvvgr   r   r   test_constructorse   s<    








  "zCommonTest.test_constructorsc             C   s$   |  |   | | dg d S )N*   )ZassertFalser0   Z
assertTrue)r	   r   r   r   
test_truth   s    zCommonTest.test_truthc             C   s  |  dddddg}x8tt|D ](}| || | | |t| | q"W xLtt| dD ]8}| || t||  | |t| t||  q`W | t|jt| d  | t|jt| | t|jt	ddd |   }| t|jd | t|jd | t
|j |  ddg}| |d d | |d d | |d	 d | |d d | t|jd
 | t|jd d S )Nr   r   r/   r      
      )r0   r3   r   r2   intr4   
IndexErrorr   
ValueErrorslicer5   )r	   r9   r   ar   r   r   test_getitem   s*     zCommonTest.test_getitemc          
   C   sP  dddddg}|  |}| |dd |    | |dd |  dg | |dd |  dg | |dd	 | | |d	d |  g  | |d d  | | |dd  |  ddddg | |d d |  dddg | |d d  | | |d d d |  dddg | |dd d |  ddg | |d d d |  dddddg | |d d d |  dddg | |dd d |  ddg | |ddd |  g  | |ddd |  dg | |ddd |  dg | |ddd |  ddg | |d d d
 |  dg | |dd
 |  g  | |d
d | | |dd
d |d d d  | |d
dd |  g  | |d
dd |  dddg |  dddddg}| |tdd d |  dddg | |dtdd |  ddg | |dd tj |  dg d S )Nr   r   r/   r   rB   rF   rC   ii  id         )r0   r2   powsysmaxsize)r	   lr9   rL   r   r   r   test_getslice   s<    
" " &"   "($zCommonTest.test_getslicec             C   sj   |  dddg}x|D ]}| || qW x,t|d t|d fD ]}| || qDW | t|j d S )Nr   r   r/   )r0   assertInminmaxassertNotInr4   r5   __contains__)r	   r9   r   r   r   r   test_contains   s    
zCommonTest.test_containsc             C   s<   G dd d}|  | | g  | | | dg d S )Nc               @   s   e Zd Zdd ZdZdS )z,CommonTest.test_contains_fake.<locals>.AllEqc             S   s   dS )NTr   )r	   otherr   r   r   __eq__   s    z3CommonTest.test_contains_fake.<locals>.AllEq.__eq__N)r   r   r   r]   __hash__r   r   r   r   AllEq   s   r_   r   )rY   r0   rV   )r	   r_   r   r   r   test_contains_fake   s    zCommonTest.test_contains_fakec                sb   G dd dt  G  fddd}| d| g}| d| | | dg}|  |jd d S )Nc               @   s   e Zd ZdS )z3CommonTest.test_contains_order.<locals>.DoNotTestEqN)r   r   r   r   r   r   r   DoNotTestEq   s   ra   c                   s   e Zd Z fddZdS )z4CommonTest.test_contains_order.<locals>.StopComparesc                s    d S )Nr   )r	   r\   )ra   r   r   r]      s    z;CommonTest.test_contains_order.<locals>.StopCompares.__eq__N)r   r   r   r]   r   )ra   r   r   StopCompares   s   rb   r   )	Exceptionr0   rV   r4   rZ   )r	   rb   Z
checkfirstZ	checklastr   )ra   r   test_contains_order   s    zCommonTest.test_contains_orderc             C   sb   |  t|  d |  t| g d |  t| dgd |  t| dddgd d S )Nr   r   r/   r   )r2   r   r0   )r	   r   r   r   test_len   s    zCommonTest.test_lenc             C   s4   |  dddg}| t|d | t|d d S )Nr   r   r/   )r0   r2   rW   rX   )r	   r9   r   r   r   test_minmax   s    zCommonTest.test_minmaxc             C   s  |  dg}|  ddg}| |||     | ||   |  | ||  dg | | |  dg| |  ddg | |   |d  | |   d|  | |   |d  | |   d|  | ||d  | |d|  | ||d  | |d|  | || |d  | || d|  | || |d  | || d|  | || | |d  | || | d|  G dd d| j }|ddg}| ||d  | ||d  d S )Nr   r   rC   r/   r   c               @   s   e Zd ZdS )z(CommonTest.test_addmul.<locals>.subclassN)r   r   r   r   r   r   r   subclass  s   rg   )r0   r2   ZassertIsNot)r	   r:   r;   rg   Zu3r   r   r   test_addmul  s0    "zCommonTest.test_addmulc             C   s   |  ddg}||   7 }| ||  ddg ||  ddg7 }| ||  ddddg ||  ddg7 }| ||  ddddddg |  d}||  d7 }| ||  d	 d S )
Nr   r   r/   r   rB   r+   ZspamZeggsZspameggs)r0   r2   )r	   r9   r   r   r   	test_iadd   s    
zCommonTest.test_iaddc             C   sR   |  ddg}|d9 }| ||  ddddddg |d9 }| ||  g  d S )Nr   r   r   )r0   r2   )r	   r9   r   r   r   	test_imul-  s
    zCommonTest.test_imulc             C   s.   G dd d| j }| tt|dd d S )Nc               @   s   e Zd Zdd ZdS )z/CommonTest.test_getitemoverwriteiter.<locals>.Tc             S   s   t |d S )Nz!!!)str)r	   keyr   r   r   r   7  s    z;CommonTest.test_getitemoverwriteiter.<locals>.T.__getitem__N)r   r   r   r   r   r   r   r   T6  s   rm   )r   r/   r   )r0   r2   nextiter)r	   rm   r   r   r   test_getitemoverwriteiter4  s    z$CommonTest.test_getitemoverwriteiterc             C   s   xt dD ]x}tt |}x2t ddD ]$}| | || | ||  q&W | | |d | g  | t|t|d  q
W d S )NrB   rG   r+   r   )r3   r1   r2   r0   id)r	   mr=   nr   r   r   test_repeat;  s    $zCommonTest.test_repeatc             C   sL   t jdkrH| dg}|d9 }| t|jd t|drH| t|jd d S )Nir   i   __imul__)rR   rS   r0   r4   MemoryError__mul__hasattrrv   )r	   r   r   r   r   test_bigrepeatC  s    

zCommonTest.test_bigrepeatc             C   sD  |  ddg}| |dd | |dd | |dd | |dd | t|jd | t|jd | |tdd|  dg | |tdd	|  dg | |tdd	|  ddg | |tdd|  ddg | |tdd
|  g  | t|jtddd | t|jd d S )NrD   rE   r   r   rF   rC   rG   r   r/   r+   r   )r0   r2   r   r4   rI   rK   rJ   r5   )r	   rL   r   r   r   test_subscriptK  s      ""zCommonTest.test_subscriptc                s   |  dddgd }| |dd | |dd | |dd | t|j G dd dt G  fddd}|  |j|  d S )	Nr   r   r/   r   c               @   s   e Zd ZdS )z%CommonTest.test_count.<locals>.BadExcN)r   r   r   r   r   r   r   BadExcc  s   r|   c                   s   e Zd Z fddZdS )z%CommonTest.test_count.<locals>.BadCmpc                s   |dkr  dS )Nr/   Fr   )r	   r\   )r|   r   r   r]   g  s    z,CommonTest.test_count.<locals>.BadCmp.__eq__N)r   r   r   r]   r   )r|   r   r   BadCmpf  s   r}   )r0   r2   countr4   r5   rc   )r	   rL   r}   r   )r|   r   
test_count[  s    zCommonTest.test_countc                sH  |  ddg}| |dd | |dd | t|jd |  ddddddg}| |dd | |dd | |ddd | |ddd | |ddd | |dddd | t|jddd | t|j G d	d
 d
t G  fddd}|  ddddg}|  |j|  |  ddddddg}| |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tj	 dtj	 d | t|jddtj	 dtj	  | t|jddd d S )Nr   r   r/   rF   rC   ir   rB   c               @   s   e Zd ZdS )z%CommonTest.test_index.<locals>.BadExcN)r   r   r   r   r   r   r   r|     s   r|   c                   s   e Zd Z fddZdS )z%CommonTest.test_index.<locals>.BadCmpc                s   |dkr  dS )Nr/   Fr   )r	   r\   )r|   r   r   r]     s    z,CommonTest.test_index.<locals>.BadCmp.__eq__N)r   r   r   r]   r   )r|   r   r   r}     s   r}   rq   rG   )
r0   r2   indexr4   rJ   r~   r5   rc   rR   rS   )r	   r9   r}   rL   r   )r|   r   
test_indexn  s:    " zCommonTest.test_indexc             C   s`   |  ddddg}xHttjd D ]6}tt||}| || | t|t| q"W d S )NrB   r+         r   )	r0   r3   pickleZHIGHEST_PROTOCOLloadsdumpsr2   ZassertNotEqualrr   )r	   ZlstprotoZlst2r   r   r   test_pickle  s
    zCommonTest.test_picklec             C   s$   t | t| j t | t| j d S )N)r   Zcheck_free_after_iteratingro   r0   reversed)r	   r   r   r   test_free_after_iterating  s    z$CommonTest.test_free_after_iterating)r   r   r   r0   r?   rA   rM   rU   r[   r`   rd   re   rf   rh   ri   rj   rp   ru   rz   r{   r   r   r   r   r   r   r   r   r&   a   s*   .%	*r&   )r   ZunittestrR   r   Ztestr   r   r   r   r   r   r   r   r   	itertoolsr   r#   r1   r$   listr%   ZTestCaser&   r   r   r   r   <module>   s"   	
	