
ƆIXQx                 @   s  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 d  d l m Z m	 Z	 m
 Z
 d  d l m Z y d  d l Z Wn e k
 r d Z Yn Xe j d  Z d d   Z d d	   Z d
 d   Z d d   Z d d   Z d d   Z d d   Z Gd d   d e j  Z Gd d   d e j  Z Gd d   d e j  Z Gd d   d e j  Z d d   Z e d k re   d S)    N)patch)assert_python_okassert_python_failure interpreter_requires_environment)support    c             C   s~   g  } t  j d  } x\ t |   D]N } | j } | j | } | j | j | f  d } | j } | d  k r" Pq" Wt |  S)N   r   )	sys	_getframerangef_codef_linenoappendco_filenamef_backtuple)nframeZlineno_deltaframesframeindexcodelineno r   N/afs/.cs.wisc.edu/s/python-3.5.2/amd64_ubu16/lib/python3.5/test_tracemalloc.py
get_frames   s    		r   c             C   sB   t  j   } |  t } t | d  } d | } | t  j |  f S)Nr      x)tracemallocget_traceback_limitEMPTY_STRING_SIZEr   	Traceback)sizer   Z	bytes_lenr   datar   r   r   allocate_bytes   s
    

r"   c              C   sd   d }  d d d d d" d% g } t  j | |   } d) d- d1 d5 d9 d< g } t  j | |   } | | f S)=N   
   a.pyb.py      B   r      	<unknown>r       c.pyB  r%   r#   r&   r'   r0   r1   )r$   r2   r%   r#   r&   r'   r3   r4   )r$   r5   r%   r#   r&   r'   r6   r7   )r$   r8   r%   r(   r&   r'   r9   r:   )r#   r;   r&   r   r<   )r)   r=   r+   r   r>   )r*   r?   r%   r#   r&   r'   r@   rA   )r$   rB   r%   r#   r&   r'   rC   rD   )r$   rE   r%   r#   r&   r'   rF   rG   )r$   rH   r%   r(   r&   r'   rI   rJ   )r#   rK   r%   r(   r&   r'   rL   rM   )r,   rN   r.   r/   rO   )r-   rP   )r   Snapshot)traceback_limit
raw_tracessnapshotZraw_traces2	snapshot2r   r   r   create_snapshots%   s     		rV   c             C   s   t  j |  | f  S)N)r   Z_Frame)filenamer   r   r   r   r   C   s    r   c              G   s   t  j |   S)N)r   r   )r   r   r   r   	tracebackF   s    rX   c             C   s   t  |  | f  S)N)rX   )rW   r   r   r   r   traceback_linenoI   s    rY   c             C   s   t  |  d  S)Nr   )rY   )rW   r   r   r   traceback_filenameL   s    rZ   c               @   s   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z e j e e d  d  d d     Z d! S)"TestTracemallocEnabledc             C   s*   t  j   r |  j d  t  j d  d  S)Nz+tracemalloc must be stopped before the testr   )r   
is_tracingZskipTeststart)selfr   r   r   setUpQ   s    zTestTracemallocEnabled.setUpc             C   s   t  j   d  S)N)r   stop)r^   r   r   r   tearDownW   s    zTestTracemallocEnabled.tearDownc             C   so   d d   t  d  D } t j   } |  j | d  t j   t j   } |  j | d  |  j | |  d  S)Nc             S   s   g  |  ] } t  d    q S){   )r"   ).0countr   r   r   
<listcomp>[   s   	 zFTestTracemallocEnabled.test_get_tracemalloc_memory.<locals>.<listcomp>i  r   )r   r   Zget_tracemalloc_memoryassertGreaterEqualclear_tracesassertLessEqual)r^   r!   r    size2r   r   r   test_get_tracemalloc_memoryZ   s    
z2TestTracemallocEnabled.test_get_tracemalloc_memoryc             C   sE   t  j   d } t |  \ } } t  j |  } |  j | |  d  S)Ni90  )r   rg   r"   get_object_tracebackassertEqual)r^   obj_sizeobjobj_tracebackrX   r   r   r   test_get_object_tracebackd   s
    
z0TestTracemallocEnabled.test_get_object_tracebackc             C   s   d } t  j   |  j t t  j d  t  j   t  j d  t |  \ } } t  j |  } |  j t |  d  |  j | |  t  j   t  j d  t |  \ } } t  j |  } |  j t |  d  |  j | |  d  S)Nr$   r   )	r   r`   assertRaises
ValueErrorr]   r"   rk   rl   len)r^   rm   obj2obj2_tracebackrX   rn   ro   r   r   r   test_set_traceback_limitk   s    


z/TestTracemallocEnabled.test_set_traceback_limitc             C   s9   x% | D] } | d | j  k r | Sq W|  j d  d  S)Nr   ztrace not found)_framesZfail)r^   tracesrX   tracer   r   r   
find_trace   s    z!TestTracemallocEnabled.find_tracec             C   s   t  j   d } t |  \ } } t  j   } |  j | |  } |  j | t  | \ } } |  j | |  |  j | | j  t  j	   |  j t  j   g   d  S)Ni90  )
r   rg   r"   _get_tracesr{   ZassertIsInstancer   rl   rx   r`   )r^   rm   rn   ro   ry   rz   r    rX   r   r   r   test_get_traces   s    

z&TestTracemallocEnabled.test_get_tracesc                s   d d       f d d     f d d   } t  j   t  j d  d } | |  \ } } | |  \ } } t  j   } |  j | |  } |  j | |  }	 | \ }
 } |	 \ } } |  j | |  |  j | |  d  S)	Nc             S   s
   t  |   S)N)r"   )r    r   r   r   allocate_bytes2   s    zPTestTracemallocEnabled.test_get_traces_intern_traceback.<locals>.allocate_bytes2c                s
     |   S)Nr   )r    )r~   r   r   allocate_bytes3   s    zPTestTracemallocEnabled.test_get_traces_intern_traceback.<locals>.allocate_bytes3c                s
     |   S)Nr   )r    )r   r   r   allocate_bytes4   s    zPTestTracemallocEnabled.test_get_traces_intern_traceback.<locals>.allocate_bytes4r'   rb   )r   r`   r]   r|   r{   rl   ZassertIs)r^   r   rm   Zobj1Zobj1_tracebackru   rv   ry   Ztrace1Ztrace2Zsize1Z
traceback1ri   
traceback2r   )r~   r   r    test_get_traces_intern_traceback   s    
z7TestTracemallocEnabled.test_get_traces_intern_tracebackc       	      C   sJ  d } d } t  j   t |  \ } } t  j   \ } } |  j | |  |  j | |  |  j | | |  |  j | | |  d  } t  j   \ } } |  j | |  |  j | | | |  |  j | |  t  j   |  j t  j   d  t |  \ } } t  j   \ } } |  j | |  t  j   |  j t  j   d  d  S)Ni   i   r   i   )r   r   )r   r   )	r   rg   r"   Zget_traced_memoryrf   rh   Z
assertLessrl   r`   )	r^   Z	max_errorrm   rn   ro   r    Z	peak_sizeri   Z
peak_size2r   r   r   test_get_traced_memory   s*    


z-TestTracemallocEnabled.test_get_traced_memoryc             C   sX   t  d  \ } } t j |  } |  j |  t j   t j |  } |  j |  d  S)Nrb   )r"   r   rk   ZassertIsNotNonerg   assertIsNone)r^   rn   ro   rX   r   r   r   r   test_clear_traces   s    
z(TestTracemallocEnabled.test_clear_tracesc             C   s>   t  j   |  j t  j    t  j   |  j t  j    d  S)N)r   r`   assertFalser\   r]   
assertTrue)r^   r   r   r   test_is_tracing   s    

z&TestTracemallocEnabled.test_is_tracingc          
   C   s   t  d  \ } } t j   } | j t j  |  j t j t j  t j j	 t j  } |  j
 | j | j  t j   |  j t   } t j   Wd  QRX|  j
 t | j  d  d  S)Nrb   zLthe tracemalloc module must be tracing memory allocations to take a snapshot)r"   r   take_snapshotdumpr   TESTFN
addCleanupunlinkrQ   loadrl   ry   r`   rr   RuntimeErrorstr	exception)r^   rn   sourcerT   rU   cmr   r   r   test_snapshot   s    
z$TestTracemallocEnabled.test_snapshotc             C   sg   t  j   } d | _ | j t j  |  j t j t j  t  j j	 t j  } |  j
 | j d  d  S)Nnew)r   r   Z	test_attrr   r   r   r   r   rQ   r   rl   )r^   rT   rU   r   r   r   test_snapshot_save_attr   s    	z.TestTracemallocEnabled.test_snapshot_save_attrc             C   sK   t  j   s d Sd } t |  \ } } t  j |  } | d  k rG d Sd S)Nr#   i90     r   )r   r\   r"   rk   )r^   rm   rn   ro   rX   r   r   r   
fork_child  s    z!TestTracemallocEnabled.fork_childforkzneed os.fork()c             C   s   t  j   } | s< d } z |  j   } Wd  t  j |  XnM t  j | d  \ } } |  j t  j |   t  j |  } |  j | d  d  S)Nr   r   )	osr   r   _exitwaitpidr   	WIFEXITEDWEXITSTATUSrl   )r^   pidexitcodeZpid2statusr   r   r   	test_fork  s    z TestTracemallocEnabled.test_forkN)__name__
__module____qualname__r_   ra   rj   rp   rw   r{   r}   r   r   r   r   r   r   r   unittestZ
skipUnlesshasattrr   r   r   r   r   r   r[   P   s   
$	r[   c               @   s   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d S)TestSnapshoti  c             C   s%  d g } t  j   	} | j t j t d d d  | j t j t d d d  | j t j t d d |  t j   } |  j | j d  |  j t	 | j
  d	  | j
 d
 } |  j | j d  |  j t	 | j  d	  |  j | j d
 j d  |  j | j d
 j d  Wd  QRXd  S)Nr(   a.pyr#   r\   Zreturn_valueTr   r|   r   r   r   r#   r   )r(   r   )
contextlib	ExitStackenter_contextr   objectr   r   rl   rR   rt   ry   r    rX   rW   r   )r^   rS   stackrT   rz   r   r   r   test_create_snapshot&  s     	


z!TestSnapshot.test_create_snapshotc       
   	   C   sF  t    \ } } t j d d  } t j d d d  } t j d d d  } t | j j  } | j | f  } |  j | j j d d d d d g  |  j | j j |  | j | | f  } |  j | j j d" d& d* d. g  | j f   }	 |  j |	 |  |  j |	 j | j  |  j |	 j | j  |  j	 t
 | j |  d  S)/NFb.pyTa.pyr#   r(   r$   r'   r*   	<unknown>r   r   r#   r   r'   r   r   )r$   r   r   r#   r   r'   r   r   )r$   r   r   r#   r   r'   r   r   )r$   r   r   r(   r   r'   r   r   )r#   r   r   r   r   )r*   r   r   r#   r   r'   r   r   )r$   r   r   r#   r   r'   r   r   )r$   r   r   r#   r   r'   r   r   )r$   r   r   r(   r   r'   r   r   )r#   r   )rV   r   Filterlistry   Z_tracesZfilter_tracesrl   ZassertIsNotrr   	TypeError)
r^   rT   rU   Zfilter1Zfilter2Zfilter3Zoriginal_tracesZ	snapshot3Z	snapshot4Z	snapshot5r   r   r   test_filter_traces:  s0    

zTestSnapshot.test_filter_tracesc             C   s  t    \ } } t d d  } t d d  } t d d  } t d d  } t d d	  } | j d
  } |  j | t j | d d  t j | d d  t j | d d  t j | d d  g  | j d
  }	 |  j |	 t j | d d  t j | d d  t j | d d  g  | j | d
  }
 |  j |
 t j | d d d d  t j | d d d d  t j | d d d d  t j | d d d d  t j | d d d d  g  d  S)Nz	<unknown>r   za.pyr#   r(   zb.pyr   zc.pyiB  r   r)      r   r*   i  i  i  irq   irq   )rV   rY   
statisticsrl   r   	Statistic
compare_toStatisticDiff)r^   rT   rU   tb_0tb_a_2tb_a_5tb_b_1Ztb_c_578stats1stats2r   r   r   r   test_snapshot_group_by_line`  s0    			z(TestSnapshot.test_snapshot_group_by_linec       
      C   s]  t    \ } } t d  } t d  } t d  } t d  } | j d  } |  j | t j | d d  t j | d d	  t j | d
 d  g  | j d  } |  j | t j | d d  t j | d d  g  | j | d  }	 |  j |	 t j | d d d d  t j | d d d d  t j | d d d d  t j | d d d d  g  d  S)Nz	<unknown>za.pyzb.pyzc.pyrW   r)   r       r'   r*   i  r(   i  i  r   irq   irq   )rV   rZ   r   rl   r   r   r   r   )
r^   rT   rU   r   tb_atb_bZtb_cr   r   diffr   r   r   test_snapshot_group_by_file  s(    			z(TestSnapshot.test_snapshot_group_by_filec             C   s  t    \ } } t d d  } t d d  } t d  } t d  } | j d	  } |  j | t j | d
 d  t j | d d  t j | d d  t j | d d  g  t d  } | j d	  }	 |  j |	 t j | d d  t j | d d  t j | d d  g  | j | d	  }
 |  j |
 t j | d d d d  t j | d d d d  t j | d d d d  t j | d d d d  t j | d d d d  g  |  j t	 | j d	 d d d  S) Na.pyr#   b.pyr'   r(   r   	<unknown>r   rX   r)   r   r   r*   c.pyB  i  i  i  Z
cumulativeT)r   r#   )r   r'   )r   r(   )r   r'   )r   r   )r   r   )r   r   irq   irq   )
rV   rX   r   rl   r   r   r   r   rr   rs   )r^   rT   rU   Ztb1Ztb2Ztb3Ztb4r   Ztb5r   r   r   r   r    test_snapshot_group_by_traceback  s4    				z-TestSnapshot.test_snapshot_group_by_tracebackc          
   C   sG  t    \ } } t d  } t d  } t d  } t d d  } t d d  } t d d  } t d d  }	 | j d d	  }
 |  j |
 t j | d
 d  t j | d d  t j | d d  g  | j d d	  }
 |  j |
 t j | d d  t j |	 d d  t j | d d  t j | d d  t j | d d  g  d  S)Nz	<unknown>za.pyzb.pyr#   r(   r   r'   rW   Tb   r   r*   r   r)   r   r   )rV   rZ   rY   r   rl   r   r   )r^   rT   rU   r   r   r   r   r   r   Ztb_b_4statsr   r   r   !test_snapshot_group_by_cumulative  s(    		z.TestSnapshot.test_snapshot_group_by_cumulativec             C   su   t    \ } } | j d } |  j t |  d  | j } |  j t |  d  | d } |  j t |  d  d  S)Nr   za.py:2: 10 Bza.py:2)rV   ry   rl   r   rX   )r^   rT   rU   rz   rX   r   r   r   r   test_trace_format  s    	
zTestSnapshot.test_trace_formatc             C   sB   t    \ } } | j d  } | d } |  j t |  d  d  S)Nr   r   z(b.py:1: size=66 B, count=1, average=66 B)rV   r   rl   r   )r^   rT   rU   r   statr   r   r   test_statistic_format  s
    
z"TestSnapshot.test_statistic_formatc             C   sE   t    \ } } | j | d  } | d } |  j t |  d  d  S)Nr   r   z;a.py:5: size=5002 B (+5000 B), count=2 (+1), average=2501 B)rV   r   rl   r   )r^   rT   rU   r   r   r   r   r   test_statistic_diff_format  s
    
z'TestSnapshot.test_statistic_diff_formatc             C   s|   t    \ } } |  j | j d  d  | j d | j d f  | j d j } |  j | d  d  | d | d f  d  S)Nr#   r   r   )rV   rl   ry   rX   )r^   rT   rU   rX   r   r   r   test_slices  s    zTestSnapshot.test_slicesc             C   s   t    \ } } d d   } t j j d d | u | j d j } |  j | j   d d d d	 g  |  j | j d
 d  d d g  |  j | j d
 d  g   Wd  QRXd  S)Nc             S   s   d |  | f S)Nz
  <%s, %s>r   )rW   r   r   r   r   getline  s    z3TestSnapshot.test_format_traceback.<locals>.getlineztracemalloc.linecache.getlineZside_effectr   z  File "a.py", line 2z    <a.py, 2>z  File "b.py", line 4z    <b.py, 4>limitr   rq   )rV   r   Zmockr   ry   rX   rl   format)r^   rT   rU   r   tbr   r   r   test_format_traceback  s    


z"TestSnapshot.test_format_tracebackN)r   r   r   maxDiffr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   #  s   &#&		r   c               @   sR   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d S)TestFiltersi   c          	   C   sL  t  j d d  } |  j | j d  |  j | j d  |  j | j  |  j | j d  t  j d d d d  } |  j | j d  |  j | j d  |  j | j d  |  j | j d  t  j d d d d d d d	 d  } |  j | j d  |  j | j d  |  j | j d  |  j | j d  |  j t	 t
 | d d  d  S)
NTabcFztest.pyrb   	inclusivefilename_patternr   
all_frames)r   r   rl   r   r   r   r   r   rr   AttributeErrorsetattr)r^   fr   r   r   test_filter_attributes  s     $z"TestFilters.test_filter_attributesc             C   s   t  j d d  } |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   t  j d d  } |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   t  j d d d  } |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   t  j d d d  } |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   t  j d d d  } |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   t  j d d d  } |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   |  j | j d d   d  S)NTr   r   r(   r$   12356F)r   r   r   _match_framer   )r^   r   r   r   r   test_filter_match5  sT    zTestFilters.test_filter_matchc             C   s   d d   } |  j  | d d d   |  j | d d d   |  j | d d d   |  j | d d d   |  j  | d d d   |  j  | d d d   d  S)Nc             S   s"   t  j |  |  } | j | d  S)Nr   )r   r   r  )r   rW   patternr   r   r   r   fnmatchj  s    z7TestFilters.test_filter_match_filename.<locals>.fnmatchTr   r  z	<unknown>F)r   r   )r^   r  r   r   r   test_filter_match_filenamei  s    z&TestFilters.test_filter_match_filenamec             C   sx  d d   } |  j  | d d   |  j  | d d   |  j | d d   |  j | d d   |  j | d d   |  j  | d d   |  j  | d d   |  j | d d   |  j | d d	   |  j  | d d
   |  j  | d d   |  j | d d   |  j | d d   |  j  | d d   |  j  | d d   |  j | d d   |  j | d d   |  j  | d d   |  j  | d d   |  j | d d   |  j | d d   t j d k rD|  j | d d   |  j | d d   |  j | d d   |  j | d d   nX |  j  | d d   |  j  | d d   |  j  | d d   |  j  | d d   t j d k r|  j | d  d!   |  j | d! d    |  j | d" d#   |  j | d$ d%   nX |  j  | d  d!   |  j  | d! d    |  j  | d" d#   |  j  | d$ d%   |  j  | d& d   d  S)'Nc             S   s"   t  j d |  } | j |  d  S)NTr   )r   r   r  )rW   r  filterr   r   r   r  w  s    z=TestFilters.test_filter_match_filename_joker.<locals>.fnmatchr    *Zabcddefza*zabc*zb*zabcd*za*cZabcdcxza*cxZabbZabcdceZabcdeza*c*eZ	abcbdefegza*bd*egZabcddZ	abcbdefefza.pycza.pyntZaBCZABcZaBcDezAb*dEza.PYza.PYCza/bza\bza/b\cza\b/cza/b/cza\b\cza.pyo)r   r   r   name)r^   r  r   r   r    test_filter_match_filename_jokerv  sR    z,TestFilters.test_filter_match_filename_jokerc             C   s,  d } d } d } d } t  j d
 d d d
 } |  j | j |   |  j | j |   |  j | j |   |  j | j |   t  j d
 d d d } |  j | j |   |  j | j |   |  j | j |   |  j | j |   t  j d d d d
 } |  j | j |   |  j | j |   |  j | j |   |  j | j |   t  j d d d d } |  j | j |   |  j | j |   |  j | j |   |  j | j |   t  j d d d d } |  j | j |   |  j | j |   |  j | j |   |  j | j |   t  j d
 d d d
 } |  j | j |   |  j | j |   |  j | j |   |  j | j |   t  j d d d d
 } |  j | j |   |  j | j |   |  j | j |   |  j | j |   d  S)Na.pyr#   b.pyr   r'   r(   c.py	<unknown>r   Tr   Fr  r#   r  r   )r  r  r  r'   r  r(   )r  r  r  r(   r  r   )r  r  r  r   )r  )r   r   r   Z_match_tracebackr   )r^   t1Zt2Zt3unknownr   r   r   r   test_filter_match_trace  sN    z#TestFilters.test_filter_match_traceN)	r   r   r   r   r   r  r  r  r  r   r   r   r   r     s   4Er   c               @   s   e  Z d  Z d d   Z e j e   d  d d    Z d d   Z d d	   Z	 d
 d   Z
 d d   Z d d   Z d d   Z d S)TestCommandLinec             C   s>   d } t  d |  \ } } } | j   } |  j | d  d  S)Nz3import tracemalloc; print(tracemalloc.is_tracing())z-cs   False)r   rstriprl   )r^   r   okstdoutstderrr   r   r    test_env_var_disabled_by_default  s    z0TestCommandLine.test_env_var_disabled_by_defaultz6Cannot run -E tests when PYTHON env vars are required.c             C   sG   d } t  d d | d d \ } } } | j   } |  j | d  d S)zAPYTHON* environment variables must be ignored when -E is present.z3import tracemalloc; print(tracemalloc.is_tracing())z-Ez-cPYTHONTRACEMALLOC1s   FalseN)r   r  rl   )r^   r   r  r  r   r   r   r   test_env_var_ignored_with_E  s    !z+TestCommandLine.test_env_var_ignored_with_Ec             C   sD   d } t  d | d d \ } } } | j   } |  j | d  d  S)Nz3import tracemalloc; print(tracemalloc.is_tracing())z-cr"  r#  s   True)r   r  rl   )r^   r   r  r  r   r   r   r   test_env_var_enabled_at_startup  s    z/TestCommandLine.test_env_var_enabled_at_startupc             C   sD   d } t  d | d d \ } } } | j   } |  j | d  d  S)Nz<import tracemalloc; print(tracemalloc.get_traceback_limit())z-cr"  Z10s   10)r   r  rl   )r^   r   r  r  r   r   r   r   test_env_limit  s    zTestCommandLine.test_env_limitc             C   sw   xp d D]h } |  j  d |  M t j   9 t d d d t |  \ } } } |  j d	 |  Wd  QRXWd  QRXq Wd  S)Nr   r   r#   r   r   z-cpassr"  s+   PYTHONTRACEMALLOC: invalid number of framesrq      @)rq   r   r(  )subTestr   SuppressCrashReportr   r   assertIn)r^   r   r  r  r   r   r   r   test_env_var_invalid  s    		z$TestCommandLine.test_env_var_invalidc             C   s   x d D]{ \ } } |  j  d | d |  T d } t d	 | d
 |  \ } } } | j   } |  j | t |  j d   Wd  QRXq Wd  S)Nr   r   tracemalloc=1tracemalloc=15   xoptionsr   z<import tracemalloc; print(tracemalloc.get_traceback_limit())z-Xz-casciiztracemallocr   r-  r   r.  r/  )r2  r3  r4  )r)  r   r  rl   r   encode)r^   r0  r   r   r  r  r   r   r   r   test_sys_xoptions  s      z!TestCommandLine.test_sys_xoptionsc             C   s~   xw d D]o } |  j  d |  T t j   @ d d | d d	 f } t |   \ } } } |  j d
 |  Wd  QRXWd  QRXq Wd  S)Nr   r   r#   r   r   z-Xztracemalloc=%sz-cr'  s/   -X tracemalloc=NFRAME: invalid number of framesrq      @)rq   r   r7  )r)  r   r*  r   r+  )r^   r   argsr  r  r   r   r   r   test_sys_xoptions_invalid"  s    	z)TestCommandLine.test_sys_xoptions_invalidc             C   s   d } t  d d d |  d  S)Nz2import _testcapi; _testcapi.test_pymem_alloc0(); 1z-Xr   z-c)r   )r^   r   r   r   r   test_pymem_alloc0,  s    z!TestCommandLine.test_pymem_alloc0N)r   r   r   r!  r   ZskipIfr   r$  r%  r&  r,  r6  r9  r:  r   r   r   r   r    s   
r  c               C   s   t  j t t t t  d  S)N)r   Zrun_unittestr[   r   r   r  r   r   r   r   	test_main3  s
    r;  __main__)r   r   r	   r   r   Zunittest.mockr   Ztest.support.script_helperr   r   r   testr   	threadingImportError	getsizeofr   r   r"   rV   r   rX   rY   rZ   ZTestCaser[   r   r   r  r;  r   r   r   r   r   <module>   s4   G