o
    HXîh@|  ã                   @   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   ú8/opt/python-3.10.19/usr/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   sœ  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ƒ<}ztj| ¡ ||d}W n
 tyœ   Y nw |  t|jd¡ |  t|j
d	¡ | ¡  W d   ƒ d S 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ÚPermissionError)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 )
Nrk   ó   one two onesó   oner   s   onesé   r!   r   rh   )
r%   r   r/   r&   r(   r
   r)   r-   r.   Ú	bytearray©r   r>   rn   ro   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 )
Nrk   rr   rs   rt   s   one r   r!   rh   r   )
r%   r   r/   r&   r(   r
   r)   r-   Úrfindru   rv   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 )Nrk   é   rH   r$   rI   )r%   r   r&   r
   r)   rV   r*   ©r   r>   Úmfr   r   r   Útest_double_close8  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 )Nrk   rz   ó   mzrb+r   z Map size should equal file size.)r%   r   r&   r
   r)   r-   r/   rY   r{   r   r   r   Útest_entire_fileB  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   rz   ©ÚoffsetrJ   i€8 )	r%   r   r&   r
   r)   rV   r0   r1   r2   r{   r   r   r   Útest_length_0_offsetL  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_offsetX  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 )Nrk   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*   rm   r/   ÚmaxÚ	itertoolsÚproductr:   r0   )r   r>   r|   rn   ÚdestÚsrcÚcountZexpectedr?   ÚoffsetsÚsourcer=   r   r   r   Ú	test_moveb  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'   rm   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   rt   ó    r   rQ   r‡   rh   é	   iÖÿÿÿ)	r
   Ú
addCleanupr*   r&   Úbytesrm   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,  rh   iáÿÿÿiÔþÿÿ)rœ   Úreversedrm   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¤   rm   r
   r/   rZ   r¥   r-   Úlist)	r   r¦   r?   r§   rB   r¨   r©   ÚLrn   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   )rh   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?   rd   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   rd   re   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_error6  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   rl   rN   r   éx   r   r   s   345r   r   s
   012bar6789s   bazrš   s
   012barbaz9s   ba)r%   r   r&   r/   r
   r)   rm   r-   r9   rX   r0   r:   r8   Ú	read_byterY   ru   )r   rn   re   r>   r?   Úir   r   r   Útest_io_methods9  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_byte[  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_tagnamed  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_sizeof~  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?   re   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   rl   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Ò   ri   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   ƒ n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²   )Ú.0rd   r   r   r   Ú	<genexpr>ö  s   € ÿÿz&MmapTests.test_repr.<locals>.<genexpr>rH   )ZACCESS_DEFAULTrV   r_   r^   r   rF   r‡   rQ   rk   )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   rd   rn   rD   ZaccessesZ	positionsre   rJ   rí   Zaccintrß   rA   r   r   r   Ú	test_reprí  sL   ÿ
ÿ


ý

öòý€ú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   rg   rj   rq   rw   ry   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      sb    ^ 


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_offset>  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   rz   )r   rZ   r¥   r0   r³   r
   r)   rV   r:   r-   r=   r  r   r   r   Útest_large_filesizeC  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_boundaryQ  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_2GBY  ó   zLargeMmapTests.test_around_2GBc                 C   r  r   )r  r   r   r   r   r   Útest_around_4GB]  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.          =ÿ