a 5êdg5ã@sVddlZddlZddlZddlZddlZddlmZddlmZm Z m Z ddl m Z z ddl Z WneyvdZ Yn0e d¡ZdZdd„Zd d „Zd d „Zd d„Zdd„Zdd„Zdd„ZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZe e dud¡Gd d!„d!ejƒƒZ d"d#„Z!e"d$krRe!ƒdS)%éN)Úpatch)Úassert_python_okÚassert_python_failureÚ interpreter_requires_environment)Úsupportó)éÿÿÿÿi@cCsZg}t d¡}t|ƒD]:}|j}|j|}| |j|f¡d}|j}|durqRqt|ƒS)Nér) ÚsysÚ _getframeÚrangeÚf_codeÚf_linenoÚappendÚ co_filenameÚf_backÚtuple)ÚnframeZ lineno_deltaÚframesÚframeÚindexÚcodeÚlineno©rú1/usr/local/lib/python3.9/test/test_tracemalloc.pyÚ get_framess   rcCs<t ¡}|t}t|dƒ}d|}|t |tt|ƒ|ƒ¡fS)Nr óx)Ú tracemallocÚget_traceback_limitÚEMPTY_STRING_SIZErÚ TracebackÚminÚlen)ÚsizerZ bytes_lenrÚdatarrrÚallocate_bytes"s  r%cCs4d}gd¢}t ||¡}gd¢}t ||¡}||fS)Né)©ré )©úa.pyr&©úb.pyéér'r'©r r&©©r*ér+r.©r&éB)©r,r r ©r.é©©ú rr )r'r'r')r&r&r0r.)r&éˆr0r.)r-é)©úc.pyéBr )rÚSnapshot)Útraceback_limitÚ raw_tracesÚsnapshotZ raw_traces2Ú snapshot2rrrÚcreate_snapshots)s   rEcCst ||f¡S©N)rZ_Frame©ÚfilenamerrrrrJsrcGs t |¡SrF)rr )rrrrÚ tracebackMsrIcCs t||fƒSrF)rIrGrrrÚtraceback_linenoPsrJcCs t|dƒS©Nr)rJ)rHrrrÚtraceback_filenameSsrLc@seZdZdd„ZdS)Ú TestTracebackcCsntdœdd„}| |dƒd¡| |ddƒd¡d}d }| ||ƒd |›d ¡| ||d ƒd |›d ¡dS)N)ÚreturncWsttj|ŽƒSrF)Úreprrr )ÚargsrrrÚget_reprYsz)TestTraceback.test_repr..get_reprrzrz))Úf1r )Úf2r&z@(, )z r&z total_nframe=2>)ÚstrÚ assertEqual)ÚselfrQrZexp_repr_framesrrrÚ test_reprXsÿ  ÿ  ÿzTestTraceback.test_reprN)Ú__name__Ú __module__Ú __qualname__rXrrrrrMWsrMc@s¦eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Ze eed!ƒd"¡d#d$„ƒZd%S)&ÚTestTracemallocEnabledcCs t ¡r| d¡t d¡dS)Nú+tracemalloc must be stopped before the testr )rÚ is_tracingÚskipTestÚstart©rWrrrÚsetUpks zTestTracemallocEnabled.setUpcCs t ¡dSrF©rÚstoprarrrÚtearDownqszTestTracemallocEnabled.tearDowncCsRdd„tdƒDƒ}t ¡}| |d¡t ¡t ¡}| |d¡| ||¡dS)NcSsg|] }tdƒ‘qS)é{©r%)Ú.0ÚcountrrrÚ urzFTestTracemallocEnabled.test_get_tracemalloc_memory..ièr)r rZget_tracemalloc_memoryÚassertGreaterEqualÚ clear_tracesÚassertLessEqual)rWr$r#Úsize2rrrÚtest_get_tracemalloc_memoryts  z2TestTracemallocEnabled.test_get_tracemalloc_memorycCs2t ¡d}t|ƒ\}}t |¡}| ||¡dS©Né90)rrlr%Úget_object_tracebackrV©rWÚobj_sizeÚobjÚ obj_tracebackrIrrrÚtest_get_object_traceback~s   z0TestTracemallocEnabled.test_get_object_tracebackcCsht ¡t ¡g}d}g}t ¡}t|dƒ}t |tt|ƒ|ƒ¡}t  |¡}|  |¡|  ||¡dS)Néýÿÿÿ) rrlrÚ gc_collectrrr r!r"rrÚassertIsNotNonerV)rWrurrrvrIrrrÚtest_new_reference…s   z)TestTracemallocEnabled.test_new_referencecCs¨d}t ¡| ttjd¡t ¡t d¡t|ƒ\}}t |¡}| t|ƒd¡| ||¡t ¡t d¡t|ƒ\}}t |¡}| t|ƒd¡| ||¡dS)Nr(rr ) rrdÚ assertRaisesÚ ValueErrorr`r%rrrVr")rWrtÚobj2Úobj2_tracebackrIrurvrrrÚtest_set_traceback_limit™s       z/TestTracemallocEnabled.test_set_traceback_limitcCs.|D]}|d|jkr|Sq| d¡dS)Nr&ztrace not found)Ú_framesÚfail)rWÚtracesrIÚtracerrrÚ find_trace­s z!TestTracemallocEnabled.find_tracec Cszt ¡d}t|ƒ\}}t ¡}| ||¡}| |t¡|\}}}} | ||¡| ||j¡t  ¡| t ¡g¡dSrp) rrlr%Ú _get_tracesr…ZassertIsInstancerrVrrd) rWrtrurvrƒr„Údomainr#rIÚlengthrrrÚtest_get_traces´s     z&TestTracemallocEnabled.test_get_tracescs¶dd„‰‡fdd„‰‡fdd„}t ¡t d¡d}||ƒ\}}||ƒ\}}t ¡}tt|jƒƒ|_tt|jƒƒ|_| ||¡}| ||¡} |\} } } } | \}}}}| || ¡dS) NcSst|ƒSrFrg©r#rrrÚallocate_bytes2ÆszPTestTracemallocEnabled.test_get_traces_intern_traceback..allocate_bytes2csˆ|ƒSrFrrŠ)r‹rrÚallocate_bytes3ÈszPTestTracemallocEnabled.test_get_traces_intern_traceback..allocate_bytes3csˆ|ƒSrFrrŠ)rŒrrÚallocate_bytes4ÊszPTestTracemallocEnabled.test_get_traces_intern_traceback..allocate_bytes4r-rf) rrdr`r†rÚreversedrr…ZassertIs)rWrrtZobj1Zobj1_tracebackr~rrƒZtrace1Ztrace2Zdomain1Úsize1Z traceback1Zlength1Zdomain2rnÚ traceback2Zlength2r)r‹rŒrÚ test_get_traces_intern_tracebackÄs          z7TestTracemallocEnabled.test_get_traces_intern_tracebackc Csôd}d}t ¡t|ƒ\}}t ¡\}}| ||¡| ||¡| |||¡| |||¡d}t ¡\}}| ||¡| ||||¡| ||¡t ¡| t ¡d¡t|ƒ\}}t ¡\}}| ||¡t ¡| t ¡d¡dS)Néé)rr) rrlr%Úget_traced_memoryrkrmÚ assertLessrVrd) rWZ max_errorrtrurvr#Z peak_sizernZ peak_size2rrrÚtest_get_traced_memoryßs*          z-TestTracemallocEnabled.test_get_traced_memorycCs@tdƒ\}}t |¡}| |¡t ¡t |¡}| |¡dS)Nrf)r%rrrrzrlÚ assertIsNone)rWrurvrIrrrrÚtest_clear_tracess     z(TestTracemallocEnabled.test_clear_tracesc Cs˜t ¡tttdƒƒƒ}t ¡\}}t ¡t ¡\}}| ||¡| ||¡d}t |ƒ\}}t ¡\} } | | | ¡|  | |¡| | ||¡dS)Ni †r“) rrlÚsumÚlistr r”Z reset_peakrkr•r%Ú assertGreater) rWZ large_sumrZpeak1rnZpeak2rtrurvZsize3Zpeak3rrrÚtest_reset_peak s        z&TestTracemallocEnabled.test_reset_peakcCs0t ¡| t ¡¡t ¡| t ¡¡dSrF)rrdÚ assertFalser^r`Ú assertTruerarrrÚtest_is_tracing$sz&TestTracemallocEnabled.test_is_tracingcCs´tdƒ\}}t ¡}| |jdjjd¡| tj ¡|  tj tj ¡tj   tj ¡}| |j|j¡t ¡| t¡}t ¡Wdƒn1s”0Y| t|jƒd¡dS)Nrfr r(zLthe tracemalloc module must be tracing memory allocations to take a snapshot)r%rÚ take_snapshotr›rƒrIÚ total_nframeÚdumprÚTESTFNÚ addCleanupÚunlinkr@ÚloadrVrdr|Ú RuntimeErrorrUÚ exception)rWruÚsourcerCrDÚcmrrrÚ test_snapshot+s   & ÿz$TestTracemallocEnabled.test_snapshotcCsJt ¡}d|_| tj¡| tjtj¡tj  tj¡}|  |jd¡dS)NÚnew) rr Z test_attrr¢rr£r¤r¥r@r¦rV)rWrCrDrrrÚtest_snapshot_save_attrDs  z.TestTracemallocEnabled.test_snapshot_save_attrcCs6t ¡s dSd}t|ƒ\}}t |¡}|dur2dSdS)Nr&rqr.r)rr^r%rrrsrrrÚ fork_childOs  z!TestTracemallocEnabled.fork_childÚforkzneed os.fork()c CsHt ¡}|s6d}z| ¡}Wt |¡qDt |¡0ntj|dddS)Nr r)Úexitcode)Úosr¯r®Ú_exitrZ wait_process)rWÚpidr°rrrÚ test_fork\s z TestTracemallocEnabled.test_forkN)rYrZr[rbrerorwr{r€r…r‰r‘r–r˜rœrŸr«r­r®ÚunittestZ skipUnlessÚhasattrr±r´rrrrr\js$ $   r\c@sxeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„ZdS)Ú TestSnapshoti cCsþdg}t ¡Ü}| tjtddd¡| tjtddd¡| tjtd|d¡t ¡}| |jd¡| t |j ƒd¡|j d }| |j d¡| |j j d ¡| t |j ƒd¡| |j d jd ¡| |j d jd ¡Wdƒn1sð0YdS) N)rr2)r)r(r^T)Z return_valuerr2r†r rr(r*r&)Ú contextlibÚ ExitStackÚ enter_contextrÚobjectrr rVrAr"rƒr#rIr¡rHr)rWrBÚstackrCr„rrrÚtest_create_snapshotns(  ÿ ÿ ÿ z!TestSnapshot.test_create_snapshotc CsÚtƒ\}}t dd¡}t ddd¡}t ddd¡}t|jjƒ}| |f¡}| |jjgd¢¡| |jj|¡| ||f¡}| |jjgd¢¡| d ¡} | | |¡| | j|j¡| | j|j¡|  t |j|¡dS) NFr,Tr*r&r2)r'r'r'r/r6)r'r'r'r/r) rErÚFilterršrƒÚ_tracesÚ filter_tracesrVZ assertIsNotr|Ú TypeError) rWrCrDÚfilter1Úfilter2Zfilter3Úoriginal_tracesÚ snapshot3Z snapshot4Z snapshot5rrrÚtest_filter_tracesƒs       zTestSnapshot.test_filter_tracescCsztƒ\}}tjdddd}tjdddd}t|jjƒ}| |f¡}| |jjgd¢¡| |f¡}| |jjgd¢¡dS)NFr*r ©r‡T)r'r'r'r3r6)rErr¾ršrƒr¿rÀrV)rWrCrDrÂrÃrÄrÅrrrÚtest_filter_traces_domain©s    z&TestSnapshot.test_filter_traces_domaincCshtƒ\}}tjddd}tjddd}| |f¡}| |jjgd¢¡| |f¡}| |jjdg¡dS)NFr.rÇT)r'r'r'r/r3r6)rErÚ DomainFilterrÀrVrƒr¿)rWrCrDrÂrÃrÅrrrÚ test_filter_traces_domain_filterÄs    ÿz-TestSnapshot.test_filter_traces_domain_filterc Cs(tƒ\}}tddƒ}tddƒ}tddƒ}tddƒ}tdd ƒ}| d ¡}| |t |d d¡t |d d ¡t |dd¡t |dd¡g¡| d ¡} | | t |dd¡t |dd¡t |d d ¡g¡| |d ¡} | | t |dddd¡t |dddd¡t |dddd¡t |dddd¡t |d dd d¡g¡dS)Nr:rr*r&r2r,r r>r?rr4ér.r7éŠr<r;é¾ÿÿÿréùÿÿÿ)rErJÚ statisticsrVrÚ StatisticÚ compare_toÚ StatisticDiff) rWrCrDÚtb_0Útb_a_2Útb_a_5Útb_b_1Ztb_c_578Ústats1Ústats2rÏrrrÚtest_snapshot_group_by_lineÙs6           ü    ý ûz(TestSnapshot.test_snapshot_group_by_linec Csîtƒ\}}tdƒ}tdƒ}tdƒ}tdƒ}| d¡}| |t |dd¡t |dd ¡t |d d¡g¡| d¡}| |t |d d ¡t |d d¡g¡| |d¡} | | t |d dd d¡t |d d dd¡t |dddd¡t |dddd¡g¡dS)Nr:r*r,r>rHr4r é r-r7i¨r2r<r;rrÍrrÎ)rErLrÏrVrrÐrÑrÒ) rWrCrDrÓÚtb_aÚtb_bZtb_cr×rØÚdiffrrrÚtest_snapshot_group_by_fileüs.     ý   þ üz(TestSnapshot.test_snapshot_group_by_filec Cs6tƒ\}}tddƒ}tddƒ}tdƒ}tdƒ}| d¡}| |t |dd¡t |d d ¡t |d d¡t |d d¡g¡td ƒ}| d¡} | | t |dd ¡t |dd¡t |d d ¡g¡| |d¡} | | t |ddd d¡t |dddd¡t |dddd¡t |dddd¡t |d dd d¡g¡|jt |jddddS)Nr)r+r1r5r9rIr4r rËr.r7r&r=rÌr<r;rrÍrrÎT)Z cumulative) rErIrÏrVrrÐrÑrÒr|r}) rWrCrDZtb1Ztb2Ztb3Ztb4r×Ztb5rØrÝrrrÚ test_snapshot_group_by_tracebacks<        ü    ý ûÿz-TestSnapshot.test_snapshot_group_by_tracebackc CsÞtƒ\}}tdƒ}tdƒ}tdƒ}tddƒ}tddƒ}tddƒ}tddƒ} | dd ¡} | | t |d d¡t |d d¡t |d d¡g¡| d d ¡} | | t |dd¡t | d d¡t |dd¡t |d d¡t |dd¡g¡dS)Nr:r*r,r&r2r r-rHTébrÚr7rr4rËr.)rErLrJrÏrVrrÐ) rWrCrDrÓrÛrÜrÔrÕrÖZtb_b_4ÚstatsrrrÚ!test_snapshot_group_by_cumulativeAs,         ý      ûz.TestSnapshot.test_snapshot_group_by_cumulativecCsVtƒ\}}|jd}| t|ƒd¡|j}| t|ƒd¡|d}| t|ƒd¡dS)Nrz b.py:4: 10 Bzb.py:4)rErƒrVrUrI)rWrCrDr„rIrrrrÚtest_trace_format]s  zTestSnapshot.test_trace_formatcCs0tƒ\}}| d¡}|d}| t|ƒd¡dS)Nrrz(b.py:1: size=66 B, count=1, average=66 B)rErÏrVrU©rWrCrDráÚstatrrrÚtest_statistic_formatfs    ÿz"TestSnapshot.test_statistic_formatcCs2tƒ\}}| |d¡}|d}| t|ƒd¡dS)Nrrz;a.py:5: size=5002 B (+5000 B), count=2 (+1), average=2501 B)rErÑrVrUrärrrÚtest_statistic_diff_formatms    ÿz'TestSnapshot.test_statistic_diff_formatcCs`tƒ\}}| |jdd…|jd|jdf¡|jdj}| |dd…|d|df¡dS)Nr&rr )rErVrƒrI)rWrCrDrIrrrÚ test_slicests ÿ ÿzTestSnapshot.test_slicescCsâtƒ\}}dd„}tjjd|d¬|jdj}| | ¡gd¢¡| |jddd d g¡| |jd dd d g¡| |jddgd¢¡| |jdddd d g¡| |jd ddd d g¡Wdƒn1sÔ0YdS)NcSs d||fS)Nz <%s, %s>rrGrrrÚgetlinesz3TestSnapshot.test_format_traceback..getlineztracemalloc.linecache.getline)Z side_effectr)ú File "b.py", line 4ú ú File "a.py", line 2ú r )ÚlimitrìrírrêrëT)Úmost_recent_first)rìrírêrë)rîrï)rErµZmockrrƒrIrVÚformat)rWrCrDréÚtbrrrÚtest_format_traceback}s@ ÿ  ÿÿÿÿÿÿÿÿÿÿz"TestSnapshot.test_format_tracebackN)rYrZr[ÚmaxDiffr½rÆrÈrÊrÙrÞrßrârãrærçrèròrrrrr·ks&#&  r·c@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) Ú TestFiltersr’cCsêt dd¡}| |jd¡| |jd¡| |j¡| |jd¡t dddd¡}| |jd¡| |jd¡| |jd¡| |jd¡tjddddd}| |jd¡| |jd¡| |jd¡| |jd¡| t t |dd¡dS)NTÚabcFztest.pyrf)Ú inclusiveÚfilename_patternrÚ all_framesr÷) rr¾rVrör÷r—rrør|ÚAttributeErrorÚsetattr©rWÚfrrrÚtest_filter_attributes¤s   z"TestFilters.test_filter_attributescCsÜt dd¡}| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡t dd¡}| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡t ddd¡}| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡t ddd¡}| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡t ddd¡}| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡t ddd¡}| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡| | dd¡¡dS)NTrõrr2r(Ú12356F)rr¾ržÚ _match_framerrûrrrÚtest_filter_match½sT  zTestFilters.test_filter_matchcCsxdd„}| |dddƒ¡| |dddƒ¡| |dddƒ¡| |dddƒ¡| |dddƒ¡| |dddƒ¡dS)NcSst ||¡}| |d¡SrK©rr¾rÿ)rörHÚpatternrürrrÚfnmatchòs z7TestFilters.test_filter_match_filename..fnmatchTrõrþr:F)ržr©rWrrrrÚtest_filter_match_filenameñsz&TestFilters.test_filter_match_filenamecCsˆdd„}| |ddƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡| |dd ƒ¡| |dd ƒ¡| |dd ƒ¡| |dd ƒ¡| |d dƒ¡| |dd ƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡tjdkr¦| |ddƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡n@| |ddƒ¡| |ddƒ¡| |ddƒ¡| |ddƒ¡tjdkr4| |d d!ƒ¡| |d!d ƒ¡| |d"d#ƒ¡| |d$d%ƒ¡n@| |d d!ƒ¡| |d!d ƒ¡| |d"d#ƒ¡| |d$d%ƒ¡| |d&dƒ¡dS)'NcSst d|¡}| |d¡S)NTrr)rHrÚfilterrrrrÿs z=TestFilters.test_filter_match_filename_joker..fnmatchrõÚÚ*ZabcdÚdefza*zabc*zb*zabcd*za*cZabcdcxza*cxZabbZabcdceZabcdeza*c*eZ abcbdefegza*bd*egZabcddZ abcbdefefza.pycr*ÚntZaBCZABcZaBcDezAb*dEza.PYza.PYCza/bza\bza/b\cza\b/cza/b/cza\b\cza.pyo)rržr±ÚnamerrrrÚ test_filter_match_filename_jokerþsR  z,TestFilters.test_filter_match_filename_jokercCsDd}d}d}d}tjdddd}| | |¡¡| | |¡¡| | |¡¡| | |¡¡tjdddd}| | |¡¡| | |¡¡| | |¡¡| | |¡¡tjdddd}| | |¡¡| | |¡¡| | |¡¡| | |¡¡tjdddd}| | |¡¡| | |¡¡| | |¡¡| | |¡¡tjdd dd}| | |¡¡| | |¡¡| | |¡¡| | |¡¡tjdd dd}| | |¡¡| | |¡¡| | |¡¡| | |¡¡tjdd dd}| | |¡¡| | |¡¡| | |¡¡| | |¡¡dS) N)r))r,r.)r+)r,r2))r>r2r9r8Tr,)røFr:)rr¾ržZ_match_tracebackr)rWÚt1Út2Zt3ÚunknownrürrrÚtest_filter_match_traceCsNz#TestFilters.test_filter_match_traceN) rYrZr[rórýrrr rrrrrrô¡s 4 Erôc@s‚eZdZdd„Ze eƒd¡dd„ƒZdd„Zdd „Z d d „Z d d „Z dd„Z dd„Z dd„Zdd„Ze edud¡dd„ƒZdS)ÚTestCommandLinecCs,d}td|ƒ\}}}| ¡}| |d¡dS)Nú3import tracemalloc; print(tracemalloc.is_tracing())ú-cóFalse©rÚrstriprV©rWrÚokÚstdoutÚstderrrrrÚ test_env_var_disabled_by_defaultusz0TestCommandLine.test_env_var_disabled_by_defaultz6Cannot run -E tests when PYTHON env vars are required.cCs2d}tdd|dd\}}}| ¡}| |d¡dS)Nrz-ErÚ1©ZPYTHONTRACEMALLOCrrrrrrÚtest_env_var_ignored_with_E|sz+TestCommandLine.test_env_var_ignored_with_EcCs0d}td|dd\}}}| ¡}| |d¡dS)NrrÚ0rrrrrrrÚtest_env_var_disabled…sz%TestCommandLine.test_env_var_disabledcCs0d}td|dd\}}}| ¡}| |d¡dS)NrrrrsTruerrrrrÚtest_env_var_enabled_at_startupŒsz/TestCommandLine.test_env_var_enabled_at_startupcCs0d}td|dd\}}}| ¡}| |d¡dS)Nút ¡r| d¡d|_d|_t|jƒd|_t|jƒ|_dS)Nr]r2rfr) rr^r_r‡r#r%ruÚidÚptrrarrrrbÔs  zTestCAPI.setUpcCs t ¡dSrFrcrarrrreàszTestCAPI.tearDowncCs*t |j|j¡}|dur"t |¡SdSdSrF)r:Ztracemalloc_get_tracebackr‡r=rr )rWrrrrÚ get_tracebackãs zTestCAPI.get_tracebackFr cCs$t|dƒ}t |j|j|j|¡|S)Nr )rr:Ztracemalloc_trackr‡r=r#)rWÚ release_gilrrrrrÚtrackês  ÿzTestCAPI.trackcCst |j|j¡dSrF)r:Ztracemalloc_untrackr‡r=rarrrÚuntrackðszTestCAPI.untrackcCs6t ¡}t d|j¡}| |g¡}tdd„|jDƒƒS)NTcss|] }|jVqdSrFrŠ)rhr„rrrÚ ørz-TestCAPI.get_traced_memory..)rr rÉr‡rÀr™rƒ)rWrCZ domain_filterrrrr”ós zTestCAPI.get_traced_memorycCsRd}t |¡t ¡d}| ||¡}| | ¡t |¡¡| | ¡|j¡dS)Nr2r)rr`r”r@rVr>r r#)rWr?rr#rrrrÚ check_trackús    ÿzTestCAPI.check_trackcCs| d¡dS)NF©rCrarrrÚ test_trackszTestCAPI.test_trackcCs| d¡dS)NTrDrarrrÚtest_track_without_gil szTestCAPI.test_track_without_gilcCs<d}t |¡| ¡|j|d}| | ¡t |¡¡dS)Nr2r*)rr`r@rVr>r )rWrrrrrÚtest_track_already_trackeds   ÿz#TestCAPI.test_track_already_trackedcCsjt ¡| ¡| | ¡¡| | ¡|j¡| ¡|  | ¡¡| | ¡d¡| ¡| ¡dSrK) rr`r@rzr>rVr”r#rAr—rarrrÚ test_untrackszTestCAPI.test_untrackcCsTt ¡t ¡| t¡| ¡Wdƒn1s80Y| | ¡¡dSrF)rr`rdr|r§r@r—r>rarrrÚtest_stop_track+s  &zTestCAPI.test_stop_trackcCsNt ¡| ¡t ¡| t¡| ¡Wdƒn1s@0YdSrF)rr`r@rdr|r§rArarrrÚtest_stop_untrack3s  zTestCAPI.test_stop_untrackN)Fr )rYrZr[rórbrer>r@rAr”rCrErFrGrHrIrJrrrrr;Ðs    r;cCst tttttt¡dSrF)rZ run_unittestrMr\r·rôrr;rrrrÚ test_main<súrKÚ__main__)#r¸r±r rrµZ unittest.mockrZtest.support.script_helperrrrÚtestrr:Ú ImportErrorÚ getsizeofrr+rr%rErrIrJrLZTestCaserMr\r·rôrr9r;rKrYrrrrÚsF       !8T\k