o
    HXh!                     @   sF  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re   dS dS )$    N)supportc                   @       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
   =/opt/python-3.10.19/usr/lib/python3.10/test/test_enumerate.py__init__      
z
G.__init__c                 C   s
   | j | S r   r   r	   ir
   r
   r   __getitem__   r   zG.__getitem__N)__name__
__module____qualname____doc__r   r   r
   r
   r
   r   r   	   s    r   c                   @   (   e Zd ZdZdd Zdd Zdd ZdS )	Iz Sequence using iterator protocolc                 C      || _ d| _d S Nr   r   r   r   r
   r
   r   r         
z
I.__init__c                 C      | S r   r
   r	   r
   r
   r   __iter__      z
I.__iter__c                 C   2   | j t| jkr
t| j| j  }|  j d7  _ |S N   r   lenr   StopIterationr	   vr
   r
   r   __next__      z
I.__next__Nr   r   r   r   r   r   r'   r
   r
   r
   r   r      
    r   c                   @   r   )Igz9Sequence using iterator protocol defined with a generatorc                 C   r   r   r   r   r
   r
   r   r      r   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+          r+   c                   @   r   )Xz Missing __getitem__ and __iter__c                 C   r   r   r   r   r
   r
   r   r   (   r   z
X.__init__c                 C   r   r    r"   r%   r
   r
   r   r'   +   r(   z
X.__next__N)r   r   r   r   r   r'   r
   r
   r
   r   r/   &   r.   r/   c                   @   r   )	EzTest propagation of exceptionsc                 C   r   r   r   r   r
   r
   r   r   3   r   z
E.__init__c                 C   r   r   r
   r   r
   r
   r   r   6   r   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   r0   1   r*   r0   c                   @   r   )NzIterator missing __next__()c                 C   r   r   r   r   r
   r
   r   r   =   r   z
N.__init__c                 C   r   r   r
   r   r
   r
   r   r   @   r   z
N.__iter__Nr-   r
   r
   r
   r   r2   ;   r.   r2   c                   @      e Zd Zdd ZdS )
PickleTestc              	   C   s   t tjd D ]T}t||}t|}| t|t| | t|| t|}zt| W n t	yC   | 
|dd   Y qw 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   rB   r
   r
   r
   r   r4   C       r4   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;   enumr>   iterr<   resr   r	   er
   r
   r   test_basicfunction[   s
   z$EnumerateTestCase.test_basicfunctionc                 C   s   |  | | j| j d S r   )rB   rJ   r>   rL   r   r
   r
   r   test_pickleb      zEnumerateTestCase.test_picklec                 C   >   |  t| t| j| j | td}| tt| d S N )	r:   r<   rJ   r   r>   rL   assertRaisesr$   r=   rM   r
   r
   r   test_getitemseqne      z"EnumerateTestCase.test_getitemseqnc                 C   rR   rS   )	r:   r<   rJ   r   r>   rL   rU   r$   r=   rM   r
   r
   r   test_iteratorseqnj   rW   z#EnumerateTestCase.test_iteratorseqnc                 C   rR   rS   )	r:   r<   rJ   r+   r>   rL   rU   r$   r=   rM   r
   r
   r   test_iteratorgeneratoro   rW   z(EnumerateTestCase.test_iteratorgeneratorc                 C      |  t| jt| j d S r   )rU   	TypeErrorrJ   r/   r>   r   r
   r
   r   test_noniterablet   rQ   z"EnumerateTestCase.test_noniterablec                 C   rZ   r   )rU   r[   rJ   r2   r>   r   r
   r
   r   test_illformediterablew   rQ   z(EnumerateTestCase.test_illformediterablec                 C   s   |  tt| t| j d S r   )rU   ZeroDivisionErrorr<   rJ   r0   r>   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!   rE   rF   rH   r1   )rU   r[   rJ   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idr<   	enumerater>   minr   r
   r
   r   test_tuple_reuse   s   *0z"EnumerateTestCase.test_tuple_reusec                 C   s,   |  g g}t  | tt| d S r   )rJ   gcZcollectZ
assertTrueZ
is_trackedr=   )r	   rA   r
   r
   r   test_enumerate_result_gc   s   z*EnumerateTestCase.test_enumerate_result_gcN)r   r   r   rd   rJ   r>   rL   rO   rP   rV   rX   rY   r\   r]   r_   r`   r   Zcpython_onlyrf   rh   r
   r
   r
   r   rD   V   s     
rD   c                   @   s   e Zd ZdS )MyEnumN)r   r   r   r
   r
   r
   r   ri      s    ri   c                   @   s   e Zd ZeZdS )SubclassTestCaseN)r   r   r   ri   rJ   r
   r
   r
   r   rj      s    rj   c                   @   s   e Zd Zdg ZZdS )	TestEmptyrT   N)r   r   r   r>   rL   r
   r
   r
   r   rk      s    rk   c                   @   s*   e Zd ZedddZeeedeZdS )TestBig
   i N  rH   N)r   r   r   r5   r>   r<   ziprL   r
   r
   r
   r   rl      s    rl   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                   @      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N   )strr$   r   r
   r
   r   r      s   z/TestReversed.test_simple.<locals>.A.__getitem__c                 S      dS rq   r
   r   r
   r
   r   __len__   r   z+TestReversed.test_simple.<locals>.A.__len__N)r   r   r   r   ru   r
   r
   r
   r   A   s    rv   rE   rr   r!      Zabcde)rF   )
r5   tuplerd   dictfromkeysr:   r<   reversedrU   r[   )r	   rv   datar
   r
   r   test_simple   s   $zTestReversed.test_simplec                 C   s(   t d}| tt|tt| d S r    )r5   r:   r;   r|   rK   )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hellorr   r   c                   @   r   )z.TestReversed.test_len.<locals>.SeqWithWeirdLenFc                 S   s   | j sd| _ dS t)NTrm   )calledr^   r   r
   r
   r   ru      s   z6TestReversed.test_len.<locals>.SeqWithWeirdLen.__len__c                 S      |S r   r
   r	   indexr
   r
   r   r      r   z:TestReversed.test_len.<locals>.SeqWithWeirdLen.__getitem__N)r   r   r   r   ru   r   r
   r
   r
   r   SeqWithWeirdLen   s    r   )
ry   r<   r5   r:   operatorlength_hintr|   r#   rU   r^   )r	   srr   r
   r
   r   test_len   s   
	zTestReversed.test_lenc                 C   s&   G dd d}| }t |}||_d S )Nc                   @   rp   )z!TestReversed.test_gc.<locals>.Seqc                 S   rt   )Nrm   r
   r   r
   r
   r   ru      r   z)TestReversed.test_gc.<locals>.Seq.__len__c                 S   r   r   r
   r   r
   r
   r   r      r   z-TestReversed.test_gc.<locals>.Seq.__getitem__N)r   r   r   ru   r   r
   r
   r
   r   Seq   s    r   )r|   r   )r	   r   r   r   r
   r
   r   test_gc   s   
zTestReversed.test_gcc                 C   s    |  tt |  ttg d d S )Nextra)rU   r[   r|   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y$   Y qw | d q| |t| d S )Nc                   S   s   d S r   r
   r
   r
   r
   r   f   r   z'TestReversed.test_bug1229429.<locals>.frm   z'non-callable __reversed__ didn't raise!)	object__reversed__sysr   r5   r|   r[   Zfailr:   )r	   r   r   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                   @   r3   )z+TestReversed.test_objmethods.<locals>.NoLenc                 S   rt   r    r
   r   r
   r
   r   r          z7TestReversed.test_objmethods.<locals>.NoLen.__getitem__N)r   r   r   r   r
   r
   r
   r   NoLen       r   c                   @   r3   )z/TestReversed.test_objmethods.<locals>.NoGetItemc                 S   rt   NrH   r
   r   r
   r
   r   ru      r   z7TestReversed.test_objmethods.<locals>.NoGetItem.__len__N)r   r   r   ru   r
   r
   r
   r   	NoGetItem   r   r   c                   @   s    e Zd Zdd Zdd ZdZdS )z-TestReversed.test_objmethods.<locals>.Blockedc                 S   rt   r    r
   r   r
   r
   r   r      r   z9TestReversed.test_objmethods.<locals>.Blocked.__getitem__c                 S   rt   r   r
   r   r
   r
   r   ru      r   z5TestReversed.test_objmethods.<locals>.Blocked.__len__N)r   r   r   r   ru   r   r
   r
   r
   r   Blocked   s    r   )r   rU   r[   r|   )r	   r   nlr   Zngir   rG   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 )NrE   rr   r!   rw   rx   )r5   ry   rd   rB   r|   r<   )r	   r}   r
   r
   r   rP      s   $ zTestReversed.test_pickleN)r   r   r   r~   r   r   r   r   unittestZ
skipUnlesshasattrr   r   r   rP   r
   r
   r
   r   ro      s    

ro   c                   @   r3   )EnumerateStartTestCasec                 C   s:   |  | j}| t|| | t|  | j| j d S r   )rJ   r>   r:   rK   r<   rL   rM   r
   r
   r   rO     s   z)EnumerateStartTestCase.test_basicfunctionN)r   r   r   rO   r
   r
   r
   r   r     rC   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)rd   r   r
   r
   r   <lambda>  s    zTestStart.<lambda>rE   ))r   rF   )   rG   )   rI   N)r   r   r   rJ   r>   rL   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   )rd   r   maxsizer   r
   r
   r   r     s    zTestLongStart.<lambda>rE   r!   rF   rH   rG   r1   rI   N)r   r   r   rJ   r   r   r>   rL   r
   r
   r
   r   r     s
    r   __main__)r   r   r   r6   rg   testr   r   r   r+   r/   r0   r2   r4   ZTestCaserD   rd   ri   rj   rk   rl   ro   r   r   r   r   mainr
   r
   r
   r   <module>   s2    	
@^