B
    u9a6                 @   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bisectZ_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.7/test_bisect.py__init__   s    zRange.__init__c             C   s   | j | j S )N)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 )N)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          X   C   s  | 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dddgddf| j jdddgddf| j jdddgddf| j jddddgddf| j jddddgddf| j jdd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ddgddf| j jddddgddf| j jddddgddf| j jddddgddf| j jddddgddf| j jddddgddf| j jdddgddf| j jdddgddf| j jdddgddf| j jdddgddf| j jdddgddf| j jdddgddf| j jdddgddf| j jddddddddddg
ddf| j jddddddddddg
ddf| j jddddddddddg
ddf| j jddddddddddg
ddf| j jddddddddddg
ddf| j jddddddddddg
ddf| j jddddddddddg
d	df| j jddddddddddg
dd
f| j jddddddddddg
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dddgddf| j jdddgddf| j jdddgddf| j jddddgddf| j jddddgddf| j jdd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ddgddf| j jddddgddf| j jddddgddf| j jddddgddf| j jddddgddf| j jddddgddf| j jdddgddf| j jdddgddf| j jdddgddf| j jdddgddf| j jdddgddf| j jdddgddf| j jdddgddf| j jddddddddddg
ddf| j jddddddddddg
ddf| j jddddddddddg
ddf| j jddddddddddg
ddf| j jddddddddddg
ddf| j jddddddddddg
ddf| j jddddddddddg
d	df| j jddddddddddg
ddf| j jddddddddddg
dd
fgN| _d S )N   r            g      ?g      @   g      @
      )modulebisect_rightbisect_leftprecomputedCases)r	   r
   r
   r   setUp    s    """""""""""""""""zTestBisect.setUpc             C   sD   x>| j D ]4\}}}}| |||| | |t||| qW d S )N)r#   assertEqualr   )r	   funcdataelemexpectedr
   r
   r   test_precomputeds   s    zTestBisect.test_precomputedc             C   sz   | j }| t|jdddgddd | t|jdddgddd | t|jdddgddd | t|jdddgddd d S )Nr   r   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	   r0   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    r2   r3   r   r%   r"   r!   r.   r   r/   )r	   r0   r   r'   xr
   r
   r   test_large_pyrange   s    $$zTestBisect.test_large_pyrange   c                s   ddl m xt D ]} fddt|D }|  d d }| j||}|t|k rt| ||| k |dkr| ||d  |k  | j||}|t|k r| ||| k  |dkr| ||d  |k qW d S )Nr   )	randrangec                s   g | ]}d  dqS )r   r   r
   ).0j)r   r<   r
   r   
<listcomp>   s    z*TestBisect.test_random.<locals>.<listcomp>r+   r   )	randomr<   r4   sortr    r"   len
assertTruer!   )r	   r   ir'   r(   ipr
   )r   r<   r   test_random   s    zTestBisect.test_randomc             C   sP  xH| j D ]<\}}}}x,tdD ]}tt||}xtddD ]}tt||}|||||}| ||  ko||kn   || jjkr||k r| ||| k || jjkr||kr| ||d  |k  || jjkr||k r| ||| k  || jjkr(||kr(| ||d  |k | |t	|t|| qFW q$W q
W d S )Nr   r      r   )
r#   r4   minrB   rC   r    r"   r!   r%   max)r	   r&   r'   r(   r)   lohirE   r
   r
   r   test_optionalSlicing   s     zTestBisect.test_optionalSlicingc             C   s   |  | jj| jj d S )N)r%   r    r   r!   )r	   r
   r
   r   test_backcompatibility   s    z!TestBisect.test_backcompatibilityc             C   s   dddddg}|  | 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	 |  |ddddddddg d S )Nr         (   r7   r;   r   r   )ar9   rJ   rK   r   )r%   r    r"   r!   r   r.   r/   insort)r	   r'   r
   r
   r   test_keyword_args   s    zTestBisect.test_keyword_argsN)r;   )r   r   r   r$   r*   r1   r5   r:   rF   rL   rM   rS   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   rT      s   rT   c               @   s   e Zd ZeZdS )TestBisectCN)r   r   r   c_bisectr    r
   r
   r
   r   rV      s   rV   c               @   s&   e Zd Zd	ddZdd Zdd ZdS )

TestInsort  c             C   st   ddl m} xbt t fD ]R}x<t|D ]0}|d}|dkrF| jj}n| jj}||| q(W | t	|| qW d S )Nr   )choice
0123456789Z02468)
r@   rZ   listr   r4   r    r.   r/   r%   sorted)r	   r   rZ   ZinsortedrD   digitfr
   r
   r   test_vsBuiltinSort   s    
zTestInsort.test_vsBuiltinSortc             C   s   |  | jj| jj d S )N)r%   r    rR   r/   )r	   r
   r
   r   rM      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 )N)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   rb   r   r   )r\   r    r.   r/   r%   r'   )r	   rb   Zlstr
   r
   r   test_listDerived   s
    zTestInsort.test_listDerivedN)rY   )r   r   r   r`   rM   rc   r
   r
   r
   r   rX      s   
rX   c               @   s   e Zd ZeZdS )TestInsortPythonN)r   r   r   rU   r    r
   r
   r
   r   rd      s   rd   c               @   s   e Zd ZeZdS )TestInsortCN)r   r   r   rW   r    r
   r
   r
   r   re      s   re   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   rf      s   rf   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 )Nr   r
   )r	   Zndxr
   r
   r   r      s    zGetOnly.__getitem__N)r   r   r   r   r   r
   r
   r
   r   rg      s   rg   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 )N)ZeroDivisionError)r	   otherr
   r
   r   __lt__  s    zCmpErr.__lt__N)
r   r   r   r   rk   __gt____le____ge____eq____ne__r
   r
   r
   r   rh      s   rh   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   s:   x4| j j| j j| j j| j jfD ]}| t|dd qW d S )Nr   )r    r"   r!   r.   r/   r,   	TypeError)r	   r_   r
   r
   r   test_non_sequence
  s    z#TestErrorHandling.test_non_sequencec             C   s<   x6| j j| j j| j j| j jfD ]}| t|t d qW d S )Nr   )r    r"   r!   r.   r/   r,   rr   rf   )r	   r_   r
   r
   r   test_len_only  s    zTestErrorHandling.test_len_onlyc             C   s<   x6| j j| j j| j j| j jfD ]}| t|t d qW d S )Nr   )r    r"   r!   r.   r/   r,   rr   rg   )r	   r_   r
   r
   r   test_get_only  s    zTestErrorHandling.test_get_onlyc             C   sJ   t  t  t  g}x4| jj| jj| jj| jjfD ]}| t||d q.W d S )Nr   )rh   r    r"   r!   r.   r/   r,   ri   )r	   seqr_   r
   r
   r   test_cmp_err  s    zTestErrorHandling.test_cmp_errc             C   s8   x2| j j| j j| j j| j jfD ]}| t|d qW d S )Nr   )r    r"   r!   r.   r/   r,   rr   )r	   r_   r
   r
   r   test_arg_parsing  s    z"TestErrorHandling.test_arg_parsingN)r   r   r   rs   rt   ru   rw   rx   r
   r
   r
   r   rq   	  s
   rq   c               @   s   e Zd ZeZdS )TestErrorHandlingPythonN)r   r   r   rU   r    r
   r
   r
   r   ry   $  s   ry   c               @   s   e Zd ZeZdS )TestErrorHandlingCN)r   r   r   rW   r    r
   r
   r
   r   rz   '  s   rz   c               @   s   e Zd Zdd Zdd ZdS )TestDocExamplec          
      sJ   ddddgdffdd	  fdd	d
D } |dddddddg d S )N<   F   P   Z   ZFDCBAc                s    j || }|| S )N)r    r   )scoreZbreakpointsZgradesrD   )r	   r
   r   grade.  s    z)TestDocExample.test_grades.<locals>.gradec                s   g | ]} |qS r
   r
   )r=   r   )r   r
   r   r?   2  s    z.TestDocExample.test_grades.<locals>.<listcomp>)!   c   M   r}   Y   r   r6   FACB)r%   )r	   resultr
   )r   r	   r   test_grades-  s    zTestDocExample.test_gradesc             C   s   ddddg}|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yellowrG   )Zblackr   c             S   s   | d S )Nr   r
   )rr
   r
   r   <lambda>7      z,TestDocExample.test_colors.<locals>.<lambda>)keyc             S   s   g | ]}|d  qS )r   r
   )r=   r   r
   r
   r   r?   8  s    z.TestDocExample.test_colors.<locals>.<listcomp>r   r   r   rG   )rA   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 )TestDocExamplePythonN)r   r   r   rU   r    r
   r
   r
   r   r   ?  s   r   c               @   s   e Zd ZeZdS )TestDocExampleCN)r   r   r   rW   r    r
   r
   r
   r   r   B  s   r   __main__)r2   ZunittestZtestr   collectionsr   Zimport_fresh_modulerU   rW   objectr   r   ZTestCaserT   rV   rX   rd   re   rf   rg   rh   rq   ry   rz   r{   r   r   r   mainr
   r
   r
   r   <module>   s0    ,

