
    <e                        d dl Z d dlZ d dlmZmZmZmZ d dlmZ d dl	m
Z
mZmZ d dlmZmZ d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZ	 d dlmZ n# e$ r d ZY nw xY w	 d d	lmZ n# e$ r dZY nw xY w G d
 de          Z G d de          Ze G d de                      Z ej                     !                    dd          rd ej                     d         v Z"n e#ed           Z" G d de j$                  Z% G d de j$                  Z& G d de j$                  Z' G d de j$                  Z(d Z)d Z*e+dk    r e j,                     dS dS )    N)verboserefcount_testcpython_onlyrequires_subprocess)import_module)temp_dirTESTFNunlink)assert_python_okmake_script)threading_helper)with_tp_delc                 ,     G d dt                     }|S )Nc                       e Zd Zd ZdS )with_tp_del.<locals>.Cc                      t          d          )Nzrequires _testcapi.with_tp_del)	TypeError)clsargskwargss      #/usr/lib/python3.11/test/test_gc.py__new__zwith_tp_del.<locals>.C.__new__   s     @AAA    N)__name__
__module____qualname__r    r   r   Cr      s(        B B B B Br   r   )object)r   r   s     r   r   r      s;    	B 	B 	B 	B 	B 	B 	B 	B r   )ContainerNoGCc                       e Zd Zd ZdS )C1055820c                 "    || _         | | _        d S N)iloop)selfr%   s     r   __init__zC1055820.__init__)   s    			r   Nr   r   r   r(   r   r   r   r"   r"   (   s#            r   r"   c                       e Zd Zd ZdS )GC_Detectorc                 n     d _          fd}t          j        t          d          |           _        d S )NFc                     d_         d S )NT)gc_happened)ignoredr'   s    r   it_happenedz)GC_Detector.__init__.<locals>.it_happened4   s    #Dr     )r.   weakrefrefr"   wr)r'   r0   s   ` r   r(   zGC_Detector.__init__1   sC     	$ 	$ 	$ 	$ 	$
 +hsmm[99r   Nr)   r   r   r   r+   r+   -   s#        : : : : :r   r+   c                       e Zd Z	 ddZd ZdS )UncollectableNc                 F    |t          |           | _        d S || _        d S )N)partner)r6   r8   )r'   r8   s     r   r(   zUncollectable.__init__C   s(    ?(666DLLL"DLLLr   c                     d S r$   r   r'   s    r   
__tp_del__zUncollectable.__tp_del__H   s    r   r$   )r   r   r   r(   r;   r   r   r   r6   r6   ;   s<        )# # # #
    r   r6   	PY_CFLAGS z-DNDEBUGgettotalrefcountc                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ed	             Zed
             Zd Zd Zed             Zd Zd Zd Zed             Zed             Zd Z ej                    d             Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#e e$            d                         Z%d Z&d  Z'd! Z(d" Z)d# Z*d$ Z+d% Z,d& Z-d' Z.d( Z/ e0j1        e2d)u d*          d+             Z3d)S ),GCTestsc                     g }|                     |           t          j                     ~|                     t          j                    d           d S N   appendgccollectassertEqualr'   ls     r   	test_listzGCTests.test_listW   sF    	

q)))))r   c                     i }||d<   t          j                     ~|                     t          j                    d           d S rB   rF   rG   rH   r'   ds     r   	test_dictzGCTests.test_dict^   s@    !

q)))))r   c                     g }|f}|                     |           t          j                     ~~|                     t          j                    d           d S )N   rD   )r'   rJ   ts      r   
test_tuplezGCTests.test_tuplee   sP    D	

q)))))r   c                      G d d          }||_         t          j                     ~|                     t          j                    d           d S )Nc                       e Zd ZdS )GCTests.test_class.<locals>.ANr   r   r   r   r   r   ArW   p           Dr   rY   r   arF   rG   assertNotEqualr'   rY   s     r   
test_classzGCTests.test_classo   sa    	 	 	 	 	 	 	 	

BJLL!,,,,,r   c                      G d dt                     }t          j                     ~|                     t          j                    d           d S )Nc                       e Zd ZdS )%GCTests.test_newstyleclass.<locals>.ANrX   r   r   r   rY   rb   x   rZ   r   rY   r   )r   rF   rG   r]   r^   s     r   test_newstyleclasszGCTests.test_newstyleclassw   s\    	 	 	 	 	 	 	 	

BJLL!,,,,,r   c                      G d d          } |            }||_         t          j                     ~|                     t          j                    d           d S )Nc                       e Zd ZdS ) GCTests.test_instance.<locals>.ANrX   r   r   r   rY   rf      rZ   r   rY   r   r[   r'   rY   r\   s      r   test_instancezGCTests.test_instance~   sl    	 	 	 	 	 	 	 	ACC

BJLL!,,,,,r   c                     G d dt                     } |            }||_        t          j                     ~|                     t          j                    d            G d dt
                    } G d d||          } |            }||_        t          j                     ~|                     t          j                    d           ~~|                     t          j                    d            |            |_        ~|                     t          j                    d           |                     t          j                    d           d S )Nc                       e Zd ZdS )#GCTests.test_newinstance.<locals>.ANrX   r   r   r   rY   rk      rZ   r   rY   r   c                       e Zd ZdS )#GCTests.test_newinstance.<locals>.BNrX   r   r   r   Brm      rZ   r   rn   c                       e Zd ZdS )#GCTests.test_newinstance.<locals>.CNrX   r   r   r   r   rp      rZ   r   r   )r   r\   rF   rG   r]   listrH   )r'   rY   r\   rn   r   s        r   test_newinstancezGCTests.test_newinstance   si   	 	 	 	 	 	 	 	ACC

BJLL!,,,	 	 	 	 	 	 	 		 	 	 	 	1 	 	 	ACC

BJLL!,,,qBJLL!,,,accBJLL!,,,q)))))r   c                      G d d          } |            }t          j                     ~|                     t          j                    d           d S )Nc                       e Zd Zd ZdS )GCTests.test_method.<locals>.Ac                     | j         | _        d S r$   )r(   initr:   s    r   r(   z'GCTests.test_method.<locals>.A.__init__   s     M			r   Nr)   r   r   r   rY   ru      s#        * * * * *r   rY   r   )rF   rG   r]   rg   s      r   test_methodzGCTests.test_method   sg    	* 	* 	* 	* 	* 	* 	* 	* ACC

BJLL!,,,,,r   c                    t            G d d                      } G d d          } |            }||_        t          |          } |            }||_        t	          j                     ~~|                     t	          j                    d           t          j        D ]}t          |          |k    r|` n|                     d           t          j        	                    |           d S )Nc                       e Zd Zd ZdS )(GCTests.test_legacy_finalizer.<locals>.Ac                     d S r$   r   r:   s    r   r;   z3GCTests.test_legacy_finalizer.<locals>.A.__tp_del__         r   Nr   r   r   r;   r   r   r   rY   r{              &&&&&r   rY   c                       e Zd ZdS )(GCTests.test_legacy_finalizer.<locals>.BNrX   r   r   r   rn   r      rZ   r   rn   r   &didn't find obj in garbage (finalizer))
r   r\   idbrF   rG   r]   garbagefailremover'   rY   rn   r\   id_ar   objs          r   test_legacy_finalizerzGCTests.test_legacy_finalizer   s    
	' 	' 	' 	' 	' 	' 	' 
	'	 	 	 	 	 	 	 	ACC!uuACC

BJLL!,,,: 	@ 	@C#ww$E  II>???

#r   c                    t            G d dt                                } G d dt                    } |            }||_        t          |          } |            }||_        t          j                     ~~|                     t          j                    d           t
          j        D ]}t          |          |k    r|` n| 	                    d           t
          j        
                    |           d S )Nc                       e Zd Zd ZdS )1GCTests.test_legacy_finalizer_newclass.<locals>.Ac                     d S r$   r   r:   s    r   r;   z<GCTests.test_legacy_finalizer_newclass.<locals>.A.__tp_del__   r}   r   Nr~   r   r   r   rY   r      r   r   rY   c                       e Zd ZdS )1GCTests.test_legacy_finalizer_newclass.<locals>.BNrX   r   r   r   rn   r      rZ   r   rn   r   r   )r   r   r\   r   r   rF   rG   r]   r   r   r   r   s          r   test_legacy_finalizer_newclassz&GCTests.test_legacy_finalizer_newclass   s     
	' 	' 	' 	' 	' 	' 	' 
	'	 	 	 	 	 	 	 	ACC!uuACC

BJLL!,,,: 	@ 	@C#ww$E  II>???

#r   c                     i }t          d|           t          j                     ~|                     t          j                    d           d S )Nzdef f(): pass
rR   )execrF   rG   rH   rN   s     r   test_functionzGCTests.test_function   sJ     """

q)))))r   c                     d}t          d|          \  }}}|                     |d           |                     |d           |                     |           d S )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   rH   assertRegexassertFalse)r'   codercstdoutstderrs        r   .test_function_tp_clear_leaves_consistent_statez6GCTests.test_function_tp_clear_leaves_consistent_state   si    :x .dD99FFQ!JKKK     r   c                     d }t          j                      |             |                     t          j                    d           d S )Nc                  ,    t          j                    } d S r$   )sys	_getframe)frames    r   fzGCTests.test_frame.<locals>.f+  s    MOOEEEr   rC   rM   )r'   r   s     r   
test_framezGCTests.test_frame)  sI    	$ 	$ 	$

	q)))))r   c                 L   t          j                     |                     t           j        g            g }|                    |           t          |          }t          j                    }t          j        |t           j        z             ~t          j                     t          j        |           |                     t          t           j                  d           t           j        
                                }|                     t          |          |           d S rB   )rF   rG   rH   r   rE   r   	get_debug	set_debugDEBUG_SAVEALLlenpop)r'   Lid_Ldebugr   s        r   test_saveallzGCTests.test_saveall1  s     	
R(((	!uu
UR--...


URZ!,,,jnnC$'''''r   c                     t          j                    }t          j                     t          j        d            G d d          } |            }~t          j                     t          j        |  d S )NrC   c                       e Zd Zd ZdS )GCTests.test_del.<locals>.Ac                 $    t          |            d S r$   dirr:   s    r   __del__z#GCTests.test_del.<locals>.A.__del__P      D					r   Nr   r   r   r   r   r   r   rY   r   O  #            r   rY   )rF   get_thresholdenableset_thresholddisabler'   
thresholdsrY   r\   s       r   test_delzGCTests.test_delI  s    %''

	
	 	 	 	 	 	 	 	 ACC


*%%%%r   c                     t          j                    }t          j                     t          j        d            G d dt                    } |            }~t          j                     t          j        |  d S )NrC   c                       e Zd Zd ZdS )$GCTests.test_del_newclass.<locals>.Ac                 $    t          |            d S r$   r   r:   s    r   r   z,GCTests.test_del_newclass.<locals>.A.__del___  r   r   Nr   r   r   r   rY   r   ^  r   r   rY   )rF   r   r   r   r   r   r   s       r   test_del_newclasszGCTests.test_del_newclassX  s    %''

	
	 	 	 	 	 	 	 	 ACC


*%%%%r   c                 D   t          j                     t          j                    \  }}}g }t          j                    \  }}}|                     ||fd           |                     ||fd           |                     |d           |                     ||           d S )Nr   r      )rF   rG   	get_countrH   
assertLessassertGreater)r'   r\   r   cxrO   er   s           r   test_get_countzGCTests.test_get_countm  s    

,..1a,..1a!Q(((!Q(((1 	1a     r   c                    t          j                     g }t          j        d           t          j                    \  }}}t          j        d           t          j                    \  }}}t          j        d           t          j                    \  }}	}
|                     ||fd           |                     ||fd           |                     |	|
fd           d S )Nr   rC   rR   )rC   r   )r   rC   r   )rF   rG   r   rH   )r'   r   r\   r   r   rO   r   r   ghr%   s              r   test_collect_generationsz GCTests.test_collect_generations{  s    

 

1,..1a

1,..1a

1,..1a 	!Q(((!Q(((!Q(((((r   c                 \    G fdd          t          j                     d}t          d          D ]c}g }t          |          D ]}|             g}g }t          |          D ]}|             g}i }t          |          D ]}|             d}dt          j                     d S )Nc                       e Zd ZdZ fdZdS )#GCTests.test_trashcan.<locals>.Ouchr   c                 l    j         dz   _         j         dz  dk    rt          j                     d S d S )NrC      r   )nrF   rG   )r'   Ouchs    r   r   z+GCTests.test_trashcan.<locals>.Ouch.__del__  s8    !6B;!##JLLLLL $#r   N)r   r   r   r   r   )r   s   r   r   r     s3        A! ! ! ! ! ! !r   r      rR   )rC   rR   )rF   r   ranger   )r'   NcountrS   r%   uvr   s          @r   test_trashcanzGCTests.test_trashcan  s    	! 	! 	! 	! 	! 	! 	! 	! 	! 	!( 		1XX 		& 		&EA1XX    KA1XX    KA1XX & &ddff%%&

r   c                   	
 dd}d  G fddt                     fd
	
fd}t          j                    }t          j        d           	 g 	g }t	          |          D ],}t          j        |	          }|                    |           -t          j	        |	fd
          5  t          j        d           d d d            n# 1 swxY w Y   t          j        |           n# t          j        |           w xY wt          j                     |                     t          j                  t          j                             d S )N<   rR   c               3   p   K   	 	 d V  t          j        d           d S # t          j        d           w xY w)Ngư>)timesleepr   r   r   sleeper_genz2GCTests.test_trashcan_threads.<locals>.sleeper_gen  sC      N%
8$$$$$
8$$$$s    5c                   .    e Zd Zg Zg Z fdZ fdZdS )(GCTests.test_trashcan_threads.<locals>.Cc                 J    || d d <   j                             d            d S r$   )initsrE   )r'   alistr   s     r   r(   z1GCTests.test_trashcan_threads.<locals>.C.__init__  s*    QQQt$$$$$r   c                 n    j                             d                         }t          |           d S r$   )delsrE   next)r'   r   r   r   s     r   r   z0GCTests.test_trashcan_threads.<locals>.C.__del__  s3    d###  KMMQr   N)r   r   r   r   r   r(   r   )r   r   s   r   r   r     sV        ED% % % % %       r   r   c                  `    	  g           } t                    D ]} | g          g} ~ d S r$   )r   )r   r%   r   NESTINGs     r   make_nestedz2GCTests.test_trashcan_threads.<locals>.make_nested  sE    C"A7^^  QsVVHr   c                  *    	  s               d S d S r$   r   )exitr   s   r   
run_threadz1GCTests.test_trashcan_threads.<locals>.run_thread  s7    3       r   gh㈵>)targetc                  .                          d          S rB   rE   )r   s   r   <lambda>z/GCTests.test_trashcan_threads.<locals>.<lambda>  s    Q r         ?)rq   r   getswitchintervalsetswitchintervalr   	threadingThreadrE   r   start_threadsr   r   rF   rG   rH   r   r   r   )r'   	N_THREADSr   old_switchintervalthreadsr%   rS   r   r   r   r   r   s          @@@@@r   test_trashcan_threadszGCTests.test_trashcan_threads  s    		% 	% 	%	 	 	 	 	 	 	 	 	 	 	$	 	 	 	 	 		 	 	 	 	 	
 !244d###		6DG9%% " "$J777q!!!!!/9O9O9O9OPP    
3                              !"45555C!"45555

QWs16{{33333s1   AC0 /CC0 CC0 CC0 0Dc                 h    G d d          } |            } |            }||_         ||_         t          j                     t          t          j                  }~~|                     t          j                    d           |                     t          t          j                  |           d S )Nc                       e Zd Zd ZdS )GCTests.test_boom.<locals>.Boomc                     | ` t          r$   attrAttributeErrorr'   someattributes     r   __getattr__z+GCTests.test_boom.<locals>.Boom.__getattr__      I$$r   Nr   r   r   r  r   r   r   Boomr    #        % % % % %r   r  rR   r	  rF   rG   r   r   rH   )r'   r  r\   r   
garbagelens        r   	test_boomzGCTests.test_boom  s    	% 	% 	% 	% 	% 	% 	% 	%
 DFFDFF

__
q 	q)))RZ*55555r   c                 h    G d d          } |            } |            }||_         ||_         t          j                     t          t          j                  }~~|                     t          j                    d           |                     t          t          j                  |           d S )Nc                       e Zd Zd Zd ZdS )!GCTests.test_boom2.<locals>.Boom2c                     d| _         d S Nr   r   r:   s    r   r(   z*GCTests.test_boom2.<locals>.Boom2.__init__      r   c                 J    | xj         dz  c_         | j         dk    r| `t          rB   r   r	  r
  r  s     r   r  z-GCTests.test_boom2.<locals>.Boom2.__getattr__  '    !6A::	$$r   Nr   r   r   r(   r  r   r   r   Boom2r    2          % % % % %r   r   rR   r  )r'   r   r\   r   r  s        r   
test_boom2zGCTests.test_boom2  s    	% 	% 	% 	% 	% 	% 	% 	% EGGEGG

__
q 	q)))RZ*55555r   c                 t    G d dt                     } |            } |            }||_        ||_        t          j                     t	          t          j                  }~~|                     t          j                    d           |                     t	          t          j                  |           d S )Nc                       e Zd Zd ZdS )'GCTests.test_boom_new.<locals>.Boom_Newc                     | ` t          r$   r  r  s     r   r  z3GCTests.test_boom_new.<locals>.Boom_New.__getattr__&  r  r   Nr  r   r   r   Boom_Newr%  %  r  r   r'  rR   r   r	  rF   rG   r   r   rH   )r'   r'  r\   r   r  s        r   test_boom_newzGCTests.test_boom_new!  s    	% 	% 	% 	% 	%v 	% 	% 	%
 HJJHJJ

__
qq)))RZ*55555r   c                 t    G d dt                     } |            } |            }||_        ||_        t          j                     t	          t          j                  }~~|                     t          j                    d           |                     t	          t          j                  |           d S )Nc                       e Zd Zd Zd ZdS ))GCTests.test_boom2_new.<locals>.Boom2_Newc                     d| _         d S r  r  r:   s    r   r(   z2GCTests.test_boom2_new.<locals>.Boom2_New.__init__7  r  r   c                 J    | xj         dz  c_         | j         dk    r| `t          rB   r  r  s     r   r  z5GCTests.test_boom2_new.<locals>.Boom2_New.__getattr__:  r  r   Nr  r   r   r   	Boom2_Newr,  6  r!  r   r/  rR   r(  )r'   r/  r\   r   r  s        r   test_boom2_newzGCTests.test_boom2_new5  s    	% 	% 	% 	% 	% 	% 	% 	% IKKIKK

__
qq)))RZ*55555r   c           	         g d}t          j        |          }|                                 |                     ||           t	          |          }t          j        |          }|                                 |                     ||           ddd}g d}t          j        |          }|                                 |                     ||           t          j        ddgddid	          }|                                 |                     |d
d
gt          t          d                    z              |                     t          j        ddd          g            d S )N)rC      r   r2     )rC   r   )rC   r2  r   r3  rC   rR      )r   r   r   r   r   r\   y              @)rF   get_referentssortrH   tuplerq   r   )r'   r   gotatupleadictexpecteds         r   test_get_referentszGCTests.test_get_referentsK  sB   		u%%


e$$$uv&&


e$$$!<<u%%


h'''1v1vy99


q!ftE!HH~~5666)!S"55r:::::r   c                 "   |                      t          j        d                      |                      t          j        d                     |                      t          j        d                     |                      t          j        d                     |                      t          j        d                     |                      t          j        d                     |                      t          j        d                     |                      t          j        d                     |                      t          j        t          d                               |                      t          j        t                               |                      t          j        t
                               |                      t          j        t                               |                      t          j        t                                            G d d	          } G d
 dt
                    } G d d          } G d dt                    } G d dt
                    }|                     t          j        t                               |                     t          j        |                     |                     t          j         |                                 |                     t          j         |                                 |                     t          j        g                      |                     t          j        t                                           |                     t          j         |                                 |                     t          j         |                                 |                     t          j         |                                 d S )NrC   r   y      ?      @TF   ar\   c                       e Zd ZdS )*GCTests.test_is_tracked.<locals>.UserClassNrX   r   r   r   	UserClassr@  u  rZ   r   rA  c                       e Zd ZdS )(GCTests.test_is_tracked.<locals>.UserIntNrX   r   r   r   UserIntrC  x  rZ   r   rD  c                       e Zd ZdZdS )/GCTests.test_is_tracked.<locals>.UserClassSlotsr   Nr   r   r   	__slots__r   r   r   UserClassSlotsrF  |          IIIr   rI  c                       e Zd ZdZdS )/GCTests.test_is_tracked.<locals>.UserFloatSlotsr   NrG  r   r   r   UserFloatSlotsrL    rJ  r   rM  c                       e Zd ZdZdS )-GCTests.test_is_tracked.<locals>.UserIntSlotsr   NrG  r   r   r   UserIntSlotsrO    rJ  r   rP  )
r   rF   
is_tracked	bytearraytypeintr   float
assertTrueset)r'   rA  rD  rI  rM  rP  s         r   test_is_trackedzGCTests.test_is_trackedb  s   
 	t,,---q))***s++,,,z22333t,,---u--...t,,---s++,,,y77888t,,---s++,,,v..///vxx00111	 	 	 	 	 	 	 		 	 	 	 	c 	 	 		 	 	 	 	 	 	 		 	 	 	 	U 	 	 		 	 	 	 	3 	 	 	 	b))***i00111iikk22333ggii00111b))***cee,,---nn&6&677888nn&6&677888llnn5566666r   c                 x   |                      t          j        d                     g  G fdd          } |            }|                      t          j        |                     ~t          j                                                     }|                     t          j        |                     d S )Nr2  c                       e Zd Z fdZdS )*GCTests.test_is_finalized.<locals>.Lazarusc                 2                         |            d S r$   r   )r'   storages    r   r   z2GCTests.test_is_finalized.<locals>.Lazarus.__del__  s    t$$$$$r   Nr   )r]  s   r   Lazarusr[    s.        % % % % % % %r   r^  )r   rF   is_finalizedrG   r   rV  )r'   r^  lazarusr]  s      @r   test_is_finalizedzGCTests.test_is_finalized  s    ++,,,	% 	% 	% 	% 	% 	% 	% 	% 	% 	% '))11222

++--0011111r   c                    g fdd t          d          D             }fd|D             d }t          j                     |                     t	                    d           d }t          j                     |                     t	                    d           D ]}|                     |d            d S )Nc                 *    d D             d d <   d S )Nc                 "    g | ]} |            S r   r   ).0r4   s     r   
<listcomp>z>GCTests.test_bug1055820b.<locals>.callback.<locals>.<listcomp>  s    ***rrtt***r   r   )r/   WRsouchs    r   callbackz*GCTests.test_bug1055820b.<locals>.callback  s"    **c***DGGGr   c                 ,    g | ]}t          |          S r   )r"   re  r%   s     r   rf  z,GCTests.test_bug1055820b.<locals>.<listcomp>  s    ,,,ahqkk,,,r   rR   c                 :    g | ]}t          j        |          S r   )r2   r3   )re  r   ri  s     r   rf  z,GCTests.test_bug1055820b.<locals>.<listcomp>  s%    444Aw{1h''444r   r   )r   rF   rG   rH   r   )r'   Csr   r   rg  ri  rh  s       @@@r   test_bug1055820bzGCTests.test_bug1055820b  s     	+ 	+ 	+ 	+ 	+ 	+ -,588,,,4444444

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

TA&&& 	& 	&A Q%%%%	& 	&r   c                     t          j                      G d d           G d d          fd} |             t          j                     d S )Nc                       e Zd ZdS ) GCTests.test_bug21435.<locals>.ANrX   r   r   r   rY   rq    rZ   r   rY   c                       e Zd Zd Zd ZdS ) GCTests.test_bug21435.<locals>.Bc                     || _         d S r$   r  )r'   r   s     r   r(   z)GCTests.test_bug21435.<locals>.B.__init__  r  r   c                     d | _         d S r$   r	  r:   s    r   r   z(GCTests.test_bug21435.<locals>.B.__del__  s     			r   N)r   r   r   r(   r   r   r   r   rn   rs    s2          ! ! ! ! !r   rn   c                  ^                 }                         }|| _         | |_         d S r$   rv  )r\   r   rY   rn   s     r   do_workz&GCTests.test_bug21435.<locals>.do_work  s3    A!!##AAFAFFFr   )rF   rG   )r'   rx  rY   rn   s     @@r   test_bug21435zGCTests.test_bug21435  s     	
	 	 	 	 	 	 	 		! 	! 	! 	! 	! 	! 	! 	!	 	 	 	 	 	 				

r   c                 ^    dd l d} fd} ||dz            }                     d|                                d|            ||dz            }                     d|                                d	|v pd
|v |            ||dz            }                     d|           d S )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          j        dd| gj        j                  }|                                \  }}|j                                         |j                                                             |j	        d                               |d           |S )Nz-Wdr   r   r   r   r   )
Popenr   
executablePIPEcommunicater   closer   rH   
returncode)r   pr   r   r'   
subprocesss       r   run_commandz5GCTests.test_garbage_at_shutdown.<locals>.run_command  s      #.%t!D!! ! ( (A ]]__NFFHNNHNN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  assertInassertNotInrV  )r'   r   r  r   r  s   `   @r   test_garbage_at_shutdownz GCTests.test_garbage_at_shutdown  s    	$		 		 		 		 		 		 TCZ(( '(.	0 	0 	0000T$<<== "#)	+ 	+ 	++v5 7+v5	@ 	@ 	@ T$6677=vFFFFFr   c                     d}t          d|          \  }}}|                     |                                d           d S )Nzif 1:
            class C:
                def __del__(self):
                    print('__del__ called')
            l = [C()]
            l.append(l)
            r      __del__ called)r   rH   strip)r'   r   r   outerrs        r   test_gc_main_module_at_shutdownz'GCTests.test_gc_main_module_at_shutdown  sE     (d33C&788888r   c                     t                      5 }d}d|d}t          |d|           t          d|          \  }}}|                     |                                d           d d d            d S # 1 swxY w Y   d S )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   rH   r  )r'   
script_dirmoduler   r   r  r  s          r   #test_gc_ordinary_module_at_shutdownz+GCTests.test_gc_ordinary_module_at_shutdown  s    ZZ 	=:FF "zz	$D
 
Hf555+D$77LBSSYY[[*;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   AA22A69A6c                 R   d}|                      t          t                     t          t          dd          5 }|                    |           d d d            n# 1 swxY w Y   t          t                    \  }}}|                     |                                d           d S )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   rH   r  )r'   r   scriptr   r  r  s         r   test_global_del_SystemExitz"GCTests.test_global_del_SystemExit-  s    # 	'''&#000 	FLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	'//C&788888s   AA #A c                 *   t          j                    }|                     t          |          d           |D ]}|                     |t
                     |                     t          |          h d           |                     |d         d           |                     |d         d           |                     |d         d           t          j                    r2| 	                    t           j
                   t          j                     t          j                    }t          j        d           t          j                    }|                     |d         d         |d         d         dz              |                     |d         d         |d         d                    |                     |d         d         |d         d                    t          j        d           t          j                    }|                     |d         d         |d         d         dz              |                     |d         d         |d         d                    |                     |d         d         |d         d         dz              d S )	Nr2  >   	collectedcollectionsuncollectabler  r   r  r  rC   rR   )rF   	get_statsrH   r   assertIsInstancedictrW  assertGreaterEqual	isenabledr  r   r   rG   )r'   statsstoldnews        r   test_get_statszGCTests.test_get_stats;  s:   UQ''' 	< 	<B!!"d+++SWWJJJL L L##B{OQ777##B}$5q999##B$7;;;;<>> 	OOBI&&&JLLLlnn

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

1lnnQ.A}0E0IJJJQ.A}0EFFFQ.A}0E0IJJJJJr   c                     t          j                     |                     t          j                    d           t          j                     |                     t          j                    d           d S r  )rF   freezer   get_freeze_countunfreezerH   r:   s    r   test_freezezGCTests.test_freezeU  s\    
	2.00!444
,..22222r   c                    t          j                     g                                |                     t	          fdt          j        d          D                                  |                     t	          fdt          j        d          D                                  |                     t	          fdt          j        d          D                                  t          j        d           |                     t	          fdt          j        d          D                                  |                     t	          fd	t          j        d          D                                  |                     t	          fd
t          j        d          D                                  t          j        d           |                     t	          fdt          j        d          D                                  |                     t	          fdt          j        d          D                                  |                     t	          fdt          j        d          D                                  t          j        d           |                     t	          fdt          j        d          D                                  |                     t	          fdt          j        d          D                                  |                     t	          fdt          j        d          D                                  t          j                     d S )Nc              3       K   | ]}|u V  	d S r$   r   re  elementrJ   s     r   	<genexpr>z+GCTests.test_get_objects.<locals>.<genexpr>`  '      MMWALMMMMMMr   r   
generationc              3       K   | ]}|u V  	d S r$   r   r  s     r   r  z+GCTests.test_get_objects.<locals>.<genexpr>c  '      NNWALNNNNNNr   rC   c              3       K   | ]}|u V  	d S r$   r   r  s     r   r  z+GCTests.test_get_objects.<locals>.<genexpr>f  r  r   rR   c              3       K   | ]}|u V  	d S r$   r   r  s     r   r  z+GCTests.test_get_objects.<locals>.<genexpr>j  r  r   c              3       K   | ]}|u V  	d S r$   r   r  s     r   r  z+GCTests.test_get_objects.<locals>.<genexpr>m  r  r   c              3       K   | ]}|u V  	d S r$   r   r  s     r   r  z+GCTests.test_get_objects.<locals>.<genexpr>p  r  r   c              3       K   | ]}|u V  	d S r$   r   r  s     r   r  z+GCTests.test_get_objects.<locals>.<genexpr>t  r  r   c              3       K   | ]}|u V  	d S r$   r   r  s     r   r  z+GCTests.test_get_objects.<locals>.<genexpr>w  r  r   c              3       K   | ]}|u V  	d S r$   r   r  s     r   r  z+GCTests.test_get_objects.<locals>.<genexpr>z  r  r   c              3       K   | ]}|u V  	d S r$   r   r  s     r   r  z+GCTests.test_get_objects.<locals>.<genexpr>~  r  r   c              3       K   | ]}|u V  	d S r$   r   r  s     r   r  z+GCTests.test_get_objects.<locals>.<genexpr>  r  r   c              3       K   | ]}|u V  	d S r$   r   r  s     r   r  z+GCTests.test_get_objects.<locals>.<genexpr>  r  r   )rF   rG   rE   rV  anyget_objectsr   rI   s    @r   test_get_objectszGCTests.test_get_objects[  s   

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

r   c                    t          j                     |                     t          t          j                              t          t          j        d                                |                     t          t           j        d           |                     t          t           j        d           |                     t          t           j        d           |                     t          t           j        d           d S )Nr  i  i1gX9v?)rF   rG   rH   r   r  assertRaises
ValueErrorr   r:   s    r   test_get_objects_argumentsz"GCTests.test_get_objects_arguments  s    

R^--..R^t<<<==	? 	? 	? 	*bnd;;;*bne<<<)R^S999)R^U;;;;;r   c                 p    G d d          } G fdd|          t          j                     t          j                                  }|                     j        d           ~t          j                     |                     j        d           |                     t          j                  d           j                                         |                     j        d           t          j                     |                     j        d           t          j                     d S )Nc                       e Zd Zd ZdS )AGCTests.test_resurrection_only_happens_once_per_object.<locals>.Ac                     | | _         d S r$   mer:   s    r   r(   zJGCTests.test_resurrection_only_happens_once_per_object.<locals>.A.__init__      r   Nr)   r   r   r   rY   r    #            r   rY   c                   "    e Zd ZdZg Z fdZdS )GGCTests.test_resurrection_only_happens_once_per_object.<locals>.Lazarusr   c                 \    xj         dz  c_         j                            |            d S rB   )resurrectedresurrected_instancesrE   r'   r^  s    r   r   zOGCTests.test_resurrection_only_happens_once_per_object.<locals>.Lazarus.__del__  s4    ##q(##-44T:::::r   N)r   r   r   r  r  r   r^  s   r   r^  r    s9        K$&!; ; ; ; ; ; ;r   r^  r   rC   )	rF   rG   r   rH   r  r   r  clearr   )r'   rY   lazr^  s      @r   .test_resurrection_only_happens_once_per_objectz6GCTests.test_resurrection_only_happens_once_per_object  sJ   	 	 	 	 	 	 	 		; 	; 	; 	; 	; 	; 	;a 	; 	; 	; 	


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

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

,a000
	r   c                 |    G d d          } G fdd          t          j                     t          j                                  } |            }t          |          }||_        ||_        ~~t          j                     |                     t          j                  d           j        	                                }| 
                    t          |d                     |                     t          |j                  |           t          j                     t          j                     d S )Nc                       e Zd Zd ZdS )6GCTests.test_resurrection_is_transitive.<locals>.Cargoc                     | | _         d S r$   r  r:   s    r   r(   z?GCTests.test_resurrection_is_transitive.<locals>.Cargo.__init__  r  r   Nr)   r   r   r   Cargor    r  r   r  c                       e Zd Zg Z fdZdS )8GCTests.test_resurrection_is_transitive.<locals>.Lazarusc                 <    j                             |            d S r$   )r  rE   r  s    r   r   z@GCTests.test_resurrection_is_transitive.<locals>.Lazarus.__del__  s     -44T:::::r   N)r   r   r   r  r   r  s   r   r^  r    s4        $&!; ; ; ; ; ; ;r   r^  rC   cargo)rF   rG   r   r   r  r  rH   r   r  r   rV  hasattrr   )r'   r  r  r  cargo_idinstancer^  s         @r   test_resurrection_is_transitivez'GCTests.test_resurrection_is_transitive  sC   	 	 	 	 	 	 	 		; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	


giie99 		 

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


	r   c                    d} G d d          } G fdd|          }g d }t          j                     t          j                      |            \  }}t          |          D ]} |             t          j                    } |            \  }	}
|                     ||           |                     |	|z
  |           |                     |
|z
  d           |	|
}} |             t          j                    } |            \  }	}
|                     |d           |                     |	|z
  d           |                     |
|z
  d           |	|
}}t          |          D ]} |              |             t          j                    } |            \  }	}
|                     ||           |                     |	|z
  |           |                     |
|z
  d           |	|
}}                                 t          j                    } |            \  }	}
|                     |d           |                     |	|z
  d           |                     |
|z
  d           t          j                     d S )	Nd   c                       e Zd Zd ZdS )LGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.Ac                     | | _         d S r$   r  r:   s    r   r(   zUGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.A.__init__  r  r   Nr)   r   r   r   rY   r    r  r   rY   c                       e Zd Z fdZdS )LGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.Zc                 2                         |            d S r$   r   )r'   zss    r   r   zTGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.Z.__del__  s    		$r   Nr   )r  s   r   Zr    s.                     r   r  c                  T    t          j                    d         } | d         | d         fS )Nr  r  )rF   r  )rO   s    r   getstatszSGCTests.test_resurrection_does_not_block_cleanup_of_other_objects.<locals>.getstats  s&    r"A[>1_#555r   r   rR   )rF   rG   r   r   rH   r  r   )r'   r   rY   r  r  oldcoldncr%   rS   r   ncr  s              @r   9test_resurrection_does_not_block_cleanup_of_other_objectszAGCTests.test_resurrection_does_not_block_cleanup_of_other_objects  s   
 	 	 	 	 	 	 	 		  	  	  	  	  	  	  	  	  	  	6 	6 	6 	


 hjjeq 	 	AACCCCJLL

2AT1%%%eQ''' e	JLL

2AT1%%%eQ''' eq 	 	AACCCC	JLL

2AT1%%%eQ''' e



JLL

2AT1%%%eQ'''
	r   Nz%requires ContainerNoGC extension typec                    t           j                                        } G d d          } G d d          } |            }||_        t	           |                      |_        t          j        |j        j        |          |_	        |j	        g}|
                    |           t          j                     t          j                     ~~t          j                     |                                 t          j                     d S )Nc                       e Zd Zg dZdS )+GCTests.test_trash_weakref_clear.<locals>.A)r\   ywzNrG  r   r   r   rY   r  >  s        (((IIIr   rY   c                       e Zd ZdS )+GCTests.test_trash_weakref_clear.<locals>.ZNrX   r   r   r   r  r  A  rZ   r   r  )unittestmockMockr\   r    r  r2   r3   valuer   rE   rF   rG   r   assert_not_calledr   )r'   ri  rY   r  r\   wr_cycles         r   test_trash_weakref_clearz GCTests.test_trash_weakref_clear  s   @ =%%''	) 	) 	) 	) 	) 	) 	) 	)	 	 	 	 	 	 	 	 ACCAACC  {139h//D6!!!



x

 	""$$$
	r   )4r   r   r   rK   rP   rT   r_   rc   rh   rr   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   requires_working_threadingr  r  r"  r)  r0  r<  rX  ra  rn  ry  r   r  r  r  r  r  r  r  r  r  r  r  r  skipIfr    r	  r   r   r   r@   r@   V   s-       * * ** * ** * *- - -- - -- - -* * *0- - -   \2   \2* * *A! A! A!F * * ]*( ( (0& & && & &* ! ! ]! ) ) ])(! ! !F 102284 84 3284t6 6 606 6 666 6 6(6 6 6,; ; ;.-7 -7 -7^2 2 2$& & &0  @ .G .G  \.G`9 9 9= = =&9 9 9K K K43 3 3, , ,\< < <" " "H     DA A AF X_]d*<> >7 7> >7 7 7r   r@   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	e
d             Z ej        ed	          d
             ZdS )GCCallbackTestsc                 R   t          j                    | _        t          j                     t          j                    | _        t          j        d           t           j                            | j	                   t           j                            | j
                   g | _        d S r  )rF   r  enabledr   r   r   r   	callbacksrE   cb1cb2othergarbager:   s    r   setUpzGCCallbackTests.setUpY  sr    |~~

\^^

Q
DH%%%
DH%%%r   c                    | ` t          j                            | j                   t          j                            | j                   t          j        | j                   | j        rt          j	                     t          j
                     t          j        D ]}t          |t                    rd |_        t          j        d d = | `t          j
                     d S r$   )visitrF   r  r   r  r  r   r   r  r   rG   r   
isinstancer6   r8   r  )r'   r   s     r   tearDownzGCCallbackTests.tearDownc  s    J
DH%%%
DH%%%
TZ   < 	IKKK

: 	# 	#C#}-- #"JqqqM

r   c                     g | _         t          j                     t          j        d d          g c}t          j        d d <   | j                            |           g | _         d S r$   )r  rF   rG   r   r  rE   )r'   r   s     r   precleanzGCCallbackTests.precleant  sX     


!#AAAAAA  )))


r   c                 Z    | j                             d|t          |          f           d S rB   )r  rE   r  )r'   phaseinfos      r   r  zGCCallbackTests.cb1~  s+    
1eT$ZZ011111r   c                    | j                             d|t          |          f           |dk    rWt          | d          rId t          j        D             }d t          j        D             t          j        d d <   |D ]}d |_        
d S d S d S )NrR   stopcleanupc                 <    g | ]}t          |t                    |S r   r  r6   re  r   s     r   rf  z'GCCallbackTests.cb2.<locals>.<listcomp>  s'    HHH:a+G+GH!HHHr   c                 <    g | ]}t          |t                    |S r   r"  r#  s     r   rf  z'GCCallbackTests.cb2.<locals>.<listcomp>  s=     B B B1$.q-$@$@BQ B B Br   )r  rE   r  r  rF   r   r8   )r'   r  r  ucr   s        r   r  zGCCallbackTests.cb2  s    
1eT$ZZ0111F??wtY77?HHRZHHHBB B
 B B BBJqqqM ! ! 		 ???
! !r   c                 v   |                                   t          j                     d | j        D             }d |D             }d |D             }|                     |dgdz             |                     |dgdz             d | j        D             }d |D             }d |D             }|                     |d	gdz             |                     |d
gdz             | j        D ]O}|d         }|                     d|v            |                     d|v            |                     d|v            Pd S )Nc                     g | ]
}|d          S )r   r   re  r   s     r   rf  z0GCCallbackTests.test_collect.<locals>.<listcomp>      &&&aQqT&&&r   c                     g | ]
}|d k    |S rC   r   rk  s     r   rf  z0GCCallbackTests.test_collect.<locals>.<listcomp>      %%%Aa1ffafffr   c                     g | ]
}|d k    |S )rR   r   rk  s     r   rf  z0GCCallbackTests.test_collect.<locals>.<listcomp>  r,  r   rC   rR   c                     g | ]
}|d          S r+  r   r(  s     r   rf  z0GCCallbackTests.test_collect.<locals>.<listcomp>  r)  r   c                     g | ]
}|d k    |S )startr   rk  s     r   rf  z0GCCallbackTests.test_collect.<locals>.<listcomp>  s    +++Aa7llalllr   c                     g | ]
}|d k    |S )r  r   rk  s     r   rf  z0GCCallbackTests.test_collect.<locals>.<listcomp>  s    ***Aa6kkakkkr   r0  r  r  r  r  )r  rF   rG   r  rH   rV  )r'   r   n1n2r   r  s         r   test_collectzGCCallbackTests.test_collect  sr   


 '&4:&&&%%%%%%%%%%aSU###aSU### '&4:&&&+++++*****gYq[)))fXaZ(((  	5 	5AQ4DOOLD0111OOK4/000OOOt34444		5 	5r   c                     |                                   t          j        d           | j        D ]&}|d         }|                     |d         d           'd S )NrR   r  )r  rF   rG   r  rH   )r'   r   r  s      r   test_collect_generationz'GCCallbackTests.test_collect_generation  s^    

1 	4 	4AQ4DT,/3333	4 	4r   c                 r   |                                   t                       t                       t          d           t          j                     | j        D ]O}|d         dk    r|d         }|                     |d         d           |                     |d         d           P|                     t          t          j                  d           t          j        D ]}| 	                    |t                     d| _
        g | _        g t          j        d d <   t          j                     | j        D ]O}|d         dk    r|d         }|                     |d         d	           |                     |d         d           P|                     t          t          j                  d	           d S )
Nr1   rC   r  rR   r  r  r4  Tr   )r  r6   r"   rF   rG   r  rH   r   r   r  r   )r'   r   r  r   s       r   test_collect_garbagez$GCCallbackTests.test_collect_garbage  s   

 	7 	7Atv~~Q4DT+.222T/2A6666 	RZ!,,, 	4 	4A!!!]3333 

111

 	7 	7Atv~~Q4DT+.222T/2A6666 	RZ!,,,,,r   zbuilt with -NDEBUGc                    |                                   t          d           dd l}t          j        d          }|                    t          j        d|g|j        |j                  }|	                                \  }}|j
                                         |j                                         |                     |d           |                     |d           d}|                     |d	|z              |                     |d
           |                     |d|z              |                     |d           |                     |d           d S )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|  sG   gcmodule\.c:[0-9]+: gc_decref: Assertion "gc_get_refs\(g\) > 0" 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  textwrapdedentr}  r   r~  r  r  r   r  r   r   )r'   r  r   r  r   r   address_regexs          r   test_refcount_errorsz$GCCallbackTests.test_refcount_errors  s    	 	h    & cndD9$.O$.O  5 5 		W	Y 	Y 	Y%	' 	' 	' *"]2	4 	4 	4#	% 	% 	%"]2	4 	4 	4&	( 	( 	(-	/ 	/ 	/ 	/ 	/r   N)r   r   r   r  r  r  r  r  r4  r6  r   r8  r  r  BUILD_WITH_NDEBUGr>  r   r   r   r  r  X  s            "  2 2 2! ! !5 5 564 4 4  -  - \ -F X_&)+ +2/ 2/+ +2/ 2/ 2/r   r  c                   &    e Zd Zd Zd Zd Zd ZdS )GCTogglingTestsc                 ,    t          j                     d S r$   )rF   r   r:   s    r   r  zGCTogglingTests.setUp	  s    
	r   c                 ,    t          j                     d S r$   )rF   r   r:   s    r   r  zGCTogglingTests.tearDown  s    

r   c                 v  
 t          d          }t          j                     t          d          }||_        |`t          d          }t          j        |          
g 
fd}t          j        ||          }d x}x}}g }d}t                      }|j        s_|dz  }|dk    r| 	                    d           | 
                    t                    d           |                    g            |j        _| 
                    t                    d           D ]}	| 
                    |	d            d S )Nr   rC   rR   c                 (                 gd d <   d S r$   r   )r/   c2wrrh  s    r   ri  z2GCTogglingTests.test_bug1055820c.<locals>.callback  s    tvvhDGGGr   '  'gc didn't happen after 10000 iterations)r"   rF   rG   keep_c0_aliver&   r2   r3   r+   r.   r   rH   r   rE   )r'   c0c1c2ri  c0wrjunkr%   detectorr   rF  rh  s             @@r   test_bug1055820cz GCTogglingTests.test_bug1055820c  sa    a[[

a[[Ga[[{2	 	 	 	 	 	 {2x((R"@ ==& 	FA5yy		CDDDSYY***KKOOO & 	 	TA&&& 	& 	&A Q%%%%	& 	&r   c                 d  	
 g 
 G 	
fddt                     } |d          }t          j                     t          d          }||_        |`t          d          }t          j        |          	d x}x}}t                      }g }d}|j        s_|dz  }|dk    r| 	                    d           | 
                    t          
          d           |                    g            |j        _| 
                    t          
          d           
D ]}| 
                    |d            d S )Nc                       e Zd Z fdZdS )+GCTogglingTests.test_bug1055820d.<locals>.Dc                 (                 gd d <   d S r$   r   )r'   rF  rh  s    r   r   z3GCTogglingTests.test_bug1055820d.<locals>.D.__del__\  s    466(QQQr   Nr   )rF  rh  s   r   DrS  [  s3        # # # # # # # #r   rU  r   rC   rR   rG  rH  )r"   rF   rG   keep_d0_aliver&   r2   r3   r+   r.   r   rH   r   rE   )r'   rU  d0rK  rL  rO  rN  r%   r   rF  rh  s            @@r   test_bug1055820dz GCTogglingTests.test_bug1055820dU  sl   
 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# QqTT

a[[Ga[[{2R"< ==& 	FA5yy		CDDDSYY***KKOOO & 	 	TA&&& 	& 	&A Q%%%%	& 	&r   N)r   r   r   r  r  rP  rX  r   r   r   rA  rA    sY            D& D& D&LA& A& A& A& A&r   rA  c                       e Zd Zd ZdS )PythonFinalizationTestsc                 N    t          j        d          }t          d|           d S )Na   
            import ast
            import codecs

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

            # Put the cycle somewhere to survive until the last GC collection.
            # Codec search functions are only cleared at the end of
            # interpreter_clear().
            def search_func(encoding):
                return None
            search_func.a = x
            codecs.register(search_func)
        r   )r;  r<  r   )r'   r   s     r   test_ast_finiz%PythonFinalizationTests.test_ast_fini  s2         " 	t$$$$$r   N)r   r   r   r\  r   r   r   rZ  rZ    s#        % % % % %r   rZ  c                      t          j                    at          j                     t          j                    at          j        t
          t           j         z             t          j                     d S r$   )	rF   r  r  r   r   r   r   
DEBUG_LEAKrG   r   r   r   setUpModuler_    sK    lnnGJLLLLNNEL"-'(((JLLLLLr   c                      t          j        t                     t          rt	          d           t          j                     t          st          j                     d S d S )Nzrestoring automatic collection)rF   r   r   r   printr   r  r   r   r   r   tearDownModulerb    sU    L 0.///IKKK 

 r   __main__)-r  unittest.mocktest.supportr   r   r   r   test.support.import_helperr   test.support.os_helperr   r	   r
   test.support.script_helperr   r   r   rF   r   	sysconfigr;  r   r   r2   	_testcapir   ImportErrorr    r   r"   r+   r6   get_config_varsgetr?  r  TestCaser@   r  rA  rZ  r_  rb  r   mainr   r   r   <module>rp     sz       = = = = = = = = = = = = 4 4 4 4 4 4 ; ; ; ; ; ; ; ; ; ; D D D D D D D D ) ) ) ) ) ) 				 



           %%%%%%%       '''''''   MMM    v   
: : : : :& : : :     F    9"";33 ?#'@y'@'B'B;'OO
 %WS*<===
    h   D m/ m/ m/ m/ m/h' m/ m/ m/`N& N& N& N& N&h' N& N& N&b% % % % %h/ % % %6  	 	 	 zHMOOOOO s$   A A"!A"&A- -A76A7