o
    HXhb                     @   sf   d dl Z d dlZd dlZd dlZd dlmZ dd Zdd ZG dd de jZ	e
d	kr1e   dS dS )
    N)	ALWAYS_EQc                 c   sL    | | | dk r"|| | | 7 }| |kr$| V  | |7 } | |ksd S d S d S )Nr    startstopstepr   r   9/opt/python-3.10.19/usr/lib/python3.10/test/test_range.pypyrange
   s   r	   c                 C   s&   || | | 7 }t || | | | S N)r	   r   r   r   r   pyrange_reversed   s   r   c                   @   s   e Zd Zd: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d,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 ZdS );	RangeTestNc           
   	   C   s   |d urt ||}t ||}t }t j|||d}t|D ]4\}\}}	||	kr*q||kr9| d|||	 q|	|krH| d||| q| d|||	| qd S )N)	fillvaluez;{}: iterator ended unexpectedly at position {}; expected {}z/{}: unexpected excess element {} at position {}z5{}: wrong element at position {}; expected {}, got {})	itertoolsisliceobjectzip_longest	enumerateZfailformat)
selfZxsZystest_idlimitsentinelpairsixyr   r   r   assert_iterators_equal   s(   

z RangeTest.assert_iterators_equalc                 C   s  |  ttdg d |  ttddg d |  ttdg  |  ttdg  |  ttdddg d	 |  ttdd
dg d d}d}d}|  tt||d ||d g |  tt|d |d|d |d g |  tt|d |d|d |d g tt|||}| || | || |  t|d tt||| }| || | || |  t|d tt| | | }| | | | | | |  t|d | tt | ttdddd | ttddd | ttddd | ttddd | ttddd | ttddd | ttdd | ttddd |  ttdt	j
t	j
d d tt	j
 t	j
d}|  t|t	j
 d S )N   )r         r      )r   r   r      r   
   )r   r!      )r    r   d   2   r   r&   r!           g       @      ?}Ô%IT\nTspam*   )assertEquallistrangeassertInassertNotInlenassertRaises	TypeError
ValueErrorsysmaxsize)r   abcseqrr   r   r   
test_range.   sH   "(( zRangeTest.test_rangec                 C   sv   |  td t  W d    n1 sw   Y  |  td tdddddd W d    d S 1 s4w   Y  d S )	Nz)range expected at least 1 argument, got 0z)range expected at most 3 arguments, got 6r   r   r   r!   r       )ZassertRaisesRegexr8   r3   r   r   r   r   %test_range_constructor_error_messages^   s   "z/RangeTest.test_range_constructor_error_messagesc                 C   s  t ddd}| t|d | tt|d t ddd}| t|d | tt|d | | t ddd}| t|d | tt|d | | t ddd}| t|d | tt|d | | t dd  t ddd  t ddd d	fD ]}| t|g  | | qtd
tj }tdtj }tdtj }| tt ||d ||d g | tt |d |d	|d |d g | tt |d |d|d |d g tt |||}| 	|| | 
|| | t|d | |d | | |d	 ||  tt ||| }| 	|| | 
|| | t|d | |d | | |d	 ||  tt | | | }| 	| | | 
| | | t|d | |d |  | |d	 | |  d S )N      Fx:^V l   
  Fx:^V r   r!   r   r"   r   r(   r&   r#   r)   r   r*   )r3   r1   r6   r2   ZassertFalse
assertTrueintr:   r;   r4   r5   )r   r   r<   r=   r>   r?   r   r   r   test_large_operandsk   sZ   


"((zRangeTest.test_large_operandsc                 C   s  dd }t j }t j}|| }t||}| || | || | tt| | | | 	||| | 	|d | t jd }| 	|| ||  | 	|||d  d ||  | t
 || d   W d    n1 srw   Y  | t
 ||  W d    n1 sw   Y  d}dt j }|| }t||}| || | || | tt| | | | 	||| | 	|d | t jd }| 	|| ||  | 	|||d  d ||  | t
 || d   W d    n1 sw   Y  | t
 ||  W d    n	1 sw   Y  d}t jd }dt j }d|| |  }t|||}| || | || | tt| | | | 	||| | 	|d | t jd }| 	|| |||   | 	|||d  d |||   | t
 || d   W d    n	1 sw   Y  | t
 ||  W d    n	1 sw   Y  t jd }d}dt j }d|| |  }t|||}| || | || | tt| | | | 	||| | 	|d | t jd }| 	|| |||   | 	|||d  d |||   | t
 || d   W d    n	1 s6w   Y  | t
 ||  W d    d S 1 sQw   Y  d S )Nc                 S   sL   zt | }W |S  ty%   | d | d  }d| d | d  |  }Y |S w )Nr   r   r&   )r6   OverflowError)r   lengthr   r   r   r   
_range_len   s   
z.RangeTest.test_large_range.<locals>._range_lenr   r   r   r#   r*   )r:   r;   r3   r4   r5   r7   rI   r6   rF   r1   
IndexError)r   rK   r<   r=   expected_lenr   idxr>   r   r   r   test_large_range   s   


 




 




$




$
$zRangeTest.test_large_rangec                 C   s`  |  tt |  ttdddd |  ttddd tdtj }|  tt||d td |  ttddd |  ttdd	d	 |  ttdd
 |  ttddd
 |  ttd |  ttdd |  ttdd |  ttdd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd d S )Nr   r   r   r!   r   r#   r,   r-   r.   r/   r0   r+   )r7   r8   r3   r9   rG   r:   r;   )r   r<   r   r   r   test_invalid_invocation   s(   z!RangeTest.test_invalid_invocationc                    s  t d}| |dd | |dd | t|jd t dd}| |dd | |dd | t|j G dd dt G  fdd	d	}t d
}|  |j|  t dd}| |dd | t dddd
d | t ddddd | t ddd | t ddd | tt ddd djdd  | t ddd ddd d dd  | t dtd d S )Nr   r   r   r*   r   c                   @   s   e Zd ZdS )z$RangeTest.test_index.<locals>.BadExcN)__name__
__module____qualname__r   r   r   r   BadExc  s    rT   c                       s   e Zd Z fddZdS )z$RangeTest.test_index.<locals>.BadCmpc                    s   |dkr  dS )Nr   Fr   r   otherrT   r   r   __eq__  s   z+RangeTest.test_index.<locals>.BadCmp.__eq__NrQ   rR   rS   rX   r   rW   r   r   BadCmp  s    rZ   r!   r#   r"   r%   rE   l   Fx:^V r(   W   V   )	r3   r1   indexr7   r9   countr8   	Exceptionr   )r   urZ   r<   r   rW   r   
test_index  s*   

 *zRangeTest.test_indexc                 C   sB  dt j }d}G dd d}| tt||||d |g | tt||||d |g G dd d}| tt|  G dd	 d	}| tt|  | td
d |d td | t tdd
d |   W d    n1 szw   Y  | t tdd
d |   W d    d S 1 sw   Y  d S )Nr   r0   c                   @      e Zd Zdd Zdd ZdS )z+RangeTest.test_user_index_method.<locals>.Ic                 S   s   t || _d S r
   )rG   n)r   rd   r   r   r   __init__:  s   z4RangeTest.test_user_index_method.<locals>.I.__init__c                 S   s   | j S r
   )rd   rC   r   r   r   	__index__<  s   z5RangeTest.test_user_index_method.<locals>.I.__index__N)rQ   rR   rS   re   rf   r   r   r   r   I9  s    rg   r   c                   @      e Zd Zdd ZdS )z,RangeTest.test_user_index_method.<locals>.IXc                 S   s   t r
   )RuntimeErrorrC   r   r   r   rf   C     z6RangeTest.test_user_index_method.<locals>.IX.__index__NrQ   rR   rS   rf   r   r   r   r   IXB      rl   c                   @   rh   )z,RangeTest.test_user_index_method.<locals>.INc                 S      dS )Nznot a numberr   rC   r   r   r   rf   I  rj   z6RangeTest.test_user_index_method.<locals>.IN.__index__Nrk   r   r   r   r   INH  rm   ro   r#   r    r   )r:   r;   r1   r2   r3   r7   ri   r8   )r   ZbignumZsmallnumrg   rl   ro   r   r   r   test_user_index_method4  s    
$$ "z RangeTest.test_user_index_methodc                 C   sd  |  tddd |  tddd |  tddd |  tddd |  tddd | ttddt | ttddt |  tddd |  tddd |  tddd |  tddd ddd d |  tddd ddd d d |  td	td	 |  ttt	j
t	j
d	 d	 d S )
Nr   r&   r   r   r   rE   r(   r\   r#   )r1   r3   r_   assertIstyperG   r^   r   r6   r:   r;   rC   r   r   r   
test_countW  s   "&"zRangeTest.test_countc                 C   sF   |  ttdd |  ttddd |  ttdddd d S )Nr   zrange(0, 1)r   zrange(1, 2)r   zrange(1, 2, 3))r1   reprr3   rC   r   r   r   	test_repri  s   zRangeTest.test_reprc                 C   s   dddddddd dd d fg}t tjd	 D ]3}|D ].}| j||d
 t | }| ttt||t| W d    n1 sEw   Y  qqd S )N   r      ir#      r   r&   rw      r   r*   r   r   r   A   r   )prototest)r3   pickleHIGHEST_PROTOCOLsubTestr1   r2   loadsdumps)r   	testcasesr   tr@   r   r   r   test_picklingn  s   zRangeTest.test_picklingc           	      C   s  g d}dD ]?}||d |d fd| d| d f|d |d df| d | dfdd|d fdd| fd|d |d fd| | fg7 }qt tjd D ]{}|D ]v}| j||d	e tt |  }}tt | }t||}t|}| t	|t	| | t|| t|}zt
| W n ty   Y W d    qQw t||}t|}| t||dd   W d    n1 sw   Y  qQqMd S )
N)rv   rx   rz   r{   r}   r   )l        l            r   r   r!   r   r*   r&   )r   r   )r3   r   r   r   iterr2   r   r   r1   rr   nextStopIteration)	r   r   Mr   r   itZitorgdatadr   r   r   test_iterator_picklingx  s>     


z RangeTest.test_iterator_picklingc              	   C   s   t tjd D ]P}| j|d@ tt d}| \}}}| |d |d | \}}}| |d t||}t	|}| t
|d W d    n1 sRw   Y  qd S )Nr   )r   l       r   l       )r3   r   r   r   r   
__reduce__r1   __setstate__r   r   r   )r   r   r   _rN   r   r   r   r   (test_iterator_pickling_overflowing_index  s   

z2RangeTest.test_iterator_pickling_overflowing_indexc                 C   s   t tjd D ];}t dd dd d }t|}	 t|}|dd d kr&nqt||}t|}| t|g  | t|g  qd S )Nr   r   r   	r3   r   r   r   r   r   r   r1   r2   r   r   r@   r   r   Zi2r   r   r    test_exhausted_iterator_pickling  s   
z*RangeTest.test_exhausted_iterator_picklingc                 C   st   t tjd D ]0}t d}t|}	 t|}|dkrnqt||}t|}| t|g  | t|g  qd S )Nr   r|   T   r   r   r   r   r   &test_large_exhausted_iterator_pickling  s   
z0RangeTest.test_large_exhausted_iterator_picklingc                 C   s<   |  t tg dd W d    d S 1 sw   Y  d S )Nr   r&   )r7   r8   r3   rC   r   r   r   test_odd_bug  s   "zRangeTest.test_odd_bugc                 C   s   |  dtd |  dtd |  dtd |  ttd G dd d}| | td |  t| td G dd dt}|  |d	td
 |  |d	ttd
 d S )Nr,   r   Ty      ?        c                   @   rc   )z RangeTest.test_types.<locals>.C2c                 S   rn   Nr   r   rC   r   r   r   __int__      z(RangeTest.test_types.<locals>.C2.__int__c                 S   rn   r   r   rC   r   r   r   rf     r   z*RangeTest.test_types.<locals>.C2.__index__N)rQ   rR   rS   r   rf   r   r   r   r   C2  s    r   c                   @   rh   )z RangeTest.test_types.<locals>.C3c                 S   rn   )NTr   rU   r   r   r   rX     r   z'RangeTest.test_types.<locals>.C3.__eq__NrY   r   r   r   r   C3  rm   r   ry   r#   )r4   r3   r   r5   rG   r2   )r   r   r   r   r   r   
test_types  s   zRangeTest.test_typesc                 C   s   t ddd}| d| | d| | d| | d| | d| | d| t ddd}| d| | d| | d	| | d| t ddd
}| d| | d	| | d| d S )Nr   e   r   r   c   r(   r&   r*   ir3   r4   r5   r   r@   r   r   r   test_strided_limits  s    zRangeTest.test_strided_limitsc                 C   sR   t d}| d| | d| t dd}| d| | d| | d| d S )Nr   r   r[   r&   )r3   r5   r   r   r   r   
test_empty  s   
zRangeTest.test_emptyc                    s   dd dD   fdd D }|D ]?\}}}t |||}t|||}d|||}| j|||dd tt |||}t|||}d|||}| j|||dd qd S )	Nc                 S   s>   g | ]}| | d  d|d  |fD ]}dD ]}|| qqqS )r   r   )r*   r&   r   r   r   r   ).0r   baseZjiggler   r   r   
<listcomp>  s    z2RangeTest.test_range_iterators.<locals>.<listcomp>)l        l            c                    s*   g | ]} D ]}d D ]}|||fq
qqS ))l         i   r*   r&   r   r   r   )r   r   endr   Zlimitsr   r   r     s    zrange({}, {}, {})r(   )r   zreversed(range({}, {}, {})))r3   r	   r   r   reversedr   )r   test_rangesr   r   r   Ziter1Ziter2r   r   r   r   test_range_iterators  s    
zRangeTest.test_range_iteratorsc                 C   sL   t ttd}| t|ddd t ttdd> }| t|ddd d S )Nr   r   r   i  )rr   r   r3   r7   r8   )r   Zrangeiter_typeZlong_rangeiter_typer   r   r   test_range_iterators_invocation  s   z)RangeTest.test_range_iterators_invocationc                    s   d fdd	}t dt dt dddt ddd	t tjd tjd fD ], |dd
 |dd |dd
 |dd |dd |ddd
 |dd |dd	d q$d S )Nc                    sL   t | ||}t | t |  t | tt |  d S r
   )slicer1   r2   r6   )r   r   r   r   r@   r   r   r   check  s   $z#RangeTest.test_slice.<locals>.checkr#   r   r   	   r      r"   r   r|      r   r&   r(   r
   )r3   r:   r;   )r   r   r   r   r   
test_slice  s    







zRangeTest.test_slicec                 C   s  t d}| d| | d| | d| | d| | d| | d| | d| t ddd}| d| | d| | d| | d| | d| | d| | d| t ddd	}| d| | d| | d| | d| | d| | d| | d| t ddd
}| d| | d| | d| | d| | d| | d| | d| d S )Nr#   r   r   g      @gffffff@r&    r   r   r*   r   r   r   r   r   test_contains.  s@   zRangeTest.test_containsc                 C   sd   t dt dt dddt dddt tjd tjd fD ]}| tt|t|d d d  qd S )	Nr#   r   r   r   r   r   r"   r&   )r3   r:   r;   r1   r2   r   r   r   r   r   test_reverse_iterationP  s   

$z RangeTest.test_reverse_iterationc                 C   sT   t tdddd }h d}|D ]}|D ]}|dh D ]	}||||  qqqd S )Nr      r   r|   >   r   r   r   r   r   r    ir   r   Nr   r|   r~   r&   r   r%   ir*   r   )r3   r   indices)r   r@   valuesr   jkr   r   r   test_issue11845Y  s   zRangeTest.test_issue11845c                    sf  t dt ddt dddt dt ddt dddt dddt dt dd	dt dddt dddg ttt  fd
d D }fddD }| ||  fdd D }| |dd |D   D ]} D ]}||krz| t|t| qjqf| t ddkd | dt dkd | t dddgkd | t ddd d dt ddd d | tt ddd d dtt ddd d | t ddd dt ddd d d | t dd dd dd  dd t dd dd dd  | tt dd dd dd  dd tt dd dd dd  | t dd dd dd t dd dd d dd  | t	 t dt dk  W d    n	1 sQw   Y  | t	 t dt dk W d    n	1 sow   Y  | t	 t dt dk W d    n	1 sw   Y  | t	 t dt dk W d    d S 1 sw   Y  d S )Nr   r&   r   r   r    rB   r   r$   r!   c                       g | ]} D ]}||kqqS r   r   r   r<   r=   r   r   r   r   k      z-RangeTest.test_comparison.<locals>.<listcomp>c                    r   r   r   r   )test_tuplesr   r   r   l  r   c                    s   g | ]} D ]}||kqqS r   r   r   r   r   r   r   p  r   c                 S   s   g | ]}| qS r   r   )r   r   r   r   r   r   q  s    r   Fr(         r   )
r3   r2   maptupler1   hashrq   ZassertNotEqualr7   r8   )r   Z	ranges_eqZ	tuples_eqZ	ranges_ner<   r=   r   )r   r   r   test_comparisonb  sd   "&$zRangeTest.test_comparisonc                 C   s   |  tdddd |  tdddd |  tdddd |  tdddddd |  tdddddd |  tdddddd |  tdddddd |  tdddd |  td	dddd |  td	ddddd d S )
Nr   r   r#   r[   r   r&   r"   TF)assert_attrsr3   rC   r   r   r   test_attributes  s   zRangeTest.test_attributesc                 C   s  |  |j| |  |j| |  |j| | t|jt | t|jt | t|jt | t d|_W d    n1 sCw   Y  | t d|_W d    n1 s[w   Y  | t d|_W d    n1 ssw   Y  | t
 |`W d    n1 sw   Y  | t
 |`W d    n1 sw   Y  | t |`W d    d S 1 sw   Y  d S )Nr   r#   r   )	r1   r   r   r   rq   rr   rG   r7   AttributeError)r   Zrangeobjr   r   r   r   r   r   r     s0   "zRangeTest.assert_attrsr
   )rQ   rR   rS   r   rA   rD   rH   rO   rP   rb   rp   rs   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s:    
08U$#

"		5r   __main__)Zunittestr:   r   r   Ztest.supportr   r	   r   ZTestCaser   rQ   mainr   r   r   r   <module>   s    	     '