o
    OZhĮ>  ć                   @   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   śE/var/www/auris/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   ŚclockZfpsr   Z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   Zget_rawtimer   r   r   r   r   Śget_time)
r   Ś
iterationsŚdelayŚdelay_milisecondsZ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Śt1Z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   ŚepsilonZepsilon2Zepsilon3Ztesting_framerateZmillisecondsZ
collectionr   r.   ZoutlierZaverage_timeŚstartŚendZ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    r3   é(   r   éČ   iō  é#   iī  r   é’’’’g     `@@TN)r   ZassertGreaterEqualZtick_busy_loopŚpygamer   ŚwaitŚintr   )r   r   Zsecond_lengthZshortfall_toleranceZ
sample_fpsZhigh_fpsZlow_fpsZlow_non_factor_fpsZ#frame_length_without_decimal_placesZhigh_non_factor_fpsZ%frame_length_without_decimal_places_2Zzero_fpsZnegative_fpsZfractional_fpsZ%frame_length_without_decimal_places_3Z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Śgetr1   r>   rF   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+   r,   Nr-   c                 C   ó2   d}d}d}|   tjj|||” |  tjj” dS )zTests time.delay() function.r"   r2   é   N)Ś_wait_delay_checkrC   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()r2   r"   é   r    r   N)
r   r   rC   r   Ś	get_ticksrE   r   r%   r:   r   )	r   r$   rX   r   r.   Z
curr_ticksZ	curr_timeZ	time_diffZ
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   r3   r   r@   g      @é   r   r!   é   é   g      @Tr?   Z9gwz5é   é|   )é"   Ś )ZfooZbazZlolŚa)ŚkeyŚunicode)ZloopsN)rC   ŚinitŚeventZcustom_typeŚEventŚclearr   Z	set_timerr[   rQ   r   r   r%   ZassertNotInrE   ŚcountZKEYDOWNZK_aŚquit)r   ZTIMER_EVENT_TYPEZtimer_eventr   Ztimer_delayZtest_numberŚeventsr0   Zmax_test_timeri   Śt2Zevents_to_testŚrepeatrX   Śer   r   r	   Śtest_set_timer   sl   


ł	

’ūzTimeModuleTest.test_set_timerc                 C   rS   )zTests time.wait() function.r   r   r"   N)rU   rC   r   rD   rV   rW   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_checkrX   r$   r   Ś
start_timer.   Z	wait_timeŚ	stop_timeŚdurationr   r   r	   rU   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   r3   Ś10N)ŚassertRaisesŚ	TypeErrorrC   r   r%   )r   rt   r   r   r	   rV     s   z!TimeModuleTest._type_error_checks)rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rY   r\   rr   rs   rU   rV   r   r   r   r	   rR   ś   s     ’
’L
rR   Ś__main__)rO   rM   rK   rC   r   r   ZTestCaser   rR   rG   Śmainr   r   r   r	   Ś<module>   s     q  ’