
    dafA                        d dl mZ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d dlZd dlZ ed      Zej,                  Zd ej.                          dZddZer ej4                  d	       G d
 dej6                        Z G d dej6                        Zedk(  r ej>                          yy)    )requires_2G_4G
gc_collectcpython_onlyis_emscripten)import_module)TESTFNunlinkNmmappython_
_test_mmapc                     dj                  t        j                  t        j                  |             }t
         d| S )N )k_)joinrandomchoicesstringascii_uppercasetagname_prefix)lengthsuffixs     )/root/Python-3.12.4/Lib/test/test_mmap.pyrandom_tagnamer      s3    WWV^^F$:$:fEFFQvh''    z.incompatible with Emscripten's mmap emulation.c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ej6                   eed      d      d        Zd Zd Z d Z! ej6                  e"jF                  dk(  d      d         Z$e% ej6                  e"jF                  dk(  d      d!               Z& ej6                  e"jF                  dk(  d      d"        Z' ej6                  e"jF                  dk(  d      d#        Z(d$ Z)d% Z*d& Z+d' Z,d( Z-d) Z.d* Z/d+ Z0 ej6                   eej:                  d,      d-      d.        Z1 ej6                  e"jF                  dk(  d      d/        Z2 ej6                  e"jF                  dk(  d      d0        Z3 ej6                  e"jF                  dk(  d      d1        Z4 ej6                  e"jF                  dk(  d      d2        Z5d3 Z6y4)5	MmapTestsc                 ~    t         j                  j                  t              rt        j                  t               y y N)ospathexistsr
   r   selfs    r   setUpzMmapTests.setUp"   s#    77>>&!IIf "r   c                 V    	 t        j                  t               y # t        $ r Y y w xY wr!   )r"   r   r
   OSErrorr%   s    r   tearDownzMmapTests.tearDown&   s%    	IIf 		s    	((c                 	   t        t        d      }	 |j                  dt        z         |j                  d       |j                  dt        dz
  z         |j	                          t
        j                  |j                         dt        z        }|j                          t        t        |            }| j                  |j                  d      t               | j                  t        |      dt        z         | j                  |d   d       | j                  |dd d       | j                  t        |j                  t        |             | j                  t        |j                   t        |      d       d|d<   d	|t        dz   t        dz   dz    | j                  |d   d       | j                  |dd d
       | j                  |t        dz
  t        dz    d       |j	                          t#        j$                  d|      }|| j'                  d       nH|j)                  d      \  }}||z
  }| j                  |t               | j                  |t        dz          |j+                  dd       | j                  |j-                         d       |j+                  dd       | j                  |j-                         d       |j+                  dd       | j                  |j-                         t        |             | j                  t.        |j*                  d       | j                  t.        |j*                  dd       | j                  t.        |j*                  t        |       dz
  d       	 |j1                  d       | j                  t        |      d       | j                  t.        |j*                  dd       t        t        d      }	 |j+                  dd       | j                  |j-                         d       |j                          | j                  |j3                         d       |j                          y # |j                          w xY w# |j                          w xY w# t4        $ r Y Fw xY w)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sizeSystemError)r&   fmtpmatchstartendr   s           r   
test_basiczMmapTests.test_basic,   s|    	GGE8O$GGFOGGEHQJ')GGI		!((*a(l3AGGI a\2Q8,1q!1Q+ 	*ammSV<*ammSVUC !(.(A+x{1}% 	1w'1Q*8A:15}E		 		,*=II34AJE35[FUH-S(Q,/ 	
q1%	r!2&	q3q6* 	*affb1 	*affa3 	*affs1vgai;	,HHSM SVS)j!&&#q9 VT"Aq!  3/	QVVXs+		_ GGIX 	%  	 		s*   A?Q	 7Q3 2Q 	QQ03	Q?>Q?c           
         d}t        t        d      5 }|j                  d|z         d d d        t        t        d      5 }t        j                  |j	                         |t        j
                        }| j                  |d d  d|z  d       	 d|z  |d d  | j                  d       	 d|d	<   | j                  d       	 |j                  d	d	       |j                  d
       | j                  d       	 |j                  d	d	       |j                  d       | j                  d       	 |j                  d|z         | j                  d       t        t        d      5 }| j                  |j                         d|z  d       d d d        d d d        t        t        d      5 }	 t        j                  |j	                         |dz         }t        j                  j!                  d      s| j                  d       |j#                          t        j                  j!                  d      r*t        t        d      5 }|j'                  |       d d d        d d d        t        t        d      5 }t        j                  |j	                         |t        j(                        }d|z  |d d  | j                  |d d  d|z  d       |j+                          |j#                          d d d        t        t        d      5 }|j                         }d d d        | j                  d|z  d       t        t        d      5 }t        j                  |j	                         |t        j,                        }d|z  |d d  | j                  |d d  d|z  d       |j+                          t        t        d      5 }| j                  |j                         d|z  d       d d d        | j/                  t        |j                  d|z         |j#                          d d d        t        t        d      5 }| j/                  t$        t        j                  |j	                         |d       d d d        t0        j2                  dk(  r0t        t        d      5 }| j/                  t$        t        j                  |j	                         |t        j4                  t        j6                  t        j(                         d d d        t        j6                  t9        t        dd	      z  }t        t        d      5 }	 t        j                  |j	                         ||      }| j/                  t        |j                  d       | j/                  t        |j                  d	       |j#                          d d d        y y # 1 sw Y   xY w# t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y t        $ r Y w xY w# 1 sw Y   xY w# 1 sw Y   xY w# t$        $ r4 t        j                  j!                  d      r| j                  d       Y _w xY w# 1 sw Y   $xY w# 1 sw Y   )xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   _xY w# 1 sw Y   xY w# t:        $ r Y @w xY w# 1 sw Y   y xY w)N
   wb   ar9   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+br2   winz1Opening mmap with size+1 should raise ValueError.z0Opening mmap with size+1 should work on Windows.   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protr_   	PROT_EXECri   s   abcdef)r:   r
   r;   r   r>   ACCESS_READrB   rK   	TypeErrorrM   
write_byterP   rR   readsysplatform
startswithr?   rO   truncateACCESS_WRITEr=   ACCESS_COPYrE   r"   nameMAP_PRIVATE	PROT_READgetattrPermissionError)r&   mapsizefprS   rT   stuffri   s          r   test_access_parameterzMmapTests.test_access_parameter   s   &$ 	#2HHT'\"	#&$ 1	O1		!((*gd6F6F	GAQqT4<1VWBG|! 		@AB! 		@ABq 		@ABqT" 		@A@7# 		>?fd# Or  DL!MOO_1	Oh &%  	(AIIahhj'!)4 ||..u5IIQR	||&&u-&%( (AJJw'(#	(* &%  	A		!((*gd6G6G	HA<AaDQqT4<JLGGIGGI	 &$ 	1FFHE	WI	K &%  	A		!((*gd6F6F	GA<AaDQqT4'>SUGGIfd# Yr  DL!WYY i1W9=GGI	 &%  	TAj$))QXXZQRS	T 77gfe$ Q!!*diiW(,(8(8'+~~d>O>O " QQ >>GD+q$AADfe$ 			!((*gD	AA
 %%i)D%%iqAGGI	 	 W	# 	#           O O_1	O 1	On  R
 <<**51IIPQR( (#	( 	(*	 		 	Y Y	 		T 	T
Q Q ' 	 	s  V. AX#V;X#)W.X# #W#X#5#W+X#*W;>!X#%XX#$Y=&'X0A/Y=<Y0Y=.A6Z
<Z;A6Z11%Z$<Z1*7Z>A#[*[(,&[A[(.V8;	WX#WX#	WX#WX#	W($X#'W((X#+	W84X#7W88X#;	XX#XX#XX#X 	X##X-09Y-)Y=,Y--Y=0Y:	5Y==Z
ZZ!$Z.	)Z11Z;>[[	[%![($[%%[(([1c                 P    | j                  t        t        j                  dd       y )N   )rE   r)   r   r%   s    r   test_bad_file_desczMmapTests.test_bad_file_desc  s    '499b$7r   c                    t        t        d      5 }d}t        |      }|j                  |       |j	                          t
        j                  |j                         |      }d d d        t        dz         D ]o  }t        ||dz         D ][  }|| }| j                  j                  |      |j                  |             | j                  |j                  |dz         d       ] q j                          y # 1 sw Y   xY w)Nwb+s   aabaac deef  aa r2      xr6   )r:   r
   rD   r;   r=   r   r>   rangerB   rC   r?   )r&   rS   datanrT   rW   finishslices           r   test_tougher_findzMmapTests.test_tougher_find  s     &%  	)A2DD	AGGDMGGI		!((*a(A	) 1Q3Z 	;Eqs+ ;UV,  		%0@A  !5r:;	;
 	
		) 	)s   AC==Dc           
         t        t        d      5 }d}t        |      }|j                  |       |j	                          t
        j                  |j                         |      }d d d        | j                  j                  d      d       | j                  |j                  d      d       | j                  |j                  ddd      d       | j                  |j                  dd      d       | j                  |j                  ddd      d       | j                  |j                  ddd	      d       | j                  |j                  t        d            d       t         dz
  |dz         D ][  }t        | dz
  |dz         D ]C  }d
D ]<  }j                  |||      }| j                  |j                  |||      ||||f       > E ] y # 1 sw Y   sxY w)Nr      one two ones   oner      ones   r6   r2   r   )   os   ons   twor      s)r:   r
   rD   r;   r=   r   r>   rB   rC   	bytearrayr   )	r&   rS   r   r   rT   ijpexpecteds	            r   test_find_endzMmapTests.test_find_end"  s   &%  	)A"DD	AGGDMGGI		!((*a(A	) 	+!,2.2*A.2.22.3	& 12A6r!tQqS! 	KAA2a41% K= KA#yyAq1H$$QVVAq!_hAq	JKK	K	) 	)s   AGGc                    	 t         j                  t         j                  z  }t         j                  }d}t         j                  }t        dd      D ]d  }t         j                  d||dz   z  ||      5 }t         j                  d||dz   z  ||      5 }|j                  dd	       d d d        d d d        f y # t
        $ r}t        j                  d      |d }~ww xY w# 1 sw Y   ;xY w# 1 sw Y   xY w)
Nr   zmmap flags unavailablei  r6   r2   )rh   ri   i   s   for   )
r   rw   MAP_ANONYMOUSr<   rx   AttributeErrorunittestSkipTestr   rC   )	r&   rh   r<   	PROT_NONErx   er   guardfms	            r   'test_find_does_not_access_beyond_bufferz1MmapTests.test_find_does_not_access_beyond_buffer9  s    	E$$t'9'99E}}HII q$ 	'A2x1q51!&Y  8 ';@YYr8q4x#8%*  < '?AGGE2&'' '	'  	E##$<=1D	E
' '' 's<   AB9 3 C,C &C,9	CCC C)%C,,C5	c                    t        t        d      5 }d}t        |      }|j                  |       |j	                          t
        j                  |j                         |      }d d d        | j                  j                  d      d       | j                  |j                  d      d       | j                  |j                  ddd      d       | j                  |j                  ddd      d       | j                  |j                  dd	d      d       | j                  |j                  dd	d      d       | j                  |j                  t        d            d       y # 1 sw Y   xY w)
Nr   r   r   r   s   one r   r6   r   r2   )
r:   r
   rD   r;   r=   r   r>   rB   rfindr   )r&   rS   r   r   rT   s        r   
test_rfindzMmapTests.test_rfindI  s    &%  	)A"DD	AGGDMGGI		!((*a(A	) 	!,)1-B/3B/3B/3B/46!23Q7	) 	)s   AE%%E/c                 h   t        t        d      5 }|j                  ddz         d d d        t        t        d      5 }t        j                  |j	                         dt        j
                        }|j                          |j                          d d d        y # 1 sw Y   wxY w# 1 sw Y   y xY w)Nr      r]   r9   r^   )r:   r
   r;   r   r>   rl   r?   r&   rS   mfs      r   test_double_closezMmapTests.test_double_close[  s    &%  	"AGGEDL!	" &$ 	1188:uT5E5EFBHHJHHJ	 		" 	"	 	s   BAB(B%(B1c                    t        t        d      5 }|j                  ddz         d d d        t        t        d      5 }t        j                  |j	                         d      5 }| j                  t        |      dd       | j                  |j                  d      ddz         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r      mzrb+r   z Map size should equal file size.)r:   r
   r;   r   r>   rB   rD   ro   r   s      r   test_entire_filezMmapTests.test_entire_filee  s    &%  	"AGGEDL!	" &%  	;AYYqxxz1%	;)+SWe-OPRWWU^UT\:	; 	; 	;	" 	"	; 	; 	; 	;s/   B5%C#AC$C5B>C
	CCc                    t        t        d      5 }|j                  ddz         d d d        t        t        d      5 }t        j                  |j	                         ddt        j
                        5 }| j                  t        |j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)	Nr\   i   r   r9   r   r   offsetr_   i8 )	r:   r
   r;   r   r>   rl   rE   rF   rG   r   s      r   test_length_0_offsetzMmapTests.test_length_0_offseto  s    
 &$ 	(1GGY$&'	( &$ 	E1188:qt?O?OP ETV!!*bnneDE	E 	E	( 	(E E	E 	Es.   B'6B?4"B3B?'B03B<	8B??Cc                 ,   t        t        d      5 }|j                  ddz         d d d        t        t        d      5 }| j                  t        t
        j
                  |j                         dd       d d d        y # 1 sw Y   YxY w# 1 sw Y   y xY w)Nr\   i r   w+br   i  r   )r:   r
   r;   rE   rO   r   r>   r&   rS   s     r   test_length_0_large_offsetz$MmapTests.test_length_0_large_offset{  s     &$ 	#1GGFTM"	# &%  	1Aj$))QXXZ%/  1	1 	1	# 	#	1 	1s   A>7B
>B
Bc           	      p   t        t        d      5 }|j                  d       |j                          t        j	                  |j                         d      }|j                  ddd       | j                  |d d  dd       |j                          d d d        d}t        t        |            D ]  }t        t        |            D ]  }t        t        |      t        ||      z
        D ]u  }|d | ||||z    z   |||z   d  z   }t        j	                  d	t        |            }||d d  |j                  |||       | j                  |d d  |       |j                          w   t        j	                  d	d
      }g d}	t        j                  |	|	|	      D ]  \  }
}}	 |j                  |
||        g d}	|	D ])  \  }
}}| j                  t        |j                  |
||       + |j                          t        j	                  d	d      }| j                  t        |j                  ddd       | j                  t        |j                  ddd       | j                  t        |j                  ddd       |j                  ddd       |j                  ddd       y # 1 sw Y   xY w# t        $ r Y w xY w)Nr   s
   ABCDEabcder[      r   s
   ABCDEABCDEz'Map move should have duplicated front 5
   0123456789r6   d   )ir6   r   r2   r   ))r6   r6   r6   )r6   r6   r   )r6   r   r6   )r   r6   r6   )r6   r   r   )r   r6   r   )r   r   r6   r2   r/   )r:   r
   r;   r=   r   r>   moverB   r?   r   rD   max	itertoolsproductrO   rE   )r&   rS   r   r   destsrccountr   rT   offsetssourcerQ   s               r   	test_movezMmapTests.test_move  sr   &%  	AGGM"GGI188:r*BGGAq!RUM3\]HHJ	 #d)$ 	DSY' "3t9s4~#=> E#ET{T#c%i-@@4U
CTTH		"c$i0AAaDFF4e,$$QqT84GGI	 IIb#'"+"3"3GWg"N 	FD$vtT*	7") 	FFD$j!&&&$E	F 	
	IIb!*affaA6*affaA6*affaA6	q!Q	q!QW	 	8  s   A?JJ(J%(	J54J5c                     t         j                  dt              }t        t              D ]  }| j                  ||   dd        t        t              D ]!  }|dz  }|||<   | j                  ||   |       # y )Nr6   r   z+anonymously mmap'ed contents should be zero   )r   r<   r   rB   )r&   rT   xbs       r   test_anonymouszMmapTests.test_anonymous  s|    IIb(#x 	LAQqT1JL	L x 	&ADAAaDQqT1%	&r   c           	      D   t         j                  dd      }| j                  |j                         |j                  t	        t        d                   |j                  d       | j                  |j                         t	        t        d                   |j                  d       | j                  |j                         t	        t        dd                   |j                  d       | j                  |j                         d       |j                  d       | j                  |j                  d       t	        t        dd                   |j                  d       | j                  |j                  d      t	        t        dd                   |j                  d       | j                  |j                  d	      t	        t        dd                   |j                  d
       | j                  |j                  d      t	        t        d
d                   y )Nr6      r   r   r   r.   rf   r   r   	   i)	r   
addCleanupr?   r;   bytesr   rM   rB   ro   r&   rT   s     r   test_read_allzMmapTests.test_read_all  sh   IIb"  	
eBi !	q	5r#34	q	5q"#67	r
3'	q	uU1b\':;	q	U5B<%89	q	U5B<%89	q	eE!RL&9:r   c                 0   t         j                  dd      }| j                  |j                         | j                  t        |j
                  d       | j                  t        |j
                  d       | j                  t        |j
                  g d       y )Nr6   r   foog      @)r2   r/   r.   )r   r   r?   rE   rm   ro   r   s     r   test_read_invalid_argzMmapTests.test_read_invalid_arg  sd    IIb" )QVVU3)QVVS1)QVVY7r   c                 R   t        t        t        d                  }t        j                  dt	        |            }||d d  | j                  |d d  |       dd ddddt        j                  ddd	d
f}|D ]1  }|D ]*  }|dd  D ]   }| j                  ||||   ||||          " , 3 y N   r6   r   r2   r.      i,  r   ii)r   reversedr   r   rD   rB   rp   maxsize)r&   srT   indicesrW   stopsteps          r   test_extended_getslicez MmapTests.test_extended_getslice  s    (5:&'IIb#a&!!1q!dAq"c3;;BTJ 	9E 9#ABK 9D$$QuT$%7%&uT$%7999	9r   c                    t        t        t        d                  }t        j                  dt	        |            }dd ddddt
        j                  ddd	d
f}|D ]  }|D ]{  }|dd  D ]q  }||d d  | j                  |d d  |       t        |      }||||   }t        t        |            }|||||<   |||||<   | j                  |d d  t        |             s }  y r   )	r   r   r   r   rD   rp   r   rB   list)	r&   r   rT   r   rW   r   r   Lr   s	            r   test_extended_set_del_slicez%MmapTests.test_extended_set_del_slice  s    (5:&'IIb#a&!dAq"c3;;BTJ 	5E 5#ABK 
5DAaD$$QqT1-QA U4_-D $0D)-AeDo&)-AeDo&$$QqT584
55	5r   c                     |j                  d|z         |j                  d       |j                  d|dz
  z         |j                          t        j                  |j                         d      S )Nr,   r-   r.   r   )r;   r=   r   r>   )r&   rS   halfsizes      r   make_mmap_filezMmapTests.make_mmap_file  sT    	!"		(Q,'(	
yy!((*a((r   c           	         t        t        d      }|j                          t        t        d      5 }| j                  t        dt
        j
                  |j                         dt
        j                         d d d        y # 1 sw Y   y xY w)Nr   r9   zcannot mmap an empty filer   r^   )r:   r
   r?   assertRaisesRegexrO   r   r>   rl   r   s     r   test_empty_filezMmapTests.test_empty_file  sj    &% 		&$ 	<1"":#>#'99ahhj!*.*:*: # <	< 	< 	<s   AB  B	c                 n   t        t        d      }	 t        j                  }| j	                  ||      }|j                          |j                          |dz  }t        t        d      }dD ]M  }	 t        j                  |j                         ||      }| j                  dd       | j                  dd       O |j                          t        t        d      }t        j                  |j                         ||z
  |      }| j                  |dd d	       |j                          	 |j                  d
       | j                  t        |      d
       | j                  t        |j                  dd       | j                  |dd d	       t        t        d      }|j                  dd       | j                  |j                         |d
z          |j                          | j                  |j!                         |d
z          |j                          |j                          	 t%        j&                  t               y # t        t        t        f$ r Y w xY w# t"        $ r Y aw xY w# t(        $ r Y y w xY w# |j                          	 t%        j&                  t               w # t(        $ r Y w w xY wxY w)Nr   r/   rc   )r   r6   Nr   r   r2   r.   r-   r7   r8   r9   )r:   r
   r   ALLOCATIONGRANULARITYr   r?   r>   rB   rO   rm   OverflowErrorrP   rD   rE   rM   rN   rQ   rR   r"   r   r)   )r&   rS   r   rT   r{   r   s         r   test_offsetzMmapTests.test_offset  s?   &% 4	11H##Q1AGGJGGJlGVU#A( ++		!((*gf	EA$$Q* $$Q*+ GGI VU#A		!((*g&8	JAQqVV,GGI;
   Q-!!*affc1=  1Q0 &q!  8c>:	  8c>:GGI GGI		&!K #I}=   .   GGI		&! s   AI9 /8I 'BI9 *I ;CI9 &I*  II9 II9 	I'$I9 &I''I9 *	I65I69J4J%$J4%	J1.J40J11J4c                 N     G d dt         j                         } |t               y )Nc                       e Zd Zd Zy)*MmapTests.test_subclass.<locals>.anon_mmapc                 J    t        j                   j                  | dg|i |S )Nr6   )r   __new__)klassargskwargss      r   r   z2MmapTests.test_subclass.<locals>.anon_mmap.__new__K  s#    yy((DTDVDDr   N)__name__
__module____qualname__r    r   r   	anon_mmapr   J  s    Er   r   )r   r<   )r&   r   s     r   test_subclasszMmapTests.test_subclassI  s    	E		 	E 	(r   rx   zneeds mmap.PROT_READc                 n   d}t        t        d      5 }|j                  d|z         d d d        t        t        d      5 }t        j                  |j	                         |t        j
                        }| j                  t        |j                  d       d d d        y # 1 sw Y   xxY w# 1 sw Y   y xY w)Nr[   r\   r]   r9   rk   r   )r:   r
   r;   r   r>   rx   rE   rm   )r&   r{   r|   rS   rT   s        r   test_prot_readonlyzMmapTests.test_prot_readonlyO  s    &$ 	#2HHT'\"	#&$ 	91		!((*gDNN	CAi%8	9 	9	# 	#	9 	9s   B AB+B(+B4c                 L    | j                  t        j                  t               y r!   )assertIsr   errorr)   r%   s    r   
test_errorzMmapTests.test_errorX  s    djj'*r   c                    d}t        t        d      5 }|j                  dt        |      z         d d d        t        t        d      5 }t        j	                  |j                         t        |            }d d d        t        t        |            D ]Y  }| j                  j                         |       |j                  ||          | j                  |j                         |dz          [ | j                  t        j                  d       | j                  |d d  |       |j                  d       t        t        |            D ]h  }| j                  |j                         |       | j                  |j                         ||          | j                  |j                         |dz          j | j                  t        |j                         |j                  d       | j                  |j                  d      d	       | j                  |j                         d
       |j                  d       |j                  d       | j                  |j                         d
       | j                  |d d  d       |j                  t        d             | j                  |j                         d       | j                  |d d  d       | j                  t        |j                  d       y # 1 sw Y   xY w# 1 sw Y   xY w)Nr   r\   r   rc   r2   x   r   r.   s   345r4   r1   s
   012bar6789s   bazr   s
   012barbaz9s   ba)r:   r
   r;   rD   r   r>   r   rB   rN   rn   rE   rO   rM   	read_bytero   r   )r&   r   r|   rS   rT   r   s         r   test_io_methodszMmapTests.test_io_methods[  sJ   &$ 	%2HHT#d)^$	%&%  	1A		!((*c$i0A	1 s4y! 	,AQVVXq)LLa!QVVXqs+	, 	*allG<1t$	q	s4y! 	,AQVVXq)Q[[]DG4QVVXqs+	, 	*akk2	q	F+1%	q		1%1}-		&!"1%1}-*aggu5=	% 	%	1 	1s   K/	.K</K9<Lc                    dD ]  }t         j                  dd      }|j                  |       | j                  |d   |       |j                  d       | j                  |j	                         |       |j                           y )N)      r   r6   r2   r   )r   rn   rB   rM   r  r?   )r&   r   rT   s      r   test_non_ascii_bytezMmapTests.test_non_ascii_byte}  sj      	A		"a ALLOQqT1%FF1IQ[[]A.GGI	r   ntzrequires Windowsc                 D   d}d}t        |      t        |      k(  sJ t               }t               }t        j                  dt        |      |      }||d d  t        j                  dt        |      |      }||d d  | j                  |d d  |       | j                  |d d  |       |j	                          |j	                          t        j                  dt        |      |      }||d d  t        j                  dt        |      |      }||d d  | j                  |d d  |       | j                  |d d  |       |j	                          |j	                          | j                  t        d      5  t        j                  ddd       d d d        y # 1 sw Y   y xY w)Nr   s
   abcdefghijr6   tagnamer  r   r2   )rD   r   r   rB   r?   r   rm   )r&   data1data2tagname1tagname2m1m2s          r   test_tagnamezMmapTests.test_tagname  se   5zSZ'''!#!# YYr3u:xY81YYr3u:xY81A&A&



 YYr3u:xY81YYr3u:xY81A&A&



##Iy9 	(IIb!QI'	( 	( 	(s   4FFc                     t         j                  dd      }t               }t         j                  dd|      }| j                  t        j                  |      t        j                  |             y )Nr6   r   r  )r   r   assertGreaterrp   	getsizeof)r&   r  r  r  s       r   test_sizeofzMmapTests.test_sizeof  sR     YYr3 "YYr3Y03==,cmmB.?@r   c                    t               }t        j                  dd|      }	 t        j                  dd|      d d   |j                          t        t        d      5 }|j                  d       d d d        t        t        d      }t        j                  |j                         d      }|j                          	 |j                  d       	 |d d   |j                          y #  Y xY w# 1 sw Y   }xY w#  Y .xY w#  Y /xY w)	Nr6     r    r\   s
   xxxxxxxxxxrc   r   )r   r   r?   r:   r
   r;   r>   rP   )r&   r  rT   r|   rS   s        r   test_crasher_on_windowsz!MmapTests.test_crasher_on_windows  s     !"IIb$I0	IIb$I03 	
	 &$ 	2HHW	IIahhj!$			HHQK	aD 	
	%		 			s/   C& C->C9 D  &C*-C69C= Dc                    t        j                          }	 | j                  t              5  t        j                  |j	                         d      }d d d        |j                          y # 1 sw Y   xY w# |j                          w xY wNr[   )socketrE   r)   r   r>   r?   )r&   r   rT   s      r   test_invalid_descriptorz!MmapTests.test_invalid_descriptor  sd    
 MMO	""7+ .IIahhj"-. GGI. . GGIs"   A5 %A)A5 )A2.A5 5Bc                     t         j                  dd      5 }| j                  |j                         d d d        | j                  j                         y # 1 sw Y   %xY w)Nr6   r[   )r   assertFalseclosed
assertTruer   s     r   test_context_managerzMmapTests.test_context_manager  sI    YYr2 	'!QXX&	'!	' 	's   AA c                 (   | j                  t              5 }t        j                  dd      5 }t        # 1 sw Y   nxY w	 d d d        n# 1 sw Y   nxY w| j	                  j
                  t        d       | j                  j                  d       y )Nr6   r[   z)wrong exception raised in context managerzcontext manager failed)rE   	Exceptionr   r)   assertIsInstance	exceptionr#  r"  )r&   excrT   s      r   test_context_manager_exceptionz(MmapTests.test_context_manager_exception  s    y) 	S2r" a  	 	 	 	cmmWI	K":;s   A
4=	A

Ac                     t         j                  dd      }t        j                  |      }| j                   |       |       ~t	                | j                   |       d        y )Nr6   r   )r   weakrefrefr   r   )r&   mmwrs      r   test_weakrefzMmapTests.test_weakref  sG    YYr2[[_bdBbdD!r   c                 8   t         j                  dd      }| j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d	      d
       y )Nr6   r   r   r   r   r2   s   yzr/      pythonr4   )r   rB   r;   )r&   r.  s     r   0test_write_returning_the_number_of_bytes_writtenz:MmapTests.test_write_returning_the_number_of_bytes_written  ss    YYr2#*$+%!,),a0r   c                    t         j                  dd      }| j                  |j                         |j                  d       	 |j	                  d       | j                  |j                  d      d       | j                  t        |j                         | j                  t        |j                  d       | j                  t        |j                  d	       y # t
        $ r | j                  d       Y w xY w)
Nr6   i    r  r   zresizing not supported   r   r5   ra   )r   r   r?   ro   rP   rR   skipTestrB   rE   rO   r  rn   r;   r   s     r   test_resize_past_poszMmapTests.test_resize_past_pos  s    IIb$ 	t	4HHTN 	S)*akk2*allB7*aggv6  	4MM23	4s   C C65C6c                     t         j                  dd      }| j                  t              5  ||z    d d d        | j                  t              5  |dz   d d d        y # 1 sw Y   -xY w# 1 sw Y   y xY w)Nr6   r   r/   )r   rE   rm   r   s     r   test_concat_repeat_exceptionz&MmapTests.test_concat_repeat_exception  sk    IIb"y) 	E	y) 	E	 		 		 	s   AA*A'*A3c                 `   t         j                  dd      }| j                  |j                         |j                  d       |j	                         }| j                  |       t        j                  j                  d      r,| j                  t        |j                  dt        d             y y )Nr6   r   r2  linuxr2   )r   r   r?   r;   r=   assertIsNonerp   rq   rr   rE   r)   rD   )r&   r.  results      r   test_flush_return_valuez!MmapTests.test_flush_return_value  s~     YYr2!
&!<<""7+ grxxC	NC ,r   c           
      V   t        j                  d      }t        j                  d      }d}t        d |D              }t        ||      D ]  \  }}d|z  }||z
  }d}	d|dz  |d	z  |d
z  f}
t	        t
        d      5 }|j                  |       |j                          t        j                  |	|
      D ]L  \  }}t        t        |      }t        j                  |j                         |||      5 }|j                  |       |j                  t        |            }| j!                  |       | j#                  |j%                  d      |       | j#                  |j%                  d      t'        |             | j#                  |j%                  d      t'        |             | j#                  |j%                  d      t'        |             d d d        |j                  t                    }| j!                  |       O 	 d d d         y # 1 sw Y   DxY w# 1 sw Y   xY w)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              3   j   K   | ]+  }|d z  t         j                  z  t         j                  z   - yw)r/   N)r   r   ).0r{   s     r   	<genexpr>z&MmapTests.test_repr.<locals>.<genexpr>  s7      N9@ !A)C)CC445 Ns   13r]   )ACCESS_DEFAULTrl   ru   rt   r   r[   r   rf   r   )r_   r   r_   r   posr   )rI   compiletuplezipr:   r
   r;   r=   r   r   ry   r   r>   rM   rV   reprassertIsNotNonerB   groupr@   )r&   open_mmap_repr_patclosed_mmap_repr_patmapsizesr   r   r{   r   r   accesses	positionsr|   r_   rE  accintr.  rV   s                    r   	test_reprzMmapTests.test_repr  s   ZZ'(  "zz*DE: NDLN N"7H5 	0OFG'>Dv%F7HFBJ	619=Ife$ 0
#,#4#4Xy#I 0KFC$T62F299;#)*0*0 # 2 
M 68 2 8 8b B,,U3((X)>G((X)>FL((U);SXF((X)>FL
M 166tBx@E((/00 0	0
M 
M0 0s&   =A6H3CH	6HHHH(	madvisezneeds madvisec                    dt         z  }t        j                  d|      }| j                  t        d      5  |j	                  t        j
                  |       d d d        | j                  t        d      5  |j	                  t        j
                  d       d d d        | j                  t        d      5  |j	                  t        j
                  dd       d d d        | j                  t        d      5  |j	                  t        j
                  t         t        j                         d d d        | j                  |j	                  t        j
                        d        | j                  |j	                  t        j
                  t               d        | j                  |j	                  t        j
                  t         |      d        | j                  |j	                  t        j
                  dd      d        | j                  |j	                  t        j
                  d|      d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   qxY w# 1 sw Y   ,xY w)Nr/   r6   zmadvise start out of boundszmadvise length invalidr   zmadvise length too large)
r<   r   r   rO   rS  MADV_NORMALr   rp   r   rB   )r&   rQ   rT   s      r   test_madvisezMmapTests.test_madvise7  s   8|IIb$##J0MN 	.IId&&-	.##J0MN 	,IId&&+	,##J0HI 	/IId&&2.	/##M3MN 	?IId&&#++>	?4#3#34d;4#3#3X>E4#3#3XtDdK4#3#3Q:DA4#3#3Q=tD	. 	.	, 	,	/ 	/	? 	?s/   !H+5!H84"I44I+H58IIIc                    t         }d|z  }t        d t        |      D              }t        j                  d|      }||dd |j	                  |       | j                  t        |      |       | j                  |d| |d|        y)zIf the mmap is backed by the pagefile ensure a resize up can happen
        and that the original data is still in place
        r/   c              3   F   K   | ]  }t        j                  d         ywr   Nr   getrandbitsrB  r   s     r   rC  zCMmapTests.test_resize_up_when_mapped_to_pagefile.<locals>.<genexpr>Q       FqV''*F   !r6   Nr<   r   r   r   rP   rB   rD   r&   
start_sizenew_sizer   rT   s        r   &test_resize_up_when_mapped_to_pagefilez0MmapTests.test_resize_up_when_mapped_to_pagefileJ  s}    
 
z>FE*4EFFIIb*%!	Q*;Jkz):;r   c                    t         }|dz  }t        d t        |      D              }t        j                  d|      }||dd |j	                  |       | j                  t        |      |       | j                  |d| |d|        y)zIf the mmap is backed by the pagefile ensure a resize down up can happen
        and that a truncated form of the original data is still in place
        r/   c              3   F   K   | ]  }t        j                  d         ywrY  rZ  r\  s     r   rC  zEMmapTests.test_resize_down_when_mapped_to_pagefile.<locals>.<genexpr>`  r]  r^  r6   Nr_  r`  s        r   (test_resize_down_when_mapped_to_pagefilez2MmapTests.test_resize_down_when_mapped_to_pagefileY  s|    
 
?FE*4EFFIIb*%!	Q*9HtIX7r   c                 (   dt         z  }t         }t        t        d      }|j                  |       	 t        j	                  |j                         |      }t        j	                  |j                         |      }| j                  t              5  |j                  |       ddd       | j                  t              5  |j                  |       ddd       |j                          |j                  |       | j                  |j                         |       | j                  t        j                  |j                               j                  |       |j                          y# 1 sw Y   xY w# 1 sw Y   xY w# |j                          w xY w)zqIf more than one mapping is held against a named file on Windows, neither
        mapping can be resized
        r/   r   N)r<   r:   r
   rs   r   r>   rE   r)   rP   r?   rB   rQ   r"   statst_size)r&   ra  reduced_sizerS   r  r  s         r   +test_resize_fails_if_mapping_held_elsewherez5MmapTests.test_resize_fails_if_mapping_held_elsewhereh  s   
 \
	

:	188:z2B188:z2B""7+ (		,'(""7+ (		,'(HHJIIl#RWWY5RWWQXXZ088,GGGI( (( ( GGIs=   AE? E'!E? >E3BE? 'E0,E? 3E<8E? ?Fc                    dt         z  }t         }t               }d}t        d t        |      D              }t        j	                  d||      }t        j	                  d||      }||d| | j                  |d| |       | j                  t              5  |j                  |       ddd       | j                  |j                         |       | j                  |d| |       | j                  |d| |       y# 1 sw Y   TxY w)zIf a more than one mapping exists of the same name, none of them can
        be resized: they'll raise an Exception and leave the original mapping intact
        r/   r   c              3   F   K   | ]  }t        j                  d         ywrY  rZ  r\  s     r   rC  zUMmapTests.test_resize_succeeds_with_error_for_second_named_mapping.<locals>.<genexpr>  s     GqV''*Gr^  r6   r  N)
r<   r   r   r   r   rB   rE   r)   rP   rQ   )r&   ra  rj  r  data_lengthr   r  r  s           r   8test_resize_succeeds_with_error_for_second_named_mappingzBMmapTests.test_resize_succeeds_with_error_for_second_named_mapping  s    
 \
!#GE+4FGGYYr:wY7YYr:wY7<KL[)40w' 	$IIl#	$J/L[)40L[)40		$ 	$s   C;;Dc           	      	    G d d      }t         j                  t         j                  t         j                  t         j                  g}t         j                  t         j                  t         j                  g}|D ]  } ||      5 \  }}| j                  t        d      5  | |           ddd       ddd        ||      5 \  }}| j                  t        d      5  | |       d  ddd       ddd        ||      5 \  }}| j                  t        d      5  | |       dd    ddd       ddd        ||      5 \  }}| j                  t        d      5  |d |       d    ddd       ddd        ||      5 \  }}| j                  t        d      5  |j                   |              ddd       ddd        ||      5 \  }}| j                  t        d      5  |j                  dd	 |              ddd       ddd        |D ]T  } ||      5 \  }}| j                  t        d      5  d
| |       d ddd       ddd        ||      5 \  }}| j                  t        d      5  d| |       dd<   ddd       ddd        ||      5 \  }}| j                  t        d      5  d|d |       d<   ddd       ddd        ||      5 \  }}| j                  t        d      5  |j                  d	d |              ddd       ddd        ||      5 \  }}| j                  t        d      5  |j                   |              ddd       ddd       W y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xxY w# 1 sw Y   }xY w# 1 sw Y   RxY w# 1 sw Y   WxY w# 1 sw Y   #xY w# 1 sw Y   (xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   zxY w# 1 sw Y   xY w# 1 sw Y   IxY w# 1 sw Y   NxY w# 1 sw Y   xY w# 1 sw Y   txY w)zj
        gh-103987: Test that mmap objects raise ValueError
                for closed mmap files
        c                        e Zd ZddZd Zd Zy)KMmapTests.test_mmap_closed_by_int_scenarios.<locals>.MmapClosedByIntContextNc                     || _         y r!   r^   )r&   r_   s     r   __init__zTMmapTests.test_mmap_closed_by_int_scenarios.<locals>.MmapClosedByIntContext.__init__  s	    $r   c                 R   t        t        d      | _        | j                  j                  t	        j
                  d             | j                  j                          t        j                  | j                  j                         d| j                         G fdd      }|fS )Nr   r   r^   c                       e Zd Z fdZy)`MmapTests.test_mmap_closed_by_int_scenarios.<locals>.MmapClosedByIntContext.__enter__.<locals>.Xc                 &    j                          yr  )r?   r   s    r   	__index__zjMmapTests.test_mmap_closed_by_int_scenarios.<locals>.MmapClosedByIntContext.__enter__.<locals>.X.__index__  s    	!r   N)r   r   r   ry  )rT   s   r   Xrw    s    "r   rz  )
r:   r
   rS   r;   r   	randbytesr=   r   r>   r_   )r&   rz  rT   s     @r   	__enter__zUMmapTests.test_mmap_closed_by_int_scenarios.<locals>.MmapClosedByIntContext.__enter__  sp    fe,V--c23IIdffmmos4;;IG" "
 1vr   c                 8    | j                   j                          y r!   )rS   r?   )r&   exc_type	exc_value	tracebacks       r   __exit__zTMmapTests.test_mmap_closed_by_int_scenarios.<locals>.MmapClosedByIntContext.__exit__  s    r   )returnN)r   r   r   rt  r|  r  r   r   r   MmapClosedByIntContextrr    s    %r   r  zmmap closed or invalidN   r/   r      1r2   s
   1111111111s   11111)r   rl   rt   ru   rD  r   rO   ro   rC   r   rn   )r&   r  read_access_modeswrite_access_modesr_   rT   rz  s          r   !test_mmap_closed_by_int_scenariosz+MmapTests.test_mmap_closed_by_int_scenarios  sb   	 	, 	
 
 ( 	)F'/ 6Aq++J8PQ acF (/  6Aq++J8PQ  acBK   (/ $6Aq++J8PQ $acBlO$$ (/ %6Aq++J8PQ %b13m$%% (/  6Aq++J8PQ  FF13K   (/ )6Aq++J8PQ )FF4AC()) )+	)2 ) 	&F'/ ,6Aq++J8PQ ,"+AacBK,, (/ /6Aq++J8PQ /&.AacBlO// (/ 06Aq++J8PQ 0'/Ab13m$00 (/ &6Aq++J8PQ &FF1a%&& (/ &6Aq++J8PQ &LL%&& &#	&/  
      
$ $$ $
% %% %
      
) )) ), ,, ,
/ // /
0 00 0
& && &
& && &s  M7 M*+M7NN(N N+N(N+ ON8(O OO1O	O9#O,<O9P7PPP-4P P-Q4P:QQ!4QQ!%Q;?Q.Q;*M4/M77N	N	NN	N(#N++N5	8O=OO	OOO)	,O61O99P	PPP	 P*%P--P7	:Q?QQ	QQ!!Q+	.Q83Q;;R	N)7r   r   r   r'   r*   rY   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   
skipUnlesshasattrr   r   r   r  r  r"   rv   r  r   r  r  r  r$  r*  r0  r3  r7  r9  r>  rR  rV  rc  rf  rk  ro  r  r   r   r   r   r       s   \|@D8$K.' 8$;
E1-^
&;*895()<7r X{35KL9 M9+ 6D XD*<=( >(< XD*<=A > A XD*<= >4 XD*<=	 >	"
<"17D"0H XI6HE IE$ XD*<=< >< XD*<=8 >8 XD*<= >. XD*<=1 >1(T&r   r   c                       e Zd Zd Zd Zd Zd Zd Zd Z e	j                  ej                  ekD  d      d        Z e	j                  ej                  ekD  d      d	        Zy
)LargeMmapTestsc                 "    t        t               y r!   r   r
   r%   s    r   r'   zLargeMmapTests.setUp  	    vr   c                 "    t        t               y r!   r  r%   s    r   r*   zLargeMmapTests.tearDown  r  r   c                    t         j                  d d dk(  st         j                  dk(  rt        ddt        d      z         t	        t
        d      }	 |j                  |       |j                  |       |j                          |S # t        t        t        f$ r= 	 |j                          n# t        t        f$ r Y nw xY wt        j                  d      w xY w)	Nr.   rd   darwin	largefilez-test requires %s bytes and a long time to run        r   z*filesystem does not have largefile support)rp   rq   r   r@   r:   r
   rM   r;   r=   r)   r   rO   r?   r   r   )r&   
num_zeroestailrS   s       r   _make_test_filezLargeMmapTests._make_test_file  s    <<u$(@[?#kBRRT		RFF:GGDMGGI  
3 	R	]+ ##$PQQ	Rs0   2B CB-,C-B?<C>B??Cc                    | j                  dd      5 }t        j                  |j                         ddt        j                        5 }| j	                  |d   d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nl        r   l        r   i    )r  r   r>   rl   rB   r&   rS   rT   s      r   test_large_offsetz LargeMmapTests.test_large_offset  sz    !!+t4 	3188:qTEUEUV 3Z[  9r23	3 	33 3	3 	3s#   6A<	A0A<0A9	5A<<Bc                    | j                  dd      5 }t        j                  dk  r| j                  t              5  t
        j                  |j                         dt
        j                         d d d        | j                  t              5  t
        j                  |j                         dt
        j                         d d d        t
        j                  |j                         dt
        j                        5 }| j                  |j                         d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   {xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nl    r  r  r^   r   r   )r  rp   r   rE   r   r   r>   rl   rO   rB   rQ   r  s      r   test_large_filesizez"LargeMmapTests.test_large_filesize	  s   !!+t4 		8{{[( &&}5 PIIahhj+d>N>NIOP&&z2 FIIahhj!D4D4DIEF188:wt7G7GH 8A  ;78		8 		8P PF F8 8		8 		8sR   )E5D11E5D=<E?!E	 E1D:	6E=E	E	E	EEc                 P   d}|t        |      dz  z
  }|t        |      z   }| j                  ||      5 }t        j                  |j                         dt        j                        5 }| j                  ||| |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Ns     DEARdear  r/   r   r^   )rD   r  r   r>   rl   rB   )r&   boundaryr  rW   rX   rS   rT   s          r   _test_around_boundaryz$LargeMmapTests._test_around_boundary  s    3t9>)c$i!!%. 	5!188:q1A1AB 5a  5t45	5 	55 5	5 	5s#   5B)B?BB	BB%z!test cannot run on 32-bit systemsc                 .    | j                  t               y r!   )r  r   r%   s    r   test_around_2GBzLargeMmapTests.test_around_2GB      ""3'r   c                 .    | j                  t               y r!   )r  r   r%   s    r   test_around_4GBzLargeMmapTests.test_around_4GB#  r  r   N)r   r   r   r'   r*   r  r  r  r  r   r  rp   r   r   r  r  r   r   r   r  r    s|    "3

85 Xs*,OP( Q( Xs*,OP( Q(r   r  __main__)r[   ) test.supportr   r   r   r   r   r   test.support.import_helperr	   test.support.os_helperr
   r   r   r"   rI   r   r   r  r   rp   r,  r   r<   getpidr   r   r   TestCaser   r  r   mainr   r   r   <module>r     s     5 1  	 	     
  V==9299;-z2( 
(

L
MMI&!! I&V:(X&& :(z zHMMO r   