a
    ze6                     @   sp  d dl Z d dlZd dlmZ d dlmZ ejddgdZejddgdZG dd	 d	e	Z
G d
d dZG dd deejZG dd deejZG dd dZG dd deejZG dd deej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ejZG d d! d!eejZG d"d# d#ZG d$d% d%eejZG d&d' d'eejZed(krle  dS ))    N)support)UserListbisect_bisect)Zblocked)Zfreshc                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )Rangez:A trivial range()-like object that has an insert() method.c                 C   s   || _ || _d | _d S N)startstoplast_insert)selfr   r	    r   &/usr/lib/python3.9/test/test_bisect.py__init__   s    zRange.__init__c                 C   s   | j | j S r   )r	   r   r   r   r   r   __len__   s    zRange.__len__c                 C   s6   | j | j }|dk r||7 }||kr,t|| j| S )Nr   )r	   r   
IndexError)r   idxnr   r   r   __getitem__   s    zRange.__getitem__c                 C   s   ||f| _ d S r   )r
   )r   r   itemr   r   r   insert   s    zRange.insertN)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r   	   s
   r   c                   @   sV   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdddZdd Z	dd Z
dd ZdS )
TestBisectc              Q   C   sr  | j jg ddf| j jdgddf| j jdgddf| j jdgddf| j jddgddf| j jddgddf| j jddgddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jddgddf| j jddgddf| j jddgddf| j jddgddf| j jddgddf| j jg d	ddf| j jg d	ddf| j jg d	ddf| j jg d	ddf| j jg d	ddf| j jg d
ddf| j jg d
ddf| j jg d
ddf| j jg d
ddf| j jg d
ddf| j jg d
ddf| j jg d
ddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jg ddf| j jdgddf| j jdgddf| j jdgddf| j jddgddf| j jddgddf| j jddgddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jddgddf| j jddgddf| j jddgddf| j jddgddf| j jddgddf| j jg d	ddf| j jg d	ddf| j jg d	ddf| j jg d	ddf| j jg d	ddf| j jg d
ddf| j jg d
ddf| j jg d
ddf| j jg d
ddf| j jg d
ddf| j jg d
ddf| j jg d
ddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jg dddf| j jg dddfgN| _d S )N   r      )r   r   r      )r   r   r   r      g      ?)r   r   r   r   r   r   r   g      @)
r   r   r   r   r   r   r   r   r   r      g      @
      )modulebisect_rightbisect_leftprecomputedCasesr   r   r   r   setUp    s    zTestBisect.setUpc                 C   s@   | j D ]4\}}}}| |||| | |t||| qd S r   )r'   assertEqualr   )r   funcdataelemexpectedr   r   r   test_precomputeds   s    zTestBisect.test_precomputedc                 C   sr   | j }| t|jg dddd | t|jg dddd | t|jg dddd | t|jg dddd d S )Nr    r#   r   )r$   assertRaises
ValueErrorr&   r%   insort_leftinsort_right)r   modr   r   r   test_negative_lox   s
    zTestBisect.test_negative_loc                 C   s   | j }tj}t|d }| |||d |d  | |||d |d  | |||d |d ||d  | |||d |d ||d  d S )Nr   r   r   r"   )r$   sysmaxsizeranger)   r&   r%   )r   r4   r   r+   r   r   r   test_large_range   s    $zTestBisect.test_large_rangec                 C   s  | j }tj}td|d }| |||d |d  | |||d |d  | |||d |d ||d  | |||d |d ||d  |d }||||d |d  | |j||f |d }|	|||d |d  | |j|d |f d S )	Nr   r   r   r   r"   d   2      )
r$   r6   r7   r   r)   r&   r%   r2   r
   r3   )r   r4   r   r+   xr   r   r   test_large_pyrange   s    $$zTestBisect.test_large_pyrange   c                    s   ddl m t D ]} fddt|D }|  d d }| j||}|t|k rr| ||| k |dkr| ||d  |k  | j||}|t|k r| ||| k  |dkr| ||d  |k qd S )Nr   )	randrangec                    s   g | ]}d  dqS )r   r   r   ).0jr   r@   r   r   
<listcomp>       z*TestBisect.test_random.<locals>.<listcomp>r/   r   )	randomr@   r8   sortr$   r&   len
assertTruer%   )r   r   ir+   r,   ipr   rC   r   test_random   s    zTestBisect.test_randomc                 C   s>  | j D ]0\}}}}tdD ]}tt||}tddD ]}tt||}|||||}| ||  kop|kn   || jju r||k r| ||| k || jju r||kr| ||d  |k  || jju r||k r| ||| k  || jju r||kr| ||d  |k | |t	|t|| q:qqd S )Nr   r      r   )
r'   r8   minrH   rI   r$   r&   r%   r)   max)r   r*   r+   r,   r-   lohirK   r   r   r   test_optionalSlicing   s     zTestBisect.test_optionalSlicingc                 C   s   |  | jj| jj d S r   )r)   r$   r   r%   r   r   r   r   test_backcompatibility   s    z!TestBisect.test_backcompatibilityc                 C   s   g d}|  | jj|ddddd |  | jj|ddddd |  | jj|ddddd | jj|dddd | jj|dddd | jj|dddd |  |g d d S )N)r"         (   r;   r?   r   r   )ar=   rP   rQ   r   )r"   rT   r?   r?   r?   rU   rV   r;   )r)   r$   r&   r%   r   r2   r3   insort)r   r+   r   r   r   test_keyword_args   s    zTestBisect.test_keyword_argsN)r?   )r   r   r   r(   r.   r5   r9   r>   rL   rR   rS   rY   r   r   r   r   r      s   S

r   c                   @   s   e Zd ZeZdS )TestBisectPythonNr   r   r   	py_bisectr$   r   r   r   r   rZ      s   rZ   c                   @   s   e Zd ZeZdS )TestBisectCNr   r   r   c_bisectr$   r   r   r   r   r]      s   r]   c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )

TestInsort  c                 C   sl   ddl m} t t fD ]N}t|D ]0}|d}|dv rB| jj}n| jj}||| q$| t	|| qd S )Nr   )choice
0123456789Z02468)
rF   rb   listr   r8   r$   r2   r3   r)   sorted)r   r   rb   ZinsortedrJ   digitfr   r   r   test_vsBuiltinSort   s    
zTestInsort.test_vsBuiltinSortc                 C   s   |  | jj| jj d S r   )r)   r$   rX   r3   r   r   r   r   rS      s    z!TestInsort.test_backcompatibilityc                 C   sH   G dd dt }| }| j|d | j|d | ddg|j d S )Nc                   @   s   e Zd Zg Zdd ZdS )z)TestInsort.test_listDerived.<locals>.Listc                 S   s   | j || d S r   )r+   r   )r   indexr   r   r   r   r      s    z0TestInsort.test_listDerived.<locals>.List.insertN)r   r   r   r+   r   r   r   r   r   List   s   rj   r"   r#   )rd   r$   r2   r3   r)   r+   )r   rj   Zlstr   r   r   test_listDerived   s
    zTestInsort.test_listDerivedN)ra   )r   r   r   rh   rS   rk   r   r   r   r   r`      s   
r`   c                   @   s   e Zd ZeZdS )TestInsortPythonNr[   r   r   r   r   rl      s   rl   c                   @   s   e Zd ZeZdS )TestInsortCNr^   r   r   r   r   rm      s   rm   c                   @   s   e Zd ZdZdd ZdS )LenOnlyz:Dummy sequence class defining __len__ but not __getitem__.c                 C   s   dS Nr"   r   r   r   r   r   r      s    zLenOnly.__len__N)r   r   r   r   r   r   r   r   r   rn      s   rn   c                   @   s   e Zd ZdZdd ZdS )GetOnlyz:Dummy sequence class defining __getitem__ but not __len__.c                 C   s   dS ro   r   )r   Zndxr   r   r   r      s    zGetOnly.__getitem__N)r   r   r   r   r   r   r   r   r   rp      s   rp   c                   @   s,   e Zd ZdZdd ZeZeZeZeZeZ	dS )CmpErrz;Dummy element that always raises an error during comparisonc                 C   s   t d S r   )ZeroDivisionError)r   otherr   r   r   __lt__  s    zCmpErr.__lt__N)
r   r   r   r   rt   __gt____le____ge____eq____ne__r   r   r   r   rq      s   rq   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestErrorHandlingc                 C   s6   | j j| j j| j j| j jfD ]}| t|dd qd S ro   r$   r&   r%   r2   r3   r0   	TypeErrorr   rg   r   r   r   test_non_sequence
  s    z#TestErrorHandling.test_non_sequencec                 C   s8   | j j| j j| j j| j jfD ]}| t|t d qd S ro   )r$   r&   r%   r2   r3   r0   r|   rn   r}   r   r   r   test_len_only  s    zTestErrorHandling.test_len_onlyc                 C   s8   | j j| j j| j j| j jfD ]}| t|t d qd S ro   )r$   r&   r%   r2   r3   r0   r|   rp   r}   r   r   r   test_get_only  s    zTestErrorHandling.test_get_onlyc                 C   sF   t  t  t  g}| jj| jj| jj| jjfD ]}| t||d q,d S ro   )rq   r$   r&   r%   r2   r3   r0   rr   )r   seqrg   r   r   r   test_cmp_err  s
    zTestErrorHandling.test_cmp_errc                 C   s4   | j j| j j| j j| j jfD ]}| t|d qd S ro   r{   r}   r   r   r   test_arg_parsing  s    z"TestErrorHandling.test_arg_parsingN)r   r   r   r~   r   r   r   r   r   r   r   r   rz   	  s
   rz   c                   @   s   e Zd ZeZdS )TestErrorHandlingPythonNr[   r   r   r   r   r   $  s   r   c                   @   s   e Zd ZeZdS )TestErrorHandlingCNr^   r   r   r   r   r   '  s   r   c                   @   s   e Zd Zdd Zdd ZdS )TestDocExamplec                    s<   g ddffdd	  fdddD } |g d d S )	N)<   F   P   Z   ZFDCBAc                    s    j || }|| S r   )r$   r   )scoreZbreakpointsZgradesrJ   r   r   r   grade.  s    z)TestDocExample.test_grades.<locals>.gradec                    s   g | ]} |qS r   r   )rA   r   )r   r   r   rD   2  rE   z.TestDocExample.test_grades.<locals>.<listcomp>)!   c   M   r   Y   r   r:   )FACr   Br   r   )r)   )r   resultr   )r   r   r   test_grades-  s    zTestDocExample.test_gradesc                 C   s   g d}|j dd d dd |D }| jj}| |||d d | |||d	 d
 | |||d d | |||d d d S )N)Zredr#   Zbluer   ZyellowrM   Zblackr   c                 S   s   | d S )Nr   r   )rr   r   r   <lambda>7  rE   z,TestDocExample.test_colors.<locals>.<lambda>)keyc                 S   s   g | ]}|d  qS )r   r   )rA   r   r   r   r   rD   8  rE   z.TestDocExample.test_colors.<locals>.<listcomp>r   r   r   r   r#   r   rM   r   )rG   r$   r&   r)   )r   r+   keysr&   r   r   r   test_colors5  s    zTestDocExample.test_colorsN)r   r   r   r   r   r   r   r   r   r   ,  s   r   c                   @   s   e Zd ZeZdS )TestDocExamplePythonNr[   r   r   r   r   r   ?  s   r   c                   @   s   e Zd ZeZdS )TestDocExampleCNr^   r   r   r   r   r   B  s   r   __main__)r6   Zunittesttestr   collectionsr   Zimport_fresh_moduler\   r_   objectr   r   ZTestCaserZ   r]   r`   rl   rm   rn   rp   rq   rz   r   r   r   r   r   r   mainr   r   r   r   <module>   s0    ,

