o
    HXîh  ã                   @   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 ej	Z
G dd„ dƒZG dd„ dejƒZedkr=e ¡  dS dS )	é    N)Úsupport)Úthreading_helperc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTimerc                 C   s   t  ¡ | _d| _d| _d S ©Nr   )Ú	threadingÚ	ConditionÚ_condÚ_timeÚ_stop©Úself© r   ú9/opt/python-3.10.19/usr/lib/python3.10/test/test_sched.pyÚ__init__   s   

zTimer.__init__c                 C   s0   | j  | jW  d   ƒ S 1 sw   Y  d S ©N)r   r	   r   r   r   r   Útime   s   $ÿz
Timer.timec                 C   sn   |dksJ ‚| j $ || j7 }| j|k r"| j| _| j  ¡  | j|k s|| _W d   ƒ d S 1 s0w   Y  d S r   )r   r	   r
   Úwait©r   Útr   r   r   Úsleep   s   



þ"ûzTimer.sleepc                 C   sP   |dksJ ‚| j  |  j|7  _| j  ¡  W d   ƒ d S 1 s!w   Y  d S r   )r   r
   Ú
notify_allr   r   r   r   Úadvance"   s
   "þzTimer.advanceN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r      s
    
r   c                   @   sd   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S )ÚTestCasec                    óX   g ‰ ‡ fdd„}t  tjtj¡}dD ]}| |d||f¡}q| ¡  |  ˆ g d¢¡ d S )Nc                    ó
   ˆ   | ¡S r   ©Úappend©Úx©Úlr   r   Ú<lambda>-   ó   
 z%TestCase.test_enter.<locals>.<lambda>)ç      à?çš™™™™™Ù?ç333333Ó?çš™™™™™É?çš™™™™™¹?é   )r*   r)   r(   r'   r&   ©ÚschedÚ	schedulerr   r   ÚenterÚrunÚassertEqual©r   Úfunr.   r!   Úzr   r"   r   Ú
test_enter+   ó   zTestCase.test_enterc                    r   )Nc                    r   r   r   r    r"   r   r   r$   6   r%   z(TestCase.test_enterabs.<locals>.<lambda>©çš™™™™™©?ç{®Gáz¤?ç¸…ëQ¸ž?ç{®Gáz”?ç{®Gáz„?r+   )r<   r;   r:   r9   r8   )r-   r.   r   r   Úenterabsr0   r1   r2   r   r"   r   Útest_enterabs4   r6   zTestCase.test_enterabsc                 C   st  t  ¡ }|j}tƒ }t |j|j¡}| dd|d¡ | dd|d¡ t	j
|jd}| ¡  | d¡ |  |jtdd¡ |  | ¡ ¡ dD ]}| |d d||f¡}qE| d¡ |  |jtdd¡ |  |jtdd¡ |  | ¡ ¡ | d¡ |  |jtdd	¡ |  | ¡ ¡ | d¡ |  |jtdd
¡ |  | ¡ ¡ | d¡ t |¡ |  | ¡ ¡ |  | ¡ d
¡ d S )Nr+   ©r+   é   ©r@   ©Útarget©Útimeout)é   é   é   rH   rF   rG   éè  )ÚqueueÚQueueÚputr   r-   r.   r   r   r/   r   ÚThreadr0   Ústartr   r1   ÚgetÚTIMEOUTÚ
assertTrueÚemptyr   Újoin_thread)r   Úqr3   Útimerr.   r   r!   r4   r   r   r   Útest_enter_concurrent=   s6   





zTestCase.test_enter_concurrentc              	      sâ   g ‰ ‡ fdd„}t  tjtj¡}g d¢g d¢fg d¢g d¢fg d¢g d¢fg d¢g d¢fg}|D ]>\}}| j||d+ |D ]}| d	|||f¡ q>| ¡  |  ˆ |¡ |  | 	¡ ¡ ˆ  
¡  W d   ƒ n1 siw   Y  q0d S )
Nc                    r   r   r   r    r"   r   r   r$   \   r%   z(TestCase.test_priority.<locals>.<lambda>)r+   rH   r@   rF   rG   )rG   rF   r@   rH   r+   )rH   rG   r@   r+   rF   )r+   rH   r@   rH   r+   )r+   r+   rH   rH   r@   )Ú
prioritiesÚexpectedr<   )r-   r.   r   r   ZsubTestr=   r0   r1   rQ   rR   Úclear)r   r3   r.   ÚcasesrW   rX   Úpriorityr   r"   r   Útest_priorityZ   s&   ü
ø€ÿzTestCase.test_priorityc           	         s¼   g ‰ ‡ fdd„}t  tjtj¡}t ¡ }| |d d|d¡}| |d d|d¡}| |d d|d	¡}| |d
 d|d¡}| |d d|d¡}| |¡ | |¡ | ¡  |  ˆ g d¢¡ d S )Nc                    r   r   r   r    r"   r   r   r$   r   r%   z&TestCase.test_cancel.<locals>.<lambda>r<   r+   )r<   r;   )r;   r:   )r:   r9   )r9   r8   )r8   )r;   r:   r9   )r-   r.   r   r   r=   Úcancelr0   r1   )	r   r3   r.   ÚnowÚevent1Úevent2Úevent3Úevent4Úevent5r   r"   r   Útest_cancelp   s   

zTestCase.test_cancelc                 C   sŒ  t  ¡ }|j}tƒ }t |j|j¡}| ¡ }| |d d|d¡}| |d d|d¡}| |d d|d¡}| |d d|d¡}	| |d	 d|d
¡}
t	j
|jd}| ¡  | d¡ |  |jtdd¡ |  | ¡ ¡ | |¡ | |	¡ | d¡ |  | ¡ ¡ | d¡ |  |jtdd	¡ |  | ¡ ¡ | d¡ |  |jtdd¡ |  | ¡ ¡ | d¡ t |¡ |  | ¡ ¡ |  | ¡ d¡ d S )Nr+   r?   rH   )rH   rF   )rF   rG   )rG   r@   rA   rB   rD   rI   )rJ   rK   rL   r   r-   r.   r   r   r=   r   rM   r0   rN   r   r1   rO   rP   rQ   rR   r]   r   rS   )r   rT   r3   rU   r.   r^   r_   r`   rb   rc   ra   r   r   r   r   Útest_cancel_concurrent   s:   







zTestCase.test_cancel_concurrentc                 C   sh   g }t  ¡ }| dd|jd¡ | dd|jd¡}| dd|jd¡ | |¡ | ¡  |  |ddg¡ d S )Nr+   )Úa)Úb)Úcrf   rh   )r-   r.   r=   r   r]   r0   r1   )r   Úeventsr.   rg   r   r   r   Útest_cancel_correct_eventž   s   
z"TestCase.test_cancel_correct_eventc                    sr   g ‰ ‡ fdd„}t  tjtj¡}|  | ¡ ¡ dD ]}| |d||f¡}q|  | ¡ ¡ | ¡  |  | ¡ ¡ d S )Nc                    r   r   r   r    r"   r   r   r$   «   r%   z%TestCase.test_empty.<locals>.<lambda>r7   r+   )	r-   r.   r   r   rQ   rR   r=   ZassertFalser0   r2   r   r"   r   Ú
test_empty©   s   zTestCase.test_emptyc           	         sž   g ‰ ‡ fdd„}t  tjtj¡}t ¡ }| |d d|¡}| |d d|¡}| |d d|¡}| |d d|¡}| |d d|¡}|  |j|||||g¡ d S )	Nc                    r   r   r   r    r"   r   r   r$   ¶   r%   z%TestCase.test_queue.<locals>.<lambda>r8   r+   r<   r;   r9   r:   )r-   r.   r   r   r=   r1   rJ   )	r   r3   r.   r^   Ze5Úe1Úe2Ze4Ze3r   r"   r   Ú
test_queue´   s   zTestCase.test_queuec              	      s¦   g ‰ ‡ fdd„}t   ¡ }t t j t j¡}| |d|¡ |j|d|dd |j|d|dd |j|d|dddid	 | ¡  |  ˆ d
i fdi fdi fdddifg¡ d S )Nc                     s   ˆ   | |f¡ d S r   r   ©rf   rg   ©Úseqr   r   r3   Ä   s   z&TestCase.test_args_kwargs.<locals>.funr+   )r+   rH   )Úargumentro   Zfoor@   )rr   Úkwargsr   )r   r-   r.   r   r=   r0   ZassertCountEqual)r   r3   r^   r.   r   rp   r   Útest_args_kwargsÂ   s   

üzTestCase.test_args_kwargsc                    sX   g ‰ ‡ fdd„}t  tjtj¡}dD ]}| |d||f¡ q|jdd |  ˆ g ¡ d S )Nc                    r   r   r   r    r"   r   r   r$   ×   r%   z0TestCase.test_run_non_blocking.<locals>.<lambda>)é
   é	   é   é   é   r+   F)Úblockingr,   )r   r3   r.   r!   r   r"   r   Útest_run_non_blockingÕ   s   zTestCase.test_run_non_blockingN)r   r   r   r5   r>   rV   r\   rd   re   rj   rk   rn   rt   r{   r   r   r   r   r   )   s    		r   Ú__main__)rJ   r-   r   r   ZunittestÚtestr   Ztest.supportr   ZSHORT_TIMEOUTrP   r   r   r   Úmainr   r   r   r   Ú<module>   s     7ÿ