a
    i‚jK	  ã                   @   sN   d Z ddlZddlZddlmZ ddlZG dd„ dejƒZedkrJe 	¡  dS )zCTest that copying mujoco.MjData multiple times doesn't leak memory.é    N)Úabsltestc                   @   s$   e Zd Zdd„ Zeedœdd„ZdS )ÚMemoryLeakTestc              	   C   s|   t  d¡}|  d¡}zVtj |¡}t |¡}d}tdƒD ]$}t ||¡ t	 
|¡}||j7 }q8W |  |¡ n|  |¡ 0 d S )Naª  
    <mujoco>
      <asset>
        <material name="body"/>
        <texture name="grid" type="2d" builtin="checker"
            width="1024" height="1024" rgb1="0 0 0" rgb2="1 1 1"/>
        <material name="grid" texture="grid" texrepeat="1 1"
            texuniform="true" reflectance=".2"/>
      </asset>
      <worldbody>
          <geom size="0 0 .05" type="plane" material="grid"/>
      </worldbody>
    </mujoco>
    l        r   iè  )ÚtextwrapÚdedentÚ_memory_limitÚmujocoZMjModelZfrom_xml_stringZMjDataÚrangeZmj_stepÚcopyÚdeepcopyÚtime)ÚselfZ	model_xmlÚlimitÚmodelÚdataÚtotalÚ_Z	last_data© r   úW/home/ghrups/robot-bench/.venv/lib64/python3.9/site-packages/mujoco/memory_leak_test.pyÚtest_deepcopy_mjdata_leak   s    



z(MemoryLeakTest.test_deepcopy_mjdata_leak)Úlimit_in_bytesÚreturnc              	   C   sN   d}z.ddl }| |j¡\}}| |j||f¡ W n ttfyH   Y n0 |S )z4Limits max memory usage, and returns previous limit.éÿÿÿÿr   N)ÚresourceZ	getrlimitZ	RLIMIT_ASZ	setrlimitÚImportErrorÚ
ValueError)r   r   Zsoftr   Úhardr   r   r   r   7   s    zMemoryLeakTest._memory_limitN)Ú__name__Ú
__module__Ú__qualname__r   Úintr   r   r   r   r   r      s   r   Ú__main__)
Ú__doc__r	   r   Zabsl.testingr   r   ZTestCaser   r   Úmainr   r   r   r   Ú<module>   s   -