Current File : //usr/local/apps/python3/lib/python3.11/test/__pycache__/lock_tests.cpython-311.pyc
�

�Ke�}����dZddlZddlZddlZddlZddlmZmZddlZddl	Z	ddl
Z
ddlmZddl
mZe	jejd��Zd�ZGd�d	e��ZGd
�de	j��ZGd�d
e��ZGd�de��ZGd�de��ZGd�de��ZGd�de��ZGd�de��ZGd�de��ZGd�de��ZGd�de��ZdS)z/
Various tests for synchronization primitives.
�N)�start_new_thread�TIMEOUT_MAX)�support)�threading_helperz9platform doesn't support fork (no _at_fork_reinit method)c�.�tjd��dS)N�{�G�z�?)�time�sleep���9/usr/local/apps/python3/lib/python3.11/test/lock_tests.py�_waitrs���J�t�����rc�,�eZdZdZdd�Zd�Zd�Zd�ZdS)	�Bunchz
    A bunch of threads.
    Fc� �����_|�_g�_g�_|�_tj���_�j�����fd�}	t|��D]}t|d���dS#d�_�xYw)z�
        Construct a bunch of `n` threads running the same function `f`.
        If `wait_before_exit` is True, the threads won't terminate until
        do_finish() is called.
        c�^��tj��}�j�|��	����j�|���jst
���j�dSdS#�j�|���jst
���j�wxYw�N)�	threading�	get_ident�started�append�finished�	_can_exitr)�tid�f�selfs ��r
�taskzBunch.__init__.<locals>.task-s�����%�'�'�C��L����$�$�$�
�������
�$�$�S�)�)�)��.���G�G�G��.��������
�$�$�S�)�)�)��.���G�G�G��.�����s�
A4�48B,rTN)r�nrrrr�wait_threads_exit�wait_thread�	__enter__�ranger)rrr�wait_before_exitr�is``    r
�__init__zBunch.__init__s����������������
�-�-���+�=�?�?�����"�"�$�$�$�	�	�	�	�	�	�	��1�X�X�
+�
+�� ��r�*�*�*�*�
+�
+��	�!�D�N����s�"B�
B
c��t|j��|jkr-t��t|j��|jk�+dSdSr)�lenrrr�rs r
�wait_for_startedzBunch.wait_for_started>sG���$�,���$�&�(�(��G�G�G��$�,���$�&�(�(�(�(�(�(rc���t|j��|jkr+t��t|j��|jk�+|j�ddd��dSr)r'rrrr �__exit__r(s r
�wait_for_finishedzBunch.wait_for_finishedBs^���$�-� � �4�6�)�)��G�G�G��$�-� � �4�6�)�)�	
��!�!�$��d�3�3�3�3�3rc��d|_dS�NT)rr(s r
�	do_finishzBunch.do_finishHs
������rN)F)�__name__�
__module__�__qualname__�__doc__r%r)r,r/rrr
rrs_������������>���4�4�4�����rrc� �eZdZd�Zd�Zd�ZdS)�BaseTestCasec�6�tj��|_dSr)r�threading_setup�_threadsr(s r
�setUpzBaseTestCase.setUpMs��(�8�:�:��
�
�
rc�R�tj|j�tj��dSr)r�threading_cleanupr8r�
reap_childrenr(s r
�tearDownzBaseTestCase.tearDownPs'���*�D�M�:�:�������rc�j�|�||dz��|�||dz��dS)Ng333333�?g$@)�assertGreaterEqual�
assertLess)r�actual�expecteds   r
�
assertTimeoutzBaseTestCase.assertTimeoutTs<��	
�����3��7�7�7������4��0�0�0�0�0rN)r0r1r2r9r=rCrrr
r5r5LsA������;�;�;� � � �1�1�1�1�1rr5c�`�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�ZdS)�
BaseLockTestsz;
    Tests for both recursive and non-recursive locks.
    c�0�|���}~dSr)�locktype�r�locks  r
�test_constructorzBaseLockTests.test_constructorbs���}�}�����D�Drc�v�|���}|�t|��d��~dS)Nz<unlocked .* object (.*)?at .*>)rG�assertRegex�reprrHs  r
�	test_reprzBaseLockTests.test_reprfs3���}�}��������d���%F�G�G�G��D�Drc��|���}|���|�t|��d��~dS)Nz<locked .* object (.*)?at .*>)rG�acquirerLrMrHs  r
�test_locked_reprzBaseLockTests.test_locked_reprks@���}�}��������������d���%D�E�E�E��D�Drc�X�|���}|���~dSr)rGrPrHs  r
�test_acquire_destroyz"BaseLockTests.test_acquire_destroyqs#���}�}�����������D�Drc��|���}|���|���~dSr�rGrP�releaserHs  r
�test_acquire_releasez"BaseLockTests.test_acquire_releasevs0���}�}�����������������D�Drc��|���}|�|�d����|���dS�NF)rG�
assertTruerPrVrHs  r
�test_try_acquirezBaseLockTests.test_try_acquire|s>���}�}����������U�+�+�,�,�,��������rc����|��������g���fd�}t|d�����|��d������dS)Nc�X������d����dSrY�rrP�rI�results��r
rz3BaseLockTests.test_try_acquire_contended.<locals>.f�s'����M�M�$�,�,�u�-�-�.�.�.�.�.r�r)rGrPrr,�assertFalserV�rrrIr`s  @@r
�test_try_acquire_contendedz(BaseLockTests.test_try_acquire_contended�s������}�}������������	/�	/�	/�	/�	/�	/�
�a����%�%�'�'�'�������#�#�#��������rc���|��������d}�fd�}t||��}|���t	��|�t
|j��d������|�	��|�t
|j��|��dS)N�c�X����������dSr�rPrV�rIs�r
rz/BaseLockTests.test_acquire_contended.<locals>.f��!����L�L�N�N�N��L�L�N�N�N�N�Nrr)
rGrPrr)r�assertEqualr'rrVr,)r�Nr�brIs    @r
�test_acquire_contendedz$BaseLockTests.test_acquire_contended�s�����}�}����������
��	�	�	�	�	�
�!�Q�K�K��	������
��������Q�Z���!�,�,�,�������	����������Q�Z���!�,�,�,�,�,rc�$��|�����fd�}d�fd�	}|��t|d�����|�t|t��t|d�����dS)Nc�X����������dSrrhris�r
rz"BaseLockTests.test_with.<locals>.f�rjrc�H���5|�|�	ddd��dS#1swxYwYdSrr)�errrIs �r
�_withz&BaseLockTests.test_with.<locals>._with�s|����
�
��?��I�#�
�
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�
�
s���rar)rGrr,�assertRaises�	TypeError)rrrsrIs   @r
�	test_withzBaseLockTests.test_with�s�����}�}����	�	�	�	�	�	�	�	�	�	�	�	�����
�a����%�%�'�'�'����)�U�I�6�6�6�
�a����%�%�'�'�'�'�'rc���|�����fd�}ttj����}t	|d�����ttj����|krJt
jd��|�|ttj������dSdS)Nc�X����������dSrrhris�r
rz)BaseLockTests.test_thread_leak.<locals>.f�rjr�g�������?)	rGr'r�	enumeraterr,r	r
rk)rrrrIs   @r
�test_thread_leakzBaseLockTests.test_thread_leak�s�����}�}����	�	�	�	�	�
�	�#�%�%�&�&��	�a����&�&�(�(�(��y�"�$�$�%�%��*�*�

�J�s�O�O�O����Q��I�$7�$9�$9� :� :�;�;�;�;�;�
+�*rc�B���|����|�t�jdd��|�t�jd���|�t�jd���|�t�jt
dz�����t
�������tj��}|�	��d�����tj��}|�
||z
d��g���fd�}t|d�����|�
�d��|��dd	��dS)
NFrai������timeoutg}Ô%�I�Trfc����tj��}����d�����tj��}��||z
��dS)N��?r})r	�	monotonicrrP)�t1�t2rI�resultss  ��r
rz%BaseLockTests.test_timeout.<locals>.f�sY�����!�!�B��N�N�4�<�<��<�4�4�5�5�5���!�!�B��N�N�2��7�#�#�#�#�#rrr�)rGrt�
ValueErrorrP�
OverflowErrorrrVr	r�rZr@rr,rbrC)rr�r�rrIr�s    @@r
�test_timeoutzBaseLockTests.test_timeout�sr�����}�}�������*�d�l�E�1�=�=�=����*�d�l�D��A�A�A����-���u��E�E�E����-���{�Q���O�O�O����[��)�)�)�������
�^�
�
��������Q��/�/�0�0�0�
�^�
�
������R���#�#�#���	$�	$�	$�	$�	$�	$�
	�a����%�%�'�'�'�������$�$�$����7�1�:�s�+�+�+�+�+rc��|���}tj|��}|�|����dSr)rG�weakref�ref�assertIsNotNone�rrIr�s   r
�test_weakref_existsz!BaseLockTests.test_weakref_exists�s>���}�}�����k�$�������S�S�U�U�#�#�#�#�#rc��|���}tj|��}~tj��|�|����dSr)rGr�r��gc�collect�assertIsNoner�s   r
�test_weakref_deletedz"BaseLockTests.test_weakref_deleted�sL���}�}�����k�$�����
�
�������#�#�%�%� � � � � rN)r0r1r2r3rJrNrQrSrWr[rdrnrvr{r�r�r�rrr
rErE]s���������������
������
������
���-�-�-� (�(�(� <�<�<�&,�,�,�4$�$�$�
!�!�!�!�!rrEc�:�eZdZdZd�Zd�Zd�Zed���ZdS)�	LockTestszn
    Tests for non-recursive, weak locks
    (which can be acquired and released from different threads).
    c�Z���|����g���fd�}tj��5t|d��t	���dkr!t��t	���dk�!t��|�t	���d������t	���dkr!t��t	���dk�!|�t	���d��ddd��dS#1swxYwYdS)Nc���������d��������d��dSr�rPr)rI�phases��r
rz#LockTests.test_reacquire.<locals>.f�sG����L�L�N�N�N��L�L������L�L�N�N�N��L�L������rrrra�)rGrrrr'rrkrV)rrrIr�s  @@r
�test_reacquirezLockTests.test_reacquire�sY�����}�}������	�	�	�	�	�	��
/�
1�
1�		,�		,��Q��#�#�#��e�*�*��/�/������e�*�*��/�/��G�G�G����S��Z�Z��+�+�+��L�L�N�N�N��e�*�*��/�/������e�*�*��/�/����S��Z�Z��+�+�+�		,�		,�		,�		,�		,�		,�		,�		,�		,�		,�		,�		,����		,�		,�		,�		,�		,�		,s�C!D � D$�'D$c���|���������fd�}t|d��}|�����������dS)Nc�0������dSr)rVris�r
rz*LockTests.test_different_thread.<locals>.f�����L�L�N�N�N�N�Nrra)rGrPrr,rV�rrrmrIs   @r
�test_different_threadzLockTests.test_different_threadss����}�}����������	�	�	�	�	��!�Q�K�K��	�������������������rc�p�|���}|���|�|�d�����|���|�|�����|�|�d�����dS)Nrr}F)�blocking)rGrPrbrV�lockedrZrHs  r
�test_state_after_timeoutz"LockTests.test_state_after_timeouts����}�}����������������d��3�3�4�4�4���������������'�'�'�������e��4�4�5�5�5�5�5rc��d�}|���}|���||��|���}|���|���||��dS)Nc�V�|���|���dSrrhris r
�use_lockz/LockTests.test_at_fork_reinit.<locals>.use_locks"��
�L�L�N�N�N��L�L�N�N�N�N�Nr)rG�_at_fork_reinitrP)rr�rI�lock2s    r
�test_at_fork_reinitzLockTests.test_at_fork_reinits~��	�	�	��}�}�����������������
�
����
�
�
����
�������������rN)	r0r1r2r3r�r�r��
requires_forkr�rrr
r�r��sf��������,�,�,�,	�	�	�6�6�6�����]���rr�c�0�eZdZdZd�Zd�Zd�Zd�Zd�ZdS)�
RLockTestsz$
    Tests for recursive locks.
    c��|���}|���|���|���|���|���|���dSrrUrHs  r
r�zRLockTests.test_reacquire-sa���}�}�����������������������������������������rc��|���}|�t|j��|���|���|���|���|���|���|�t|j��dSr)rGrt�RuntimeErrorrVrPrHs  r
�test_release_unacquiredz"RLockTests.test_release_unacquired6s����}�}�������,���5�5�5����������������������������������������,���5�5�5�5�5rc��|���}|�t|j��|���|���|���|���|���|���|�t|j��dSr)rGrtr��
_release_saverPrVrHs  r
�test_release_save_unacquiredz'RLockTests.test_release_save_unacquiredBs����}�}�������,��(:�;�;�;����������������������������������������,��(:�;�;�;�;�;rc�"��|�����fd�}t|dd��}	|�t�j��|���n#|���wxYw|���dS)Nc�0������dSr)rPris�r
rz+RLockTests.test_different_thread.<locals>.fQr�rraT)rGrrtr�rVr/r,r�s   @r
r�z RLockTests.test_different_threadNs�����}�}����	�	�	�	�	��!�Q�����	����l�D�L�9�9�9�
�K�K�M�M�M�M��A�K�K�M�M�M�M����	�������s� A"�"A8c�����|����|�����������|�����������|�������g���fd�}t|d�����|��d������|�����������|�������dS)Nc�V����������dSr)r�	_is_ownedr_s��r
rz$RLockTests.test__is_owned.<locals>.fbs%����M�M�$�.�.�*�*�+�+�+�+�+rrar)rGrbr�rPrZrr,rVrcs  @@r
�test__is_ownedzRLockTests.test__is_ownedZs0�����}�}����������)�)�*�*�*�������������(�(�)�)�)�������������(�(�)�)�)���	,�	,�	,�	,�	,�	,�
�a����%�%�'�'�'�������#�#�#�������������(�(�)�)�)�������������)�)�*�*�*�*�*rN)	r0r1r2r3r�r�r�r�r�rrr
r�r�)si�����������
6�
6�
6�
<�
<�
<�
�
�
�+�+�+�+�+rr�c�L�eZdZdZd�Zd�Zd�Zd�Zd�Ze	d���Z
d�Zd	S)
�
EventTestsz"
    Tests for Event objects.
    c�T�|���}|�|�����|���|�|�����|���|�|�����|���|�|�����|���|�|�����dSr)�	eventtyperb�is_set�setrZ�clear�r�evts  r
�test_is_setzEventTests.test_is_setqs����n�n������������&�&�&����	�	�	�����
�
���%�%�%����	�	�	�����
�
���%�%�%��	�	������������&�&�&��	�	������������&�&�&�&�&rc�����d}g�g����fd�}t||��}|���t��|�t	���d������|���|��dg|z��|��dg|z��dS)Nrfc�������������������dSr�r�wait)r��results1�results2s���r
rz#EventTests._check_notify.<locals>.f�s=����O�O�C�H�H�J�J�'�'�'��O�O�C�H�H�J�J�'�'�'�'�'rrT)rr)rrkr'r�r,)rr�rlrrmr�r�s `   @@r
�
_check_notifyzEventTests._check_notify}s������
������	(�	(�	(�	(�	(�	(�	(�
�!�Q�K�K��	������
��������X����*�*�*����	�	�	�	����������D�6�A�:�.�.�.�����D�6�A�:�.�.�.�.�.rc���|���}|�|��|���|���|�|��dSr)r�r�r�r�r�s  r
�test_notifyzEventTests.test_notify�sY���n�n�������3�������	�	�	��	�	�������3�����rc�����|����g�g�d}���fd�}t||�����|��dg|z���D]0\}}|�|��|�|d���1g�g�����t||�����|��dg|z���D]\}}|�|���dS)Nrfc�������d����tj��}��d��}tj��}��|||z
f��dS)Ngr�)rr�r	r�)r��rr�r�r�r�s   ���r
rz"EventTests.test_timeout.<locals>.f�sh����O�O�C�H�H�S�M�M�*�*�*���!�!�B�����
�
�A���!�!�B��O�O�Q��R��L�)�)�)�)�)rFr�T)r�rr,rkrbrCr�rZ)rrlrr��dtr�r�r�s     @@@r
r�zEventTests.test_timeout�s=������n�n��������
��	*�	*�	*�	*�	*�	*�	*�	�a����%�%�'�'�'�����E�7�Q�;�/�/�/��	(�	(�E�A�r����Q�������r�3�'�'�'�'��������	�	�	�
�a����%�%�'�'�'�����D�6�A�:�.�.�.��	�	�E�A�r��O�O�A�����	�	rc�j����|����g�d�d}���fd�}t||��}|���tj�����������|���|��dg|z��dS)Ng�?rfc�^�������dz����dS�N�r�)r�r�r~s���r
rz(EventTests.test_set_and_clear.<locals>.f�s+����N�N�3�8�8�G�a�K�0�0�1�1�1�1�1rT)	r�rr)r	r
r�r�r,rk)rrlrrmr�r�r~s    @@@r
�test_set_and_clearzEventTests.test_set_and_clear�s�������n�n��������
��	2�	2�	2�	2�	2�	2�	2��!�Q�K�K��	�������
�7�������	�	�	��	�	����	����������4�&�1�*�-�-�-�-�-rc��|���}|j5|�|j�d����ddd��n#1swxYwY|���|j5|�|j�d����ddd��dS#1swxYwYdSrY)r��_condrbrPr�r�s  r
r�zEventTests.test_at_fork_reinit�s6���n�n����
�Y�	7�	7����S�Y�.�.�u�5�5�6�6�6�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7����	7�	7�	7�	7�������
�Y�	7�	7����S�Y�.�.�u�5�5�6�6�6�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7�	7����	7�	7�	7�	7�	7�	7s#�.A�A�A�<.B7�7B;�>B;c���|���}|�t|��d��|���|�t|��d��dS)Nz<\w+\.Event at .*: unset>z<\w+\.Event at .*: set>)r�rLrMr�r�s  r
rNzEventTests.test_repr�s^���n�n��������c���$@�A�A�A����	�	�	�����c���$>�?�?�?�?�?rN)r0r1r2r3r�r�r�r�r�r�r�rNrrr
r�r�ls���������
'�
'�
'�/�/�/�" � � ����2.�.�.�"�7�7��]�7�@�@�@�@�@rr�c�B�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
S)�ConditionTestsz(
    Tests for condition variables.
    c��|���}|���|���|���|���tj��}|�|��}|���|�|�d����|���|�|�d����|�|�d����|���|5|�|�d����ddd��dS#1swxYwYdSrY)�condtyperPrVr�LockrbrZ)r�condrIs   r
�test_acquirezConditionTests.test_acquire�sr���}�}����	
�������������������������~�����}�}�T�"�"��������������e�,�,�-�-�-�������������U�+�+�,�,�,�������e�,�,�-�-�-�������
�	2�	2����T�\�\�%�0�0�1�1�1�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2�	2����	2�	2�	2�	2�	2�	2s�)E9�9E=�E=c�n�|���}|�t|j��dSr)r�rtr�r��rr�s  r
�test_unacquired_waitz#ConditionTests.test_unacquired_wait�s-���}�}�������,��	�2�2�2�2�2rc�n�|���}|�t|j��dSr)r�rtr��notifyr�s  r
�test_unacquired_notifyz%ConditionTests.test_unacquired_notify�s-���}�}�������,���4�4�4�4�4rc��������d}g�g�g�d������fd�}t||��}|���t���dkr!t��t���dk�!����|��g��������d��t��d�����t���dkr!t��t���dk�!|��dgdz��|��g��t���dkr!t��t���dk�!������d��t��d�����t���t���zdkr1t��t���t���zdk�1|��dgdzd	gdzz��|��d	gdz��t���dkr!t��t���dk�!������	��t��d�����t���dkr!t��t���dk�!|��dgdzd	gdzz��|��d	gdzd
gdzz��|�
��dS)Nrfrc����������������}������|�f���������������}������|�f��dSr)rPrr�rV)r`r��	phase_num�readyr�r�s �����r
rz'ConditionTests._check_notify.<locals>.fs�����L�L�N�N�N��L�L��#�#�#��Y�Y�[�[�F��L�L�N�N�N��O�O�V�Y�/�0�0�0��L�L�N�N�N��L�L��#�#�#��Y�Y�[�[�F��L�L�N�N�N��O�O�V�Y�/�0�0�0�0�0r�ra)Trar��)Tr�)Tr�)rr)r'rr�rkrPr�rV�
notify_allr,)	rr�rlrrmr�r�r�r�s	 `   @@@@r
r�zConditionTests._check_notify�s2�������
���������	�
	1�
	1�
	1�
	1�
	1�
	1�
	1�
	1�
	1�
�!�Q�K�K��	�������%�j�j�1�n�n��G�G�G��%�j�j�1�n�n�
���
�
�
�����2�&�&�&����������A����
�����	��������(�m�m�a����G�G�G��(�m�m�a�������I�;��?�3�3�3�����2�&�&�&��%�j�j�1�n�n��G�G�G��%�j�j�1�n�n�	
���������A����
�����	��������(�m�m�c�(�m�m�+�a�/�/��G�G�G��(�m�m�c�(�m�m�+�a�/�/�����I�;��?�i�[�1�_�#D�E�E�E�����I�;��?�3�3�3��%�j�j�1�n�n��G�G�G��%�j�j�1�n�n�	
������������
�����	��������(�m�m�a����G�G�G��(�m�m�a�������I�;��?�h�Z�!�^�#C�D�D�D�����I�;��?�i�[�1�_�#D�E�E�E�	�������rc��|���}|�|��|�|��dSr)r�r�r�s  r
r�zConditionTests.test_notify;s=���}�}�������4� � � ����4� � � � � rc�6���|����g�d}��fd�}t||�����|�t	���|���D]0\}}|�|d��|�|���1dS)Nrfc�������tj��}��d��}tj��}������||z
|f��dS)Nr�)rPr	r�r�rVr)r�r`r�r�r�s   ��r
rz&ConditionTests.test_timeout.<locals>.fEsg����L�L�N�N�N���!�!�B��Y�Y�s�^�^�F���!�!�B��L�L�N�N�N��N�N�B��G�V�,�-�-�-�-�-rr�)r�rr,rkr'rCrb)rrlrr�r`r�r�s     @@r
r�zConditionTests.test_timeoutAs������}�}������
��	.�	.�	.�	.�	.�	.�	�a����%�%�'�'�'�����W���q�)�)�)�!�	%�	%�J�B�����r�3�'�'�'�
���V�$�$�$�$�	%�	%rc�h���������d����fd�}t|d��}|���td��D]I}t	jd���5�dz
�����ddd��n#1swxYwY�J|���dS)Nrc�����5���fd���}��|�����d��ddd��dS#1swxYwYdS)Nc����dkSr�r��states�r
�<lambda>z8ConditionTests.test_waitfor.<locals>.f.<locals>.<lambda>\�����q��rr�)�wait_forrZrk)r`r�rr�s ���r
rz&ConditionTests.test_waitfor.<locals>.fZs�����
+�
+����'8�'8�'8�'8�9�9������'�'�'�� � ���*�*�*�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+����
+�
+�
+�
+�
+�
+s�AA�A�Arar�r)r�rr)r"r	r
r�r,)rrrmr$r�r�s`   @@r
�test_waitforzConditionTests.test_waitforWs������}�}������	+�	+�	+�	+�	+�	+�	+�

�!�Q�K�K��	�������q���	�	�A��J�t�����
�
���
�����
�
�
�
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��	
�������s�,B�B	�B	c�����������d�g�����fd�}t|d��}|���td��D]I}t	jd���5�dz
�����ddd��n#1swxYwY�J|�����t���d��dS)Nrc�D���5tj��}���fd�d���}tj��|z
}��|����|d����d��ddd��dS#1swxYwYdS)Nc����dkSr�rr�s�r
r�z@ConditionTests.test_waitfor_timeout.<locals>.f.<locals>.<lambda>or�rg�������?r})r	r�r�rbrCr)r�r`r�rr��successs  ����r
rz.ConditionTests.test_waitfor_timeout.<locals>.fls�����
%�
%��^�%�%�����'8�'8�'8�'8�#��F�F���^�%�%��*��� � ��(�(�(��"�"�2�s�+�+�+����t�$�$�$�

%�
%�
%�
%�
%�
%�
%�
%�
%�
%�
%�
%����
%�
%�
%�
%�
%�
%s�BB�B�Brar�r)
r�rr)r"r	r
r�r,rkr')rrrmr$r�r�r�s`   @@@r
�test_waitfor_timeoutz#ConditionTests.test_waitfor_timeouths3�������}�}��������	%�	%�	%�	%�	%�	%�	%�	%�
�!�Q�K�K��	�������q���	�	�A��J�t�����
�
���
�����
�
�
�
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��	
����������W���q�)�)�)�)�)s�0B�B	�B	N)r0r1r2r3r�r�r�r�r�r�r�r�rrr
r�r��s���������2�2�2�&3�3�3�5�5�5�H�H�H�T!�!�!�%�%�%�,���"*�*�*�*�*rr�c�N�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
dS)
�BaseSemaphoreTestszB
    Common tests for {bounded, unbounded} semaphore objects.
    c��|�t|jd���|�t|jtj���dS)N���)�value)rtr��semtype�sys�maxsizer(s r
rJz#BaseSemaphoreTests.test_constructor�sF�����*�d�l�B��?�?�?����*�d�l�S�[�L��I�I�I�I�Irc�J�|�d��}|���|���|�d��}|���|���|���|���dS)Nrar�)rrPrV�r�sems  r
r�zBaseSemaphoreTests.test_acquire�sr���l�l�1�o�o�����
�
�
����
�
�
��l�l�1�o�o�����
�
�
����
�
�
����
�
�
����
�
�
�
�
rc�X�|���}|���~dSr)rrPrs  r
rSz'BaseSemaphoreTests.test_acquire_destroy�s#���l�l�n�n�����
�
�
��C�Crc�H�����	�|�d�������d}g�	g�g�d������	fd�}t|d��}|���t	���t	���zdkr1t��t	���t	���zdk�1|���zdgdz��d�td��D]}�����t	���t	���zdkr1t��t	���t	���zdk�1|�t��z��dgdzdgdzz��d�td��D]}�����t	���t	���zd	kr1t��t	���t	���zd	k�1|�t��z��dgdzdgdzzdgdzz��|�
��d
��������|���|��	dgdz��dS)
N��
rc�����������������������������dSrr^)r�r�r�r�sem_resultss�����r
rz4BaseSemaphoreTests.test_acquire_contended.<locals>.f�se������s�{�{�}�}�-�-�-��O�O�I�&�&�&����s�{�{�}�}�-�-�-��O�O�I�&�&�&�&�&r�ra�
r��FT�)rrPrr)r'rrkr"rV�sortedrbr,)
rrlrrmr$r�r�r�rrs
     @@@@@r
rnz)BaseSemaphoreTests.test_acquire_contended�s���������l�l�1�o�o�����
�
�
����������	�	'�	'�	'�	'�	'�	'�	'�	'�	'�

�!�R�L�L��	�������(�m�m�c�(�m�m�+�a�/�/��G�G�G��(�m�m�c�(�m�m�+�a�/�/�����H�,�q�c�A�g�6�6�6��	��q���	�	�A��K�K�M�M�M�M��(�m�m�c�(�m�m�+�b�0�0��G�G�G��(�m�m�c�(�m�m�+�b�0�0������8� 3�4�4�q�c�A�g���a��6G�H�H�H��	��q���	�	�A��K�K�M�M�M�M��(�m�m�c�(�m�m�+�b�0�0��G�G�G��(�m�m�c�(�m�m�+�b�0�0������8� 3�4�4�q�c�A�g���a��6G�1�#�PQ�'�6Q�R�R�R�������U�+�+�,�,�,����
�
�
�	����������t�f�
�&>�?�?�?�?�?rc�������|�d�������g�g�d�����fd�}t|d��}|���t	���t	���zdkr1t��t	���t	���zdk�1|���zdgdz��d���d��t	���t	���zdkr1t��t	���t	���zdk�1|�t��z��dgdzdgdzz��d���d��t	���t	���zd	kr1t��t	���t	���zd	k�1|�t��z��dgdzdgdzzdgdzz��|�	��d
��������|�
��dS)Nrrc���������������������dSrr�)r�r�r�rs����r
rz/BaseSemaphoreTests.test_multirelease.<locals>.f�sG����K�K�M�M�M��O�O�I�&�&�&��K�K�M�M�M��O�O�I�&�&�&�&�&rrrrarr�rF)rrPrr)r'rrkrVrrbr,)rrrmr�r�r�rs   @@@@r
�test_multireleasez$BaseSemaphoreTests.test_multirelease�sE�������l�l�1�o�o�����
�
�
������	�	'�	'�	'�	'�	'�	'�	'�	'�

�!�R�L�L��	�������(�m�m�c�(�m�m�+�a�/�/��G�G�G��(�m�m�c�(�m�m�+�a�/�/�����H�,�q�c�A�g�6�6�6��	����A�����(�m�m�c�(�m�m�+�b�0�0��G�G�G��(�m�m�c�(�m�m�+�b�0�0������8� 3�4�4�q�c�A�g���a��6G�H�H�H��	����A�����(�m�m�c�(�m�m�+�b�0�0��G�G�G��(�m�m�c�(�m�m�+�b�0�0������8� 3�4�4�q�c�A�g���a��6G�1�#�PQ�'�6Q�R�R�R�������U�+�+�,�,�,����
�
�
�	�������rc��|�d��}|�|�d����|�|�d����|�|�d����|���|�|�d����dS)Nr�F)rrZrPrbrVrs  r
r[z#BaseSemaphoreTests.test_try_acquire�s����l�l�1�o�o��������E�*�*�+�+�+�������E�*�*�+�+�+�������U�+�+�,�,�,����
�
�
�������E�*�*�+�+�+�+�+rc����|�d�������g���fd�}t|d�����|�t���dgdzdgdzz��dS)Nr�c�������d��������d����dSrYr^)r�rs��r
rz8BaseSemaphoreTests.test_try_acquire_contended.<locals>.f�sE����N�N�3�;�;�u�-�-�.�.�.��N�N�3�;�;�u�-�-�.�.�.�.�.rrfFrTr�)rrPrr,rkr)rrr�rs  @@r
rdz-BaseSemaphoreTests.test_try_acquire_contended�s������l�l�1�o�o�����
�
�
���	/�	/�	/�	/�	/�	/�	�a����%�%�'�'�'�	
�������5�'�A�+���!��*C�E�E�E�E�Erc��|�d��}|�t|jdd���|�|�d�����|�|�d�����|�|�d�����|���|�|�d�����tj��}|�|�d�����tj��|z
}|�	|d��dS)Nr�F��?r}g{�G�zt?r�)
rrtr�rPrZrbrVr	r�rC)rr�tr�s    r
�test_acquire_timeoutz'BaseSemaphoreTests.test_acquire_timeout�s���l�l�1�o�o�����*�c�k�5�#��F�F�F�������E��2�2�3�3�3�������E��2�2�3�3�3�������U��3�3�4�4�4����
�
�
�������E��2�2�3�3�3��N����������S��1�1�2�2�2�
�^�
�
��
!�����2�s�#�#�#�#�#rc�J��|���������fd�}t|d��}|���t	��|�|j������|���dS)Nc�X����������dSrrh)rs�r
rz0BaseSemaphoreTests.test_default_value.<locals>.fs!����K�K�M�M�M��K�K�M�M�M�M�Mrra)	rrPrr)rrbrrVr,)rrrmrs   @r
�test_default_valuez%BaseSemaphoreTests.test_default_value�s�����l�l�n�n�����
�
�
�	�	�	�	�	�
�!�Q�K�K��	������
���������$�$�$����
�
�
�	�������rc������d���d��fd�	}|������d����������t
|t
������d��������dS)Nr�c�D���5����d���������5����d����|r|�	ddd��n#1swxYwYddd��dS#1swxYwYdSrY)rZrPrVrb)rrrrs ��r
rsz+BaseSemaphoreTests.test_with.<locals>._withs%����
"�
"�������E� 2� 2�3�3�3����
�
�
��"�"��$�$�S�[�[��%7�%7�8�8�8��"�!�	�"�"�"�"�"�"�"�"�"�"�"�"����"�"�"�"�
"�
"�
"�
"�
"�
"�
"�
"�
"�
"�
"�
"����
"�
"�
"�
"�
"�
"s5�?B�-A=�1B�=B	�B�B	�B�B�BFr)rrZrPrVrtru)rrsrs` @r
rvzBaseSemaphoreTests.test_with
s������l�l�1�o�o��	"�	"�	"�	"�	"�	"�	"�	�����������E�*�*�+�+�+����
�
�
����)�U�I�6�6�6�������E�*�*�+�+�+����
�
�
�
�
rN)r0r1r2r3rJr�rSrnrr[rdrr rvrrr
r�r��s���������J�J�J�������
#@�#@�#@�J���@,�,�,�F�F�F�$�$�$��������rr�c��eZdZdZd�Zd�ZdS)�SemaphoreTestsz)
    Tests for unbounded semaphores.
    c���|�d��}|���|���|���|���dS�Nra)rrVrPrs  r
r�z&SemaphoreTests.test_release_unacquired#sI���l�l�1�o�o�����
�
�
����
�
�
����
�
�
����
�
�
�
�
rc�z�|�d��}|�t|��d��|���|�t|��d��|���|���|�t|��d��dS)Nr�z<\w+\.Semaphore at .*: value=3>z<\w+\.Semaphore at .*: value=2>z<\w+\.Semaphore at .*: value=4>)rrLrMrPrVrs  r
rNzSemaphoreTests.test_repr+s����l�l�1�o�o������c���$F�G�G�G����
�
�
�����c���$F�G�G�G����
�
�
����
�
�
�����c���$F�G�G�G�G�GrN�r0r1r2r3r�rNrrr
r$r$sA�����������H�H�H�H�Hrr$c��eZdZdZd�Zd�ZdS)�BoundedSemaphoreTestsz'
    Tests for bounded semaphores.
    c��|���}|�t|j��|���|���|�t|j��dSr)rrtr�rVrPrs  r
r�z-BoundedSemaphoreTests.test_release_unacquired:s_���l�l�n�n�����*�c�k�2�2�2����
�
�
����
�
�
����*�c�k�2�2�2�2�2rc���|�d��}|�t|��d��|���|�t|��d��dS)Nr�z(<\w+\.BoundedSemaphore at .*: value=3/3>z(<\w+\.BoundedSemaphore at .*: value=2/3>)rrLrMrPrs  r
rNzBoundedSemaphoreTests.test_reprBs^���l�l�1�o�o������c���$O�P�P�P����
�
�
�����c���$O�P�P�P�P�PrNr(rrr
r*r*5sA��������3�3�3�Q�Q�Q�Q�Qrr*c�v�eZdZdZdZdZd�Zd�Zd�Zd�Z	dd	�Z
d
�Zd�Zd�Z
d
�Zd�Zd�Zd�Zd�Zd�Zd�ZdS)�BarrierTestsz$
    Tests for Barrier objects.
    rfg@c�R�|�|j|j���|_dS)Nr})�barriertyperl�defaultTimeout�barrierr(s r
r9zBarrierTests.setUpPs%���'�'����8K�'�L�L����rc�8�|j���dSr)r2�abortr(s r
r=zBarrierTests.tearDownRs����������rc�r�t||jdz
��}|��|���dSr&)rrlr,)rrrms   r
�run_threadszBarrierTests.run_threadsUs:���!�T�V�A�X����	�����	�������rc�|�|jj}|�||j��t	|��D]�}|d�d��|�t
|d��||z��|j���|d�d��|�t
|d��|dz|z��|j�����|�|jjd��|�	|jj
��dS)NrTra)r2�partiesrkrlr"rr'r��	n_waitingrb�broken)rr�r�mr$s     r
�	multipasszBarrierTests.multipassZs���L� ������D�F�#�#�#��q���	 �	 �A��A�J���d�#�#�#����S����_�_�a�!�e�4�4�4��L�������A�J���d�#�#�#����S����_�_�q�1�u��k�:�:�:��L������������/��3�3�3������,�-�-�-�-�-rrac�L����ggg����fd�}��|��dS)z;
        Test that a barrier is passed in lockstep
        c�4��������dSr)r<)�passesr�rs���r
rz$BarrierTests.test_barrier.<locals>.fls����N�N�7�F�+�+�+�+�+rN�r6)rr?rr�s`` @r
�test_barrierzBarrierTests.test_barriergsM������b�'��	,�	,�	,�	,�	,�	,�	,���������rc�,�|�d��S)zC
        Test that a barrier works for 10 consecutive runs
        r)rAr(s r
�test_barrier_10zBarrierTests.test_barrier_10ps��� � ��$�$�$rc�����g���fd�}��|����t���tt�j������dS)z9
        test the return value from barrier.wait
        c�d���j���}��|��dSr)r2r�r)r�r�rs ��r
rz(BarrierTests.test_wait_return.<locals>.f{s.�����!�!�#�#�A��N�N�1�����rN)r6rk�sumr"rl)rrr�s` @r
�test_wait_returnzBarrierTests.test_wait_returnvsq������	�	�	�	�	�	�	
�����������W���s�5���=�=�'9�'9�:�:�:�:�:rc�����g��fd�}���j|������fd�}��|��dS)z,
        Test the 'action' callback
        c�2����d��dSr.)r)r�s�r
�actionz(BarrierTests.test_action.<locals>.action�s����N�N�4� � � � � rc�v��������t���d��dSr&)r�rkr')r2r�rs���r
rz#BarrierTests.test_action.<locals>.f�s2����L�L�N�N�N����S��\�\�1�-�-�-�-�-rN�r0rlr6)rrJrr2r�s`  @@r
�test_actionzBarrierTests.test_action�s{�������	!�	!�	!�	!�	!��"�"�4�6�6�2�2��	.�	.�	.�	.�	.�	.�	.�	
��������rc�&����g�g����fd�}��|����t���d����t����jdz
�����jj��dS)zK
        Test that an abort will put the barrier in a broken state
        c�b��	�j���}|�jdzkrt��j�����d��dS#t
j$r��d��YdSt$r�j���YdSwxYw�Nr�T)r2r�rlr�rr�BrokenBarrierErrorr4)r$r�r�rs ���r
rz"BarrierTests.test_abort.<locals>.f�s����

��L�%�%�'�'������	�>�>�&�&���!�!�#�#�#�����%�%�%�%�%���/�
&�
&�
&�����%�%�%�%�%�%��
�
�
���"�"�$�$�$����
���s�AA!�!$B.�"B.�-B.rraN)r6rkr'rlrZr2r:)rrr�r�s` @@r
�
test_abortzBarrierTests.test_abort�s����������	�	�	�	�	�	�	�	
�����������X����*�*�*�����X�����q��1�1�1������+�,�,�,�,�,rc�@�����g�g�g�����fd�}��|����t���d����t����jdz
����t����j��dS)zL
        Test that a 'reset' on a barrier frees the waiting threads
        c�"���j���}|�jdzkr^�jj�jdz
kr,t	jd���jj�jdz
k�,�j���nZ	�j�����d��n*#tj	$r��d��YnwxYw�j�����d��dS)Nr�rag����MbP?T)
r2r�rlr9r	r
�resetrrrQ)r$r�r��results3rs ����r
rz"BarrierTests.test_reset.<locals>.f�s�����!�!�#�#�A��D�F�A�I�~�~��l�,�t�v�a�x�7�7��J�u�%�%�%��l�,�t�v�a�x�7�7���"�"�$�$�$�$�*��L�%�%�'�'�'��O�O�D�)�)�)�)�� �3�*�*�*��O�O�D�)�)�)�)�)�*����
�L�������O�O�D�!�!�!�!�!s�.B7�7$C�CrraN)r6rkr'rl)rrr�r�rVs` @@@r
�
test_resetzBarrierTests.test_reset�s�������������	"�	"�	"�	"�	"�	"�	"�	"�"	
�����������X����*�*�*�����X�����q��1�1�1�����X�����/�/�/�/�/rc�x������g�g�g����j��������fd�}��|����t	���d����t	����jdz
����t	����j��dS)zF
        Test that a barrier can be reset after being broken.
        c�V��	�j���}|�jdzkrt��j�����d��nN#t
j$r��d��Yn(t$r�j���YnwxYw�����jdzkr�j��������j�����d��dSrP)	r2r�rlr�rrrQr4rU)r$�barrier2r�r�rVrs �����r
rz,BarrierTests.test_abort_and_reset.<locals>.f�s"���

��L�%�%�'�'������	�>�>�&�&���!�!�#�#�#�����%�%�%�%���/�
&�
&�
&�����%�%�%�%�%��
�
�
���"�"�$�$�$���
�����}�}���$�&�!�)�+�+���"�"�$�$�$��M�M�O�O�O��L�������O�O�D�!�!�!�!�!s�AA � $B+�"B+�*B+rraN)r0rlr6rkr')rrrZr�r�rVs` @@@@r
�test_abort_and_resetz!BarrierTests.test_abort_and_reset�s���������������#�#�D�F�+�+��	"�	"�	"�	"�	"�	"�	"�	"�	"�*	
�����������X����*�*�*�����X�����q��1�1�1�����X�����/�/�/�/�/rc�<���fd�}��|��dS)z$
        Test wait(timeout)
        c�����j���}|�jdzkrtjd����tj�jjd��dS)Nr�rr�)r2r�rlr	r
rtrrQ)r$rs �r
rz$BarrierTests.test_timeout.<locals>.f�se�����!�!�#�#�A��D�F�a�K����
�3�������i�:�"�l�/��
6�
6�
6�
6�
6rNr@)rrs` r
r�zBarrierTests.test_timeout�s8���	6�	6�	6�	6�	6�	
��������rc�x������jd������fd�}��|��dS)z4
        Test the barrier's default timeout
        g333333�?r}c�������}|�jdzkrtjd����t
j�j��dS)Nr�r)r�rlr	r
rtrrQ)r$r2rs ��r
rz,BarrierTests.test_default_timeout.<locals>.f�sO��������A��D�F�a�K����
�3�������i�:�G�L�I�I�I�I�IrNrL)rrr2s` @r
�test_default_timeoutz!BarrierTests.test_default_timeout�s`����
�"�"�4�6�3�"�7�7��	J�	J�	J�	J�	J�	J�	
��������rc��|�d��}|���|���dSr&)r0r�)rrms  r
�test_single_threadzBarrierTests.test_single_threads3�����Q����	������	�������rc�>��|�d���|�t���d���fd�}t|d��}|���tjd��|�t���d����d��|���|�t���d����	��|�t���d��dS)Nr�z!<\w+\.Barrier at .*: waiters=0/3>c�2����d��dS)Nr�)r�)rms�r
rz!BarrierTests.test_repr.<locals>.fs���
�F�F�1�I�I�I�I�Irr�g�������?z!<\w+\.Barrier at .*: waiters=2/3>z<\w+\.Barrier at .*: broken>)
r0rLrMrr)r	r
r�r,r4)rr�bunchrms   @r
rNzBarrierTests.test_repr	s������Q��������a���"F�G�G�G�	�	�	�	�	��a�����
��� � � ��
�3��������a���"F�G�G�G�	���q�	�	�	�
���!�!�!�����a���"F�G�G�G�	���	�	�	�����a���"A�B�B�B�B�BrN)ra)r0r1r2r3rlr1r9r=r6r<rArCrGrMrRrWr[r�r`rbrNrrr
r.r.Is��������	
�A��N�M�M�M�������
.�.�.�����%�%�%�
;�
;�
;����-�-�-�00�0�0�< 0� 0� 0�D���������

C�
C�
C�
C�
Crr.) r3�osr�rr	�_threadrrr�unittestr��testr�test.supportr�
skipUnless�has_fork_supportr�r�objectr�TestCaser5rEr�r�r�r�r�r$r*r.rrr
�<module>ros����
�	�	�	�	�	�	�	�
�
�
�
�����1�1�1�1�1�1�1�1�������������������)�)�)�)�)�)�$��#�G�$<�%C�D�D�
�
���.�.�.�.�.�F�.�.�.�b1�1�1�1�1�8�$�1�1�1�"E!�E!�E!�E!�E!�L�E!�E!�E!�PA�A�A�A�A�
�A�A�A�H@+�@+�@+�@+�@+��@+�@+�@+�Fb@�b@�b@�b@�b@��b@�b@�b@�Jl*�l*�l*�l*�l*�\�l*�l*�l*�^\�\�\�\�\��\�\�\�|H�H�H�H�H�'�H�H�H�.Q�Q�Q�Q�Q�.�Q�Q�Q�(MC�MC�MC�MC�MC�<�MC�MC�MC�MC�MCr