o
    i+                     @   s   d dl Z d dlZd dlZzd dlmZ W n ey   dZY nw eZd dlZd dlZd dlm	Z	m
Z
mZmZ dZerHeeZeeZeee Zdd ZG dd de
ZdS )	    N)getrefcount)PYPYBaseZMQTestCaseSkipTest	skip_pypy   xc                 C   sF   t jdk rd}nd}tdD ]}t| || kr dS td qdS )zwait for refcount on an object to drop to an expected value

    Necessary because of the zero-copy gc thread,
    which can take some time to receive its DECREF message.
    )            2   Ng?)sysversion_inforangegrctimesleep)objrcmy_refsi r   Q/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/zmq/tests/test_message.pyawait_gc   s   
r   c                       s   e Zd Z fddZedd Zdd Zdd Zd	d
 Zdd Z	edd Z
e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%d& Zd'd( Zed)d* Z  ZS )+	TestFramec                    s$   t    tdD ]}t  q	d S )Nr   )supertearDownr   gccollect)selfr   	__class__r   r   r   2   s   

zTestFrame.tearDownc                 C   sh   t ddD ],}d| t }t|}tj|dd}t||d ks"J ~t|| t||ks0J ~qdS )z/Message above 30 bytes are never copied by 0MQ.      r
   FcopyN)r   xr   zmqFramer   )r   r   sr   mr   r   r   test_above_307   s   
zTestFrame.test_above_30c                 C   sD   t dD ]}d| t }t|}t|}| }||ksJ qdS )z+Test the str representations of the Frames.r#   r
   N)r   r&   r'   r(   strencode)r   r   r)   r*   m_strm_str_br   r   r   test_strD   s   
zTestFrame.test_strc                 C   s\   t ddD ]&}d| t }t|}|j}||jksJ ts$||us$J ||ju s+J qdS )zTest the Frame.bytes property.r   r#   r
   N)r   r&   r'   r(   bytesr   )r   r   r)   r*   br   r   r   
test_bytesM   s   
zTestFrame.test_bytesc                 C   sV   d}|  ttj| tdD ]}d| d }t|d}||jdks(J qdS )z/Test the unicode representations of the Frames.asdfr#   r
      §utf8N)assertRaises	TypeErrorr'   r(   r   r-   r1   decode)r   r)   r   r*   r   r   r   test_unicodeZ   s   zTestFrame.test_unicodec                 C   s<   t dD ]}d| t }t|}t|t|ksJ qdS )zTest the len of the Frames.r#   r
   N)r   r&   r'   r(   len)r   r   r)   r*   r   r   r   test_lenc   s
   
zTestFrame.test_lenc                 C   s*  t ddD ]}d| t }t| }}tj|dd}|d7 }t||ks&J t|}|d7 }t||ks7J |j}t||ksBJ |t| ksLJ |t	|ksTJ ||j	ks[J |t	|kscJ ~t||kslJ ~|d8 }t||ksyJ ~|d8 }t
|| t||ksJ ||ksJ ~qdS )z-Run through a ref counting cycle with a copy.r"   r#   r
   Fr$   r   Nr   r&   r   r'   r(   r%   bufferr,   r-   r1   r   r   r   r)   r   rc_0r*   m2bufr   r   r   test_lifecycle1j   s6   

zTestFrame.test_lifecycle1c                 C   s8  t ddD ]}d| t }t| }}tj|dd}|d7 }t||ks&J t|}|d7 }t||ks7J |j}t||ksBJ |t| ksLJ |t	|ksTJ ||j	ks[J ||j	ksbJ |t	|ksjJ ~t||kssJ ~|d8 }t||ksJ ~|d8 }t
|| t||ksJ ||ksJ ~qdS )z7Run through a different ref counting cycle with a copy.r"   r#   r
   Fr$   r   Nr=   r?   r   r   r   test_lifecycle2   s8   

zTestFrame.test_lifecycle2c                 C   sx   t jdddd}|jjrJ t |}|jrJ ~tdD ]}t  qtdD ]}|jr/ nt	d q(|js:J d S )N   asdfFTr%   trackr   
   皙?)
r'   r(   trackerdoneMessageTrackerr   r   r   r   r   )r   r*   pmr   r   r   r   test_tracker   s   


zTestFrame.test_trackerc                 C   sH   t jddd}|jd ksJ t|}|jd ksJ | tt j| d S )NrE   F)rG   )r'   r(   rJ   r%   r7   
ValueErrorrL   )r   r*   rA   r   r   r   test_no_tracker   s
   
zTestFrame.test_no_trackerc                 C   s   t jdddd}t jdddd}t ||}|jjrJ |jr!J | t j|jd ~tdD ]}t	
  q/| t j|jd |jrDJ ~tdD ]}t	
  qI|dd u sYJ |js^J d S )NrE   FTrF   s   whodarI   r   )r'   r(   rL   rJ   rK   r7   NotDonewaitr   r   r   )r   r*   rA   mtr   r   r   r   test_multi_tracker   s    



zTestFrame.test_multi_trackerc                 C   s   d  }tt| dS )ztest using a buffer as input8   §§¶•ªº˜µ¬˚…∆˙åß∂©œ∑´†≈ç√N)r-   r'   r(   
memoryview)r   insr   r   r   test_buffer_in   s   zTestFrame.test_buffer_inc                 C   s&   |  ttjd |  ttjt  dS )ztest using a bad objectr"   N)r7   r8   r'   r(   object)r   r   r   r   test_bad_buffer_in   s   zTestFrame.test_bad_buffer_inc                 C   sH   d  }t|}|j}t|tsJ ||ju sJ |j|ju s"J dS )zreceiving buffered outputrU   N)r-   r'   r(   r>   
isinstancerV   )r   rW   r*   outbr   r   r   test_buffer_out   s   
zTestFrame.test_buffer_outc                 C   s   d  }t|}t|}|j}|jdksJ |j|fksJ | |ks'J t|}|jdks2J |j|fks:J | |ksBJ dS )zmemoryview shape inforU   r   N)	r-   r;   r'   r(   r>   ndimshapetobytesrV   )r   datanfview1view2r   r   r   test_memoryview_shape   s   
zTestFrame.test_memoryview_shapec                 C   s   |  tjtj\}}d}t|}||jksJ |j|dd td ||jks+J |j|dd td ||jks>J |j|dd td ||jksQJ |j|dd td ||jksdJ tdD ]}|	 }||kstJ qh||jks|J dS )z9ensure that a message remains intact after multiple sendss   messageFr$   rI   T   N)
create_bound_pairr'   PAIRr(   r1   sendr   r   r   recv)r   ar2   r)   r*   r   rr   r   r   test_multisend   s(   




zTestFrame.test_multisendc                 C   sB   d}t | t|}|j}| }||ksJ |j|ksJ dS )ztest messages from memoryviews   carrotjuiceN)rV   r'   r(   r>   r`   r1   )r   r)   r*   rB   s2r   r   r   test_memoryview  s   
zTestFrame.test_memoryviewc                 C   s   d}|  tjtj\}}tdD ]R}|j|dd |jdd}|j}|j}~tdD ]7}dd|d   }|j|dd |jdd}	| }
|
|ksKJ ||ksQJ |	j|ksXJ t	|	jtu saJ q*qd	S )
z$check for clobbering message buffers@                                                                       Fr$   r"      (   rH   N)
rh   r'   ri   r   rj   rk   r1   r>   r`   type)r   nullsasbr   r*   mbrB   ffrA   r2   r   r   r   test_noncopying_recv  s&   zTestFrame.test_noncopying_recvc           
      C   s   d}|  tjtj\}}tdD ]Y}|jt|dd |jdd}t|}tdD ]?}dd|d   }|jt|dd |jdd}t|}	| |ksNJ |jrSJ |	 |ks[J |	jr`J t	|tu shJ q)qd	S )
z%test non-copying memmoryview messagesrq   rr   Fr$   r"   rs   rt   rH   N)
rh   r'   ri   r   rj   rV   rk   r`   readonlyru   )
r   rv   rw   rx   r   r*   rB   rz   rA   buf2r   r   r   test_noncopying_memoryview1  s$   

z$TestFrame.test_noncopying_memoryviewc                    sV  zddl }ddlm} W n ty   tdw |jj  fddtdD }| t	j
t	j
\}}ttdd	g}td
t|d
 D ]h}|d| }|D ]&}	|j||	d}
|j|
dd |jdd}|||
j|
j}||
| qJ|j|dtfdtfdgd}
d|
d< d|
d< d|
d< |j|
dd |jdd}|||
j|
j}||
| q@dS )z%test non-copying numpy array messagesr   N)assert_array_equalzrequires numpyc                    s   g | ]} d dqS )r
   r"   r   ).0r   randr   r   
<listcomp>M  s    z/TestFrame.test_buffer_numpy.<locals>.<listcomp>r"   z>i4Br   )dtypeFr$   rl   r2   )ca32i   g    eAzhello therer   )numpynumpy.testingr   ImportErrorr   randomrandintr   rh   r'   ri   intfloatr;   emptyrj   rk   
frombufferr   reshaper_   )r   r   r   shapesrl   r2   dtypesr   r_   dtAmsgr   r   r   r   test_buffer_numpyE  s6   zTestFrame.test_buffer_numpyc                 C   s   t d}|jr
J | t jt j\}}|ddg | j|dd}|js'J t  d dkr9ts9|	t j
s9J | j|dd}|jrEJ t  d dkrWtsY|	t j
r[J dS dS dS )	ztest Frame.more attributes   hellos   his   thereFr$   r   r   N)r'   r(   morerh   ri   send_multipartrk   zmq_version_infor   getMORE)r   framerw   rx   r   r   r   test_frame_mored  s   



zTestFrame.test_frame_more)__name__
__module____qualname__r   r   r+   r0   r3   r:   r<   rC   rD   rN   rP   rT   rX   rZ   r]   rf   rn   rp   r{   r~   r   r   __classcell__r   r   r    r   r   1   s4    
		
#
"	
r   )r%   r   r   r   r   r   r   r'   	zmq.testsr   r   r   r   r&   rc0rV   vview_rcr   r   r   r   r   r   <module>   s&   