
    /hh                        S SK r S SKr S SKJr  S SKJrJrJrJrJ	r	J
r
Jr  S SKJr  S SKJrJrJr  S SKJrJr  S SKJrJr  S SKrS SKrS SKrS SKrS SKrS SKrS SKr S SKrS SKJr  S S	KJ r    " S S\"5      r# " S S\"5      r$\ " S S\"5      5       r%\RL                  " 5       RO                  SS5      (       a  S\RL                  " 5       S   ;   r(O\)" \S5      (       + r( " S S\ RT                  5      r+ " S S\ RT                  5      r, " S S\ RT                  5      r- " S S\ RT                  5      r.S r/S r0\1S:X  a  \ Rd                  " 5         gg! \! a
    SrS
 rSr  Nf = f)     N)support)verboserefcount_testcpython_onlyrequires_subprocessrequires_gil_enabledsuppress_immortalizationPy_GIL_DISABLED)import_module)temp_dirTESTFNunlink)assert_python_okmake_script)threading_helpergc_threshold)with_tp_del)ContainerNoGCc                 $     " S S[         5      nU$ )Nc                       \ rS rSrS rSrg)with_tp_del.<locals>.C   c                 .    [         R                  " S5      e)Nzrequires _testcapi.with_tp_del)unittestSkipTest)clsargskwargss      5/opt/python-3.13.8/usr/lib/python3.13/test/test_gc.py__new__with_tp_del.<locals>.C.__new__   s    ''(HII     N)__name__
__module____qualname____firstlineno__r    __static_attributes__r#   r"   r   Cr      s    Jr"   r)   )object)r   r)   s     r   r   r      s    	J 	J r"   c                       \ rS rSrS rSrg)C1055820*   c                     Xl         X l        g Niloop)selfr1   s     r   __init__C1055820.__init__+   s    	r"   r0   Nr$   r%   r&   r'   r4   r(   r#   r"   r   r,   r,   *   s    r"   r,   c                       \ rS rSrS rSrg)GC_Detector/   c                 j   ^  ST l         U 4S jn[        R                  " [        S5      U5      T l        g )NFc                    > STl         g NT)gc_happened)ignoredr3   s    r   it_happened)GC_Detector.__init__.<locals>.it_happened6   s    #Dr"     )r=   weakrefrefr,   wr)r3   r?   s   ` r   r4   GC_Detector.__init__3   s(     	$
 ++hsm[9r"   )r=   rD   Nr6   r#   r"   r   r8   r8   /   s    :r"   r8   c                   $    \ rS rSrSS jrS rSrg)Uncollectable=   Nc                 4    Uc  [        U S9U l        g Xl        g )Npartner)rG   rK   )r3   rK   s     r   r4   Uncollectable.__init__E   s    ?(6DL"Lr"   c                     g r/   r#   r3   s    r   
__tp_del__Uncollectable.__tp_del__J   s    r"   rJ   r/   )r$   r%   r&   r'   r4   rO   r(   r#   r"   r   rG   rG   =   s    #
r"   rG   	PY_CFLAGS z-DNDEBUGgettotalrefcountc                      \ rS rSrS rS rS r\" 5       S 5       r\" 5       S 5       r	S r
\" 5       S 5       rS	 r\S
 5       r\S 5       r\" 5       S 5       rS r\S 5       rS rS rS r\\" S5      S 5       5       r\S 5       rS r\R8                  " 5       S 5       rS rS rS r \" 5       S 5       r!S r"S r#S r$\\%" 5       \&RN                  " \(SL S5      S  5       5       5       r)S! r*S" r+S# r,S$ r-S% r.S& r/\" S'5      S( 5       r0S) r1S* r2S+ r3S, r4\&RN                  " \5SL S-5      S. 5       r6\S/ 5       r7\S0 5       r8S1 r9S2 r:S3r;g)4GCTestsX   c                     / nUR                  U5        [        R                  " 5         AU R                  [        R                  " 5       S5        g N   appendgccollectassertEqualr3   ls     r   	test_listGCTests.test_listY   s4    	


q)r"   c                     0 nXS'   [         R                  " 5         AU R                  [         R                  " 5       S5        g rX   r\   r]   r^   r3   ds     r   	test_dictGCTests.test_dict`   s0    !


q)r"   c                     / nU4nUR                  U5        [        R                  " 5         AAU R                  [        R                  " 5       S5        g )N   rZ   )r3   r`   ts      r   
test_tupleGCTests.test_tupleg   s>    D	


q)r"   c                      " S S5      nXl         [        R                  " 5         AU R                  [        R                  " 5       S5        g )Nc                       \ rS rSrSrg)GCTests.test_class.<locals>.As   r#   Nr$   r%   r&   r'   r(   r#   r"   r   Arp   s       r"   rs   r   ar\   r]   assertNotEqualr3   rs   s     r   
test_classGCTests.test_classq   s3    	 	


BJJL!,r"   c                      " S S[         5      n[        R                  " 5         AU R                  [        R                  " 5       S5        g )Nc                       \ rS rSrSrg)%GCTests.test_newstyleclass.<locals>.A|   r#   Nrr   r#   r"   r   rs   r}   |   rt   r"   rs   r   )r*   r\   r]   rw   rx   s     r   test_newstyleclassGCTests.test_newstyleclassz   s0    	 	


BJJL!,r"   c                      " S S5      nU" 5       nX"l         [        R                  " 5         AU R                  [        R                  " 5       S5        g )Nc                       \ rS rSrSrg) GCTests.test_instance.<locals>.A   r#   Nrr   r#   r"   r   rs   r      rt   r"   rs   r   ru   r3   rs   rv   s      r   test_instanceGCTests.test_instance   s:    	 	C


BJJL!,r"   c                 r    " S S[         5      nU" 5       nX"l        [        R                  " 5         AU R	                  [        R                  " 5       S5         " S S[
        5      n " S SX15      nU" 5       nX"l        [        R                  " 5         AU R	                  [        R                  " 5       S5        AAU R	                  [        R                  " 5       S5        U" 5       Ul        AU R	                  [        R                  " 5       S5        U R                  [        R                  " 5       S5        g )Nc                       \ rS rSrSrg)#GCTests.test_newinstance.<locals>.A   r#   Nrr   r#   r"   r   rs   r      rt   r"   rs   r   c                       \ rS rSrSrg)#GCTests.test_newinstance.<locals>.B   r#   Nrr   r#   r"   r   Br      rt   r"   r   c                       \ rS rSrSrg)#GCTests.test_newinstance.<locals>.C   r#   Nrr   r#   r"   r   r)   r      rt   r"   r)   )r*   rv   r\   r]   rw   listr^   )r3   rs   rv   r   r)   s        r   test_newinstanceGCTests.test_newinstance   s    	 	C


BJJL!,	 		 	C


BJJL!,qBJJL!,cBJJL!,q)r"   c                      " S S5      nU" 5       n[         R                  " 5         AU R                  [         R                  " 5       S5        g )Nc                       \ rS rSrS rSrg)GCTests.test_method.<locals>.A   c                 &    U R                   U l        g r/   )r4   initrN   s    r   r4   'GCTests.test_method.<locals>.A.__init__   s     MM	r"   )r   Nr6   r#   r"   r   rs   r      s    *r"   rs   r   )r\   r]   rw   r   s      r   test_methodGCTests.test_method   s7    	* 	* C


BJJL!,r"   c                    [          " S S5      5       n " S S5      nU" 5       nX3l        [        U5      nU" 5       nXUl        [        R
                  " 5         AAU R                  [        R
                  " 5       S5        [        R                   H  n[        U5      U:X  d  M  U?  O   U R                  S5        [        R                  R                  W5        g )Nc                       \ rS rSrS rSrg)(GCTests.test_legacy_finalizer.<locals>.A   c                     g r/   r#   rN   s    r   rO   3GCTests.test_legacy_finalizer.<locals>.A.__tp_del__       $r"   r#   Nr$   r%   r&   r'   rO   r(   r#   r"   r   rs   r          &r"   rs   c                       \ rS rSrSrg)(GCTests.test_legacy_finalizer.<locals>.B   r#   Nrr   r#   r"   r   r   r      rt   r"   r   r   &didn't find obj in garbage (finalizer))
r   rv   idbr\   r]   rw   garbagefailremover3   rs   r   rv   id_ar   objs          r   test_legacy_finalizerGCTests.test_legacy_finalizer   s     
	' 	' 
	'	 	C!uC


BJJL!,::C#w$E 
 II>?


#r"   c                    [          " S S[        5      5       n " S S[        5      nU" 5       nX3l        [        U5      nU" 5       nXUl        [
        R                  " 5         AAU R                  [
        R                  " 5       S5        [
        R                   H  n[        U5      U:X  d  M  U?  O   U R                  S5        [
        R                  R                  W5        g )Nc                       \ rS rSrS rSrg)1GCTests.test_legacy_finalizer_newclass.<locals>.A   c                     g r/   r#   rN   s    r   rO   <GCTests.test_legacy_finalizer_newclass.<locals>.A.__tp_del__   r   r"   r#   Nr   r#   r"   r   rs   r      r   r"   rs   c                       \ rS rSrSrg)1GCTests.test_legacy_finalizer_newclass.<locals>.B   r#   Nrr   r#   r"   r   r   r      rt   r"   r   r   r   )r   r*   rv   r   r   r\   r]   rw   r   r   r   r   s          r   test_legacy_finalizer_newclass&GCTests.test_legacy_finalizer_newclass   s     
	' 	' 
	'	 	C!uC


BJJL!,::C#w$E 
 II>?


#r"   c                     0 n[        SU5        [        R                  " 5         AU R                  [        R                  " 5       S5        g )Nzdef f(): pass
)rj      )execr\   r]   assertInre   s     r   test_functionGCTests.test_function   s6     "


 	bjjlF+r"   c                     Sn[        SU5      u  p#nU R                  US5        U R                  US5        U R                  U5        g )Na  if 1:

        import gc
        import weakref

        class LateFin:
            __slots__ = ('ref',)

            def __del__(self):

                # 8. Now `latefin`'s finalizer is called. Here we
                #    obtain a reference to `func`, which is currently
                #    undergoing `tp_clear`.
                global func
                func = self.ref()

        class Cyclic(tuple):
            __slots__ = ()

            # 4. The finalizers of all garbage objects are called. In
            #    this case this is only us as `func` doesn't have a
            #    finalizer.
            def __del__(self):

                # 5. Create a weakref to `func` now. If we had created
                #    it earlier, it would have been cleared by the
                #    garbage collector before calling the finalizers.
                self[1].ref = weakref.ref(self[0])

                # 6. Drop the global reference to `latefin`. The only
                #    remaining reference is the one we have.
                global latefin
                del latefin

            # 7. Now `func` is `tp_clear`-ed. This drops the last
            #    reference to `Cyclic`, which gets `tp_dealloc`-ed.
            #    This drops the last reference to `latefin`.

        latefin = LateFin()
        def func():
            pass
        cyc = tuple.__new__(Cyclic, (func, latefin))

        # 1. Create a reference cycle of `cyc` and `func`.
        func.__module__ = cyc

        # 2. Make the cycle unreachable, but keep the global reference
        #    to `latefin` so that it isn't detected as garbage. This
        #    way its finalizer will not be called immediately.
        del func, cyc

        # 3. Invoke garbage collection,
        #    which will find `cyc` and `func` as garbage.
        gc.collect()

        # 9. Previously, this would crash because `func_qualname`
        #    had been NULL-ed out by func_clear().
        print(f"{func=}")
        -cr   s!   \A\s*func=<function  at \S+>\s*\Z)r   r^   assertRegexassertFalse)r3   codercstdoutstderrs        r   .test_function_tp_clear_leaves_consistent_state6GCTests.test_function_tp_clear_leaves_consistent_state   sL    :x .dD9FQ!JK r"   c                     S n[         R                  " 5         U" 5         U R                  [         R                  " 5       S5        g )Nc                  .    [         R                  " 5       n g r/   )sys	_getframe)frames    r   fGCTests.test_frame.<locals>.f3  s    MMOEr"   rY   rd   )r3   r   s     r   
test_frameGCTests.test_frame1  s+    	$


	q)r"   c                 >   [         R                  " 5         U R                  [         R                  / 5        / nUR	                  U5        [        U5      n[         R                  " 5       n[         R                  " U[         R                  -  5        A[         R                  " 5         [         R                  " U5        U R                  [        [         R                  5      S5        [         R                  R                  5       nU R                  [        U5      U5        g rX   )r\   r]   r^   r   r[   r   	get_debug	set_debugDEBUG_SAVEALLlenpop)r3   Lid_Ldebugr   s        r   test_saveallGCTests.test_saveall9  s     	

R(	!u
UR---.



URZZ!,jjnnC$'r"   c                     [         R                  " 5       n[         R                  " 5         [         R                  " S5         " S S5      nU" 5       nA[         R                  " 5         [         R                  " U6   g )NrY   c                       \ rS rSrS rSrg)GCTests.test_del.<locals>.AiW  c                     [        U 5        g r/   dirrN   s    r   __del__#GCTests.test_del.<locals>.A.__del__X  	    D	r"   r#   Nr$   r%   r&   r'   r   r(   r#   r"   r   rs   r   W      r"   rs   )r\   get_thresholdenableset_thresholddisabler3   
thresholdsrs   rv   s       r   test_delGCTests.test_delQ  sT    %%'

		
	 	 C



*%r"   c                    [         R                  " 5       n[         R                  " 5         [         R                  " S5         " S S[        5      nU" 5       nA[         R
                  " 5         [         R                  " U6   g )NrY   c                       \ rS rSrS rSrg)$GCTests.test_del_newclass.<locals>.Aif  c                     [        U 5        g r/   r   rN   s    r   r   ,GCTests.test_del_newclass.<locals>.A.__del__g  r   r"   r#   Nr   r#   r"   r   rs   r   f  r   r"   rs   )r\   r   r   r   r*   r   r   s       r   test_del_newclassGCTests.test_del_newclass`  sV    %%'

		
	 	 C



*%r"   zneeds precise allocation countsc                 $   [         R                  " 5         [         R                  " 5       u  pn/ n[         R                  " 5       u  pVnU R                  X#4S5        U R                  Xg4S5        U R	                  US5        U R                  XQ5        g )Nr   r      )r\   r]   	get_countr^   
assertLessassertGreater)r3   rv   r   cxrf   er   s           r   test_get_countGCTests.test_get_countu  sr     	

,,.a,,.a!(!(1 	1 r"   c                    [         R                  " 5         / n[         R                  " S5        [         R                  " 5       u  p#n[         R                  " S5        [         R                  " 5       u  pVn[         R                  " S5        [         R                  " 5       u  pn
U R                  X44S5        U R                  Xg4S5        U R                  X4S5        g )Nr   rY   rj   )rY   r   )r   rY   r   )r\   r]   r  r^   )r3   r  rv   r   r  rf   r  r   ghr1   s              r   test_collect_generations GCTests.test_collect_generations  s    


 


1,,.a


1,,.a


1,,.a 	!(!(!(r"   c                 L  ^  " U4S jS5      m[         R                  " 5         Sn[        S5       H[  n/ n[        U5       H  nUT" 5       /nM     / n[        U5       H  nUT" 5       /nM     0 n[        U5       H  nUT" 5       S.nM     M]     [         R                  " 5         g )Nc                   &   > \ rS rSrSrU 4S jrSrg)#GCTests.test_trashcan.<locals>.Ouchi  r   c                    > TR                   S-   Tl         TR                   S-  S:X  a  [        R                  " 5         g g )NrY      r   )nr\   r]   )r3   Ouchs    r   r   +GCTests.test_trashcan.<locals>.Ouch.__del__  s0    !66B;!#JJL $r"   r#   N)r$   r%   r&   r'   r  r   r(   )r  s   r   r  r    s    A! !r"   r  r   rj   )rY   rj   )r\   r   ranger   )r3   Ncountrk   r1   uvr  s          @r   test_trashcanGCTests.test_trashcan  s    	! 	!( 			1XEA1XK A1XK A1Xdf%   	

r"   c                   ^^^	^
^ SmSnS m " UU4S jS[         5      mUU4S jm
U	U
4S jn[        R                  " 5       n[        R                  " S5         / m	/ n[        U5       H(  n[        R                  " US	9nUR                  U5        M*     [        R                  " UU	4S
 j5         [        R                  " S5        S S S 5        [        R                  " U5        [        R                  " 5         U R                  [!        TR"                  5      [!        TR$                  5      5        g ! , (       d  f       Nr= f! [        R                  " U5        f = f)N<   rj   c               3   x   #     S v   [         R                  " S5        g ! [         R                  " S5        f = f7f)Ngư>)timesleepr#   r"   r   sleeper_gen2GCTests.test_trashcan_threads.<locals>.sleeper_gen  s%     %

8$

8$s   : :7:c                   8   > \ rS rSr/ r/ rU 4S jrU U4S jrSrg)(GCTests.test_trashcan_threads.<locals>.Ci  c                 D   > XS S & TR                   R                  S 5        g r/   )initsr[   )r3   alistr)   s     r   r4   1GCTests.test_trashcan_threads.<locals>.C.__init__  s    Qt$r"   c                 `   > TR                   R                  S 5        T" 5       n[        U5        g r/   )delsr[   next)r3   r  r)   r#  s     r   r   0GCTests.test_trashcan_threads.<locals>.C.__del__  s#    d#  MQr"   r#   N)	r$   r%   r&   r'   r(  r,  r4   r   r(   )r)   r#  s   r   r)   r&    s    ED% r"   r)   c                  P   > T" / 5      n [        T5       H  nT" U /5      /n M     A g r/   )r  )r  r1   r)   NESTINGs     r   make_nested2GCTests.test_trashcan_threads.<locals>.make_nested  s,     "A7^sVH $r"   c                  6   > T (       d  T" 5         T (       d  M  g g r/   r#   )exitr1  s   r   
run_thread1GCTests.test_trashcan_threads.<locals>.run_thread  s     dr"   gh㈵>)targetc                  &   > T R                  S5      $ rX   r[   )r4  s   r   <lambda>/GCTests.test_trashcan_threads.<locals>.<lambda>  s    Qr"         ?)r   r   getswitchintervalr   setswitchintervalr  	threadingThreadr[   r   start_threadsr!  r"  r\   r]   r^   r   r(  r,  )r3   	N_THREADSr5  old_switchintervalthreadsr1   rk   r)   r0  r4  r1  r#  s          @@@@@r   test_trashcan_threadsGCTests.test_trashcan_threads  s    		%	 	 	$		
 !224!!$'		6DG9%$$J7q! & "//9OP

3 Q !!"45


QWWs166{3 QP !!"45s%   AE 0D3E 3
E=E Ec                 H    " S S5      nU" 5       nU" 5       nX2l         X#l         [        R                  " 5         [        [        R                  5      nAAU R                  [        R                  " 5       S5        U R                  [        [        R                  5      U5        g )Nc                       \ rS rSrS rSrg)GCTests.test_boom.<locals>.Boomi  c                     U ? [        er/   )attrAttributeErrorr3   someattributes     r   __getattr__+GCTests.test_boom.<locals>.Boom.__getattr__  s    I$$r"   r#   N)r$   r%   r&   r'   rO  r(   r#   r"   r   BoomrI    s    %r"   rQ  rj   rK  r\   r]   r   r   r^   )r3   rQ  rv   r   
garbagelens        r   	test_boomGCTests.test_boom  sq    	% 	%
 FF


_
q 	q)RZZ*5r"   c                 H    " S S5      nU" 5       nU" 5       nX2l         X#l         [        R                  " 5         [        [        R                  5      nAAU R                  [        R                  " 5       S5        U R                  [        [        R                  5      U5        g )Nc                        \ rS rSrS rS rSrg)!GCTests.test_boom2.<locals>.Boom2i  c                     SU l         g Nr   r  rN   s    r   r4   *GCTests.test_boom2.<locals>.Boom2.__init__  s	    r"   c                 \    U =R                   S-  sl         U R                   S:  a  U ?[        erX   )r  rK  rL  rM  s     r   rO  -GCTests.test_boom2.<locals>.Boom2.__getattr__  s%    !66A:	$$r"   r[  N)r$   r%   r&   r'   r4   rO  r(   r#   r"   r   Boom2rX    s    %r"   r_  rj   rR  )r3   r_  rv   r   rS  s        r   
test_boom2GCTests.test_boom2  sq    	% 	% GG


_
q 	q)RZZ*5r"   c           	      x   / SQn[         R                  " U5      nUR                  5         U R                  X!5        [	        U5      n[         R                  " U5      nUR                  5         U R                  X!5        SSS.n/ SQn[         R                  " U5      nUR                  5         U R                  X%5        [         R                  " SS/SS0S	5      nUR                  5         U R                  US
S
/[        [        S5      5      -   5        U R                  [         R                  " SSS5      / 5        g )N)rY   r   r  r      )rY   r  )rY   r   r  rc  rY   rj      )r   r   r   r   r  rv   y              @)r\   get_referentssortr^   tupler   r  )r3   r)  gotatupleadictexpecteds         r   test_get_referentsGCTests.test_get_referents*  s    u%
$uv&
$!u%
'1v1vy9
q!ftE!H~56))!S"5r:r"   c                 |   U R                  [        R                  " S 5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " S5      5        U R                  [        R                  " [        S5      5      5        U R                  [        R                  " [        5      5        U R                  [        R                  " [
        5      5        U R                  [        R                  " [        5      5        U R                  [        R                  " [        5       5      5         " S S	5      n " S
 S[
        5      n " S S5      n " S S[        5      n " S S[
        5      n[        (       d)  U R                  [        R                  " [        5      5        U R                  [        R                  " U5      5        U R                  [        R                  " U" 5       5      5        U R                  [        R                  " U" 5       5      5        U R                  [        R                  " / 5      5        U R                  [        R                  " [        5       5      5        U R                  [        R                  " U" 5       5      5        U R                  [        R                  " U" 5       5      5        U R                  [        R                  " U" 5       5      5        g )NrY   r<  y      ?      @TF   arv   c                       \ rS rSrSrg)*GCTests.test_is_tracked.<locals>.UserClassiU  r#   Nrr   r#   r"   r   	UserClassrq  U  rt   r"   rr  c                       \ rS rSrSrg)(GCTests.test_is_tracked.<locals>.UserIntiX  r#   Nrr   r#   r"   r   UserIntrt  X  rt   r"   ru  c                       \ rS rSrSrSrg)/GCTests.test_is_tracked.<locals>.UserClassSlotsi\  r#   Nr$   r%   r&   r'   	__slots__r(   r#   r"   r   UserClassSlotsrw  \      Ir"   rz  c                       \ rS rSrSrSrg)/GCTests.test_is_tracked.<locals>.UserFloatSlotsi`  r#   Nrx  r#   r"   r   UserFloatSlotsr}  `  r{  r"   r~  c                       \ rS rSrSrSrg)-GCTests.test_is_tracked.<locals>.UserIntSlotsid  r#   Nrx  r#   r"   r   UserIntSlotsr  d  r{  r"   r  )r   r\   
is_tracked	bytearraytypeintr*   floatr
   
assertTrueset)r3   rr  ru  rz  r~  r  s         r   test_is_trackedGCTests.test_is_trackedA  s?    	t,-q)*s+,z23t,-u-.t,-s+,y78t,-s+,v./vx01	 		c 		 		U 		3 	 OOBMM"-.i01ik23gi01b)*ce,-n&678n&678ln56r"   c                 \  ^ U R                  [        R                  " S5      5        / m " U4S jS5      nU" 5       nU R                  [        R                  " U5      5        A[        R                  " 5         TR	                  5       nU R                  [        R                  " U5      5        g )Nr   c                   "   > \ rS rSrU 4S jrSrg)*GCTests.test_is_finalized.<locals>.Lazarusix  c                 (   > TR                  U 5        g r/   r9  )r3   storages    r   r   2GCTests.test_is_finalized.<locals>.Lazarus.__del__y  s    t$r"   r#   Nr   )r  s   r   Lazarusr  x  s    % %r"   r  )r   r\   is_finalizedr]   r   r  )r3   r  lazarusr  s      @r   test_is_finalizedGCTests.test_is_finalizeds  su    +,	% 	% )12


++-01r"   c                   ^^ / mUU4S jn[        S5       Vs/ s H  n[        U5      PM     nnU Vs/ s H  n[        R                  " XA5      PM     snmS n[        R
                  " 5         U R                  [        T5      S5        S n[        R
                  " 5         U R                  [        T5      S5        T H  nU R                  US 5        M     g s  snf s  snf )Nc                 D   > T Vs/ s H	  o" 5       PM     snTS S & g s  snf r/   r#   )r>   rD   WRsouchs     r   callback*GCTests.test_bug1055820b.<locals>.callback  s     &)*crtc*DG*s   rj   r   )r  r,   rB   rC   r\   r]   r^   r   )r3   r  r1   Csr  r  r  r  s         @@r   test_bug1055820bGCTests.test_bug1055820b  s     	+ $)8,8ahqk8,134Aw{{1'4


TA& 


TA&A Q%  -4s
   C Cc                    ^^ [         R                  " 5          " S S5      m " S S5      mUU4S jnU" 5         [         R                  " 5         g )Nc                       \ rS rSrSrg) GCTests.test_bug21435.<locals>.Ai  r#   Nrr   r#   r"   r   rs   r    rt   r"   rs   c                        \ rS rSrS rS rSrg) GCTests.test_bug21435.<locals>.Bi  c                     Xl         g r/   r[  )r3   r  s     r   r4   )GCTests.test_bug21435.<locals>.B.__init__  s    r"   c                     S U l         g r/   rK  rN   s    r   r   (GCTests.test_bug21435.<locals>.B.__del__  s	     	r"   )rK  r  N)r$   r%   r&   r'   r4   r   r(   r#   r"   r   r   r    s    !r"   r   c                  F   > T" 5       n T" T" 5       5      nXl         Xl         g r/   r  )rv   r   rs   r   s     r   do_work&GCTests.test_bug21435.<locals>.do_work  s    A!#AFFr"   )r\   r]   )r3   r  rs   r   s     @@r   test_bug21435GCTests.test_bug21435  s7     	

	 		! 	!	 		


r"   Nzrequires _testcapic                 6  ^ ^ SS K mSnU U4S jnU" US-  5      nT R                  SU5        T R                  SU5        U" US-  5      nT R                  SU5        T R                  S	U;   =(       d    S
U;   U5        U" US-  5      nT R                  SU5        g )Nr   a  if 1:
            import gc
            import _testcapi
            @_testcapi.with_tp_del
            class X:
                def __init__(self, name):
                    self.name = name
                def __repr__(self):
                    return "<X %%r>" %% self.name
                def __tp_del__(self):
                    pass

            x = X('first')
            x.x = x
            x.y = X('second')
            del x
            gc.set_debug(%s)
        c                 ^  > TR                  [        R                  SSU /TR                  TR                  S9nUR	                  5       u  p#UR
                  R                  5         UR                  R                  5         TR                  UR                  S5        TR                  US5        U$ )Nz-Wdr   r   r   r   r"   )
Popenr   
executablePIPEcommunicater   closer   r^   
returncode)r   pr   r   r3   
subprocesss       r   run_command5GCTests.test_garbage_at_shutdown.<locals>.run_command  s      #..%t!D!! ! (A ]]_NFHHNNHHNNQ\\1-VS)Mr"   0s=   ResourceWarning: gc: 2 uncollectable objects at shutdown; uses   <X 'first'>zgc.DEBUG_UNCOLLECTABLEs8   ResourceWarning: gc: 2 uncollectable objects at shutdowns   [<X 'first'>, <X 'second'>]s   [<X 'second'>, <X 'first'>]zgc.DEBUG_SAVEALLs!   uncollectable objects at shutdown)r  r   assertNotInr  )r3   r   r  r   r  s   `   @r   test_garbage_at_shutdown GCTests.test_garbage_at_shutdown  s     	$		 TCZ( '(.	00T$<<= "#)	++v5 7+v5	@ T$667=vFr"   c                 f    Sn[        SU5      u  p#nU R                  UR                  5       S5        g )Nzif 1:
            class C:
                def __del__(self):
                    print('__del__ called')
            l = [C()]
            l.append(l)
            r      __del__ called)r   r^   strip)r3   r   r   outerrs        r   test_gc_main_module_at_shutdown'GCTests.test_gc_main_module_at_shutdown  s2     (d3&78r"   c                     [        5        nSnSU< S3n[        USU5        [        SU5      u  pEnU R                  UR	                  5       S5        S S S 5        g ! , (       d  f       g = f)Nzif 1:
                class C:
                    def __del__(self):
                        print('__del__ called')
                l = [C()]
                l.append(l)
                zDif 1:
                import sys
                sys.path.insert(0, z0)
                import gctest
                gctestr   r  )r   r   r   r^   r  )r3   
script_dirmoduler   r   r  r  s          r   #test_gc_ordinary_module_at_shutdown+GCTests.test_gc_ordinary_module_at_shutdown  s[    Z:F "	$D
 
Hf5+D$7LBSSYY[*;< ZZs   AA
A(c                    SnU R                  [        [        5        [        [        SSS9 nUR	                  U5        S S S 5        [        [        5      u  p4nU R                  UR                  5       S5        g ! , (       d  f       NA= f)Nzif 1:
            class ClassWithDel:
                def __del__(self):
                    print('__del__ called')
            a = ClassWithDel()
            a.link = a
            raise SystemExit(0)wzutf-8)encodingr  )
addCleanupr   r   openwriter   r^   r  )r3   r   scriptr   r  r  s         r   test_global_del_SystemExit"GCTests.test_global_del_SystemExit  sf    # 	'&#0FLL 1'/&78 10s   A99
Bc                 F   [         R                  " 5       nU R                  [        U5      S5        U Hu  nU R	                  U[
        5        U R                  [        U5      1 Sk5        U R                  US   S5        U R                  US   S5        U R                  US   S5        Mw     [         R                  " 5       (       a4  U R                  [         R                  5        [         R                  " 5         [         R                  " 5       n[         R                  " S5        [         R                  " 5       nU R                  US   S   US   S   S-   5        U R                  US   S   US   S   5        U R                  US   S   US   S   5        [         R                  " S5        [         R                  " 5       nU R                  US   S   US   S   S-   5        U R                  US   S   US   S   5        U R                  US   S   US   S   S-   5        g )	Nr   >   	collectedcollectionsuncollectabler  r   r  r  rY   rj   )r\   	get_statsr^   r   assertIsInstancedictr  assertGreaterEqual	isenabledr  r   r   r]   )r3   statsstoldnews        r   test_get_statsGCTests.test_get_stats  s   UQ'B!!"d+SWJL##B{OQ7##B}$5q9##B$7;  <<>>OOBII&JJLlln


1llnQ.A}0E0IJQ.A}0EFQ.A}0EF


1llnQ.A}0E0IJQ.A}0EFQ.A}0E0IJr"   c                     [         R                  " 5         U R                  [         R                  " 5       S5        [         R                  " 5         U R                  [         R                  " 5       S5        g rZ  )r\   freezer  get_freeze_countunfreezer^   rN   s    r   test_freezeGCTests.test_freeze8  sF    
		2..0!4
,,.2r"   c                    ^ [         R                  " 5         / mTR                  T5        U R                  [	        U4S j[         R
                  " 5        5       5      5        g )Nc              3   ,   >#    U  H	  nTUL v   M     g 7fr/   r#   .0elementr`   s     r   	<genexpr>+GCTests.test_get_objects.<locals>.<genexpr>C  s     A0@WAL0@   )r\   r]   r[   r  anyget_objectsr_   s    @r   test_get_objectsGCTests.test_get_objects>  s=    


	A0@AA	
r"   zneed generational GCc           	      
  ^ [         R                  " 5         / mTR                  T5        U R                  [	        U4S j[         R
                  " SS9 5       5      5        U R                  [	        U4S j[         R
                  " SS9 5       5      5        U R                  [	        U4S j[         R
                  " SS9 5       5      5        [         R                  " SS9  U R                  [	        U4S j[         R
                  " SS9 5       5      5        U R                  [	        U4S	 j[         R
                  " SS9 5       5      5        U R                  [	        U4S
 j[         R
                  " SS9 5       5      5        [         R                  " SS9  U R                  [	        U4S j[         R
                  " SS9 5       5      5        U R                  [	        U4S j[         R
                  " SS9 5       5      5        U R                  [	        U4S j[         R
                  " SS9 5       5      5        [         R                  " SS9  U R                  [	        U4S j[         R
                  " SS9 5       5      5        U R                  [	        U4S j[         R
                  " SS9 5       5      5        U R                  [	        U4S j[         R
                  " SS9 5       5      5        @[         R                  " 5         g )Nc              3   ,   >#    U  H	  nTUL v   M     g 7fr/   r#   r  s     r   r  7GCTests.test_get_objects_generations.<locals>.<genexpr>L       M0LWAL0Lr  r   
generationc              3   ,   >#    U  H	  nTUL v   M     g 7fr/   r#   r  s     r   r  r  O       N1MWAL1Mr  rY   c              3   ,   >#    U  H	  nTUL v   M     g 7fr/   r#   r  s     r   r  r  R  r  r  rj   c              3   ,   >#    U  H	  nTUL v   M     g 7fr/   r#   r  s     r   r  r  V  r  r  c              3   ,   >#    U  H	  nTUL v   M     g 7fr/   r#   r  s     r   r  r  Y  r  r  c              3   ,   >#    U  H	  nTUL v   M     g 7fr/   r#   r  s     r   r  r  \  r  r  c              3   ,   >#    U  H	  nTUL v   M     g 7fr/   r#   r  s     r   r  r  `  r  r  c              3   ,   >#    U  H	  nTUL v   M     g 7fr/   r#   r  s     r   r  r  c  r  r  c              3   ,   >#    U  H	  nTUL v   M     g 7fr/   r#   r  s     r   r  r  f  r  r  c              3   ,   >#    U  H	  nTUL v   M     g 7fr/   r#   r  s     r   r  r  j  r  r  c              3   ,   >#    U  H	  nTUL v   M     g 7fr/   r#   r  s     r   r  r  m  r  r  c              3   ,   >#    U  H	  nTUL v   M     g 7fr/   r#   r  s     r   r  r  p  r  r  )r\   r]   r[   r  r  r  r   r_   s    @r   test_get_objects_generations$GCTests.test_get_objects_generationsF  s   


	M!0LMM	
 	N11MNN	
 	M!0LMM	
 	

a M!0LMM	
 	N11MNN	
 	M!0LMM	
 	

a M!0LMM	
 	N11MNN	
 	M!0LMM	
 	

a M!0LMM	
 	N11MNN	
 	M!0LMM	
 


r"   c           	         [         R                  " 5         U R                  [        [         R                  " 5       5      [        [         R                  " S S95      5        U R                  [        [         R                  S5        U R                  [        [         R                  S5        U R                  [        [         R                  S5        U R                  [        [         R                  S5        g )Nr    i1gX9v?)r\   r]   r^   r   r  assertRaises
ValueError	TypeErrorrN   s    r   test_get_objects_arguments"GCTests.test_get_objects_argumentsu  s    


R^^-.R^^t<=	? 	*bnnd;*bnne<)R^^S9)R^^U;r"   c                 v  ^  " S S5      n " U4S jSU5      m[         R                  " 5         [         R                  " 5         T" 5       nU R                  TR                  S5        A[         R                  " 5         U R                  TR                  S5        U R                  [        TR                  5      S5        TR                  R                  5         U R                  TR                  S5        [         R                  " 5         U R                  TR                  S5        [         R                  " 5         g )Nc                       \ rS rSrS rSrg)AGCTests.test_resurrection_only_happens_once_per_object.<locals>.Ai  c                     X l         g r/   merN   s    r   r4   JGCTests.test_resurrection_only_happens_once_per_object.<locals>.A.__init__      r"   r  Nr6   r#   r"   r   rs   r        r"   rs   c                   *   > \ rS rSrSr/ rU 4S jrSrg)GGCTests.test_resurrection_only_happens_once_per_object.<locals>.Lazarusi  r   c                 f   > T=R                   S-  sl         TR                  R                  U 5        g rX   )resurrectedresurrected_instancesr[   r3   r  s    r   r   OGCTests.test_resurrection_only_happens_once_per_object.<locals>.Lazarus.__del__  s(    ##q(#--44T:r"   r#   N)r$   r%   r&   r'   r  r  r   r(   r  s   r   r  r    s    K$&!; ;r"   r  r   rY   )	r\   r]   r   r^   r  r   r  clearr   )r3   rs   lazr  s      @r   .test_resurrection_only_happens_once_per_object6GCTests.test_resurrection_only_happens_once_per_object  s    	 		;a 	; 	




 i,,a0 


,,a0W::;Q? 	%%++-,,a0


,,a0
		r"   c                 R  ^  " S S5      n " U4S jS5      m[         R                  " 5         [         R                  " 5         T" 5       nU" 5       n[        U5      nX2l        X#l        AA[         R                  " 5         U R                  [        TR                  5      S5        TR                  R                  5       nU R                  [        US5      5        U R                  [        UR                  5      U5        [         R                  " 5         [         R                  " 5         g )Nc                       \ rS rSrS rSrg)6GCTests.test_resurrection_is_transitive.<locals>.Cargoi  c                     X l         g r/   r  rN   s    r   r4   ?GCTests.test_resurrection_is_transitive.<locals>.Cargo.__init__  r  r"   r  Nr6   r#   r"   r   Cargor)    r  r"   r,  c                   &   > \ rS rSr/ rU 4S jrSrg)8GCTests.test_resurrection_is_transitive.<locals>.Lazarusi  c                 <   > TR                   R                  U 5        g r/   )r  r[   r   s    r   r   @GCTests.test_resurrection_is_transitive.<locals>.Lazarus.__del__  s    --44T:r"   r#   N)r$   r%   r&   r'   r  r   r(   r"  s   r   r  r.    s    $&!; ;r"   r  rY   cargo)r\   r]   r   r   r1  r$  r^   r   r  r   r  hasattrr   )r3   r,  r$  r1  cargo_idinstancer  s         @r   test_resurrection_is_transitive'GCTests.test_resurrection_is_transitive  s    	 		; 	; 	




ie9 		 


W::;Q?00446'23HNN+X6



		r"   c                 <  ^ Sn " S S5      n " U4S jSU5      n/ mS n[         R                  " 5         [         R                  " 5         U" 5       u  pV[        U5       H
  nU" 5         M     [         R                  " 5       nU" 5       u  pU R	                  X5        U R	                  X-
  U5        U R	                  X-
  S5        XpeU" 5         [         R                  " 5       nU" 5       u  pU R	                  US5        U R	                  X-
  S5        U R	                  X-
  S5        Xpe[        U5       H
  nU" 5         M     U" 5         [         R                  " 5       nU" 5       u  pU R	                  X5        U R	                  X-
  U5        U R	                  X-
  S5        XpeTR                  5         [         R                  " 5       nU" 5       u  pU R	                  US5        U R	                  X-
  S5        U R	                  X-
  S5        [         R                  " 5         g )	Nd   c                       \ rS rSrS rSrg)LGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.Ai  c                     X l         g r/   r  rN   s    r   r4   UGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.A.__init__  r  r"   r  Nr6   r#   r"   r   rs   r:    r  r"   rs   c                   "   > \ rS rSrU 4S jrSrg)LGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.Zi  c                 (   > TR                  U 5        g r/   r9  )r3   zss    r   r   TGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.Z.__del__  s    		$r"   r#   Nr   )r@  s   r   Zr>    s       r"   rB  c                  F    [         R                  " 5       S   n U S   U S   4$ )Nr  r  )r\   r  )rf   s    r   getstatsSGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.getstats  s&    r"A[>1_#555r"   r   rj   )r\   r]   r   r  r^   r#  r   )r3   r  rs   rB  rE  oldcoldncr1   rk   r  ncr@  s              @r   9test_resurrection_does_not_block_cleanup_of_other_objectsAGCTests.test_resurrection_does_not_block_cleanup_of_other_objects  s   
 	 		  	  	6 	




 jqAC JJL
1%Q' e	JJL
A1%Q' eqAC 	JJL
1%Q' e

JJL
A1%Q'
		r"   z%requires ContainerNoGC extension typec                    [         R                  R                  5       n " S S5      n " S S5      nU" 5       nXDl        [	        U" 5       5      Ul        [        R                  " UR
                  R                  U5      Ul	        UR                  /nUR                  U5        [        R                  " 5         [        R                  " 5         AA[        R                  " 5         UR                  5         [        R                  " 5         g )Nc                       \ rS rSr/ SQrSrg)+GCTests.test_trash_weakref_clear.<locals>.Ai*  )rv   ywzr#   Nrx  r#   r"   r   rs   rN  *  s    (Ir"   rs   c                       \ rS rSrSrg)+GCTests.test_trash_weakref_clear.<locals>.Zi-  r#   Nrr   r#   r"   r   rB  rR  -  rt   r"   rB  )r   mockMockrv   r   rO  rB   rC   valuerP  r[   r\   r]   r   assert_not_calledr   )r3   r  rs   rB  rv   wr_cycles         r   test_trash_weakref_clear GCTests.test_trash_weakref_clear  s    @ ==%%'	) 	)	 	 CAC {{13399h/DD6!





x


 	""$
		r"   c                 b   SS K nSS KnUR                  nUR                  nU R	                  [
        R                  " U5      5        U R                  [
        R                  " U5      5        U R                  [        [
        R                  " U5      5      S5        [
        R                  " U5        g rZ  )	_datetime_socketdatetime_CAPICAPIr   r\   r  r  r^   r   re  )r3   r[  r\  untracked_capsuletracked_capsules        r   test_get_referents_on_capsule%GCTests.test_get_referents_on_capsuleC  s}     	%33!,,
 	'89:o67R--.?@A1E
)r"   c                    ^^ U mSm " UU4S jS5      nU" 5       nX"l         A[        R                  " 5         U R                  T5        g )NFc                   $   > \ rS rSrU U4S jrSrg);GCTests.test_get_objects_during_gc.<locals>.GetObjectsOnDeli[  c                    > Sm[         R                  " 5       nU H  nTR                  X L5        M     TR                  [         R                  " U 5      / 5        g r<   )r\   r  r  r^   get_referrers)r3   objsr   r  tests      r   r   CGCTests.test_get_objects_during_gc.<locals>.GetObjectsOnDel.__del__\  sG     	~~'COOCO4    !1!1$!7<r"   r#   Nr   )r  ri  s   r   GetObjectsOnDelre  [  s    = =r"   rk  )cycler\   r]   r  )r3   rk  r   r  ri  s      @@r   test_get_objects_during_gc"GCTests.test_get_objects_during_gcT  s@     		= 	= 	


	"r"   c                     / SQn[         R                  " 5         U/nUR                  U5        A[         R                  " 5         [         R                  " 5         g )N)rY   rj   r   )r\   r  r[   r]   r  )r3   r  rO  s      r   test_traverse_frozen_objects$GCTests.test_traverse_frozen_objectsl  s9     
		C	



r"   c                 H    [         R                  " S5      n[        SU5        g )Na  
        import gc
        import unittest


        class Test(unittest.TestCase):
            def test_something(self):
                gc.freeze()
                gc.collect()
                gc.unfreeze()


        if __name__ == "__main__":
            unittest.main()
        r   textwrapdedentr   )r3   sources     r   test_deferred_refcount_frozen%GCTests.test_deferred_refcount_frozenx  s#      "  	v&r"   r#   )<r$   r%   r&   r'   ra   rg   rl   r	   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   requires_working_threadingrE  rT  r`  rl  r  r  r  r  r   r   skipIf	_testcapir  r  r  r  r  r  r  r  r  r%  r5  rJ  r   rX  ra  rm  rp  rw  r(   r#   r"   r   rU   rU   X   sA   *** -  - -  -- *  *0-  2  2 	,  	,A!F * *(0&&* ;<! = ! ) )(!F 00284 384t6066;. /7  /7b2$&0@ __Y$&(<=.G >  .G`9=&9K43
 01, 2,\<"H DAF __]d*<>7>7r * *  # #.
'r"   rU   c                       \ rS rSrS rS rS rS rS rS r	S r
\S	 5       r\" 5       \R                  " \S
5      S 5       5       rSrg)GCCallbackTestsi  c                 t   [         R                  " 5       U l        [         R                  " 5         [         R                  " 5       U l        [         R                  " S5        [         R                  R                  U R                  5        [         R                  R                  U R                  5        / U l        g rZ  )r\   r  enabledr   r   r   r   	callbacksr[   cb1cb2othergarbagerN   s    r   setUpGCCallbackTests.setUp  sd    ||~


\\^

Q
DHH%
DHH%r"   c                     U ? [        R                  R                  U R                  5        [        R                  R                  U R
                  5        [        R                  " U R                  5        U R                  (       a  [        R                  " 5         [        R                  " 5         [        R                   H!  n[        U[        5      (       d  M  S Ul        M#     [        R                  S S 2	 U ?[        R                  " 5         g r/   )visitr\   r  r   r  r  r   r   r  r   r]   r   
isinstancerG   rK   r  )r3   r   s     r   tearDownGCCallbackTests.tearDown  s    J
DHH%
DHH%
TZZ <<IIK


::C#}--"  JJqM


r"   c                     / U l         [        R                  " 5         [        R                  S S  / sn[        R                  S S & U R                  R                  U5        / U l         g r/   )r  r\   r]   r   r  r[   )r3   r   s     r   precleanGCCallbackTests.preclean  sK     



!#AA  )
r"   c                 R    U R                   R                  SU[        U5      45        g rX   )r  r[   r  )r3   phaseinfos      r   r  GCCallbackTests.cb1  s    

1eT$Z01r"   c                    U R                   R                  SU[        U5      45        US:X  a  [        U S5      (       a  [        R
                   Vs/ s H  n[        U[        5      (       d  M  UPM     nn[        R
                   Vs/ s H  n[        U[        5      (       a  M  UPM     sn[        R
                  S S & U H
  nS Ul        M     g g g s  snf s  snf )Nrj   stopcleanup)	r  r[   r  r2  r\   r   r  rG   rK   )r3   r  r  r  ucs        r   r  GCCallbackTests.cb2  s    

1eT$Z01F?wtY77ZZHZ:a+G!ZBH(*

 B
1$.q-$@ 
 BBJJqM 	   8?HBs   C.CC%Cc                 "   U R                  5         [        R                  " 5         U R                   Vs/ s H  oS   PM	     nnU Vs/ s H  o3S:X  d  M
  UPM     nnU Vs/ s H  o3S:X  d  M
  UPM     nnU R	                  US/S-  5        U R	                  US/S-  5        U R                   Vs/ s H  oS   PM	     nnU Vs/ s H  o3S:X  d  M
  UPM     nnU Vs/ s H  o3S:X  d  M
  UPM     nnU R	                  US/S-  5        U R	                  US/S-  5        U R                   HD  nUS   nU R                  SU;   5        U R                  SU;   5        U R                  SU;   5        MF     g s  snf s  snf s  snf s  snf s  snf s  snf )	Nr   rY   rj   startr  r  r  r  )r  r\   r]   r  r^   r  )r3   r  r  r1   n1n2r  s          r   test_collectGCCallbackTests.test_collect  sf   



  ::&:aqT:&%A1fa%%A1fa%aSU#aSU#  ::&:aqT:&+A7la+*A6ka*gYq[)fXaZ( AQ4DOOLD01OOK4/0OOOt34	  '%%
 '+*s;   E3	E8E8!	E=.E=0F	FF	F*Fc                     U R                  5         [        R                  " S5        U R                   H  nUS   nU R	                  US   S5        M     g )Nrj   r  )r  r\   r]   r  r^   )r3   r  r  s      r   test_collect_generation'GCCallbackTests.test_collect_generation  sB    


1AQ4DT,/3 r"   c                 *   U R                  5         [        5         [        5         [        S5        [        R                  " 5         U R
                   H=  nUS   S:w  a  M  US   nU R                  US   S5        U R                  US   S5        M?     U R                  [        [        R                  5      S5        [        R                   H  nU R                  U[        5        M     SU l
        / U l        / [        R                  S S & [        R                  " 5         U R
                   H=  nUS   S:w  a  M  US   nU R                  US   S	5        U R                  US   S5        M?     U R                  [        [        R                  5      S	5        g )
NrA   rY   r  rj   r  r  rd  Tr   )r  rG   r,   r\   r]   r  r^   r   r   r  r  )r3   r  r  r  s       r   test_collect_garbage$GCCallbackTests.test_collect_garbage  s;   


Atv~Q4DT+.2T/2A6  	RZZ!,A!!!]3  


1


Atv~Q4DT+.2T/2A6  	RZZ!,r"   zbuilt with -NDEBUGc                 r   U R                  5         [        S5        SS Kn[        R                  " S5      nUR                  [        R                  SU/UR                  UR                  S9nUR                  5       u  pEUR                  R                  5         UR                  R                  5         U R                  US5        U R                  US5        SnU R                  US	U-   5        U R                  US
5        U R                  USU-   5        U R                  US5        U R                  US5        g )Nctypesr   a  
            from test.support import gc_collect, SuppressCrashReport

            a = [1, 2, 3]
            b = [a]

            # Avoid coredump when Py_FatalError() calls abort()
            SuppressCrashReport().__enter__()

            # Simulate the refcount of "a" being too low (compared to the
            # references held on it by live data), but keeping it above zero
            # (to avoid deallocating it):
            import ctypes
            ctypes.pythonapi.Py_DecRef(ctypes.py_object(a))

            # The garbage collector should now have a fatal error
            # when it reaches the broken object
            gc_collect()
        r   r  s<   gc.*\.c:[0-9]+: .*: Assertion "gc_get_refs\(.+\) .*" failed.s   refcount is too smalls   [0-9a-fA-Fx]+s   object address  : s   object refcount : 1s   object type     : s   object type name: lists   object repr     : \[1, 2, 3\])r  r   r  rt  ru  r  r   r  r  r  r   r  r   r   )r3   r  r   r  r   r   address_regexs          r   test_refcount_errors$GCCallbackTests.test_refcount_errors  s!    	 	h   & cnndD9$.OO$.OO  5 		L	N%	' *"]2	4#	%"]2	4&	(-	/r"   )r  r   r  r  r  N)r$   r%   r&   r'   r  r  r  r  r  r  r  r   r  r   r   rz  BUILD_WITH_NDEBUGr  r(   r#   r"   r   r}  r}    sh    "2!564  -  -F __&)+2/+ 2/r"   r}  c                   f    \ rS rSrS rS rS r\" SSS5      S 5       r\" SSS5      S 5       r	S	r
g
)GCTogglingTestsiD  c                 .    [         R                  " 5         g r/   )r\   r   rN   s    r   r  GCTogglingTests.setUpE  s    
		r"   c                 .    [         R                  " 5         g r/   )r\   r   rN   s    r   r  GCTogglingTests.tearDownH  s    


r"   c                   ^
^ [        S5      n[        R                  " 5         [        S5      nXl        U?[        S5      n[
        R                  " U5      m
/ mU
U4S jn[
        R                  " X5      nS =n=p#/ nSn[        5       n[        (       a  [        R                  " 5         UR                  (       d[  US-  nUS:  a  U R                  S5        U R                  [        T5      S5        UR                  / 5        UR                  (       d  M[  U R                  [        T5      S5        T H  n	U R                  U	S 5        M     g )Nr   rY   rj   c                    > T" 5       /TS S & g r/   r#   )r>   c2wrr  s    r   r  2GCTogglingTests.test_bug1055820c.<locals>.callback[  s    vhDGr"   '  'gc didn't happen after 10000 iterations)r,   r\   r]   keep_c0_aliver2   rB   rC   r8   r
   r=   r   r^   r   r[   )r3   c0c1c2r  c0wrjunkr1   detectorr  r  r  s             @@r   test_bug1055820c GCTogglingTests.test_bug1055820cK  s    a[


a[Ga[{{2	 {{2(R@ =? JJL&&FA5y		CDSY*KKO &&& 	TA&A Q% r"   r  r   c                 ~  ^	^
 / m
 " U	U
4S jS[         5      nU" S5      n[        R                  " 5         [        S5      nX#l        U?[        S5      n[
        R                  " U5      m	S =n=p4[        5       n/ nSn[        (       a  [        R                  " 5         UR                  (       d[  US-  nUS:  a  U R                  S5        U R                  [        T
5      S5        UR                  / 5        UR                  (       d  M[  U R                  [        T
5      S5        T
 H  nU R                  US 5        M     g )Nc                   $   > \ rS rSrU U4S jrSrg)+GCTogglingTests.test_bug1055820d.<locals>.Di  c                    > T" 5       /TS S & g r/   r#   )r3   r  r  s    r   r   3GCTogglingTests.test_bug1055820d.<locals>.D.__del__  s    6(Qr"   r#   Nr   )r  r  s   r   Dr    s    # #r"   r  r   rY   rj   r  r  )r,   r\   r]   keep_d0_aliver2   rB   rC   r8   r
   r=   r   r^   r   r[   )r3   r  d0r  r  r  r  r1   r  r  r  s            @@r   test_bug1055820d GCTogglingTests.test_bug1055820d  s    	# 	# 	# qT


a[Ga[{{2R< =? JJL&&FA5y		CDSY*KKO &&& 	TA&A Q% r"   c                    / nSn[        5       nUR                  (       d@  US-  nUS:  a  U R                  S5        UR                  / 5        UR                  (       d  M@   [        R
                  " 5         / nSn[        5       nUR                  (       d0  US-  nUS:  a  O$UR                  / 5        UR                  (       d  M0  U R                  US5        [        R                  " 5         g ! [        R                  " 5         f = f)Nr   rY   r  r  i'  )r8   r=   r   r[   r\   r   r^   r   )r3   r  r1   r  s       r   $test_indirect_calls_with_gc_disabled4GCTogglingTests.test_indirect_calls_with_gc_disabled  s    =&&FA5y		CDKKO	 &&&	JJLDA"}H**Qu9B	 *** Q&IIKBIIKs   !A"C- C- -Dr#   N)r$   r%   r&   r'   r  r  r  r   r  r  r(   r#   r"   r   r  r  D  sP    H&T $1E& E&N $1 r"   r  c                       \ rS rSrS rSrg)PythonFinalizationTestsi  c                 H    [         R                  " S5      n[        SU5        g )NaM  
            import ast
            import codecs
            from test import support

            # Small AST tree to keep their AST types alive
            tree = ast.parse("def f(x, y): return 2*x-y")

            # Store the tree somewhere to survive until the last GC collection
            support.late_deletion(tree)
        r   rs  )r3   r   s     r   test_ast_fini%PythonFinalizationTests.test_ast_fini  s#      
  
 	t$r"   r#   N)r$   r%   r&   r'   r  r(   r#   r"   r   r  r    s    %r"   r  c                     [         R                  " 5       q[         R                  " 5         [         R                  " 5       q[         R                  " [
        [         R                  ) -  5        [         R                  " 5         g r/   )	r\   r  r  r   r   r   r   
DEBUG_LEAKr]   r#   r"   r   setUpModuler    sA    llnGJJLLLNELL"--'(JJLr"   c                      [         R                  " [        5        [        (       a  [	        S5        [         R
                  " 5         [        (       d  [         R                  " 5         g g )Nzrestoring automatic collection)r\   r   r   r   printr   r  r   r#   r"   r   tearDownModuler    s8    LLw./IIK7


 r"   __main__)3r   unittest.mockri  r   test.supportr   r   r   r   r   r	   r
   test.support.import_helperr   test.support.os_helperr   r   r   test.support.script_helperr   r   r   r   r\   r   	sysconfigrt  r?  r!  rB   r{  r   r   ImportErrorr*   r,   r8   rG   get_config_varsgetr  r2  TestCaserU   r}  r  r  r  r  r$   mainr#   r"   r   <module>r     sd     + + + 5 ; ; D 7 	 
     %'$v 
:& : F   "";33#y'@'@'B;'OO
 %S*<==
x'h x'v!n/h'' n/bqh'' qh%h// %*	 zMMO U0  I
 Ms   E E#"E#