a
    ze2;                     @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ dZ	dZ
G dd dZG d	d
 d
ejZedkr|e  dS )    N)dedent)captured_stdout)captured_stderri@B    c                   @   s:   e Zd ZdZdddZdd Zdd Zd	d
 Zdd ZdS )	FakeTimerg      E@      ?c                 C   s   d| _ d| _|| _| t_d S )Nr   )countsetup_callsseconds_per_incrementtimeit_fake_timer)selfr
    r   &/usr/lib/python3.9/test/test_timeit.py__init__   s    zFakeTimer.__init__c                 C   s   | j | j| j  S N)	BASE_TIMEr   r
   r   r   r   r   __call__   s    zFakeTimer.__call__c                 C   s   |  j d7  _ d S N   )r   r   r   r   r   inc!   s    zFakeTimer.incc                 C   s   |  j d7  _ d S r   )r	   r   r   r   r   setup$   s    zFakeTimer.setupc                 C   s
   || _ | S )z3Records 'timer' and returns self as callable timer.)Zsaved_timer)r   timerr   r   r   
wrap_timer'   s    zFakeTimer.wrap_timerN)r   )	__name__
__module____qualname__r   r   r   r   r   r   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dd Zdd Z	dZ
dZdd Zdd ZdiddZdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zdjd&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:d; Z d<Z!dkd>d?Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+e,-e.j/j0dRkdSdTdU Z1dVdW Z2dXdY Z3dZd[ Z4d\d] Z5d^d_ Z6dldadbZ7dcdd Z8dedf Z9dgdh Z:dS )m
TestTimeitc                 C   s    zt `W n ty   Y n0 d S r   )r   r   AttributeErrorr   r   r   r   tearDown.   s    zTestTimeit.tearDownc                 C   s,   |  tddd |  tddd d S )N r      assertEqualr   Zreindentr   r   r   r   test_reindent_empty4   s    zTestTimeit.test_reindent_emptyc                 C   s,   |  tddd |  tddd d S )Npassr   r"   r#   r   r   r   r   test_reindent_single8   s    zTestTimeit.test_reindent_singlec                 C   s,   |  tddd |  tddd d S )Nz

r   r"   z

    
    r#   r   r   r   r   test_reindent_multi_empty<   s    z$TestTimeit.test_reindent_multi_emptyc                 C   s,   |  tddd |  tddd d S )Nzprint()
pass
breakr   r"   zprint()
    pass
    breakr#   r   r   r   r   test_reindent_multi@   s    zTestTimeit.test_reindent_multic                 C   s   | j ttjd d | j ttjdd | j ttjdd | j ttjdd | j ttjdd | j ttjdd | j ttjdd d S )N)stmtreturnyieldyield from ()breakcontinuefrom timeit import *assertRaises
ValueErrorr   TimerSyntaxErrorr   r   r   r   test_timer_invalid_stmtH   s    z"TestTimeit.test_timer_invalid_stmtc                 C   s   | j ttjd d | j ttjdd | j ttjdd | j ttjdd | j ttjdd | j ttjdd | j ttjdd d S )N)r   r+   r,   r-   r.   r/   r0   r1   r   r   r   r   test_timer_invalid_setupQ   s    z#TestTimeit.test_timer_invalid_setupz(import timeit
timeit._fake_timer.setup()z&import timeit
timeit._fake_timer.inc()c                 C   s   | j   d S r   )
fake_timerr   r   r   r   r   fake_callable_setup]   s    zTestTimeit.fake_callable_setupc                 C   s   | j   d S r   )r8   r   r   r   r   r   fake_callable_stmt`   s    zTestTimeit.fake_callable_stmtNc                 C   sv   t  | _tj||| j|d}i }|d u r.t}n||d< |jf i |}| | jjd | | jj| | || d S )N)r*   r   r   globalsnumberr   )r   r8   r   r4   DEFAULT_NUMBERr$   r	   r   )r   r*   r   r<   r;   tkwargs
delta_timer   r   r   r   c   s    zTestTimeit.timeitc                 C   s   | j | j| jdd d S Nr   r<   r   	fake_stmt
fake_setupr   r   r   r   test_timeit_zero_itersu   s    z!TestTimeit.test_timeit_zero_itersc                 C   s   | j | j| jdd d S N   rB   rC   r   r   r   r   test_timeit_few_itersx   s    z TestTimeit.test_timeit_few_itersc                 C   s   | j | j| jdd d S rG   )r   r:   rE   r   r   r   r   test_timeit_callable_stmt{   s    z$TestTimeit.test_timeit_callable_stmtc                 C   s   | j | j| jdd d S rG   )r   rD   r9   r   r   r   r   test_timeit_callable_setup~   s    z%TestTimeit.test_timeit_callable_setupc                 C   s   | j | j| jdd d S rG   )r   r:   r9   r   r   r   r   #test_timeit_callable_stmt_and_setup   s    z.TestTimeit.test_timeit_callable_stmt_and_setupc                 C   s(   t j | j| jdt d}| |d d S )Nr   r<   r   )r   rD   rE   r   r$   )r   r@   r   r   r   test_timeit_function_zero_iters   s    z*TestTimeit.test_timeit_function_zero_itersc                 C   sX   t  atjdtd}| jt|jdd tjdtt dd t  }tjd|t dd d S )Nz_global_timer.inc())r*   r   rH   rB   )r*   r   r;   r<   zlocal_timer.inc())r   Z_global_timerr   r4   r2   	NameErrorr;   locals)r   r>   Zlocal_timerr   r   r   test_timeit_globals_args   s    z#TestTimeit.test_timeit_globals_argsc                 C   s   t  | _tj||| jd}i }|d u r,t}n||d< |d u rBt}n||d< |jf i |}| | jj| | | jj	||  | ||t
|g  d S )Nr*   r   r   repeatr<   )r   r8   r   r4   DEFAULT_REPEATr=   rS   r$   r	   r   float)r   r*   r   rS   r<   r>   r?   delta_timesr   r   r   rS      s    zTestTimeit.repeatc                 C   s   | j | j| jdd d S )Nr   )rS   rS   rD   rE   r   r   r   r   test_repeat_zero_reps   s    z TestTimeit.test_repeat_zero_repsc                 C   s   | j | j| jdd d S rA   rW   r   r   r   r   test_repeat_zero_iters   s    z!TestTimeit.test_repeat_zero_itersc                 C   s   | j | j| jddd d S NrH   r   )rS   r<   rW   r   r   r   r   test_repeat_few_reps_and_iters   s    z)TestTimeit.test_repeat_few_reps_and_itersc                 C   s   | j | j| jddd d S rZ   )rS   r:   rE   r   r   r   r   test_repeat_callable_stmt   s    z$TestTimeit.test_repeat_callable_stmtc                 C   s   | j | j| jddd d S rZ   )rS   rD   r9   r   r   r   r   test_repeat_callable_setup   s    z%TestTimeit.test_repeat_callable_setupc                 C   s   | j | j| jddd d S rZ   )rS   r:   r9   r   r   r   r   #test_repeat_callable_stmt_and_setup   s    z.TestTimeit.test_repeat_callable_stmt_and_setupc                 C   s(   t j| j| jdt d}| |g  d S )Nr   )rS   r   )r   rS   rD   rE   r   r$   r   rV   r   r   r   test_repeat_function_zero_reps   s    z)TestTimeit.test_repeat_function_zero_repsc                 C   s.   t j| j| jdt d}| |tdg  d S )Nr   rM   g        )r   rS   rD   rE   r   r$   rT   r_   r   r   r   test_repeat_function_zero_iters   s    z*TestTimeit.test_repeat_function_zero_itersc                 C   sD   |  }| t|d | |d d | |d | d S )N   r   Z	Traceback)
splitlinesZassertGreaterlenZ
assertTrue
startswith)r   Z
exc_stringZexpected_exc_nameZ	exc_linesr   r   r   assert_exc_string   s    zTestTimeit.assert_exc_stringc                 C   sJ   t  }td}z|  W n   || Y n0 | | d d S )N1/0ZeroDivisionError)ioStringIOr   r4   	print_excrg   getvalue)r   sr>   r   r   r   test_print_exc   s    
zTestTimeit.test_print_excz"1 loop, best of 5: 1 sec per loop
r   c                 C   s   |d u rt |d}|d u r g }n|d d  }|| j tjd d  }t  }tj||jd W d    n1 sr0    Y  |d d  tjd d < |	 S )Nr
   )argsZ_wrap_timer)
r   appendrD   syspathr   r   mainr   rm   )r   r
   switchesr   rq   Zorig_sys_pathrn   r   r   r   run_main   s    
.zTestTimeit.run_mainc                 C   s"   | j dgd}| |td d S )Nz--bad-switchrv   zk            option --bad-switch not recognized
            use -h/--help for command line help
            rw   r$   r   r   rn   r   r   r   test_main_bad_switch   s    zTestTimeit.test_main_bad_switchc                 C   s   | j dd}| |d d S )Ng      @rp   z$1 loop, best of 5: 5.5 sec per loop
rw   r$   rz   r   r   r   test_main_seconds   s    zTestTimeit.test_main_secondsc                 C   s   | j dd}| |d d S )NgI+v?rp   z'50 loops, best of 5: 5.5 msec per loop
r|   rz   r   r   r   test_main_milliseconds   s    z!TestTimeit.test_main_millisecondsc                 C   s    | j ddgd}| |d d S )Ngh㈵>z-n100r
   rv   z(100 loops, best of 5: 2.5 usec per loop
r|   rz   r   r   r   test_main_microseconds  s    z!TestTimeit.test_main_microsecondsc                 C   s    | j ddgd}| |d d S )N       @-n35r   $35 loops, best of 5: 2 sec per loop
r|   rz   r   r   r   test_main_fixed_iters  s    z TestTimeit.test_main_fixed_itersc                 C   s*   | j dg dd}| |dt d  d S )Nr   )r   -szprint("CustomSetup")r   CustomSetup
r   rw   r$   rT   rz   r   r   r   test_main_setup  s    zTestTimeit.test_main_setupc                 C   s*   | j dg dd}| |dt d  d S )Nr   )r   r   za = "CustomSetup"r   zprint(a)r   r   r   r   rz   r   r   r   test_main_multiple_setups  s    z$TestTimeit.test_main_multiple_setupsc                 C   s    | j ddgd}| |d d S )N      N@z-r9r   z#1 loop, best of 9: 60 sec per loop
r|   rz   r   r   r   test_main_fixed_reps  s    zTestTimeit.test_main_fixed_repsc                 C   s    | j ddgd}| |d d S )Nr   z-r-5r   z#1 loop, best of 1: 60 sec per loop
r|   rz   r   r   r   test_main_negative_reps  s    z"TestTimeit.test_main_negative_repsrb   zneed __doc__c                 C   s$   | j dgd}| |tjd  d S )Nz-hrx    )rw   r$   r   __doc__rz   r   r   r   test_main_help   s    zTestTimeit.test_main_helpc                 C   s"   | j dgd}| |td d S )Nz-vrx   z                1 loop -> 1 secs

                raw times: 1 sec, 1 sec, 1 sec, 1 sec, 1 sec

                1 loop, best of 5: 1 sec per loop
            ry   rz   r   r   r   test_main_verbose'  s    zTestTimeit.test_main_verbosec                 C   s$   | j ddgd}| |td d S )NgiUMu>z-vvr   a                  1 loop -> 3e-05 secs
                2 loops -> 6e-05 secs
                5 loops -> 0.00015 secs
                10 loops -> 0.0003 secs
                20 loops -> 0.0006 secs
                50 loops -> 0.0015 secs
                100 loops -> 0.003 secs
                200 loops -> 0.006 secs
                500 loops -> 0.015 secs
                1000 loops -> 0.03 secs
                2000 loops -> 0.06 secs
                5000 loops -> 0.15 secs
                10000 loops -> 0.3 secs

                raw times: 300 msec, 300 msec, 300 msec, 300 msec, 300 msec

                10000 loops, best of 5: 30 usec per loop
            ry   rz   r   r   r   test_main_very_verbose1  s    z!TestTimeit.test_main_very_verbosec                 C   s   | j dddgd}| |d | j dddgd}| |d | j dddgd}| |d	 t "}| j ddd
gd}W d    n1 s0    Y  | | d d S )Ng~jth?z-uZsecr   z)100 loops, best of 5: 0.003 sec per loop
Zmsecz&100 loops, best of 5: 3 msec per loop
Zusecz*100 loops, best of 5: 3e+03 usec per loop
Zparsecz;Unrecognized unit. Please select nsec, usec, msec, or sec.
)rw   r$   r   rm   )r   Zunit_secZ	unit_msecZ	unit_usecerror_stringioinvalidr   r   r   test_main_with_time_unitG  s2    $
z#TestTimeit.test_main_with_time_unitc                 C   sH   t  }| jdgd}W d    n1 s*0    Y  | | d d S )Nrh   rx   ri   r   rw   rg   rm   r   r   rn   r   r   r   test_main_exception[  s    ,zTestTimeit.test_main_exceptionc                 C   sJ   t   }| jddgd}W d    n1 s,0    Y  | | d d S )Nz-n1rh   rx   ri   r   r   r   r   r   test_main_exception_fixed_reps`  s    .z)TestTimeit.test_main_exception_fixed_reps      P?c                 C   s(   t |d}tj| j| j|d}||S )Nrp   rR   )r   r   r4   rD   rE   	autorange)r   r
   callbackr   r>   r   r   r   r   e  s    
zTestTimeit.autorangec                 C   s(   |   \}}| |d | |d d S )N       @?r   r$   r   	num_loops
time_takenr   r   r   test_autorangej  s    zTestTimeit.test_autorangec                 C   s,   | j dd\}}| |d | |d d S )Nr   rp   r   r   r   r   r   r   test_autorange_secondo  s    z TestTimeit.test_autorange_secondc                 C   sn   dd }t   }| j|d\}}W d    n1 s40    Y  | |d | |d d}| | | d S )Nc                 S   s   t d| | d S )Nz	{} {:.3f})printformat)abr   r   r   r   u  s    z9TestTimeit.test_autorange_with_callback.<locals>.callback)r   r   r   zQ1 0.001
2 0.002
5 0.005
10 0.010
20 0.020
50 0.049
100 0.098
200 0.195
500 0.488
)r   r   r$   rm   )r   r   rn   r   r   Zexpectedr   r   r   test_autorange_with_callbackt  s    .	z'TestTimeit.test_autorange_with_callback)NN)NN)r   NN)r   N);r   r   r   r    r%   r'   r(   r)   r6   r7   rE   rD   r9   r:   r   rF   rI   rJ   rK   rL   rN   rQ   rS   rX   rY   r[   r\   r]   r^   r`   ra   rg   ro   ZMAIN_DEFAULT_OUTPUTrw   r{   r}   r~   r   r   r   r   r   r   unittestZskipIfrs   flagsoptimizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ,   sh   		



	



r   __main__)r   r   rs   rj   textwrapr   Ztest.supportr   r   r=   rT   r   ZTestCaser   r   ru   r   r   r   r   <module>   s     ]