o
    ±ó®g{{  ã                   @   sº   d dl mZmZmZmZmZ d dlmZ d dl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 dS )é    )ÚrequiresÚ_2GÚ_4GÚ
gc_collectÚcpython_only)Úimport_module)ÚTESTFNÚunlinkNÚ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 d S ©N)ÚosÚpathÚexistsr   r	   ©Úself© r   úD/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_mmap.pyÚsetUp   s   ÿzMmapTests.setUpc                 C   s&   zt  t¡ W d S  ty   Y d S w r   )r   r	   r   ÚOSErrorr   r   r   r   ÚtearDown   s
   ÿzMmapTests.tearDownc                 C   sØ  t tdƒ}z)| dt ¡ | d¡ | dtd  ¡ | ¡  t | ¡ dt ¡}W | ¡  n| ¡  w 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 r¸|  d¡ n| 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 n9w |  
t|ƒd¡ |  t|jdd¡ t tdƒ}z| dd¡ |  
| ¡ d¡ W | ¡  n| ¡  w |  
| ¡ 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   sf   

ü
zMmapTests.test_basicc              
   C   sr  d}t tdƒ}| d| ¡ W d   ƒ n1 sw   Y  t tdƒÆ}tj| ¡ |tjd}|  |d d … d| d¡ z
d| |d d …< W n	 tyO   Y nw |  d¡ zd|d	< W n	 tyd   Y nw |  d¡ z| 	d	d	¡ | d
¡ W n	 ty€   Y nw |  d¡ z| 	d	d	¡ | 
d¡ W n	 tyœ   Y nw |  d¡ z	| d| ¡ W n ty´   Y n ty¼   Y nw |  d¡ t tdƒ}|  | ¡ d| d¡ W d   ƒ n1 sÝw   Y  W d   ƒ n1 sìw   Y  t tdƒ]}zt | ¡ |d ¡}W n ty   tj d¡r|  d¡ Y nw tj d¡s&|  d¡ | ¡  tj d¡rLt tdƒ}| |¡ W d   ƒ n	1 sGw   Y  W d   ƒ n	1 sWw   Y  t tdƒ0}tj| ¡ |tjd}d| |d d …< |  |d d … d| d¡ | ¡  | ¡  W d   ƒ n	1 s•w   Y  t tdƒ}| ¡ }W d   ƒ n	1 s¯w   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w   Y  |  t|jd| ¡ | ¡  W d   ƒ n	1 s!w   Y  t tdƒ}| jttj| ¡ |dd W d   ƒ n	1 sDw   Y  tjdkr·t tdƒ}| jttj| ¡ |tjtjtjd W d   ƒ n	1 srw   Y  tjttdd	ƒB }t tdƒ'}tj| ¡ ||d}|  t|jd¡ |  t|j
d	¡ | ¡  W d   ƒ d S 1 s°w   Y  d S 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â   ÿÿ
ÿ
ÿ
ÿ
ÿ
ÿÿ€Ñ4
€ú	
ÿ€ïÿ
ù
ÿÿÿÿÿ
ôÿþÿ
$ü÷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 s'w   Y  t|d ƒD ])}t||d ƒD ]}|||… }|  | 	|¡| 	|¡¡ |  | 	|d ¡d¡ q;q2| 
¡  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 s'w   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 s'w   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w   Y  t tdƒ}tj| ¡ dtjd}| ¡  | ¡  W d   ƒ d S 1 s@w   Y  d S )Nrj   é   rH   r$   rI   )r%   r   r&   r
   r)   rV   r*   ©r   r>   Úmfr   r   r   Útest_double_close3  s   ÿ
"ýzMmapTests.test_double_closec              	   C   sÐ   t tdƒ}| dd ¡ W d   ƒ n1 sw   Y  t tdƒ=}t | ¡ d¡}|  t|ƒdd¡ |  | d¡dd ¡ W d   ƒ n1 sIw   Y  W d   ƒ d S W d   ƒ d S 1 saw   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   ÿÿPýzMmapTests.test_entire_filec              	   C   sÀ   t tdƒ}| dd ¡ W d   ƒ n1 sw   Y  t tdƒ5}tj| ¡ ddtjd}|  t|jd¡ W d   ƒ n1 sAw   Y  W d   ƒ d S W d   ƒ d S 1 sYw   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_offsetG  s   ÿÿÿ"ÿzMmapTests.test_length_0_offsetc                 C   s‚   t tdƒ}| dd ¡ W d   ƒ n1 sw   Y  t tdƒ}| jttj| ¡ ddd W d   ƒ d S 1 s:w   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_offsetS  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 s7w   Y  d}t	t
|ƒƒD ]R}t	t
|ƒƒD ]I}t	t
|ƒt||ƒ ƒD ];}|d |… |||| …  ||| d …  }t d	t
|ƒ¡}||d d …< | |||¡ |  |d d … |¡ | ¡  qYqLqDt d	d
¡}g d¢}	t |	|	|	¡D ]\}
}}z	| |
||¡ W q¨ ty¿   Y q¨w g 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]  sL   

ø,
úÿ
ÿzMmapTests.test_movec                 C   s^   t   dt¡}ttƒD ]}|  || dd¡ q
ttƒD ]}|d@ }|||< |  || |¡ qd 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 ]}|dd … D ]}|  ||||… ||||… ¡ q<q4q0d 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 ]K}|D ]F}|dd … D ]=}||d d …< |  |d d … |¡ t|ƒ}||||… }t t|ƒƒ}|||||…< |||||…< |  |d d … t |ƒ¡ q,q$q 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   ƒ d S 1 s)w   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 ]'}ztj| ¡ ||d}|  dd¡ W n tt	t
fyB   Y q"w |  dd¡ q"| ¡  t tdƒ}tj| ¡ || |d}|  |dd… d	¡ | ¡  z| d
¡ W n	 ty}   Y n?w |  t|ƒd
¡ |  t|jdd¡ |  |dd… d	¡ t tdƒ}| dd¡ |  | ¡ |d
 ¡ | ¡  |  | ¡ |d
 ¡ | ¡  W | ¡  zt t¡ W d S  ty×   Y d S w | ¡  zt t¡ W w  tyì   Y w w )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é  s^   

ÿ
ÿ

ÿýÿ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 sw   Y  t tdƒ}tj| ¡ |tjd}|  t|jd¡ W d   ƒ d S 1 sBw   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_error1  s   zMmapTests.test_errorc                 C   sò  d}t tdƒ}| dt|ƒ ¡ W d   ƒ n1 sw   Y  t tdƒ}t | ¡ t|ƒ¡}W d   ƒ n1 s:w   Y  tt|ƒƒD ]}|  | ¡ |¡ | 	|| ¡ |  | ¡ |d ¡ qE|  
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_methods4  s<   ÿÿ



zMmapTests.test_io_methodsc                 C   sV   dD ]&}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_byteV  s   


úzMmapTests.test_non_ascii_byteÚntzrequires Windowsc                 C   s  d}d}t |ƒt |ƒksJ ‚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_sizeofy  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 | ¡  ttdƒ}| d¡ W d   ƒ n1 s4w   Y  ttdƒ}t   | ¡ d	¡}| ¡  z| d	¡ W n   Y z|d d …  W n   Y | ¡  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   sj   t   ¡ }z+|  t¡ t | ¡ d¡}W d   ƒ n1 sw   Y  W | ¡  d S W | ¡  d S | ¡  w )NrF   )Úsocketr0   r   r
   r)   r*   )r   r¥   r?   r   r   r   Útest_invalid_descriptorœ  s   ÿýz!MmapTests.test_invalid_descriptorc                 C   sH   t   dd¡}|  |j¡ W d   ƒ n1 sw   Y  |  |j¡ d S )Nr!   rF   )r
   ZassertFalseÚclosedÚ
assertTruerœ   r   r   r   Útest_context_manager¨  s   ÿzMmapTests.test_context_managerc              	   C   sn   |   t¡}t dd¡}t‚1 sw   Y  W d   ƒ n1 s!w   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y&   |  d¡ Y nw |  | 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   sv   t   dd¡}|  t¡ ||  W d   ƒ n1 sw   Y  |  t¡ |d  W d   ƒ d S 1 s4w   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   s^   t   dd¡}|  |j¡ | d¡ | ¡ }|  |¡ tj d¡r-|  	t
|jdtdƒ¡ d S 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 ]ª\}}d| }|| }d}	d|d	 |d
 |d f}
ttdƒƒ}| |¡ | ¡  t 	|	|
¡D ]k\}}t
t|ƒ}tj| ¡ |||dC}| |¡ | t|ƒ¡}|  |¡ |  | d¡|¡ |  | d¡t|ƒ¡ |  | d¡t|ƒ¡ |  | d¡t|ƒ¡ W d   ƒ n1 s£w   Y  | t|ƒ¡}|  |¡ qIW d   ƒ q1 s¿w   Y  qd 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è  sJ   ÿ
ÿ


ý

öòýúzMmapTests.test_reprÚmadvisezneeds madvisec                 C   sx  dt  }t d|¡}|  td¡ | tj|¡ W d   ƒ n1 s"w   Y  |  td¡ | tjd¡ W d   ƒ n1 s?w   Y  |  td¡ | tjdd¡ W d   ƒ n1 s]w   Y  |  td¡ | tjt tj¡ W d   ƒ n1 s|w   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&   ÿÿÿÿ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   ó   t tƒ d S r   ©r	   r   r   r   r   r   r   "  ó   zLargeMmapTests.setUpc                 C   rù   r   rú   r   r   r   r   r   %  rû   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 |S  t	t
tfyN   z| ¡  W n t	t
fyH   Y nw t d¡‚w )	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   sŠ   |   dd¡5}tj| ¡ ddtjd}|  |d d¡ W d   ƒ n1 s&w   Y  W d   ƒ d S W d   ƒ d S 1 s>w   Y  d S )Nl   ÿÿ ó    r   l        r   iÿÿÿé    )rÿ   r
   r)   rV   r-   ©r   r>   r?   r   r   r   Útest_large_offset9  s   ÿÿ"ÿz LargeMmapTests.test_large_offsetc              	   C   s  |   dd¡y}tjdk rL|  t¡ tj| ¡ dtjd W d   ƒ n1 s'w   Y  |  t¡ tj| ¡ dtjd W d   ƒ n1 sGw   Y  tj| ¡ dtjd}|  	| 
¡ d¡ W d   ƒ n1 sjw   Y  W d   ƒ d S W d   ƒ d S 1 s‚w   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   
ÿÿÿø"øz"LargeMmapTests.test_large_filesizec              	   C   s¬   d}|t |ƒd  }|t |ƒ }|  ||¡6}tj| ¡ dtjd}|  |||… |¡ W d   ƒ n1 s7w   Y  W d   ƒ d S W d   ƒ d S 1 sOw   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_boundaryL  s   ÿÿ"ÿz$LargeMmapTests._test_around_boundaryz!test cannot run on 32-bit systemsc                 C   ó   |   t¡ d S r   )r  r   r   r   r   r   Útest_around_2GBT  ó   zLargeMmapTests.test_around_2GBc                 C   r  r   )r  r   r   r   r   r   Útest_around_4GBX  r	  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   Ztest.support.import_helperr   Ztest.support.os_helperr   r	   rõ   r   r4   r‹   rÓ   rZ   rÜ   r
   r'   ZTestCaser   rø   r¸   Úmainr   r   r   r   Ú<module>   s.          =ÿ