o
    ±ó®gS  ã                   @   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   úE/Users/admin/.pyenv/versions/3.10.0/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+   é   ©rA   ©Útarget©Útimeout)é   é   é   rI   rG   rH   éè  )Ú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                    sX   g ‰ ‡ fdd„}t  tjtj¡}dD ]}| d|||f¡}q| ¡  |  ˆ g d¢¡ d S )Nc                    r   r   r   r    r"   r   r   r$   \   r%   z(TestCase.test_priority.<locals>.<lambda>)r+   rI   rA   rG   rH   r<   r=   )r   r3   r.   Zpriorityr4   r   r"   r   Útest_priorityZ   r6   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$   e   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_cancelc   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@   rI   )rI   rG   )rG   rH   )rH   rA   rB   rC   rE   rJ   )rK   rL   rM   r   r-   r.   r   r   r>   r   rN   r0   rO   r   r1   rP   rQ   rR   rS   rY   r   rT   )r   rU   r3   rV   r.   rZ   r[   r\   r^   r_   r]   r   r   r   r   Útest_cancel_concurrentr   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)Úcrb   rd   )r-   r.   r>   r   rY   r0   r1   )r   Úeventsr.   rc   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   rR   rS   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   rK   )	r   r3   r.   rZ   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   ©rb   rc   ©Úseqr   r   r3   ·   s   z&TestCase.test_args_kwargs.<locals>.funr+   )r+   rI   )Úargumentrk   ZfoorA   )rn   Úkwargsr   )r   r-   r.   r   r>   r0   ZassertCountEqual)r   r3   rZ   r.   r   rl   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?   rW   rX   r`   ra   rf   rg   rj   rp   rw   r   r   r   r   r   )   s    			r   Ú__main__)rK   r-   r   r   ZunittestÚtestr   Ztest.supportr   ZSHORT_TIMEOUTrQ   r   r   r   Úmainr   r   r   r   Ú<module>   s     *ÿ