o
    „6÷dm  ć                   @   s   zd dl ZW n ey   d dlZY nw d dlZd dlZd dlZddlmZ G dd dejZ	G dd dejZ
G dd	 d	ejZdS )
é    Né   ©ŚRWLockc                   @   ó   e Zd Zdd Zdd ZdS )ŚWriterc                 C   s<   t j | ” || _|| _|| _|| _|| _d| _	 d| _	dS )a  
        @param buffer_: common buffer_ shared by the readers and writers
        @type buffer_: list
        @type rw_lock: L{RWLock}
        @param init_sleep_time: sleep time before doing any action
        @type init_sleep_time: C{float}
        @param sleep_time: sleep time while in critical section
        @type sleep_time: C{float}
        @param to_write: data that will be appended to the buffer
        N)
Ś	threadingŚThreadŚ__init__Ś_Writer__bufferŚ_Writer__rw_lockŚ_Writer__init_sleep_timeŚ_Writer__sleep_timeŚ_Writer__to_writeŚ
entry_timeŚ	exit_time)ŚselfŚbuffer_Śrw_lockŚinit_sleep_timeŚ
sleep_timeZto_write© r   śiC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\ecdsa/test_rw_lock.pyr	      s   zWriter.__init__c                 C   sR   t  | j” | j ”  t   ” | _t  | j” | j | j	” t   ” | _
| j ”  d S ©N)ŚtimeŚsleepr   r   Zwriter_acquirer   r   r
   Śappendr   r   Zwriter_release©r   r   r   r   Śrun(   ó   


z
Writer.runN©Ś__name__Ś
__module__Ś__qualname__r	   r   r   r   r   r   r      s    r   c                   @   r   )ŚReaderc                 C   s>   t j | ” || _|| _|| _|| _d| _	 d| _	 d| _	dS )a\  
        @param buffer_: common buffer shared by the readers and writers
        @type buffer_: list
        @type rw_lock: L{RWLock}
        @param init_sleep_time: sleep time before doing any action
        @type init_sleep_time: C{float}
        @param sleep_time: sleep time while in critical section
        @type sleep_time: C{float}
        N)
r   r   r	   Ś_Reader__bufferŚ_Reader__rw_lockŚ_Reader__init_sleep_timeŚ_Reader__sleep_timeŚbuffer_readr   r   )r   r   r   r   r   r   r   r   r	   3   s   
zReader.__init__c                 C   sR   t  | j” | j ”  t   ” | _t  | j” t | j	”| _
t   ” | _| j ”  d S r   )r   r   r&   r%   Zreader_acquirer   r'   ŚcopyŚdeepcopyr$   r(   r   Zreader_releaser   r   r   r   r   I   r   z
Reader.runNr   r   r   r   r   r#   2   s    r#   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zed	d
 Zedd Z	dS )ŚRWLockTestCasec                 C   sö   |   ” \}}}| t||dd” | t||ddd” | t||dd” | t||dd” |  |” |  g |d j” |  dg|d j” |  dg|d j” |  |d j|d j	k” |  |d j	|d j	k” |  |d j|d jk ” d S )	Nr   ēÉ?ēŁ?r   ē333333Ó?ē      ą?é   é   )
Ś_RWLockTestCase__init_variablesr   r#   r   Ś'_RWLockTestCase__start_and_join_threadsŚassertEqualr(   Ś
assertTruer   r   ©r   r   r   Śthreadsr   r   r   Ś test_readers_nonexclusive_accessT   s   
z/RWLockTestCase.test_readers_nonexclusive_accessc                 C   s¦   |   ” \}}}| t||ddd” | t||ddd” | t||dd” |  |” |  ddg|d j” |  |d j|d j	k” |  |d j|d jk” d S )Nr   r-   r   ē¹?r0   r,   ©
r2   r   r   r#   r3   r4   r(   r5   r   r   r6   r   r   r   Śtest_writers_exclusive_accessj   s   
z,RWLockTestCase.test_writers_exclusive_accessc                 C   s,  |   ” \}}}| t||ddd” | t||dd” | t||ddd” | t||dd” | t||dd” |  |” |  dg|d j” |  ddg|d j” |  ddg|d	 j” |  |d j|d j	k ” |  |d j|d j	k” |  |d j|d j	k” |  |d j|d	 j	k” d S )
Nr   r   r9   r-   r,   r0   r.   r1   é   r:   r6   r   r   r   Śtest_writer_priorityy   s   
z#RWLockTestCase.test_writer_priorityc                 C   s  |   ” \}}}| t||ddd” | t||dd” | t||ddd” | t||dd” | t||dd” | t||d	dd
” |  |” |  dg|d j” |  g d¢|d
 j” |  g d¢|d j” |  |d j|d j	k ” |  |d j|d j	k” |  |d j|d j	k” |  |d j|d
 j	k” |  |d j|d j	k” |  |d j|d
 j	k” |  |d j|d j	k” d S )Nr   r   r9   g333333ć?r,   r0   r.   r-   r/   r1   )r   r0   r1   r<   é   r:   r6   r   r   r   Śtest_many_writers_priority   s$   
z)RWLockTestCase.test_many_writers_priorityc                  C   s   g } t  }g }| ||fS r   r   )r   r   r7   r   r   r   Z__init_variablesØ   s   
zRWLockTestCase.__init_variablesc                 C   s(   | D ]}|  ”  q| D ]}| ”  qd S r   )ŚstartŚjoin)r7   Śtr   r   r   Z__start_and_join_threadsÆ   s
   

’z'RWLockTestCase.__start_and_join_threadsN)
r    r!   r"   r8   r;   r=   r?   Śstaticmethodr2   r3   r   r   r   r   r+   S   s    
r+   )Z	unittest2ZunittestŚImportErrorr   r   r)   Z_rwlockr   r   r   r#   ZTestCaser+   r   r   r   r   Ś<module>   s   ’#!