a
    zez;                     @   s   d Z ddlZddlZddlZddlmZ ddlmZ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)support)	ALWAYS_EQNEVER_EQc                 c   s   | D ]
}|V  qdS )zRegular generatorN seqnir   r   $/usr/lib/python3.9/test/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 r   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      s    zIterFunc.__init__c                 C   s   | S r   r   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 r   r   r   r   r   r	   r   (   s    zIterGen.__init__c                 c   s   | j D ]
}|V  qd S r   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 r   r   r   r   r   r	   r   1   s    zIterNextOnly.__init__c                 C   s2   | j t| jkrt| j| j  }|  j d7  _ |S r   r   r    r   r   r	   r"   4   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 r   r   r   r   r   r	   r   <   s    zIterNoNext.__init__c                 C   s   | S r   r   r   r   r   r	   r   ?   s    zIterNoNext.__iter__Nr&   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 )	
IterGenExczTest propagation of exceptionsc                 C   s   || _ d| _d S r   r   r   r   r   r	   r   D   s    zIterGenExc.__init__c                 C   s   | S r   r   r   r   r   r	   r   G   s    zIterGenExc.__iter__c                 C   s   dd  d S )N   r   r   r   r   r   r	   r"   I   s    zIterGenExc.__next__Nr#   r   r   r   r	   r)   B   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 r   r   r   r   r   r	   r   N   s    zIterFuncStop.__init__c                 C   s   | S r   r   r   r   r   r	   r   P   s    zIterFuncStop.__iter__c                 C   s   t d S r   )r   r   r   r   r	   r"   R   s    zIterFuncStop.__next__Nr#   r   r   r   r	   r+   L   s   r+   )chainc                 C   s   t tdd ttt| S )z Test multiple tiers of iteratorsc                 S   s   | S r   r   )xr   r   r	   <lambda>X       zitermulti.<locals>.<lambda>)r,   mapr
   r$   r   r   r   r   r	   	itermultiV   s    r1   c                   @   s   e Zd Zdd ZdS )
LyingTuplec                 c   s
   dV  d S r   r   r   r   r   r	   r   [   s    zLyingTuple.__iter__Nr   r   r   r   r   r   r   r	   r2   Z   s   r2   c                   @   s   e Zd Zdd ZdS )	LyingListc                 c   s
   dV  d S r   r   r   r   r   r	   r   _   s    zLyingList.__iter__Nr3   r   r   r   r	   r4   ^   s   r4   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| ddtdd	td
ddfD ]}ttttt	fD ] }| |  |||  | q| |  t
||    | |  dd dD |  d | t| j t| | t| j t| | t| j t| q| |  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 r   _OtherSeq__data)r   Zinitseqr   r   r	   r   w   s    z7CommonTest.test_constructors.<locals>.OtherSeq.__init__c                 S   s
   t | jS r   )r   r7   r   r   r   r	   __len__y   s    z6CommonTest.test_constructors.<locals>.OtherSeq.__len__c                 S   s
   | j | S r   r6   r   r   r   r	   r   {   s    z:CommonTest.test_constructors.<locals>.OtherSeq.__getitem__N)r   r   r   r   r8   r   r   r   r   r	   OtherSeqv   s   r9   zthis is also a sequenceZ123   )Zdog333333?i  i     c                 s   s   | ]
}|V  qd S r   r   ).0cr   r   r	   	<genexpr>   r/   z/CommonTest.test_constructors.<locals>.<genexpr>)   )r   r@   )	type2testtupleassertEqualr   ranger   r   r$   r1   r
   r+   assertRaises	TypeErrorr'   r(   ZeroDivisionErrorr)   r2   r4   )r   Zl0l1l2uZu0u1u2uuZuu0Zuu1Zuu2r!   r9   sZv0Zvvgr   r   r	   test_constructorsf   s>    








"zCommonTest.test_constructorsc                 C   s$   |  |   | | dg d S )N*   )ZassertFalserA   Z
assertTruer   r   r   r	   
test_truth   s    zCommonTest.test_truthc                 C   s|  |  g d}tt|D ](}| || | | |t| | qtt| dD ]8}| || t||  | |t| t||  qT| 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 )
Nr   r   r@   r*      r   r   
      r*   )rA   rD   r   rC   intrE   
IndexErrorr   
ValueErrorslicerF   )r   rJ   r   ar   r   r	   test_getitem   s*    zCommonTest.test_getitemc                 C   s0  g d}|  |}| |dd |    | |dd |  dg | |dd |  dg | |dd	 | | |d	d |  g  | |d d  | | |dd  |  g d
 | |d d |  g d | |d d  | | |d d d |  g d | |dd d |  ddg | |d d d |  g d | |d d d |  g d | |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 |  g d |  g d}| |tdd d |  g d | |dtdd |  ddg | |dd tj |  dg d S )NrS   r   r   r@   rX   rU   r*   ir;   )r   r@   r*   rT   r   r   r@   )r   r@   rT   )rT   r*   r@   r   r   )rT   r@   r   irT   d         )rA   rC   powsysmaxsize)r   lrJ   r^   r   r   r	   test_getslice   s<    
        &$zCommonTest.test_getslicec                 C   s`   |  g d}|D ]}| || qt|d t|d fD ]}| || q<| t|j d S )Nr`   r   )rA   assertInminmaxassertNotInrE   rF   __contains__)r   rJ   r   r   r   r	   test_contains   s    zCommonTest.test_containsc                 C   sx   |  t| g  | t| dg | d| tg |  t| g  |  t| tg | t| tg d S r   )rl   r   rA   ri   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   rq   c                       s   e Zd Z fddZdS )z4CommonTest.test_contains_order.<locals>.StopComparesc                    s    d S r   r   r   otherrq   r   r	   __eq__   s    z;CommonTest.test_contains_order.<locals>.StopCompares.__eq__Nr   r   r   ru   r   rt   r   r	   StopCompares   s   rw   r   )	ExceptionrA   ri   rE   rm   )r   rw   Z
checkfirstZ	checklastr   rt   r	   test_contains_order   s    zCommonTest.test_contains_orderc                 C   s`   |  t|  d |  t| g d |  t| dgd |  t| g dd d S )Nr   r   r`   r*   )rC   r   rA   r   r   r   r	   test_len   s    zCommonTest.test_lenc                 C   s2   |  g d}| t|d | t|d d S )Nr`   r   r@   )rA   rC   rj   rk   r   rJ   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   rU   r@   r*   c                   @   s   e Zd ZdS )z(CommonTest.test_addmul.<locals>.subclassNrp   r   r   r   r	   subclass  s   r}   )rA   rC   ZassertIsNot)r   rK   rL   r}   u3r   r   r	   test_addmul  s0    "zCommonTest.test_addmulc                 C   s   |  ddg}||   7 }| ||  ddg ||  ddg7 }| ||  g d ||  ddg7 }| ||  g d |  d	}||  d
7 }| ||  d d S )Nr   r   r@   r*   r   r   r@   r*   rT   r<   )r   r   r@   r*   rT   r<   ZspamZeggsZspameggsrA   rC   r{   r   r   r	   	test_iadd!  s    
zCommonTest.test_iaddc                 C   sJ   |  ddg}|d9 }| ||  g d |d9 }| ||  g  d S )Nr   r   r*   )r   r   r   r   r   r   r   r{   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   8  s    z;CommonTest.test_getitemoverwriteiter.<locals>.T.__getitem__N)r   r   r   r   r   r   r   r	   T7  s   r   )r   r@   r   )rA   rC   nextiter)r   r   r   r   r	   test_getitemoverwriteiter5  s    z$CommonTest.test_getitemoverwriteiterc                 C   s   t dD ]t}tt |}t ddD ]$}| | || | ||  q"| | |d | g  | t|t|d  qd S )NrT   rY   r<   r   )rD   rB   rC   rA   id)r   mrN   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__)re   rf   rA   rE   MemoryError__mul__hasattrr   )r   r-   r   r   r	   test_bigrepeatD  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 )NrV   rW   r   r   rX   rU   rY   r*   r@   r<   r-   )rA   rC   r   rE   r[   r]   r\   rF   )r   r^   r   r   r	   test_subscriptL  s      ""zCommonTest.test_subscriptc                    s   |  g dd }| |dd | |dd | |dd | |td | |  ttgdd | |  ttgtd | |  ttgtd | t|j G dd dt G  fd	d
d
}|  |j|  d S )Nr`   r*   r   r   	   r@   c                   @   s   e Zd ZdS )z%CommonTest.test_count.<locals>.BadExcNrp   r   r   r   r	   BadExci  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   rr   r   r   r	   ru   m  s    z,CommonTest.test_count.<locals>.BadCmp.__eq__Nrv   r   r   r   r	   BadCmpl  s   r   )rA   rC   countr   r   rE   rF   rx   )r   r^   r   r   r   r	   
test_count\  s    zCommonTest.test_countc                    s  |  ddg}| |dd | |dd | t|jd |  g d}| |dd | |dd | |ddd | |ddd | |ddd | |dddd | t|jddd | |td | |  ttgdd | |  ttgtd | t|  ttgjt | t|j G d	d
 d
t	 G  fddd}|  g d}|  |j|  |  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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@   )rX   rU   r   r   r   r@   rX   ir*   rT   c                   @   s   e Zd ZdS )z%CommonTest.test_index.<locals>.BadExcNrp   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 r   r   rr   r   r   r	   ru     s    z,CommonTest.test_index.<locals>.BadCmp.__eq__Nrv   r   r   r   r	   r     s   r   r   r   rY   )rA   rC   indexrE   r\   r   r   r   rF   rx   re   rf   )r   rJ   r   r^   r   r   r	   
test_indext  sB    " zCommonTest.test_indexc                 C   sX   |  g d}ttjd D ]6}tt||}| || | t|t| qd S )N)rT   r<         r   )	rA   rD   pickleHIGHEST_PROTOCOLloadsdumpsrC   ZassertNotEqualr   )r   ZlstprotoZlst2r   r   r	   test_pickle  s
    zCommonTest.test_picklec                 C   s$   t | t| j t | t| j d S r   )r   Zcheck_free_after_iteratingr   rA   reversedr   r   r   r	   test_free_after_iterating  s    z$CommonTest.test_free_after_iterating)r   r   r   rA   rP   rR   r_   rh   rn   ro   ry   rz   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r5   b   s*   .%	/r5   )r   Zunittestre   r   testr   Ztest.supportr   r   r
   r   r   r$   r'   r(   r)   r+   	itertoolsr,   r1   rB   r2   listr4   ZTestCaser5   r   r   r   r	   <module>   s$   	
	