a
    ze!                     @   sD  d dl Z d dlZd dlZd dlZd dlZd dlm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eZG dd deZG dd deZG dd deZG dd deZG dd de jeZG dd deZG dd  d eZG d!d" d"eZed#kr@e   dS )$    N)supportc                   @   s    e Zd ZdZdd Zdd ZdS )GzSequence using __getitem__c                 C   s
   || _ d S Nseqnselfr    r	   )/usr/lib/python3.9/test/test_enumerate.py__init__   s    z
G.__init__c                 C   s
   | j | S r   r   r   ir	   r	   r
   __getitem__   s    zG.__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 )	Iz Sequence using iterator protocolc                 C   s   || _ d| _d S Nr   r   r   r   r	   r	   r
   r      s    z
I.__init__c                 C   s   | S r   r	   r   r	   r	   r
   __iter__   s    z
I.__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
I.__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 )Igz9Sequence using iterator protocol defined with a generatorc                 C   s   || _ d| _d S r   r   r   r	   r	   r
   r      s    zIg.__init__c                 c   s   | j D ]
}|V  qd S r   r   )r   valr	   r	   r
   r   "   s    
zIg.__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 )Xz Missing __getitem__ and __iter__c                 C   s   || _ d| _d S r   r   r   r	   r	   r
   r   (   s    z
X.__init__c                 C   s2   | j t| jkrt| j| j  }|  j d7  _ |S r   r   r   r	   r	   r
   r   +   s    z
X.__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d ZdS )	EzTest propagation of exceptionsc                 C   s   || _ d| _d S r   r   r   r	   r	   r
   r   3   s    z
E.__init__c                 C   s   | S r   r	   r   r	   r	   r
   r   6   s    z
E.__iter__c                 C   s   dd  d S )N   r   r	   r   r	   r	   r
   r   8   s    z
E.__next__Nr    r	   r	   r	   r
   r%   1   s   r%   c                   @   s    e Zd ZdZdd Zdd ZdS )NzIterator missing __next__()c                 C   s   || _ d| _d S r   r   r   r	   r	   r
   r   =   s    z
N.__init__c                 C   s   | S r   r	   r   r	   r	   r
   r   @   s    z
N.__iter__Nr#   r	   r	   r	   r
   r'   ;   s   r'   c                   @   s   e Zd Zdd ZdS )
PickleTestc              	   C   s   t tjd D ]}t||}t|}| t|t| | t|| t|}zt| W n( t	y   | 
|dd   Y qY n0 t||}t|}| t||dd   qd S r   )rangepickleHIGHEST_PROTOCOLdumpsloadsassertEqualtypelistnextr   ZassertFalse)r   Zitorgseqprotoditr	   r	   r
   check_pickleE   s    



zPickleTest.check_pickleN)r   r   r   r6   r	   r	   r	   r
   r(   C   s   r(   c                   @   s   e Zd ZeZdg d Z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ejdd Zejdd ZdS )EnumerateTestCaseabc))r   a)r   b)   cc                 C   s\   |  t| | j| j | | j}|  t|| |  t| | j| j | jj d S r   )r.   r/   enumr2   iterr0   resr   r   er	   r	   r
   test_basicfunction[   s
    z$EnumerateTestCase.test_basicfunctionc                 C   s   |  | | j| j d S r   )r6   r=   r2   r?   r   r	   r	   r
   test_pickleb   s    zEnumerateTestCase.test_picklec                 C   s>   |  t| t| j| j | td}| tt| d S N )	r.   r0   r=   r   r2   r?   assertRaisesr   r1   r@   r	   r	   r
   test_getitemseqne   s    z"EnumerateTestCase.test_getitemseqnc                 C   s>   |  t| t| j| j | td}| tt| d S rD   )	r.   r0   r=   r   r2   r?   rF   r   r1   r@   r	   r	   r
   test_iteratorseqnj   s    z#EnumerateTestCase.test_iteratorseqnc                 C   s>   |  t| t| j| j | td}| tt| d S rD   )	r.   r0   r=   r!   r2   r?   rF   r   r1   r@   r	   r	   r
   test_iteratorgeneratoro   s    z(EnumerateTestCase.test_iteratorgeneratorc                 C   s   |  t| jt| j d S r   )rF   	TypeErrorr=   r$   r2   r   r	   r	   r
   test_noniterablet   s    z"EnumerateTestCase.test_noniterablec                 C   s   |  t| jt| j d S r   )rF   rJ   r=   r'   r2   r   r	   r	   r
   test_illformediterablew   s    z(EnumerateTestCase.test_illformediterablec                 C   s   |  tt| t| j d S r   )rF   ZeroDivisionErrorr0   r=   r%   r2   r   r	   r	   r
   test_exception_propagationz   s    z,EnumerateTestCase.test_exception_propagationc                 C   sH   |  t| j |  t| jd |  t| jdd |  t| jddd d S )Nr   r8   r9   r;   r&   )rF   rJ   r=   r   r	   r	   r
   test_argumentcheck}   s    z$EnumerateTestCase.test_argumentcheckc              	   C   sZ   |  tttttt| jt| j |  ttttt| jtdt| j d S r   )	r.   r   setmapidr0   	enumerater2   minr   r	   r	   r
   test_tuple_reuse   s    *z"EnumerateTestCase.test_tuple_reusec                 C   s,   |  g g}t  | tt| d S r   )r=   gcZcollectZ
assertTrueZ
is_trackedr1   )r   r5   r	   r	   r
   test_enumerate_result_gc   s    z*EnumerateTestCase.test_enumerate_result_gcN)r   r   r   rS   r=   r2   r?   rB   rC   rG   rH   rI   rK   rL   rN   rO   r   Zcpython_onlyrU   rW   r	   r	   r	   r
   r7   V   s   
r7   c                   @   s   e Zd ZdS )MyEnumN)r   r   r   r	   r	   r	   r
   rX      s   rX   c                   @   s   e Zd ZeZdS )SubclassTestCaseN)r   r   r   rX   r=   r	   r	   r	   r
   rY      s   rY   c                   @   s   e Zd Zdg  ZZdS )	TestEmptyrE   N)r   r   r   r2   r?   r	   r	   r	   r
   rZ      s   rZ   c                   @   s*   e Zd ZedddZeeedeZdS )TestBig
   i N  r;   N)r   r   r   r)   r2   r0   zipr?   r	   r	   r	   r
   r[      s   r[   c                   @   s^   e Zd Zdd Zdd Zdd Zdd Zd	d
 Ze	e
edddd Zdd Zdd ZdS )TestReversedc                 C   sx   G dd d}dt dttd| t dddtdfD ]&}| t|d d d tt| q:| jt	tg dd	 d S )
Nc                   @   s   e Zd Zdd Zdd ZdS )z#TestReversed.test_simple.<locals>.Ac                 S   s   |dk rt |S td S N   )strr   r   r	   r	   r
   r      s    z/TestReversed.test_simple.<locals>.A.__getitem__c                 S   s   dS r_   r	   r   r	   r	   r
   __len__   s    z+TestReversed.test_simple.<locals>.A.__len__N)r   r   r   r   rb   r	   r	   r	   r
   A   s   rc   r8   r`   r      Zabcde)r9   )
r)   tuplerS   dictfromkeysr.   r0   reversedrF   rJ   )r   rc   datar	   r	   r
   test_simple   s    $zTestReversed.test_simplec                 C   s(   t d}| tt|tt| d S r   )r)   r.   r/   ri   r>   )r   xr	   r	   r
   test_range_optimization   s    z$TestReversed.test_range_optimizationc                 C   s   dt dtdtdfD ]@}| tt|t| t|}t| | t|d qG dd d}t| }| t	tj| d S )NZhellor`   r   c                   @   s    e Zd ZdZdd Zdd ZdS )z.TestReversed.test_len.<locals>.SeqWithWeirdLenFc                 S   s   | j sd| _ dS td S )NTr\   )calledrM   r   r	   r	   r
   rb      s    z6TestReversed.test_len.<locals>.SeqWithWeirdLen.__len__c                 S   s   |S r   r	   r   indexr	   r	   r
   r      s    z:TestReversed.test_len.<locals>.SeqWithWeirdLen.__getitem__N)r   r   r   rn   rb   r   r	   r	   r	   r
   SeqWithWeirdLen   s   rq   )
rf   r0   r)   r.   operatorlength_hintri   r   rF   rM   )r   srrq   r	   r	   r
   test_len   s    	
zTestReversed.test_lenc                 C   s&   G dd d}| }t |}||_d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z!TestReversed.test_gc.<locals>.Seqc                 S   s   dS )Nr\   r	   r   r	   r	   r
   rb      s    z)TestReversed.test_gc.<locals>.Seq.__len__c                 S   s   |S r   r	   ro   r	   r	   r
   r      s    z-TestReversed.test_gc.<locals>.Seq.__getitem__N)r   r   r   rb   r   r	   r	   r	   r
   Seq   s   rw   )ri   ru   )r   rw   rt   ru   r	   r	   r
   test_gc   s    zTestReversed.test_gcc                 C   s    |  tt |  ttg d d S )Nextra)rF   rJ   ri   r   r	   r	   r
   	test_args   s    zTestReversed.test_argsgetrefcountztest needs sys.getrefcount()c              	   C   sl   dd }t   }|_t|}tdD ].}zt| W n tyH   Y q&0 | d q&| |t| d S )Nc                   S   s   d S r   r	   r	   r	   r	   r
   f   s    z'TestReversed.test_bug1229429.<locals>.fr\   z'non-callable __reversed__ didn't raise!)	object__reversed__sysr{   r)   ri   rJ   Zfailr.   )r   r|   ru   rcr   r	   r	   r
   test_bug1229429   s    
zTestReversed.test_bug1229429c                 C   sp   G dd dt }| }| tt| G dd dt }| }| tt| G dd dt }| }| tt| d S )Nc                   @   s   e Zd Zdd ZdS )z+TestReversed.test_objmethods.<locals>.NoLenc                 S   s   dS r   r	   r   r	   r	   r
   r          z7TestReversed.test_objmethods.<locals>.NoLen.__getitem__N)r   r   r   r   r	   r	   r	   r
   NoLen   s   r   c                   @   s   e Zd Zdd ZdS )z/TestReversed.test_objmethods.<locals>.NoGetItemc                 S   s   dS Nr;   r	   r   r	   r	   r
   rb      r   z7TestReversed.test_objmethods.<locals>.NoGetItem.__len__N)r   r   r   rb   r	   r	   r	   r
   	NoGetItem   s   r   c                   @   s    e Zd Zdd Zdd ZdZdS )z-TestReversed.test_objmethods.<locals>.Blockedc                 S   s   dS r   r	   r   r	   r	   r
   r      r   z9TestReversed.test_objmethods.<locals>.Blocked.__getitem__c                 S   s   dS r   r	   r   r	   r	   r
   rb      r   z5TestReversed.test_objmethods.<locals>.Blocked.__len__N)r   r   r   r   rb   r~   r	   r	   r	   r
   Blocked   s   r   )r}   rF   rJ   ri   )r   r   nlr   Zngir   r:   r	   r	   r
   test_objmethods   s    zTestReversed.test_objmethodsc                 C   sH   dt dttdt dddfD ]"}| t|t|d d d  q d S )Nr8   r`   r   rd   re   )r)   rf   rS   r6   ri   r0   )r   rj   r	   r	   r
   rC      s    $zTestReversed.test_pickleN)r   r   r   rk   rm   rv   rx   rz   unittestZ
skipUnlesshasattrr   r   r   rC   r	   r	   r	   r
   r^      s   

r^   c                   @   s   e Zd Zdd ZdS )EnumerateStartTestCasec                 C   s:   |  | j}| t|| | t|  | j| j d S r   )r=   r2   r.   r>   r0   r?   r@   r	   r	   r
   rB     s    z)EnumerateStartTestCase.test_basicfunctionN)r   r   r   rB   r	   r	   r	   r
   r     s   r   c                   @   s"   e Zd Zdd Zdg d ZZdS )	TestStartc                 C   s   t |ddS )N   start)rS   r   r	   r	   r
   <lambda>  r   zTestStart.<lambda>r8   ))r   r9   )   r:   )   r<   N)r   r   r   r=   r2   r?   r	   r	   r	   r
   r     s   r   c                   @   sB   e Zd Zdd Zdejd dfejd dfejd d	fg ZZd
S )TestLongStartc                 C   s   t |tjd dS )Nr   r   )rS   r   maxsizer   r	   r	   r
   r     r   zTestLongStart.<lambda>r8   r   r9   r;   r:   r&   r<   N)r   r   r   r=   r   r   r2   r?   r	   r	   r	   r
   r     s   r   __main__)r   rr   r   r*   rV   testr   r   r   r!   r$   r%   r'   r(   ZTestCaser7   rS   rX   rY   rZ   r[   r^   r   r   r   r   mainr	   r	   r	   r
   <module>   s.   	
@^
