a
    äzeM{  ã                   @   s¦   d dl mZmZmZmZmZmZmZmZ d dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZedƒZejZG dd„ de	jƒZG dd„ de	jƒZedkr¢e	 ¡  dS )	é    )ÚTESTFNÚimport_moduleÚunlinkÚrequiresÚ_2GÚ_4GÚ
gc_collectÚcpython_onlyNÚmmapc                   @   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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 eed-ƒd.¡d/d0„ ƒZd1d2„ Zd3d4„ Zd5d6„ Z e e!j"d7kd8¡d9d:„ ƒZ#e$e e!j"d7kd8¡d;d<„ ƒƒZ%e e!j"d7kd8¡d=d>„ ƒZ&e e!j"d7kd8¡d?d@„ ƒZ'dAdB„ Z(dCdD„ Z)dEdF„ Z*dGdH„ Z+e ,e!j"d7kdI¡dJdK„ ƒZ-dLdM„ Z.dNdO„ Z/dPdQ„ Z0e eejdRƒdS¡dTdU„ ƒZ1dVS )WÚ	MmapTestsc                 C   s   t j t¡rt  t¡ d S ©N)ÚosÚpathÚexistsr   r   ©Úself© r   ú$/usr/lib/python3.9/test/test_mmap.pyÚsetUp   s    zMmapTests.setUpc                 C   s&   zt  t¡ W n ty    Y n0 d S r   )r   r   r   ÚOSErrorr   r   r   r   ÚtearDown   s    zMmapTests.tearDownc                 C   sÚ  t tdƒ}zR| dt ¡ | d¡ | dtd  ¡ | ¡  t | ¡ dt ¡}W | ¡  n
| ¡  0 tt	|ƒƒ}|  
| d¡t¡ |  
t|ƒdt ¡ |  
|d d¡ |  
|dd… d¡ |  t|jt|ƒ¡ |  t|jt|ƒd¡ d|d< d	|td td d …< |  
|d d¡ |  
|dd… d
¡ |  
|td td … d¡ | ¡  t d|¡}|d u rr|  d¡ n2| d¡\}}|| }|  
|t¡ |  
|td ¡ | dd¡ |  
| ¡ d¡ | dd¡ |  
| ¡ d¡ | dd¡ |  
| ¡ t|ƒ¡ |  t|jd¡ |  t|jdd¡ |  t|jt|ƒ d d¡ z| d¡ W n ty\   Y nr0 |  
t|ƒd¡ |  t|jdd¡ t tdƒ}z(| dd¡ |  
| ¡ d¡ W | ¡  n
| ¡  0 |  
| ¡ d¡ | ¡  d S )Nzbw+ó    ó   fooé   é   r   s      é3   ó   bars   3  é   é   s    foobar s	   [A-Za-z]+zregex match on mmap failed!é   é*   éÿÿÿÿé   é  Úrb)Úopenr   ÚwriteÚPAGESIZEÚflushr
   ÚfilenoÚcloseÚstrÚtypeÚassertEqualÚfindÚlenÚassertRaisesÚ
IndexErrorÚ__getitem__Ú__setitem__ÚreÚsearchÚfailÚspanÚseekÚtellÚ
ValueErrorÚresizeÚSystemErrorÚsize)r   ÚfÚmÚtpÚmatchÚstartÚendÚlengthr   r   r   Ú
test_basic   sd    



zMmapTests.test_basicc              
   C   sz  d}t tdƒ}| d| ¡ W d   ƒ n1 s20    Y  t tdƒ–}tj| ¡ |tjd}|  |d d … d| d¡ zd| |d d …< W n ty    Y n0 |  d¡ zd|d	< W n tyÊ   Y n0 |  d¡ z| 	d	d	¡ | d
¡ W n ty   Y n0 |  d¡ z| 	d	d	¡ | 
d¡ W n ty>   Y n0 |  d¡ z| d| ¡ W n& typ   Y n ty‚   Y n0 |  d¡ t tdƒ&}|  | ¡ d| d¡ W d   ƒ n1 sÆ0    Y  W d   ƒ n1 sæ0    Y  t tdƒº}zt | ¡ |d ¡}W n, ty@   tj d¡r<|  d¡ Y n"0 tj d¡sZ|  d¡ | ¡  tj d¡r¦t tdƒ}| |¡ W d   ƒ n1 sœ0    Y  W d   ƒ n1 s¼0    Y  t tdƒ`}tj| ¡ |tjd}d| |d d …< |  |d d … d| d¡ | ¡  | ¡  W d   ƒ n1 s80    Y  t tdƒ}| ¡ }W d   ƒ n1 sl0    Y  |  |d| d¡ t tdƒ¶}tj| ¡ |tjd}d| |d d …< |  |d d … d| d¡ | ¡  t tdƒ&}|  | ¡ d| d¡ W d   ƒ n1 s0    Y  |  t|jd| ¡ | ¡  W d   ƒ n1 sP0    Y  t tdƒ*}| jttj| ¡ |dd W d   ƒ n1 s–0    Y  tjdkrvt tdƒ4}| jttj| ¡ |tjtjtjd W d   ƒ n1 sò0    Y  tjttdd	ƒB }t tdƒL}tj| ¡ ||d}|  t|jd¡ |  t|j
d	¡ | ¡  W d   ƒ n1 sl0    Y  d S )Né
   Úwbó   ar$   ©Úaccessz#Readonly memory map data incorrect.ó   bz$Able to write to readonly memory mapr   ó   abcó   dr   z"Able to resize readonly memory mapz*Readonly memory map data file was modifiedúr+br   Úwinz0Opening mmap with size+1 should work on Windows.z1Opening mmap with size+1 should raise ValueError.ó   cz5Write-through memory map memory not updated properly.z8Write-through memory map data file not updated properly.z4Copy-on-write memory map data not written correctly.z4Copy-on-write test data file should not be modified.é   Úposix)ÚflagsÚprotrJ   Z	PROT_EXEC©rT   s   abcdef)r%   r   r&   r
   r)   ÚACCESS_READr-   Ú	TypeErrorr6   r8   Ú
write_byter;   r<   Úreadr:   ÚsysÚplatformÚ
startswithr*   ÚtruncateÚACCESS_WRITEr(   ÚACCESS_COPYr0   r   ÚnameZMAP_PRIVATEÚ	PROT_READÚgetattr)r   ÚmapsizeÚfpr>   r?   ÚstuffrT   r   r   r   Útest_access_parameter{   s¶    ,




ÿD
Jÿ((ÿÿÿ$(:þ&zMmapTests.test_access_parameterc                 C   s   |   ttjdd¡ d S )Néþÿÿÿé   )r0   r   r
   r   r   r   r   Útest_bad_file_descø   s    zMmapTests.test_bad_file_descc                 C   sÄ   t tdƒ>}d}t|ƒ}| |¡ | ¡  t | ¡ |¡}W d   ƒ n1 sN0    Y  t|d ƒD ]R}t||d ƒD ]>}|||… }|  | 	|¡| 	|¡¡ |  | 	|d ¡d¡ qvqd| 
¡  d S )Núwb+s   aabaac deef  aa r   ó   xr!   )r%   r   r/   r&   r(   r
   r)   Úranger-   r.   r*   )r   r>   ÚdataÚnr?   rB   ZfinishÚslicer   r   r   Útest_tougher_findü   s    
.zMmapTests.test_tougher_findc                 C   sì   t tdƒ>}d}t|ƒ}| |¡ | ¡  t | ¡ |¡}W d   ƒ n1 sN0    Y  |  | d¡d¡ |  | d¡d¡ |  | ddd¡d¡ |  | dd¡d¡ |  | ddd¡d¡ |  | ddd	¡d¡ |  | t	dƒ¡d¡ d S )
Nrj   ó   one two onesó   oner   s   onesé   r!   r   rg   )
r%   r   r/   r&   r(   r
   r)   r-   r.   Ú	bytearray©r   r>   rm   rn   r?   r   r   r   Útest_find_end  s    
.zMmapTests.test_find_endc                 C   sî   t tdƒ>}d}t|ƒ}| |¡ | ¡  t | ¡ |¡}W d   ƒ n1 sN0    Y  |  | d¡d¡ |  | d¡d¡ |  | ddd¡d¡ |  | ddd¡d¡ |  | dd	d¡d¡ |  | dd	d¡d¡ |  | t	dƒ¡d¡ d S )
Nrj   rq   rr   rs   s   one r   r!   rg   r   )
r%   r   r/   r&   r(   r
   r)   r-   Úrfindrt   ru   r   r   r   Ú
test_rfind   s    
.zMmapTests.test_rfindc                 C   sŒ   t tdƒ}| dd ¡ W d   ƒ n1 s.0    Y  t tdƒ6}tj| ¡ dtjd}| ¡  | ¡  W d   ƒ n1 s~0    Y  d S )Nrj   é   rH   r$   rI   )r%   r   r&   r
   r)   rV   r*   ©r   r>   Úmfr   r   r   Útest_double_close2  s    ,zMmapTests.test_double_closec              	   C   s¾   t tdƒ}| dd ¡ W d   ƒ n1 s.0    Y  t tdƒh}t | ¡ d¡8}|  t|ƒdd¡ |  | d¡dd ¡ W d   ƒ n1 s’0    Y  W d   ƒ n1 s°0    Y  d S )Nrj   ry   ó   mzrb+r   z Map size should equal file size.)r%   r   r&   r
   r)   r-   r/   rY   rz   r   r   r   Útest_entire_file<  s    ,ÿzMmapTests.test_entire_filec              	   C   s®   t tdƒ}| dd ¡ W d   ƒ n1 s.0    Y  t tdƒX}tj| ¡ ddtjd }|  t|jd¡ W d   ƒ n1 s‚0    Y  W d   ƒ n1 s 0    Y  d S )	NrG   i   r}   r$   r   ry   ©ÚoffsetrJ   i€8 )	r%   r   r&   r
   r)   rV   r0   r1   r2   rz   r   r   r   Útest_length_0_offsetF  s
    ,zMmapTests.test_length_0_offsetc                 C   s€   t tdƒ}| dd ¡ W d   ƒ n1 s.0    Y  t tdƒ*}| jttj| ¡ ddd W d   ƒ n1 sr0    Y  d S )NrG   ióÃ r}   úw+br   i  ÿ©r€   )r%   r   r&   r0   r:   r
   r)   ©r   r>   r   r   r   Útest_length_0_large_offsetR  s    ,ÿz$MmapTests.test_length_0_large_offsetc              	   C   s$  t tdƒ^}| d¡ | ¡  t | ¡ d¡}| ddd¡ |  |d d … dd¡ | ¡  W d   ƒ n1 sn0    Y  d}t	t
|ƒƒD ]¤}t	t
|ƒƒD ]’}t	t
|ƒt||ƒ ƒD ]v}|d |… |||| …  ||| d …  }t d	t
|ƒ¡}||d d …< | |||¡ |  |d d … |¡ | ¡  q²q˜qˆt d	d
¡}g d¢}	t |	|	|	¡D ]4\}
}}z| |
||¡ W n ty€   Y n0 qPg d¢}	|	D ] \}
}}|  t|j|
||¡ q’| ¡  t d	d¡}|  t|jddd¡ |  t|jddd¡ |  t|jddd¡ | ddd¡ | ddd¡ d S )Nrj   s
   ABCDEabcderF   é   r   s
   ABCDEABCDEz'Map move should have duplicated front 5ó
   0123456789r!   éd   )iœÿÿÿr!   r   r   rˆ   ))r!   r!   r!   )r!   r!   r   )r!   r   r!   )r   r!   r!   )r!   r   r   )r   r!   r   )r   r   r!   r   r   )r%   r   r&   r(   r
   r)   Úmover-   r*   rl   r/   ÚmaxÚ	itertoolsÚproductr:   r0   )r   r>   r{   rm   ÚdestÚsrcÚcountZexpectedr?   ÚoffsetsÚsourcer=   r   r   r   Ú	test_move\  sD    
&,
zMmapTests.test_movec                 C   s^   t   dt¡}ttƒD ]}|  || dd¡ qttƒD ]$}|d@ }|||< |  || |¡ q4d S )Nr!   r   z+anonymously mmap'ed contents should be zeroéÿ   )r
   r'   rl   r-   )r   r?   ÚxÚbr   r   r   Útest_anonymousŒ  s    ÿzMmapTests.test_anonymousc                 C   s&  t   dd¡}|  |j¡ | ttdƒƒ¡ | d¡ |  | ¡ ttdƒƒ¡ | d¡ |  | ¡ ttddƒƒ¡ | d¡ |  | ¡ d¡ | d¡ |  | d ¡ttddƒƒ¡ | d¡ |  | d¡ttddƒƒ¡ | d¡ |  | d	¡ttddƒƒ¡ | d
¡ |  | d¡ttd
dƒƒ¡ d S )Nr!   é   r   rs   ó    r   rQ   r†   rg   é	   iÖÿÿÿ)	r
   Ú
addCleanupr*   r&   Úbytesrl   r8   r-   rY   ©r   r?   r   r   r   Útest_read_all˜  s"    






zMmapTests.test_read_allc                 C   sP   t   dd¡}|  |j¡ |  t|jd¡ |  t|jd¡ |  t|jg d¢¡ d S )Nr!   r—   Úfoog      @)r   r   r   )r
   rš   r*   r0   rW   rY   rœ   r   r   r   Útest_read_invalid_arg­  s
    zMmapTests.test_read_invalid_argc                 C   s¦   t ttdƒƒƒ}t dt|ƒ¡}||d d …< |  |d d … |¡ dd ddddtjddd	d
f}|D ]@}|D ]6}|dd … D ]$}|  ||||… ||||… ¡ qxqhq`d S ©Né   r!   r   r   r   é   i,  rg   iáÿÿÿiÔþÿÿ)r›   Úreversedrl   r
   r/   r-   rZ   Úmaxsize)r   Úsr?   ÚindicesrB   ÚstopÚstepr   r   r   Útest_extended_getsliceµ  s    ÿz MmapTests.test_extended_getslicec           	      C   sÜ   t ttdƒƒƒ}t dt|ƒ¡}dd ddddtjddd	d
f}|D ]–}|D ]Œ}|dd … D ]z}||d d …< |  |d d … |¡ t|ƒ}||||… }t t|ƒƒ}|||||…< |||||…< |  |d d … t |ƒ¡ qXqHq@d S r    )	r›   r£   rl   r
   r/   rZ   r¤   r-   Úlist)	r   r¥   r?   r¦   rB   r§   r¨   ÚLrm   r   r   r   Útest_extended_set_del_sliceÃ  s    z%MmapTests.test_extended_set_del_slicec                 C   sB   |  d| ¡ |  d¡ |  d|d  ¡ | ¡  t | ¡ d¡S )Nr   r   r   r   )r&   r(   r
   r)   )r   r>   Úhalfsizer   r   r   Úmake_mmap_file×  s
    
zMmapTests.make_mmap_filec              	   C   s^   t tdƒ}| ¡  t tdƒ.}| jtdtj| ¡ dtjd W d   ƒ n1 sP0    Y  d S )Nr‚   r$   zcannot mmap an empty filer   rI   )r%   r   r*   ÚassertRaisesRegexr:   r
   r)   rV   r„   r   r   r   Útest_empty_fileß  s    
ýzMmapTests.test_empty_filec                 C   sä  t tdƒ}z¤tj}|  ||¡}| ¡  | ¡  |d }t tdƒ}dD ]N}z$tj| ¡ ||d}|  dd¡ W n tt	t
fy†   Y qF0 |  dd¡ qF| ¡  t tdƒ}tj| ¡ || |d}|  |dd… d	¡ | ¡  z| d
¡ W n tyü   Y n~0 |  t|ƒd
¡ |  t|jdd¡ |  |dd… d	¡ t tdƒ}| dd¡ |  | ¡ |d
 ¡ | ¡  |  | ¡ |d
 ¡ | ¡  W | ¡  zt t¡ W n ty®   Y n0 n.| ¡  zt t¡ W n tyÜ   Y n0 0 d S )Nr‚   r   rN   )rg   r!   Nrƒ   r   r   r   r   r"   r#   r$   )r%   r   r
   ÚALLOCATIONGRANULARITYr®   r*   r)   r-   r:   rW   ÚOverflowErrorr;   r<   r/   r0   r8   r9   r=   r   r   r   )r   r>   r­   r?   rc   r€   r   r   r   Útest_offsetè  sV    




üzMmapTests.test_offsetc                 C   s   G dd„ dt j ƒ}|tƒ d S )Nc                   @   s   e Zd Zdd„ ZdS )z*MmapTests.test_subclass.<locals>.anon_mmapc                 _   s   t j j| dg|¢R i |¤ŽS )Nr!   )r
   Ú__new__)ÚklassÚargsÚkwargsr   r   r   r´   #  s    z2MmapTests.test_subclass.<locals>.anon_mmap.__new__N)Ú__name__Ú
__module__Ú__qualname__r´   r   r   r   r   Ú	anon_mmap"  s   r»   )r
   r'   )r   r»   r   r   r   Útest_subclass!  s    zMmapTests.test_subclassra   zneeds mmap.PROT_READc                 C   s   d}t tdƒ}| d| ¡ W d   ƒ n1 s20    Y  t tdƒ6}tj| ¡ |tjd}|  t|jd¡ W d   ƒ n1 s‚0    Y  d S )NrF   rG   rH   r$   rU   rž   )r%   r   r&   r
   r)   ra   r0   rW   )r   rc   rd   r>   r?   r   r   r   Útest_prot_readonly'  s    ,zMmapTests.test_prot_readonlyc                 C   s   |   tjt¡ d S r   )ÚassertIsr
   Úerrorr   r   r   r   r   Ú
test_error0  s    zMmapTests.test_errorc                 C   sò  d}t tdƒ"}| dt|ƒ ¡ W d   ƒ n1 s60    Y  t tdƒ$}t | ¡ t|ƒ¡}W d   ƒ n1 st0    Y  tt|ƒƒD ]6}|  | ¡ |¡ | 	|| ¡ |  | ¡ |d ¡ qŠ|  
t|j	d¡ |  |d d … |¡ | d¡ tt|ƒƒD ]<}|  | ¡ |¡ |  | ¡ || ¡ |  | ¡ |d ¡ qü|  
t|j¡ | d¡ |  | d¡d	¡ |  | ¡ d
¡ | d¡ | d¡ |  | ¡ d
¡ |  |d d … d¡ | tdƒ¡ |  | ¡ d¡ |  |d d … d¡ |  
t|jd¡ d S )Nr‡   rG   rk   rN   r   éx   r   r   s   345r   r   s
   012bar6789s   bazr™   s
   012barbaz9s   ba)r%   r   r&   r/   r
   r)   rl   r-   r9   rX   r0   r:   r8   Ú	read_byterY   rt   )r   rm   rd   r>   r?   Úir   r   r   Útest_io_methods3  s8    02



zMmapTests.test_io_methodsc                 C   sV   dD ]L}t   dd¡}| |¡ |  |d |¡ | d¡ |  | ¡ |¡ | ¡  qd S )N)é   éÈ   r“   r!   r   r   )r
   rX   r-   r8   rÂ   r*   )r   r•   r?   r   r   r   Útest_non_ascii_byteU  s    

zMmapTests.test_non_ascii_byteÚntzrequires Windowsc                 C   sü   d}d}t j dt|ƒdd}||d d …< t j dt|ƒdd}||d d …< |  |d d … |¡ |  |d d … |¡ | ¡  | ¡  t j dt|ƒdd}||d d …< t j dt|ƒdd}||d d …< |  |d d … |¡ |  |d d … |¡ | ¡  | ¡  d S )Nr‡   s
   abcdefghijr!   rž   ©ÚtagnameZboo)r
   r/   r-   r*   )r   Zdata1Zdata2Úm1Úm2r   r   r   Útest_tagname^  s$    zMmapTests.test_tagnamec                 C   sH   t   dd¡}d}t j dd|d}|  t |¡t |¡t|ƒ d ¡ d S )Nr!   rˆ   rž   rÉ   r   )r
   r-   rZ   Ú	getsizeofr/   )r   rË   rÊ   rÌ   r   r   r   Útest_sizeofx  s    ÿzMmapTests.test_sizeofc                 C   sÞ   t j dddd}zt j ddddd d …  W n   Y n0 | ¡  ttdƒ}| d¡ W d   ƒ n1 sl0    Y  ttdƒ}t   | ¡ d	¡}| ¡  z| d	¡ W n   Y n0 z|d d …  W n   Y n0 | ¡  d S )
Nr!   éè  rž   rÉ   éˆ  rG   s
   xxxxxxxxxxrN   r   )r
   r*   r%   r   r&   r)   r;   )r   r?   rd   r>   r   r   r   Útest_crasher_on_windows  s(    (
z!MmapTests.test_crasher_on_windowsc                 C   s^   t   ¡ }zF|  t¡  t | ¡ d¡}W d   ƒ n1 s:0    Y  W | ¡  n
| ¡  0 d S )NrF   )Úsocketr0   r   r
   r)   r*   )r   r¥   r?   r   r   r   Útest_invalid_descriptor›  s
    0z!MmapTests.test_invalid_descriptorc                 C   sH   t   dd¡}|  |j¡ W d   ƒ n1 s.0    Y  |  |j¡ d S )Nr!   rF   )r
   ZassertFalseÚclosedÚ
assertTruerœ   r   r   r   Útest_context_manager§  s    *zMmapTests.test_context_managerc              	   C   s|   |   t¡@}t dd¡}t‚W d   ƒ n1 s20    Y  W d   ƒ n1 sP0    Y  |  |jtd¡ |  |jd¡ d S )Nr!   rF   z)wrong exception raised in context managerzcontext manager failed)r0   Ú	Exceptionr
   r   ZassertIsInstanceÚ	exceptionrÖ   rÕ   )r   Úexcr?   r   r   r   Útest_context_manager_exception¬  s    @
ÿz(MmapTests.test_context_manager_exceptionc                 C   s>   t   dd¡}t |¡}|  |ƒ |¡ ~tƒ  |  |ƒ d ¡ d S )Nr!   r—   )r
   ÚweakrefÚrefr¾   r   )r   ÚmmÚwrr   r   r   Útest_weakrefµ  s    
zMmapTests.test_weakrefc                 C   sX   t   dd¡}|  | d¡d¡ |  | d¡d¡ |  | d¡d¡ |  | d	¡d
¡ d S )Nr!   r—   r˜   r   rk   r   s   yzr   ó   pythonr   )r
   r-   r&   )r   rÞ   r   r   r   Ú0test_write_returning_the_number_of_bytes_written¾  s
    z:MmapTests.test_write_returning_the_number_of_bytes_writtenz(cannot resize anonymous mmaps on Windowsc                 C   s’   t   dd¡}|  |j¡ | d¡ z| d¡ W n tyL   |  d¡ Y n0 |  | d¡d¡ |  t	|j
¡ |  t	|jd¡ |  t	|jd	¡ d S )
Nr!   i    rÑ   rh   zresizing not supportedé   r˜   r    rL   )r
   rš   r*   rY   r;   r<   ZskipTestr-   r0   r:   rÂ   rX   r&   rœ   r   r   r   Útest_resize_past_posÅ  s    
zMmapTests.test_resize_past_posc                 C   st   t   dd¡}|  t¡ ||  W d   ƒ n1 s40    Y  |  t¡ |d  W d   ƒ n1 sf0    Y  d S )Nr!   r—   r   )r
   r0   rW   rœ   r   r   r   Útest_concat_repeat_exceptionÓ  s
    &z&MmapTests.test_concat_repeat_exceptionc                 C   sZ   t   dd¡}|  |j¡ | d¡ | ¡ }|  |¡ tj d¡rV|  	t
|jdtdƒ¡ d S )Nr!   r—   rá   Úlinuxr   )r
   rš   r*   r&   r(   ZassertIsNonerZ   r[   r\   r0   r   r/   )r   rÞ   Úresultr   r   r   Útest_flush_return_valueÚ  s    

z!MmapTests.test_flush_return_valuec                 C   s–  t  d¡}t  d¡}d}tdd„ |D ƒƒ}t||ƒD ]Z\}}d| }|| }d}	d|d	 |d
 |d f}
ttdƒ}| |¡ | ¡  t 	|	|
¡D ]Ø\}}t
t|ƒ}tj| ¡ |||d†}| |¡ | t|ƒ¡}|  |¡ |  | d¡|¡ |  | d¡t|ƒ¡ |  | d¡t|ƒ¡ |  | d¡t|ƒ¡ W d   ƒ n1 sL0    Y  | t|ƒ¡}|  |¡ q–W d   ƒ q41 s†0    Y  q4d S )Nzr<mmap.mmap closed=False, access=(?P<access>\S+), length=(?P<length>\d+), pos=(?P<pos>\d+), offset=(?P<offset>\d+)>z<mmap.mmap closed=True>)é2   rˆ   rÐ   i@B i€–˜ c                 s   s"   | ]}|d  t j t j V  qdS )r   N)r
   r±   )Ú.0rc   r   r   r   Ú	<genexpr>ð  s   ÿÿz&MmapTests.test_repr.<locals>.<genexpr>rH   )ZACCESS_DEFAULTrV   r_   r^   r   rF   r†   rQ   rj   )rJ   r€   rJ   rD   Úposr€   )r4   ÚcompileÚtupleÚzipr%   r   r&   r(   r‹   rŒ   rb   r
   r)   r8   rA   ÚreprZassertIsNotNoner-   Úgroupr+   )r   Zopen_mmap_repr_patZclosed_mmap_repr_patZmapsizesr   r€   rc   rm   rD   ZaccessesZ	positionsrd   rJ   rì   ZaccintrÞ   rA   r   r   r   Ú	test_reprç  sB    ÿ
ÿ


ý

6zMmapTests.test_reprÚmadvisezneeds madvisec                 C   sx  dt  }t d|¡}|  td¡ | tj|¡ W d   ƒ n1 sD0    Y  |  td¡ | tjd¡ W d   ƒ n1 s~0    Y  |  td¡  | tjdd¡ W d   ƒ n1 sº0    Y  |  td¡" | tjt tj¡ W d   ƒ n1 sø0    Y  |  	| tj¡d ¡ |  	| tjt ¡d ¡ |  	| tjt |¡d ¡ |  	| tjdd¡d ¡ |  	| tjd|¡d ¡ d S )Nr   r!   zmadvise start out of boundszmadvise length invalidr   zmadvise length too large)
r'   r
   r¯   r:   ró   ZMADV_NORMALr²   rZ   r¤   r-   )r   r=   r?   r   r   r   Útest_madvise  s    ,,.0zMmapTests.test_madviseN)2r¸   r¹   rº   r   r   rE   rf   ri   rp   rv   rx   r|   r~   r   r…   r’   r–   r   rŸ   r©   r¬   r®   r°   r³   r¼   ÚunittestÚ
skipUnlessÚhasattrr
   r½   rÀ   rÄ   rÇ   r   r`   rÍ   r	   rÏ   rÒ   rÔ   r×   rÛ   rà   râ   ZskipIfrä   rå   rè   rò   rô   r   r   r   r   r      s^   ^}


0	9
"	


		
$r   c                   @   sp   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	 
ejekd¡dd„ ƒZe	 
ejekd¡dd„ ƒZdS )ÚLargeMmapTestsc                 C   s   t tƒ d S r   ©r   r   r   r   r   r   r   !  s    zLargeMmapTests.setUpc                 C   s   t tƒ d S r   rù   r   r   r   r   r   $  s    zLargeMmapTests.tearDownc                 C   s¤   t jd d… dkst jdkr.tddtdƒ ƒ ttdƒ}z | |¡ | |¡ | ¡  W nF t	t
tfyž   z| ¡  W n t	t
fyŽ   Y n0 t d¡‚Y n0 |S )	Nr   rO   ÚdarwinZ	largefilez-test requires %s bytes and a long time to runì        r‚   z*filesystem does not have largefile support)rZ   r[   r   r+   r%   r   r8   r&   r(   r   r²   r:   r*   rõ   ZSkipTest)r   Z
num_zeroesÚtailr>   r   r   r   Ú_make_test_file'  s     
ÿ


zLargeMmapTests._make_test_filec              	   C   sx   |   dd¡X}tj| ¡ ddtjd }|  |d d¡ W d   ƒ n1 sL0    Y  W d   ƒ n1 sj0    Y  d S )Nl   ÿÿ ó    r   l        r   iÿÿÿé    )rý   r
   r)   rV   r-   ©r   r>   r?   r   r   r   Útest_large_offset8  s    z LargeMmapTests.test_large_offsetc              	   C   s   |   dd¡à}tjdk r˜|  t¡& tj| ¡ dtjd W d   ƒ n1 sN0    Y  |  t¡& tj| ¡ dtjd W d   ƒ n1 sŽ0    Y  tj| ¡ dtjd }|  	| 
¡ d¡ W d   ƒ n1 sÔ0    Y  W d   ƒ n1 sò0    Y  d S )Nl   ÿÿ rþ   rû   rI   r   ry   )rý   rZ   r¤   r0   r²   r
   r)   rV   r:   r-   r=   r   r   r   r   Útest_large_filesize=  s    
44z"LargeMmapTests.test_large_filesizec              	   C   sš   d}|t |ƒd  }|t |ƒ }|  ||¡Z}tj| ¡ dtjd$}|  |||… |¡ W d   ƒ n1 sn0    Y  W d   ƒ n1 sŒ0    Y  d S )Ns     DEARdear  r   r   rI   )r/   rý   r
   r)   rV   r-   )r   Úboundaryrü   rB   rC   r>   r?   r   r   r   Ú_test_around_boundaryK  s    z$LargeMmapTests._test_around_boundaryz!test cannot run on 32-bit systemsc                 C   s   |   t¡ d S r   )r  r   r   r   r   r   Útest_around_2GBS  s    zLargeMmapTests.test_around_2GBc                 C   s   |   t¡ d S r   )r  r   r   r   r   r   Útest_around_4GBW  s    zLargeMmapTests.test_around_4GBN)r¸   r¹   rº   r   r   rý   r  r  r  rõ   rö   rZ   r¤   r   r  r  r   r   r   r   rø     s   
rø   Ú__main__)Ztest.supportr   r   r   r   r   r   r   r	   rõ   r   r4   r‹   rÓ   rZ   rÜ   r
   r'   ZTestCaser   rø   r¸   Úmainr   r   r   r   Ú<module>   s&   (      =