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   sb   | j $ || j7 }| j|k r| j| _| j  ¡  | j|k s|| _W d   ƒ d S 1 s*w   Y  d S r   )r   r   r	   Úwait©r   Útr   r   r   Úsleep   s   



þ"ûzTimer.sleepc                 C   sD   | 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:   r9   r8   r7   )r,   r-   r   r   Úenterabsr/   r0   r1   r   r!   r   Útest_enterabs4   r5   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)é   é   é   rG   rE   rF   éè  )ÚqueueÚQueueÚputr   r,   r-   r   r   r.   r   ÚThreadr/   Ústartr   r0   ÚgetÚTIMEOUTÚ
assertTrueÚemptyr   Újoin_thread)r   Úqr2   Útimerr-   r   r    r3   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*   rG   r?   rE   rF   )rF   rE   r?   rG   r*   )rG   rF   r?   r*   rE   )r*   rG   r?   rG   r*   )r*   r*   rG   rG   r?   )Ú
prioritiesÚexpectedr;   )r,   r-   r   r   ZsubTestr<   r/   r0   rP   rQ   Úclear)r   r2   r-   ÚcasesrV   rW   Ú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:   r9   )r9   r8   )r8   r7   )r7   )r:   r9   r8   )r,   r-   r   r   r<   Úcancelr/   r0   )	r   r2   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>   rG   )rG   rE   )rE   rF   )rF   r?   r@   rA   rC   rH   )rI   rJ   rK   r   r,   r-   r   r   r<   r   rL   r/   rM   r   r0   rN   rO   rP   rQ   r\   r   rR   )r   rS   r2   rT   r-   r]   r^   r_   ra   rb   r`   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)Úcre   rg   )r,   r-   r<   r   r\   r/   r0   )r   Úeventsr-   rf   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>r6   r*   )	r,   r-   r   r   rP   rQ   r<   ZassertFalser/   r1   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>r7   r*   r;   r:   r8   r9   )r,   r-   r   r   r<   r0   rI   )	r   r2   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   ©re   rf   ©Úseqr   r   r2   Ä   s   z&TestCase.test_args_kwargs.<locals>.funr*   )r*   rG   )Úargumentrn   Zfoor?   )rq   Úkwargsr   )r   r,   r-   r   r<   r/   ZassertCountEqual)r   r2   r]   r-   r   ro   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   r2   r-   r    r   r!   r   Útest_run_non_blockingÕ   s   zTestCase.test_run_non_blockingN)r   r   r   r4   r=   rU   r[   rc   rd   ri   rj   rm   rs   rz   r   r   r   r   r   )   s    		r   Ú__main__)rI   r,   r   r   ZunittestÚtestr   Ztest.supportr   ZSHORT_TIMEOUTrO   r   r   r   Úmainr   r   r   r   Ú<module>   s     7ÿ