o
    tVÆgÁ>  ã                   @   sl   d dl Z d dlZd dlZd dlZd dlZejjZG dd„ dejƒZG dd„ dejƒZe	dkr4e 
¡  dS dS )é    Nc                   @   sž   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Ze 	e
 ¡ d
kd¡e 	ej dd¡d¡dd„ ƒƒZe 	e
 ¡ d
kd¡e 	ej dd¡d¡dd„ ƒƒZdd„ ZdS )ÚClockTypeTestÚtimingc                 C   s   t ƒ }|  |d¡ dS )z$Ensure a Clock object can be createdzClock cannot be constructedN)ÚClockÚ
assertTrue)ÚselfÚc© r   úJ/home/ubuntu/.local/lib/python3.10/site-packages/pygame/tests/time_test.pyÚtest_construction   s   zClockTypeTest.test_constructionc                 C   s^   t ƒ }|  | ¡ d¡ |  t| ¡ ƒtk¡ d}|  |d|¡ |  |d|¡ |  |d|¡ dS )z(test_get_fps tests pygame.time.get_fps()r   ç333333Ó?éd   é<   é   N)r   ÚassertEqualÚget_fpsr   ÚtypeÚfloatÚ	_fps_test)r   r   Údeltar   r   r	   Útest_get_fps   s   zClockTypeTest.test_get_fpsc                 C   sD   d| }t |ƒD ]}| ¡  t |¡ q| j| ¡ ||| d dS )z>ticks fps times each second, hence get_fps() should return fpsg      ð?©r   N)ÚrangeÚtickÚtimeÚsleepÚassertAlmostEqualr   )r   ÚclockÚfpsr   Údelay_per_frameÚfr   r   r	   r   !   s
   zClockTypeTest._fps_testc           
      C   s¬   d}d}|d }d}d}t ƒ }|  | ¡ d¡ t|ƒD ]}t |¡ | |¡ | ¡ }| j|||d qt|ƒD ]}t |¡ | ¡  | ¡ }| ¡ }	| j||	|d q8d S )Né
   çš™™™™™¹?éè  é   é2   r   r   )	r   r   Úget_rawtimer   r   r   r   r   Úget_time)
r   Ú
iterationsÚdelayÚdelay_milisecondsÚframerate_limitr   r   r   Úc1Úc2r   r   r	   Útest_get_rawtime*   s&   


ûzClockTypeTest.test_get_rawtimeÚs390xúFails on s390xÚCINú'CI can have variable time slices, slow.c                 C   sº   d}|d }d}d}t ƒ }|  | ¡ d¡ t|ƒD ]}t |¡ | ¡  | ¡ }| j|||d qt|ƒD ]%}t ¡ }t |¡ | ¡  t ¡ }	| ¡ }|	| d }
| j|
||d q5d S )Nr!   r"   r    r$   r   r   )r   r   r&   r   r   r   r   r   )r   r(   r)   r'   r   r   Úir+   Út0Út1Úd0r   r   r	   Útest_get_timeD   s,   

ÿ÷zClockTypeTest.test_get_timec                 C   sF  	 d}d}d}d}d}g }t ƒ }| ¡  tdƒD ]}t |d ¡ | | ¡ ¡ qt|ƒt|ƒfD ]}	|	|kr<| |	¡ q1t	t
|ƒƒt|ƒ }
| j|
||d t ƒ }g }t ¡ }t|ƒD ]
}| | |¡¡ q\t|ƒt|ƒfD ]}	|	td| ƒkr~| |	¡ qot ¡ }| j|| d	|d t	t
|ƒƒt|ƒ }| jd| ||d d
S )zTests time.Clock.tick()r#   r   é   r   g      @r   r"   r   é   N)r   r   r   r   r   ÚappendÚminÚmaxÚremover   ÚsumÚlenr   Úround)r   ÚepsilonÚepsilon2Úepsilon3Útesting_framerateÚmillisecondsÚ
collectionr   r2   ÚoutlierÚaverage_timeÚstartÚendÚaverage_tick_timer   r   r	   Ú	test_tickf   sB   
€
€

ÿzClockTypeTest.test_tickc                 C   st  t ƒ }d}d}d}|  | |¡|| | ¡ tj d¡ |  | |¡|| | ¡ tj d¡ |  | |¡|| | ¡ d}|  | |¡|| | ¡ d}|  | |¡|| | ¡ d}t|| ƒ}|  | |¡|| ¡ d}	t||	 ƒ}
|  | |	¡|
| ¡ d	}|  | |¡d	¡ d
}|  | |¡d	¡ d}t|| ƒ}|  | |¡|| ¡ d}|  | |¡|| | ¡ dS )zTest tick_busy_loopr"   r8   é(   r    éÈ   iô  é#   iî  r   éÿÿÿÿg     `@@TN)r   ÚassertGreaterEqualÚtick_busy_loopÚpygamer   ÚwaitÚintr   )r   r   Úsecond_lengthÚshortfall_toleranceÚ
sample_fpsÚhigh_fpsÚlow_fpsÚlow_non_factor_fpsÚ#frame_length_without_decimal_placesÚhigh_non_factor_fpsÚ%frame_length_without_decimal_places_2Úzero_fpsÚnegative_fpsÚfractional_fpsÚ%frame_length_without_decimal_places_3Úbool_fpsr   r   r	   Útest_tick_busy_loop¬   sp   
þ
þ
þÿÿÿþÿþþÿz!ClockTypeTest.test_tick_busy_loop)Ú__name__Ú
__module__Ú__qualname__Ú__tags__r
   r   r   r-   ÚunittestÚskipIfÚplatformÚmachineÚosÚenvironÚgetr6   rK   rc   r   r   r   r	   r   
   s"    	ÿÿBr   c                   @   s–   e Zd ZdgZe e ¡ dkd¡e ej	 
dd¡d¡dd„ ƒƒZd	d
„ Ze e ¡ dkd¡e ej	 
dd¡d¡dd„ ƒƒZdd„ Zdd„ Zdd„ ZdS )ÚTimeModuleTestr   r.   r/   r0   Nr1   c                 C   ó2   d}d}d}|   tjj|||¡ |  tjj¡ dS )zTests time.delay() function.r$   r7   é–   N)Ú_wait_delay_checkrR   r   r(   Ú_type_error_checks©r   Úmillisr'   r   r   r   r	   Ú
test_delayý   s
   zTimeModuleTest.test_delayc           	      C   sˆ   	 d}d}d}|   ttj ¡ ƒtk¡ t|ƒD ]*}tj ¡ }t ¡ }tj |¡ tt ¡ | d ƒ}tj ¡ | }| j	|||d qdS )zTests time.get_ticks()r7   r$   é   r"   r   N)
r   r   rR   r   Ú	get_ticksrT   r   r(   r?   r   )	r   r'   ru   r   r2   Ú
curr_ticksÚ	curr_timeÚ	time_diffÚ
ticks_diffr   r   r	   Útest_get_ticks  s   
øzTimeModuleTest.test_get_ticksc                 C   s¨  	 t  ¡  t j ¡ }t j |¡}d}d}d}d}t j ¡  t j ||¡ t j ¡ }|||  | }||k rQt j 	¡ D ]
}	|	|krD|d7 }q:t j ¡ |krMn||k s5t j |d¡ t j ¡ }
|  
||¡ | j|| |
| |d t j d¡ |  |t j 	¡ ¡ t j ||¡ t j t|d ƒ¡ |  
t j 	¡  |¡d	¡ t j ||d
 ¡ t j |d ¡ |  |t j 	¡ ¡ t j ||d	 ¡ t j |d ¡ |  
t j 	¡  |¡d¡ t j ||¡ t j t|d ƒ¡ |  
t j 	¡  |¡d¡ t j |d
d¡ t j d¡ |  
t j 	¡  |¡d¡ t j |¡t jj|ddddgdt jjt jt jddg}d	}d}|D ]"}t jj|||d t j d| | ¡ |  
t j 	¡  |¡|¡ q+t  ¡  dS )zTests time.set_timer()r$   r   é   r   r8   r   rM   g      @é   r    r#   é   é   g      @TrL   Ú9gwz5é   é|   )é"   Ú )ÚfooÚbazÚlolÚa)ÚkeyÚunicode)ÚloopsN)rR   ÚinitÚeventÚcustom_typeÚEventÚclearr   Ú	set_timerrx   rn   r   r   r(   ÚassertNotInrT   ÚcountÚKEYDOWNÚK_aÚquit)r   ÚTIMER_EVENT_TYPEÚtimer_eventr   Útimer_delayÚtest_numberÚeventsr4   Úmax_test_timer   Út2Úevents_to_testÚrepeatru   Úer   r   r	   Útest_set_timer   sl   


€ù	

ÿûzTimeModuleTest.test_set_timerc                 C   rp   )zTests time.wait() function.r   r    r$   N)rr   rR   r   rS   rs   rt   r   r   r	   Ú	test_waitp  s
   zTimeModuleTest.test_waitc           
      C   s^   t   ¡ }t|ƒD ]}||ƒ}| j|||d qt   ¡ }t|| d ƒ}	| j|	| ||d dS )a}   "
        call func_to_check(millis) "iterations" times and check each time if
        function "waited" for given millisecond (+- delta). At the end, take
        average time for each call (whole_duration/iterations), which should
        be equal to millis (+- delta - acceptable margin of error).
        *Created to avoid code duplication during delay and wait tests
        r   r"   N)r   r   r   r?   )
r   Úfunc_to_checkru   r'   r   Ú
start_timer2   Ú	wait_timeÚ	stop_timeÚdurationr   r   r	   rr   z  s   	z TimeModuleTest._wait_delay_checkc                 C   s8   	 |   t|d¡ |   ttjjd¡ |   ttjjd¡ dS )z?Checks 3 TypeError (float, tuple, string) for the func_to_checkr!   )r   r8   Ú10N)ÚassertRaisesÚ	TypeErrorrR   r   r(   )r   r¥   r   r   r	   rs   Ž  s   z!TimeModuleTest._type_error_checks)rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   rv   r}   r£   r¤   rr   rs   r   r   r   r	   ro   ú   s     ÿ
ÿL
ro   Ú__main__)rl   rj   rh   rR   r   r   ÚTestCaser   ro   rd   Úmainr   r   r   r	   Ú<module>   s     q  ÿ