a
    äze’  ã                   @   sn   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 ejZG dd„ dƒZ	G dd„ dej
ƒZ
edkrje ¡  dS )é    N)Úsupportc                   @   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   ú%/usr/lib/python3.9/test/test_sched.pyÚ__init__   s    
zTimer.__init__c                 C   s0   | j  | jW  d   ƒ S 1 s"0    Y  d S ©N)r   r   r	   r   r   r   Útime   s    z
Timer.timec                 C   sX   | j > || j7 }| j|k r0| j| _| j  ¡  q|| _W d   ƒ n1 sJ0    Y  d S r   )r   r   r   Úwait©r
   Útr   r   r   Úsleep   s    

zTimer.sleepc                 C   sB   | j ( |  j|7  _| j  ¡  W d   ƒ n1 s40    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                   @   s\   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S )ÚTestCasec                    sX   g ‰ ‡ fdd„}t  tjtj¡}dD ]}| |d||f¡}q$| ¡  |  ˆ g d¢¡ d S )Nc                    s
   ˆ   | ¡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*   s    zTestCase.test_enterc                    sX   g ‰ ‡ fdd„}t  tjtj¡}dD ]}| |d||f¡}q$| ¡  |  ˆ g d¢¡ d S )Nc                    s
   ˆ   | ¡S r   r   r   r   r   r   r    5   r!   z(TestCase.test_enterabs.<locals>.<lambda>©çš™™™™™©?ç{®Gáz¤?ç¸…ëQ¸ž?ç{®Gáz”?ç{®Gáz„?r'   )r7   r6   r5   r4   r3   ©r)   r*   r   r   Úenterabsr,   r-   r.   r   r   r   Útest_enterabs3   s    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¡}qŠ| 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)é   é   é   rD   rB   rC   éè  )ÚqueueÚQueueÚputr   r)   r*   r   r   r+   r   ÚThreadr,   Ústartr   r-   ÚgetÚTIMEOUTÚ
assertTrueÚemptyr   Újoin_thread)r
   Úqr/   Útimerr*   r   r   r0   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                    s
   ˆ   | ¡S r   r   r   r   r   r   r    [   r!   z(TestCase.test_priority.<locals>.<lambda>)r'   rD   r<   rB   rC   r7   r8   )r
   r/   r*   Úpriorityr0   r   r   r   Útest_priorityY   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                    s
   ˆ   | ¡S r   r   r   r   r   r   r    d   r!   z&TestCase.test_cancel.<locals>.<lambda>r7   r'   )r7   r6   )r6   r5   )r5   r4   )r4   r3   )r3   )r6   r5   r4   )r)   r*   r   r   r9   Úcancelr,   r-   )	r
   r/   r*   ÚnowÚevent1Úevent2Úevent3Úevent4Úevent5r   r   r   Útest_cancelb   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;   rD   )rD   rB   )rB   rC   )rC   r<   r=   r>   r@   rE   )rF   rG   rH   r   r)   r*   r   r   r9   r   rI   r,   rJ   r   r-   rK   rL   rM   rN   rU   r   rO   )r
   rP   r/   rQ   r*   rV   rW   rX   rZ   r[   rY   r   r   r   r   Útest_cancel_concurrentq   s:    







zTestCase.test_cancel_concurrentc                    sr   g ‰ ‡ fdd„}t  tjtj¡}|  | ¡ ¡ dD ]}| |d||f¡}q2|  | ¡ ¡ | ¡  |  | ¡ ¡ d S )Nc                    s
   ˆ   | ¡S r   r   r   r   r   r   r    ’   r!   z%TestCase.test_empty.<locals>.<lambda>r2   r'   )	r)   r*   r   r   rM   rN   r9   ZassertFalser,   r.   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                    s
   ˆ   | ¡S r   r   r   r   r   r   r       r!   z%TestCase.test_queue.<locals>.<lambda>r3   r'   r7   r6   r4   r5   )r)   r*   r   r   r9   r-   rF   )	r
   r/   r*   rV   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   ©ÚaÚb©Úseqr   r   r/   «   s    z&TestCase.test_args_kwargs.<locals>.funr'   )r'   rD   )Úargumentrb   Zfoor<   )rg   Úkwargsr   )r   r)   r*   r   r9   r,   ZassertCountEqual)r
   r/   rV   r*   r   re   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                    s
   ˆ   | ¡S r   r   r   r   r   r   r    ¾   r!   z0TestCase.test_run_non_blocking.<locals>.<lambda>)é
   é	   é   é   é   r'   F)Úblockingr(   )r
   r/   r*   r   r   r   r   Útest_run_non_blocking¼   s    zTestCase.test_run_non_blockingN)r   r   r   r1   r:   rR   rT   r\   r]   r^   ra   ri   rp   r   r   r   r   r   (   s   			r   Ú__main__)rF   r)   r   r   ZunittestÚtestr   ZSHORT_TIMEOUTrL   r   r   r   Úmainr   r   r   r   Ú<module>   s    