
    dafo                         d Z ddlZddlZddlZddlmZmZ ddlmZ ddl	m
Z
  G d de      Z G d d	ej                        Zd
 Zi Zded<   ded<   ded<   edk(  r e        yy)z#Test suite for the cProfile module.    N)ProfileTestregenerate_expected_output)assert_python_failure)supportc                   P    e Zd Zej                  ZeZdZd Zd Z	d Z
d Zd Zd Zy)	CProfileTestz{built-in method builtins.max}c                     t         S N)_ProfileOutput)selfs    -/root/Python-3.12.4/Lib/test/test_cprofile.pyget_expected_outputz CProfileTest.get_expected_output   s        c                 6   dd l }t        j                         5 }|j                  d       }|j	                          |j                          |j                          | j                  |j                  j                  t               d d d        y # 1 sw Y   y xY w)Nr   c                      t         S r
   )int r   r   <lambda>z>CProfileTest.test_bad_counter_during_dealloc.<locals>.<lambda>   s    3 r   )_lsprofr   catch_unraisable_exceptionProfilerenabledisableclearassertEqual
unraisableexc_type	TypeError)r   r   cmobjs       r   test_bad_counter_during_deallocz,CProfileTest.test_bad_counter_during_dealloc   sq    //1 	@R"";/CJJLKKMIIKR]]33Y?	@ 	@ 	@s   A-BBc                    | j                         }| j                  |j                         |j                          | j	                  t
        j                  j                  t
        j                  j                        d       |j                          | j                  t
        j                  j                  t
        j                  j                        d        y NcProfile)
profilerclass
addCleanupr   r   r   sys
monitoringget_toolPROFILER_IDassertIs)r   profs     r   test_profile_enable_disablez(CProfileTest.test_profile_enable_disable!   s    !!#%NN##CNN$>$>?	M 	cnn--cnn.H.HI4Pr   c                    | j                         }| j                  |j                         |5 }| j                  ||       | j	                  t
        j                  j                  t
        j                  j                        d       d d d        | j                  t
        j                  j                  t
        j                  j                        d        y # 1 sw Y   QxY wr#   )	r%   r&   r   r+   r   r'   r(   r)   r*   )r   r,   "_CProfileTest__enter__return_values      r   test_profile_as_context_managerz,CProfileTest.test_profile_as_context_manager-   s    !!#% 	Q*MM$ 56 ''(B(BCZQ	Q 	cnn--cnn.H.HI4P	Q 	Qs   ACC!c                     | j                         }| j                         }|j                          | j                  t        |j                         |j	                          y r
   )r%   r   assertRaises
ValueErrorr   )r   prpr2s      r   test_second_profilerz!CProfileTest.test_second_profiler>   sD    !  "
		*cjj1


r   c                 R   | j                         }|j                          t        d dD               |j                          |j	                          |j
                  j                         D ]8  \  }\  }}}}}|d   dk(  s| j                  |d       | j                  |d       : y)ab  
        gh-106152
        generator.throw() should trigger a call in cProfile
        In the any() call below, there should be two entries for the generator:
            * one for the call to __next__ which gets a True and terminates any
            * one when the generator is garbage collected which will effectively
              do a throw.
        c              3   &   K   | ]	  }|d k(    yw)   Nr   ).0as     r   	<genexpr>z*CProfileTest.test_throw.<locals>.<genexpr>P   s     #qAF#s   )r9      r=   z	<genexpr>r9   N)r%   r   anyr   create_statsstatsitemsr   )r   r4   funcccnc_s         r   
test_throwzCProfileTest.test_throwE   s     !
		#F##



')xx~~'7 	(#D#2r1aAw+%  Q'  Q'	(r   N)__name__
__module____qualname__r$   Profiler%   profilermoduleexpected_max_outputr   r!   r-   r0   r6   rF   r   r   r   r   r      s9    $$MN:
@
QQ"(r   r   c                       e Zd Zd Zy)TestCommandLinec                 p    t        dddd      \  }}}| j                  |d       | j                  d|       y )Nz-mr$   z-sdemor   s!   option -s: invalid choice: 'demo')r   assertGreaterassertIn)r   rcouterrs       r   	test_sortzTestCommandLine.test_sort[   s7    ,T:tVLC2q!:C@r   N)rG   rH   rI   rV   r   r   r   rN   rN   Z   s    Ar   rN   c                  z    dt         j                  vrt        j                          y t	        t
        t               y )Nz-r)r'   argvunittestmainr   __file__r   r   r   r   rZ   rZ   a   s!    388"8\:r   a         28    0.028    0.001    0.028    0.001 profilee.py:110(__getattr__)
        1    0.270    0.270    1.000    1.000 profilee.py:25(testfunc)
     23/3    0.150    0.007    0.170    0.057 profilee.py:35(factorial)
       20    0.020    0.001    0.020    0.001 profilee.py:48(mul)
        2    0.040    0.020    0.600    0.300 profilee.py:55(helper)
        4    0.116    0.029    0.120    0.030 profilee.py:73(helper1)
        2    0.000    0.000    0.140    0.070 profilee.py:84(helper2_indirect)
        8    0.312    0.039    0.400    0.050 profilee.py:88(helper2)
        8    0.064    0.008    0.080    0.010 profilee.py:98(subhelper)print_statsa  profilee.py:110(__getattr__)                      <-      16    0.016    0.016  profilee.py:98(subhelper)
profilee.py:25(testfunc)                          <-       1    0.270    1.000  <string>:1(<module>)
profilee.py:35(factorial)                         <-       1    0.014    0.130  profilee.py:25(testfunc)
                                                        20/3    0.130    0.147  profilee.py:35(factorial)
                                                           2    0.006    0.040  profilee.py:84(helper2_indirect)
profilee.py:48(mul)                               <-      20    0.020    0.020  profilee.py:35(factorial)
profilee.py:55(helper)                            <-       2    0.040    0.600  profilee.py:25(testfunc)
profilee.py:73(helper1)                           <-       4    0.116    0.120  profilee.py:55(helper)
profilee.py:84(helper2_indirect)                  <-       2    0.000    0.140  profilee.py:55(helper)
profilee.py:88(helper2)                           <-       6    0.234    0.300  profilee.py:55(helper)
                                                           2    0.078    0.100  profilee.py:84(helper2_indirect)
profilee.py:98(subhelper)                         <-       8    0.064    0.080  profilee.py:88(helper2)
{built-in method builtins.hasattr}                <-       4    0.000    0.004  profilee.py:73(helper1)
                                                           8    0.000    0.008  profilee.py:88(helper2)
{built-in method sys.exception}                   <-       4    0.000    0.000  profilee.py:73(helper1)
{method 'append' of 'list' objects}               <-       4    0.000    0.000  profilee.py:73(helper1)print_callersa;  <string>:1(<module>)                              ->       1    0.270    1.000  profilee.py:25(testfunc)
profilee.py:110(__getattr__)                      ->
profilee.py:25(testfunc)                          ->       1    0.014    0.130  profilee.py:35(factorial)
                                                           2    0.040    0.600  profilee.py:55(helper)
profilee.py:35(factorial)                         ->    20/3    0.130    0.147  profilee.py:35(factorial)
                                                          20    0.020    0.020  profilee.py:48(mul)
profilee.py:48(mul)                               ->
profilee.py:55(helper)                            ->       4    0.116    0.120  profilee.py:73(helper1)
                                                           2    0.000    0.140  profilee.py:84(helper2_indirect)
                                                           6    0.234    0.300  profilee.py:88(helper2)
profilee.py:73(helper1)                           ->       4    0.000    0.004  {built-in method builtins.hasattr}
profilee.py:84(helper2_indirect)                  ->       2    0.006    0.040  profilee.py:35(factorial)
                                                           2    0.078    0.100  profilee.py:88(helper2)
profilee.py:88(helper2)                           ->       8    0.064    0.080  profilee.py:98(subhelper)
profilee.py:98(subhelper)                         ->      16    0.016    0.016  profilee.py:110(__getattr__)
{built-in method builtins.hasattr}                ->      12    0.012    0.012  profilee.py:110(__getattr__)print_callees__main__)__doc__r'   rY   r$   test.test_profiler   r   test.support.script_helperr   testr   r   TestCaserN   rZ   r   rG   r   r   r   <module>re      s    ) 
   E < J(; J(ZAh'' A; 	!K} #k "#p $ zF r   