
    0hh7                        S SK JrJrJrJrJrJrJr  S SKJ	r	  S SK
JrJr  S SKJr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKr\	" S5      r\R6                  rS\R8                  " 5        S3rSS	 jr\(       a  \R>                  " S
5      e " S S\R@                  5      r! " S S\R@                  5      r"\#S:X  a  \RH                  " 5         gg)    )requires_2G_4G
gc_collectcpython_onlyis_emscriptenis_apple)import_module)TESTFNunlink)assert_python_okNmmappython_
_test_mmapc                 |    SR                  [        R                  " [        R                  U S95      n[
         SU 3$ )N )k_)joinrandomchoicesstringascii_uppercasetagname_prefix)lengthsuffixs     7/opt/python-3.13.8/usr/lib/python3.13/test/test_mmap.pyrandom_tagnamer      s3    WWV^^F$:$:fEFFQvh''    z.incompatible with Emscripten's mmap emulation.c                   "   \ rS rSrS rS rS rS r\R                  " \
R                  S:H  S5      S 5       r\R                  " \
R                  S:H  S5      S	 5       r\R                  " \
R                  S:g  S
5      S 5       rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!\RD                  " \#" \$S5      S 5      S! 5       r%S" r&S# r'S$ r(\RD                  " \
R                  S:H  S%5      S& 5       r)\*\RD                  " \
R                  S:H  S%5      S' 5       5       r+\RD                  " \
R                  S:H  S%5      S( 5       r,\RD                  " \
R                  S:H  S%5      S) 5       r-S* r.S+ r/S, r0S- r1S. r2S/ r3S0 r4S1 r5\RD                  " \#" \$RH                  S25      S35      S4 5       r6S5 r7\RD                  " \
R                  S6:H  S75      S8 5       r8S9 r9\RD                  " \
R                  S:H  S%5      S: 5       r:\RD                  " \
R                  S:H  S%5      S; 5       r;S< r<\RD                  " \
R                  S:H  S%5      \RD                  " \#" \$RH                  S=5      S>5      S? 5       5       r=S@r>gA)B	MmapTests#   c                     [         R                  R                  [        5      (       a  [         R                  " [        5        g g N)ospathexistsr   r   selfs    r   setUpMmapTests.setUp%   s&    77>>&!!IIf "r   c                 Z     [         R                  " [        5        g ! [         a     g f = fr$   )r%   r   r   OSErrorr(   s    r   tearDownMmapTests.tearDown)   s%    	IIf 		s    
**c                 	   [        [        S5      n UR                  S[        -  5        UR                  S5        UR                  S[        S-
  -  5        UR	                  5         [
        R                  UR                  5       S[        -  5      nUR                  5         [        [        U5      5      nU R                  UR                  S5      [        5        U R                  [        U5      S[        -  5        U R                  US   S5        U R                  USS S5        U R                  [        UR                  [        U5      5        U R                  [        UR                   [        U5      S5        SUS'   S	U[        S-   [        S-   S-   & U R                  US   S5        U R                  USS S
5        U R                  U[        S-
  [        S-    S5        UR	                  5         ["        R$                  " SU5      nUc  U R'                  S5        OFUR)                  S5      u  pVXe-
  nU R                  U[        5        U R                  U[        S-   5        U R+                  UR-                  5       5        U R                  UR/                  SS5      S5        U R                  UR1                  5       S5        U R                  UR/                  SS5      S5        U R                  UR1                  5       S5        U R                  UR/                  SS5      [        U5      5        U R                  UR1                  5       [        U5      5        U R                  [2        UR.                  S5        U R                  [2        UR.                  SS5        U R                  [2        UR.                  [        U5      * S-
  S5         UR5                  S5        U R                  [        U5      S5        U R                  [2        UR.                  SS5        [        [        S5      n UR/                  SS5        U R                  UR1                  5       S5        UR                  5         U R                  UR7                  5       S5        UR                  5         g ! UR                  5         f = f! UR                  5         f = f! [8         a     NGf = f)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
assertTrueseekableseektell
ValueErrorresizesizeSystemError)r)   fmtpmatchstartendr   s           r   
test_basic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JE[FUH-S(Q,/ 	

%1q)1%A+2&1s1v.3q6* 	*affb1 	*affa3 	*affs1vgai;	,HHSM SVS)j!&&#q9 VT"Aq!  3/	QVVXs+		a GGIZ 	%  	 		s*   A?R! S .2R6 !R36S
SSc                 j   Sn[        [        S5       nUR                  SU-  5        S S S 5        [        [        S5       n[        R                  UR	                  5       U[        R
                  S9nU R                  US S  SU-  S5         SU-  US S & U R                  S5         SUS	'   U R                  S5         UR                  S	S	5        UR                  S
5        U R                  S5         UR                  S	S	5        UR                  S5        U R                  S5         UR                  SU-  5        U R                  S5        [        [        S5       nU R                  UR                  5       SU-  S5        S S S 5        S S S 5        [        [        S5       n [        R                  UR	                  5       US-   5      n[        R                  R!                  S5      (       d  U R                  S5        UR#                  5         [        R                  R!                  S5      (       a*  [        [        S5       nUR'                  U5        S S S 5        S S S 5        [        [        S5       n[        R                  UR	                  5       U[        R(                  S9nSU-  US S & U R                  US S  SU-  S5        UR+                  5         UR#                  5         S S S 5        [        [        S5       nUR                  5       nS S S 5        U R                  WSU-  S5        [        [        S5       n[        R                  UR	                  5       U[        R,                  S9nSU-  US S & U R                  US S  SU-  S5        UR+                  5         [        [        S5       nU R                  UR                  5       SU-  S5        S S S 5        U R/                  [        UR                  SU-  5        UR#                  5         S S S 5        [        [        S5       nU R/                  [$        [        R                  UR	                  5       USS9  S S S 5        [0        R2                  S:X  Ga)  [        [        S5       nU R/                  [$        [        R                  UR	                  5       U[        R4                  [        R6                  [        R(                  S9  S S S 5        [        R6                  [9        [        SS	5      -  n[        [        S5       n [        R                  UR	                  5       XS9nU R/                  [        UR                  S5        U R/                  [        UR                  S	5        UR#                  5         S S S 5        g g ! , (       d  f       GN= f! [         a     GN f = f! [         a     GNf = f! [         a     GNf = f! [         a     GNf = f! [         a     GN[         a     GNf = f! , (       d  f       GN= f! , (       d  f       GN= f! [$         a9    [        R                  R!                  S5      (       a  U R                  S5         GNpf = f! , (       d  f       GN5= f! , (       d  f       GN?= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! [:         a     GNf = f! , (       d  f       g = f)N
   wb   ar>   accessz#Readonly memory map data incorrect.   bz$Able to write to readonly memory mapr      abc   dr4   z"Able to resize readonly memory mapz*Readonly memory map data file was modifiedr+br7   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protrg   	PROT_EXECrq   s   abcdef)r?   r   r@   r   rC   ACCESS_READrG   rP   	TypeErrorrT   
write_byterW   rY   readsysplatform
startswithrD   rV   truncateACCESS_WRITErB   ACCESS_COPYrJ   r%   nameMAP_PRIVATE	PROT_READgetattrPermissionError)r)   mapsizefprZ   r[   stuffrq   s          r   test_access_parameterMmapTests.test_access_parameter   s   &$2HHT'\"  &$1		!((*gd6F6F	GAQqT4<1VWBG|! 		@AB! 		@ABq! 		@ABq!T" 		@A@7# 		>?fd#r  DL!MO $_  h &% AIIahhj'!)4 ||..u5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#r  DL!WY $ i1W9=GGI ! &% Aj$))QXXZQRS ! 77gfe$!!*diiW(,(8(8'+~~d>O>O " Q % >>GD+q$AADfe$		!((*g	AA
 %%i)D%%iqAGGI %$ W              $#_  n  R
 <<**511IIPQR )(# ! * !    $# !  ! 
 %$ '  %$s  V& AX+V8X+&W	+X+=#W X+2#W+X+'W<;!X+%XX+!Z#'X=
A9ZZZ5A3Z' Z9?A3[2%[<[+4[/A \&\$("\
A\$&
V58
WX+WX+	
WX+WX+
W($X+'W((X++
W95X+8W99X+<
XX+		XX+XX+
X(	#X++
X:=?Z <Z?Z  Z
Z	Z
Z$'
Z69
[
[	[
[,/
[>
\
\!\$ \!!\$$
\2ntztrackfd not present on Windowsc           
         Sn[        [        S5       nUR                  SU-  5        S S S 5        S GH  nU R                  US9   [        [        S5       n[        R	                  UR                  5       USS9 nU(       a  UR                  5         U R                  [        U5      U5        U R                  [        5       nUR                  5         S S S 5        U R                  WR                  R                  [        R                  5        U R                  [        5         UR!                  US	-  5        S S S 5        U R                  [        5         UR!                  US	-  5        S S S 5        U R                  UR"                  S5        UR%                  ['        S
5      5        ['        S5      US	'   UR)                  5         [        [        S5       nU R                  UR+                  S5      S5        S S S 5        U R                  UR-                  5       S5        UR/                  S5        U R                  UR-                  5       S5        U R                  UR1                  5       ['        S
5      5        S S S 5        S S S 5        U R                  WR"                  S5        U R                  [2        R4                  " [        5      R6                  U5        S S S 5        GM     g ! , (       d  f       GN= f! , (       d  f       GN/= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN?= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       GMC  = f)N@   rd   re   )TF)close_original_fdrk   Ftrackfdr4   XYr>   rn   s   XaYar7   r   T)r?   r   r@   subTestr   rC   rD   rG   rI   rJ   r-   rX   	exceptionerrnoEBADFrV   rW   closedrv   ordrB   rw   rU   rT   	read_byter%   statst_size)r)   rX   rZ   r   r[   err_cms         r   test_trackfd_parameter MmapTests.test_trackfd_parameter  sR   &$1GGDI  !,0AB&%(A188:tUCq,GGI((Q6!..w76FFH 8(()9)9)?)?M!..z:HHTAX. ;!..z:HHTQY/ ;((59 SX."3x!	!&$/1 ,,QVVAY@ 0((15q	((15((CA- D )2   40  !8!8$?7 CB "-   87 ;::: 0/# DC )( CBs   K)M%$M:AM	K;AM	$L9M	L+A,M	"L19BM	;MAM%)
K8;
L
M	
LM	
L.)M	1
M ;M	
MM
M"M%%
M5	c                    Sn[         R                  SUSS9 nU R                  [        5         UR                  5         S S S 5        U R                  [        5         UR                  US-  5        S S S 5        U R                  [        U5      U5        [        S5      US'   S S S 5        g ! , (       d  f       Nr= f! , (       d  f       NQ= f! , (       d  f       g = f)Nr   r;   Fr   r4   ar   )	r   rJ   r-   rX   rV   rW   rG   rI   r   r)   rX   r[   s      r   test_trackfd_neg1MmapTests.test_trackfd_neg13  s    YYr4Y/1""7+ ,"":.# /SVT*s8AaD 0/++.. 0/s9   CB+CB<11C+
B9	5C<
C
	C
Cztrackfd only fails on Windowsc                    SnU R                  [        5         [        R                  SUSS9  S S S 5        U R                  [        5         [        R                  SUSS9  S S S 5        g ! , (       d  f       NB= f! , (       d  f       g = f)Nr   r;   Tr   F)rJ   ru   r   )r)   rX   s     r   $test_no_trackfd_parameter_on_windows.MmapTests.test_no_trackfd_parameter_on_windows?  sf     y)IIb$I- *y)IIb$I. *) *)))s   A*A;*
A8;
B	c                 P    U R                  [        [        R                  SS5        g )N   )rJ   r-   r   r(   s    r   test_bad_file_descMmapTests.test_bad_file_descH  s    '499b$7r   c                     [        [        S5       nSn[        U5      nUR                  U5        UR	                  5         [
        R                  UR                  5       U5      nS S S 5        [        WS-   5       Hp  n[        XSS-   5       H[  nWXV nU R                  WR                  U5      UR                  U5      5        U R                  UR                  US-   5      S5        M]     Mr     WR                  5         g ! , (       d  f       N= f)Nwb+s   aabaac deef  aa r7      xr;   )r?   r   rI   r@   rB   r   rC   rangerG   rH   rD   )r)   rZ   datanr[   r^   finishslices           r   test_tougher_findMmapTests.test_tougher_findL  s     &% A2DD	AGGDMGGI		!((*a(A ! 1Q3ZEs+U,  		%0@A  !5r: ,  
 	
	 ! s   AC??
Dc           
         [        [        S5       nSn[        U5      nUR                  U5        UR	                  5         [
        R                  UR                  5       U5      nS S S 5        U R                  WR                  S5      S5        U R                  UR                  S5      S5        U R                  UR                  SSS5      S5        U R                  UR                  SS5      S5        U R                  UR                  SSS5      S5        U R                  UR                  SSS	5      S5        U R                  UR                  [        S5      5      S5        [        W* S-
  US-   5       H\  n[        U* S-
  US-   5       HB  nS
 H9  nWR                  XuU5      nU R                  UR                  XuU5      XXV45        M;     MD     M^     g ! , (       d  f       GNz= f)Nr      one two ones   oner      ones   r;   r7   r   )   os   ons   twor      s)r?   r   rI   r@   rB   r   rC   rG   rH   	bytearrayr   )	r)   rZ   r   r   r[   ijpexpecteds	            r   test_find_end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!AA2a41%=A#yyq1H$$QVVA!_hA	J > & " ! s   AG
G&c           	          [         R                  [         R                  -  n[         R                  nSn[         R                  n[        SS5       H[  n[         R                  SX&S-   -  XS9 n[         R                  SX&S-   -  XS9 nUR                  SS	5        S S S 5        S S S 5        M]     g ! [
         a  n[        R                  " S5      UeS nAff = f! , (       d  f       ND= f! , (       d  f       M  = f)
Nr   zmmap flags unavailablei  r;   r7   )rp   rq   i   s   for   )
r   r   MAP_ANONYMOUSrA   r   AttributeErrorunittestSkipTestr   rH   )	r)   rp   rA   	PROT_NONEr   er   guardfms	            r   'test_find_does_not_access_beyond_buffer1MmapTests.test_find_does_not_access_beyond_bufferu  s    	E$$t'9'99E}}HII q$A2xq51!&  8;@YYr84x#8%*  <?AGGE2&<8 8    	E##$<=1D	E
< <8 8s<   AB1 .C+	CC+1
C;CC
C($C++
C:	c                    [        [        S5       nSn[        U5      nUR                  U5        UR	                  5         [
        R                  UR                  5       U5      nS S S 5        U R                  WR                  S5      S5        U R                  UR                  S5      S5        U R                  UR                  SSS5      S5        U R                  UR                  SSS5      S5        U R                  UR                  SS	S5      S5        U R                  UR                  SS	S5      S5        U R                  UR                  [        S5      5      S5        g ! , (       d  f       GN= f)
Nr   r   r   r   s   one r   r;   r   r7   )
r?   r   rI   r@   rB   r   rC   rG   rfindr   )r)   rZ   r   r   r[   s        r   
test_rfindMmapTests.test_rfind  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%%
E4c                 v   [        [        S5       nUR                  SS-  5        S S S 5        [        [        S5       n[        R                  UR	                  5       S[        R
                  S9nUR                  5         UR                  5         S S S 5        g ! , (       d  f       Ny= f! , (       d  f       g = f)Nr      re   r>   rf   )r?   r   r@   r   rC   rt   rD   r)   rZ   mfs      r   test_double_closeMmapTests.test_double_close  s}    &% AGGEDL! ! &$1188:uT5E5EFBHHJHHJ   !   s   BAB*
B'*
B8c                    [        [        S5       nUR                  SS-  5        S S S 5        [        [        S5       n[        R                  UR	                  5       S5       nU R                  [        U5      SS5        U R                  UR                  S5      SS-  5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)Nr   r      mzrb+r   z Map size should equal file size.)r?   r   r@   r   rC   rG   rI   rw   r   s      r   test_entire_fileMmapTests.test_entire_file  s    &% AGGEDL! ! &% AYYqxxz1%SWe-OPRWWU^UT\: & !  !  &% ! s/   B5%C#AC$C5
C
C	C
C%c                    [        [        S5       nUR                  SS-  5        S S S 5        [        [        S5       n[        R                  UR	                  5       SS[        R
                  S9 nU R                  [        UR                  S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)	Nrd   i   r   r>   r   r   offsetrg   i8 )	r?   r   r@   r   rC   rt   rJ   rK   rL   r   s      r   test_length_0_offsetMmapTests.test_length_0_offset  s    
 &$1GGY$&'   &$1188:qt?O?OPTV!!*bnneD Q     QP  s.   B$3C1"B5C$
B25
C	?C
Cc           	      :   [        [        S5       nUR                  SS-  5        S S S 5        [        [        S5       nU R                  [        [
        R
                  UR                  5       SSS9  S S S 5        g ! , (       d  f       N[= f! , (       d  f       g = f)Nrd   i r   w+br   i  r   )r?   r   r@   rJ   rV   r   rC   r)   rZ   s     r   test_length_0_large_offset$MmapTests.test_length_0_large_offset  su     &$1GGFTM"   &% Aj$))QXXZ%/  1 !    ! s   A;4B;
B	
Bc           	      ~   [        [        S5       nUR                  S5        UR                  5         [        R	                  UR                  5       S5      nUR                  SSS5        U R                  US S  SS5        UR                  5         S S S 5        Sn[        [        U5      5       H  n[        [        U5      5       H  n[        [        U5      [        XE5      -
  5       Hq  nUS U X5XV-    -   X4U-   S  -   n[        R	                  S	[        U5      5      nX8S S & UR                  XEU5        U R                  US S  U5        UR                  5         Ms     M     M     [        R	                  S	S
5      n/ SQn	[        R                  " XU	5       H  u  pn UR                  XU5        M     / SQn	U	 H(  u  pnU R                  [        UR                  XU5        M*     UR                  5         [        R	                  S	S5      nU R                  [        UR                  SSS5        U R                  [        UR                  SSS5        U R                  [        UR                  SSS5        UR                  SSS5        UR                  SSS5        g ! , (       d  f       GN= f! [         a     GM%  f = f)Nr   s
   ABCDEabcderc      r   s
   ABCDEABCDEz'Map move should have duplicated front 5
   0123456789r;   d   )ir;   r   r7   r   ))r;   r;   r;   )r;   r;   r   )r;   r   r;   )r   r;   r;   )r;   r   r   )r   r;   r   )r   r   r;   r7   r4   )r?   r   r@   rB   r   rC   moverG   rD   r   rI   max	itertoolsproductrV   rJ   )r)   rZ   r   r   destsrccountr   r[   offsetssourcerX   s               r   	test_moveMmapTests.test_move  s;   &% AGGM"GGI188:r*BGGAq!RUM3\]HHJ ! #d)$DSY'"3t9s4~#=>E#ET{Tci-@@4U
CTTH		"c$i0AaDFF4e,$$QqT84GGI ? ( % IIb#'"+"3"3Gg"NF$vT* #O7")F$j!&&&E #* 	
	IIb!*affaA6*affaA6*affaA6	q!Q	q!QW ! 8  s   A?JJ-
J*-
J<;J<c                     [         R                  S[        5      n[        [        5       H  nU R                  X   SS5        M     [        [        5       H   nUS-  nX1U'   U R                  X   U5        M"     g )Nr;   r   z+anonymously mmap'ed contents should be zero   )r   rA   r   rG   )r)   r[   xbs       r   test_anonymousMmapTests.test_anonymous  sj    IIb(#xAQT1JL ! xADAaDQT1% !r   c           	      D   [         R                  SS5      nU R                  UR                  5        UR                  [	        [        S5      5      5        UR                  S5        U R                  UR                  5       [	        [        S5      5      5        UR                  S5        U R                  UR                  5       [	        [        SS5      5      5        UR                  S5        U R                  UR                  5       S5        UR                  S5        U R                  UR                  S 5      [	        [        SS5      5      5        UR                  S5        U R                  UR                  S5      [	        [        SS5      5      5        UR                  S5        U R                  UR                  S	5      [	        [        SS5      5      5        UR                  S
5        U R                  UR                  S5      [	        [        S
S5      5      5        g )Nr;      r   r   r   r3   rn   r   r   	   i)	r   
addCleanuprD   r@   bytesr   rT   rG   rw   r)   r[   s     r   test_read_all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   [         R                  SS5      nU R                  UR                  5        U R                  [        UR
                  S5        U R                  [        UR
                  S5        U R                  [        UR
                  / SQ5        g )Nr;   r   foog      @)r7   r4   r3   )r   r   rD   rJ   ru   rw   r   s     r   test_read_invalid_argMmapTests.test_read_invalid_arg  sd    IIb" )QVVU3)QVVS1)QVVY7r   c                 T   [        [        [        S5      5      5      n[        R                  S[	        U5      5      nXS S & U R                  US S  U5        SS SSSS[        R                  SSS	S
4nU H2  nU H)  nUSS   H  nU R                  X$XV2   XXV2   5        M     M+     M4     g N   r;   r   r7   r3      i,  r   ii)r   reversedr   r   rI   rG   rx   maxsize)r)   sr[   indicesr^   stopsteps          r   test_extended_getslice MmapTests.test_extended_getslice  s    (5:&'IIb#a&!!1q!dAq"c3;;BTJE#ABKD$$QT%7%&T%79 (   r   c                    [        [        [        S5      5      5      n[        R                  S[	        U5      5      nSS SSSS[
        R                  SSS	S
4nU H  nU Hw  nUSS   Hk  nXS S & U R                  US S  U5        [        U5      nXtXV2   n[        [        U5      5      nXXEU2'   XXEU2'   U R                  US S  [        U5      5        Mm     My     M     g r  )	r   r
  r   r   rI   rx   r  rG   list)	r)   r  r[   r  r^   r  r  Lr   s	            r   test_extended_set_del_slice%MmapTests.test_extended_set_del_slice'  s    (5:&'IIb#a&!dAq"c3;;BTJE#ABKDaD$$QqT1-QA 4_-D $0D)-eo&)-eo&$$QqT584 (   r   c                     UR                  SU-  5        UR                  S5        UR                  SUS-
  -  5        UR                  5         [        R                  UR                  5       S5      $ )Nr1   r2   r3   r   )r@   rB   r   rC   )r)   rZ   halfsizes      r   make_mmap_fileMmapTests.make_mmap_file;  sT    	!"		(Q,'(	
yy!((*a((r   c           
         [        [        S5      nUR                  5         [        [        S5       nU R                  [        S[
        R
                  UR                  5       S[
        R                  S9  S S S 5        g ! , (       d  f       g = f)Nr   r>   zcannot mmap an empty filer   rf   )r?   r   rD   assertRaisesRegexrV   r   rC   rt   r   s     r   test_empty_fileMmapTests.test_empty_fileC  sa    &% 		&$1"":#>#'99ahhj!*.*:*: # <  s   AA==
Bc                 n   [        [        S5      n [        R                  nU R	                  X5      nUR                  5         UR                  5         US-  n[        [        S5      nS HJ  n [        R                  UR                  5       XES9nU R                  SS5        U R                  SS5        ML     UR                  5         [        [        S5      n[        R                  UR                  5       XB-
  US9nU R                  USS S	5        UR                  5          UR                  S
5        U R                  [        U5      S
5        U R                  [        UR                  SS5        U R                  USS S	5        [        [        S5      nUR                  SS5        U R                  UR                  5       US
-   5        UR                  5         U R                  UR!                  5       US
-   5        UR                  5         UR                  5          [$        R&                  " [        5        g ! [        [        [        4 a     GM  f = f! ["         a     Nef = f! [(         a     g f = f! UR                  5          [$        R&                  " [        5        f ! [(         a     f f = f= f)Nr   r4   rk   )r   r;   Nr   r   r7   r3   r2   r<   r=   r>   )r?   r   r   ALLOCATIONGRANULARITYr  rD   rC   rG   rV   ru   OverflowErrorrW   rI   rJ   rT   rU   rX   rY   r%   r   r-   )r)   rZ   r  r[   r   r   s         r   test_offsetMmapTests.test_offsetL  s4   &% 4	11H##Q1AGGJGGJlGVU#A(+		!((*g	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I7 .4H:"B I7 #I 4CI7 I' :II7 II7 
I$!I7 #I$$I7 '
I43I47J4	J$#J4$
J1.J40J11J4c                 N     " S S[         R                   5      nU" [        5        g )Nc                       \ rS rSrS rSrg)*MmapTests.test_subclass.<locals>.anon_mmapi  c                 L    [         R                   R                  " U S/UQ70 UD6$ )Nr;   )r   __new__)klassargskwargss      r   r(  2MmapTests.test_subclass.<locals>.anon_mmap.__new__  s#    yy((DTDVDDr    N)__name__
__module____qualname____firstlineno__r(  __static_attributes__r-  r   r   	anon_mmapr&    s    Er   r3  )r   rA   )r)   r3  s     r   test_subclassMmapTests.test_subclass  s    	E		 	E 	(r   r   zneeds mmap.PROT_READc                 |   Sn[        [        S5       nUR                  SU-  5        S S S 5        [        [        S5       n[        R                  UR	                  5       U[        R
                  S9nU R                  [        UR                  S5        S S S 5        g ! , (       d  f       Nz= f! , (       d  f       g = f)Nrc   rd   re   r>   rs   r  )r?   r   r@   r   rC   r   rJ   ru   )r)   r   r   rZ   r[   s        r   test_prot_readonlyMmapTests.test_prot_readonly  s    &$2HHT'\"  &$1		!((*gDNN	CAi%8    s   B AB-
B*-
B;c                 L    U R                  [        R                  [        5        g r$   )assertIsr   errorr-   r(   s    r   
test_errorMmapTests.test_error  s    djj'*r   c                 *   Sn[        [        S5       nUR                  S[        U5      -  5        S S S 5        [        [        S5       n[        R	                  UR                  5       [        U5      5      nS S S 5        [        [        U5      5       HY  nU R                  WR                  5       U5        UR                  X   5        U R                  UR                  5       US-   5        M[     U R                  [        WR                  S5        U R                  US S  U5        UR                  S5        [        [        U5      5       Hh  nU R                  UR                  5       U5        U R                  UR                  5       X   5        U R                  UR                  5       US-   5        Mj     U R                  [        UR                  5        UR                  S5        U R                  UR                  S5      S	5        U R                  UR                  5       S
5        UR                  S5        UR                  S5        U R                  UR                  5       S
5        U R                  US S  S5        UR                  [        S5      5        U R                  UR                  5       S5        U R                  US S  S5        U R                  [        UR                  S5        g ! , (       d  f       GN= f! , (       d  f       GN= f)Nr   rd   r   rk   r7   x   r   r3   s   345r9   r6   s
   012bar6789s   bazr   s
   012barbaz9s   ba)r?   r   r@   rI   r   rC   r   rG   rU   rv   rJ   rV   rT   r   rw   r   )r)   r   r   rZ   r[   r   s         r   test_io_methodsMmapTests.test_io_methods  s,   &$2HHT#d)^$  &% A		!((*c$i0A ! s4y!AQVVXq)LL!QVVXqs+ " 	*allG<1t$	q	s4y!AQVVXq)Q[[]DG4QVVXqs+ " 	*akk2	q	F+1%	q		1%1}-		&!"1%1}-*aggu5=    s   K1	.L1
L 
Lc                    S H  n[         R                  SS5      nUR                  U5        U R                  US   U5        UR                  S5        U R                  UR	                  5       U5        UR                  5         M     g )N)      r   r;   r7   r   )r   rv   rG   rT   r   rD   )r)   r   r[   s      r   test_non_ascii_byteMmapTests.test_non_ascii_byte  se     A		"a ALLOQqT1%FF1IQ[[]A.GGI !r   zrequires Windowsc                    SnSn[        5       n[        5       n[        R                  S[        U5      US9nXS S & [        R                  S[        U5      US9nX&S S & U R                  US S  U5        U R                  US S  U5        UR	                  5         UR	                  5         [        R                  S[        U5      US9nXS S & [        R                  S[        U5      US9nX&S S & U R                  US S  U5        U R                  US S  U5        UR	                  5         UR	                  5         U R                  [        S5         [        R                  SSSS9  S S S 5        g ! , (       d  f       g = f)Nr   s
   abcdefghijr;   tagnamerI  r   r7   )r   r   rI   rG   rD   r  ru   )r)   data1data2tagname1tagname2m1m2s          r   test_tagnameMmapTests.test_tagname  s>   !#!# YYr3u:xY81YYr3u:xY81A&A&



 YYr3u:xY81YYr3u:xY81A&A&



##Iy9IIb!QI' :99s   E**
E8c                     [         R                  SS5      n[        5       n[         R                  SSUS9nU R                  [        R                  " U5      [        R                  " U5      5        g )Nr;   r   rH  )r   r   assertGreaterrx   	getsizeof)r)   rN  rI  rO  s       r   test_sizeofMmapTests.test_sizeof  sR     YYr3 "YYr3Y03==,cmmB.?@r   c                    [        5       n[        R                  SSUS9n [        R                  SSUS9S S    UR                  5         [        [        S5       nUR                  S5        S S S 5        [        [        S5      n[        R                  UR                  5       S5      nUR                  5          UR                  S5         US S    UR                  5         g !    N= f! , (       d  f       N= f!    N3= f!    N4= f)	Nr;     rH    rd   s
   xxxxxxxxxxrk   r   )r   r   rD   r?   r   r@   rC   rW   )r)   rI  r[   r   rZ   s        r   test_crasher_on_windows!MmapTests.test_crasher_on_windows  s     !"IIb$I0	IIb$I03 	
	 &$2HHW  IIahhj!$			HHQK	aD 	
	%	  		s/   C  C'8C8 
C?  C$'
C58C<?Dc                     [         R                   " 5       n U R                  [        5         [        R                  UR	                  5       S5      nS S S 5        UR                  5         g ! , (       d  f       N= f! UR                  5         f = fNrc   )socketrJ   r-   r   rC   rD   )r)   r  r[   s      r   test_invalid_descriptor!MmapTests.test_invalid_descriptor  s]    
 MMO	""7+IIahhj"- , GGI ,+ GGIs"   A; %A*A; *
A84A; ;Bc                     [         R                  SS5       nU R                  UR                  5        S S S 5        U R                  WR                  5        g ! , (       d  f       N*= f)Nr;   rc   )r   assertFalser   rR   r   s     r   test_context_managerMmapTests.test_context_manager  sB    YYr2!QXX& ! s   A
A%c                 <   U R                  [        5       n[        R                  SS5       n[        e! , (       d  f       O= f S S S 5        O! , (       d  f       O= fU R	                  WR
                  [        S5        U R                  WR                  S5        g )Nr;   rc   z)wrong exception raised in context managerzcontext manager failed)rJ   	Exceptionr   r-   assertIsInstancer   rR   r   )r)   excr[   s      r   test_context_manager_exception(MmapTests.test_context_manager_exception  sn    y)S2r"a #"" *)) 	cmmWI	K":;s   A4
A	A
Ac                     [         R                  SS5      n[        R                  " U5      nU R                  U" 5       U5        A[	        5         U R                  U" 5       S 5        g )Nr;   r   )r   weakrefrefr:  r   )r)   mmwrs      r   test_weakrefMmapTests.test_weakref  sG    YYr2[[_bdBbdD!r   c                 8   [         R                  SS5      nU R                  UR                  S5      S5        U R                  UR                  S5      S5        U R                  UR                  S5      S5        U R                  UR                  S	5      S
5        g )Nr;   r   r   r   r   r7   s   yzr4      pythonr9   )r   rG   r@   )r)   rn  s     r   0test_write_returning_the_number_of_bytes_written:MmapTests.test_write_returning_the_number_of_bytes_written'  ss    YYr2#*$+%!,),a0r   c                    [         R                  SS5      nU R                  UR                  5        UR                  S5         UR	                  S5        U R                  UR                  S5      S5        U R                  [        UR                  5        U R                  [        UR                  S5        U R                  [        UR                  S	5        g ! [
         a    U R                  S5         Nf = f)
Nr;   i    rY  r   zresizing not supported   r   r:   ri   )r   r   rD   rw   rW   rY   skipTestrG   rJ   rV   r   rv   r@   r   s     r   test_resize_past_posMmapTests.test_resize_past_pos.  s    IIb$ 	t	4HHTN 	S)*akk2*allB7*aggv6  	4MM23	4s   C C76C7c                     [         R                  SS5      nU R                  [        5         X-     S S S 5        U R                  [        5         US-    S S S 5        g ! , (       d  f       N2= f! , (       d  f       g = f)Nr;   r   r4   )r   rJ   ru   r   s     r   test_concat_repeat_exception&MmapTests.test_concat_repeat_exception;  sW    IIb"y)E *y)E *) *)))s   AA.
A+.
A<c                 j   [         R                  SS5      nU R                  UR                  5        UR                  S5        UR	                  5       nU R                  U5        [        R                  R                  S5      (       a,  U R                  [        UR                  S[        S5      5        g g )Nr;   r   rs  linuxandroidr7   )r   r   rD   r@   rB   assertIsNonerx   ry   rz   rJ   r-   rI   )r)   rn  results      r   test_flush_return_value!MmapTests.test_flush_return_valueB  s     YYr2!
&!<<""#788 grxxC	NC 9r   c           
      h   [         R                  " S5      n[         R                  " S5      nSn[        S U 5       5      n[        XC5       GH  u  pVSU-  nXe-
  nSn	SUS-  US	-  US
-  4n
[	        [
        S5       nUR                  U5        UR                  5         [        R                  " X5       GHI  u  p[        [        U5      n[        R                  UR                  5       UUUS9 nUR                  U5        UR                  [        U5      5      nU R!                  U5        U R#                  UR%                  S5      U5        U R#                  UR%                  S5      ['        U5      5        U R#                  UR%                  S5      ['        U5      5        U R#                  UR%                  S5      ['        U5      5        S S S 5        UR                  [        W5      5      nU R!                  U5        GML     S S S 5        GM     g ! , (       d  f       NL= f! , (       d  f       GM  = f)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   rX  i@B i c              3   p   #    U  H,  nUS -  [         R                  -  [         R                  -  v   M.     g7f)r4   N)r   r   ).0r   s     r   	<genexpr>&MmapTests.test_repr.<locals>.<genexpr>X  s5      NDL !A)C)CC445DLs   46re   )ACCESS_DEFAULTrt   r}   r|   r   rc   r   rn   r   )rg   r   rg   r   posr   )rN   compiletuplezipr?   r   r@   rB   r   r   r   r   rC   rT   r]   reprassertIsNotNonerG   grouprE   )r)   open_mmap_repr_patclosed_mmap_repr_patmapsizesr   r   r   r   r   accesses	positionsr   rg   r  accintrn  r]   s                    r   	test_reprMmapTests.test_reprO  s   ZZ'(  "zz*DE: NDLN N"75OF'>D%F7HFBJ	619=Ife$
#,#4#4X#IKF$T62F299;#)*0*0 # 2 68 2 8 8b B,,U3((X)>G((X)>FL((U);SXF((X)>FL2 166tBx@E((/ $J %$  62 2 %$s&   <A2H!.CH	
8H!
HH!!
H1	madvisezneeds madvisec                    S[         -  n[        R                  SU5      nU R                  [        S5         UR	                  [        R
                  U5        S S S 5        U R                  [        S5         UR	                  [        R
                  S5        S S S 5        U R                  [        S5         UR	                  [        R
                  SS5        S S S 5        U R                  [        S5         UR	                  [        R
                  [         [        R                  5        S S S 5        U R                  UR	                  [        R
                  5      S 5        U R                  UR	                  [        R
                  [         5      S 5        U R                  UR	                  [        R
                  [         U5      S 5        U R                  UR	                  [        R
                  SS5      S 5        U R                  UR	                  [        R
                  SU5      S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN@= f)Nr4   r;   zmadvise start out of boundszmadvise length invalidr   zmadvise length too large)
rA   r   r  rV   r  MADV_NORMALr!  rx   r  rG   r   s      r   test_madviseMmapTests.test_madvises  s   8|IIb$##J0MNIId&&- O##J0MNIId&&+ O##J0HIIId&&2. J##M3MNIId&&#++> O4#3#34d;4#3#3X>E4#3#3XtDdK4#3#3Q:DA4#3#3Q=tD ONNNIINNs/   !H+5!H=4"I44I!+
H:=
I
I!
I0c                 N   [         nSU-  n[        R                  " U5      n[        R                  SU5       nX4SS& [        R
                  R                  S5      (       a0  U R                  [        5         UR                  U5        SSS5        O[ UR                  U5        U R                  [        U5      U5        U R                  USU U5        U R                  XAS SX!-
  -  5        SSS5        g! , (       d  f       N= f! [         a     N&f = f! , (       d  f       g= f)zqIf the mmap is backed by the pagefile ensure a resize up can happen
and that the original data is still in place
r4   r;   Nr  r1   )rA   r   	randbytesr   rx   ry   rz   rJ   rV   rW   rG   rI   rY   r)   
start_sizenew_sizer   r[   s        r    test_resize_up_anonymous_mapping*MmapTests.test_resize_up_anonymous_mapping  s     
z>
+YYr:&!aD||&&';<< &&z2HHX& 32VHHX& $$SVX6$$Q{
^T:$$Q{^Uh>S5TU '&
 32
 #  '&sH   >D6C5	DD#A	D5
D	?D
DDDD
D$ro   zrequires Posixc                    [         nSU-  n[        R                  " U5      n[        R                  SU[        R                  S9 nX4S S &  UR                  U5        U R                  [        U5      U5        U R                  US U U5        U R                  XAS  SX!-
  -  5        S S S 5        g ! [         a     Nf = f! , (       d  f       g = f)Nr4   r;   )rp   r1   )	rA   r   r  r   r   rW   rG   rI   rY   r  s        r   (test_resize_up_private_anonymous_mapping2MmapTests.test_resize_up_private_anonymous_mapping  s    
z>
+YYr:T-=-=Y>!aDR"   Q2  ;J6  ;(:O1PQ ?>  	 ?>s1   B>B.A	B>.
B;8B>:B;;B>>
Cc                 *   S[         -  nUS-  n[        R                  " U5      n[        R                  SU5       nX4SS&  UR	                  U5        U R                  [        U5      U5        U R                  USS USU 5        [        R                  R                  S5      (       a0  U R                  [        5         UR	                  U5        SSS5        O SSS5        g! , (       d  f       N= f! [         a     N&f = f! , (       d  f       g= f)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
r4   r;   Nr  )rA   r   r  r   rW   rG   rI   rx   ry   rz   rJ   rV   rY   r  s        r   "test_resize_down_anonymous_mapping,MmapTests.test_resize_down_anonymous_mapping  s     \
?
+YYr:&!aD
-"   Q2  1tIX7<<**+?@@**:6, 76 A '& 76  	 '&sH   DC4A,D>C#
D#
C1	-D4
D>D DD
Dc                 >   S[         -  n[         n[        [        S5      nUR                  U5         [        R	                  UR                  5       U5      n[        R	                  UR                  5       U5      nU R                  [        5         UR                  U5        SSS5        U R                  [        5         UR                  U5        SSS5        UR                  5         UR                  U5        U R                  UR                  5       U5        U R                  [        R                  " UR                  5       5      R                  U5        UR                  5         g! , (       d  f       N= f! , (       d  f       N= f! UR                  5         f = f)zaIf more than one mapping is held against a named file on Windows, neither
mapping can be resized
r4   r   N)rA   r?   r   r{   r   rC   rJ   r-   rW   rD   rG   rX   r%   r   r   )r)   r  reduced_sizerZ   rN  rO  s         r   +test_resize_fails_if_mapping_held_elsewhere5MmapTests.test_resize_fails_if_mapping_held_elsewhere  s   
 \
	

:	188:z2B188:z2B""7+		,' ,""7+		,' ,HHJIIl#RWWY5RWWQXXZ088,GGGI ,+++ GGIs=   AF
 E(!F
 >E9BF
 (
E62F
 9
FF
 
Fc                    S[         -  n[         n[        5       nSn[        S [        U5       5       5      n[        R	                  SXS9n[        R	                  SXS9nXVSU& U R                  USU U5        U R                  [        5         UR                  U5        SSS5        U R                  UR                  5       U5        U R                  USU U5        U R                  USU U5        g! , (       d  f       NY= f)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
r4   r   c              3   N   #    U  H  n[         R                  " S 5      v   M     g7f)r   N)r   getrandbits)r  r   s     r   r  UMmapTests.test_resize_succeeds_with_error_for_second_named_mapping.<locals>.<genexpr>  s      G4FqV''**4Fs   #%r;   rH  N)
rA   r   r   r   r   rG   rJ   r-   rW   rX   )r)   r  r  rI  data_lengthr   rN  rO  s           r   8test_resize_succeeds_with_error_for_second_named_mappingBMmapTests.test_resize_succeeds_with_error_for_second_named_mapping  s    
 \
!#GE+4FGGYYr:Y7YYr:Y7<KL[)40w'IIl# (J/L[)40L[)40	 ('s   C22
D c           	      	    " S S5      n[         R                  [         R                  [         R                  [         R                  /n[         R                  [         R                  [         R                  /nU GH  nU" U5       u  pVU R                  [        S5         XV" 5            SSS5        SSS5        U" U5       u  pVU R                  [        S5         XV" 5       S   SSS5        SSS5        U" U5       u  pVU R                  [        S5         XV" 5       SS2     SSS5        SSS5        U" U5       u  pVU R                  [        S5         USU" 5       S2     SSS5        SSS5        U" U5       u  pVU R                  [        S5         UR                  U" 5       5        SSS5        SSS5        U" U5       u  pVU R                  [        S5         UR                  SS	U" 5       5        SSS5        SSS5        GM     U GHN  nU" U5       u  pVU R                  [        S5         S
XV" 5       S& SSS5        SSS5        U" U5       u  pVU R                  [        S5         SXV" 5       SS2'   SSS5        SSS5        U" U5       u  pVU R                  [        S5         SUSU" 5       S2'   SSS5        SSS5        U" U5       u  pVU R                  [        S5         UR                  S	SU" 5       5        SSS5        SSS5        U" U5       u  pVU R                  [        S5         UR                  U" 5       5        SSS5        SSS5        GMQ     g! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNp= f! , (       d  f       GNz= f! , (       d  f       GNL= f! , (       d  f       GNV= f! , (       d  f       GN&= f! , (       d  f       GM  = f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GM  = f)zR
gh-103987: Test that mmap objects raise ValueError
        for closed mmap files
c                   *    \ rS rSrSS jrS rS rSrg)KMmapTests.test_mmap_closed_by_int_scenarios.<locals>.MmapClosedByIntContexti  Nc                     Xl         g r$   rf   )r)   rg   s     r   __init__TMmapTests.test_mmap_closed_by_int_scenarios.<locals>.MmapClosedByIntContext.__init__  s    $r   c                 P  ^ [        [        S5      U l        U R                  R                  [        R
                  " S5      5        U R                  R                  5         [        R                  U R                  R                  5       SU R                  S9m " U4S jS5      nTU4$ )Nr   r   rf   c                   "   > \ rS rSrU 4S jrSrg)`MmapTests.test_mmap_closed_by_int_scenarios.<locals>.MmapClosedByIntContext.__enter__.<locals>.Xi  c                 &   > TR                  5         gr]  )rD   r   s    r   	__index__jMmapTests.test_mmap_closed_by_int_scenarios.<locals>.MmapClosedByIntContext.__enter__.<locals>.X.__index__  s    	!r   r-  N)r.  r/  r0  r1  r  r2  )r[   s   r   r   r    s    " "r   r   )
r?   r   rZ   r@   r   r  rB   r   rC   rg   )r)   r   r[   s     @r   	__enter__UMmapTests.test_mmap_closed_by_int_scenarios.<locals>.MmapClosedByIntContext.__enter__  sp    fe,V--c23IIdffmmos4;;IG" "
 1vr   c                 8    U R                   R                  5         g r$   )rZ   rD   )r)   exc_type	exc_value	tracebacks       r   __exit__TMmapTests.test_mmap_closed_by_int_scenarios.<locals>.MmapClosedByIntContext.__exit__  s    r   )rg   rZ   )returnN)r.  r/  r0  r1  r  r  r  r2  r-  r   r   MmapClosedByIntContextr    s    %r   r  zmmap closed or invalidN   r4   r      1r7   s
   1111111111s   11111)r   rt   r|   r}   r  r  rV   rw   rH   r   rv   )r)   r  read_access_modeswrite_access_modesrg   r[   r   s          r   !test_mmap_closed_by_int_scenarios+MmapTests.test_mmap_closed_by_int_scenarios  s   	 	, 	
 
 (F'/6A++J8PQacF R 0 (/6A++J8PQacBK R 0 (/6A++J8PQacBlO R 0 (/6A++J8PQb13m$ R 0 (/6A++J8PQFF13K R 0 (/6A++J8PQFF4AC( R 0/+ (2 )F'/6A++J8PQ"+AacBK R 0 (/6A++J8PQ&.AacBlO R 0 (/6A++J8PQ'/Ab13m$ R 0 (/6A++J8PQFF1a% R 0 (/6A++J8PQLL% R 0/# )/ RQ 0/
 RQ 0/
 RQ 0/
 RQ 0/
 RQ 0/
 RQ 0/ RQ 0/
 RQ 0/
 RQ 0/
 RQ 0/
 RQ 0/s  M0
M)M0N
N$N<N8N&"N8:OO
!O9P O.)P P$P3P$Q	/
P79Q	Q-*Q7Q-R(Q?6RR5'R# R5S1SS
M-(M00
M?	
NN
N#	&
N50N88
O	

OO
O+	.
O=8P  
P	
P!P$$
P4	7
QQ		
Q	
Q*%Q--
Q<	?
R	R
R 	#
R2-R55
S	
SS
S)	_protectztest needs debug buildc                     SSK Jn  [        R                  " S5      n[	        SX!5      u  p4nU R                  UR                  5       S5        U R                  UR                  5       S5        g )Nr   )r   a
  
            import faulthandler
            import mmap
            import os
            import sys
            from contextlib import suppress

            # Prevent logging access violations to stderr.
            faulthandler.disable()

            PAGESIZE = mmap.PAGESIZE
            PAGE_NOACCESS = 0x01

            with open(sys.argv[1], 'bw+') as f:
                f.write(b'A'* PAGESIZE)
                f.flush()

                m = mmap.mmap(f.fileno(), PAGESIZE)
                m._protect(PAGE_NOACCESS, 0, PAGESIZE)
                with suppress(OSError):
                    m.read(PAGESIZE)
                    assert False, 'mmap.read() did not raise'
                with suppress(OSError):
                    m.read_byte()
                    assert False, 'mmap.read_byte() did not raise'
                with suppress(OSError):
                    m.readline()
                    assert False, 'mmap.readline() did not raise'
                with suppress(OSError):
                    m.write(b'A'* PAGESIZE)
                    assert False, 'mmap.write() did not raise'
                with suppress(OSError):
                    m.write_byte(0)
                    assert False, 'mmap.write_byte() did not raise'
                with suppress(OSError):
                    m[0]  # test mmap_subscript
                    assert False, 'mmap.__getitem__() did not raise'
                with suppress(OSError):
                    m[0:10]  # test mmap_subscript
                    assert False, 'mmap.__getitem__() did not raise'
                with suppress(OSError):
                    m[0:10:2]  # test mmap_subscript
                    assert False, 'mmap.__getitem__() did not raise'
                with suppress(OSError):
                    m[0] = 1
                    assert False, 'mmap.__setitem__() did not raise'
                with suppress(OSError):
                    m[0:10] = b'A'* 10
                    assert False, 'mmap.__setitem__() did not raise'
                with suppress(OSError):
                    m[0:10:2] = b'A'* 5
                    assert False, 'mmap.__setitem__() did not raise'
                with suppress(OSError):
                    m.move(0, 10, 1)
                    assert False, 'mmap.move() did not raise'
                with suppress(OSError):
                    list(m)  # test mmap_item
                    assert False, 'mmap.__getitem__() did not raise'
                with suppress(OSError):
                    m.find(b'A')
                    assert False, 'mmap.find() did not raise'
                with suppress(OSError):
                    m.rfind(b'A')
                    assert False, 'mmap.rfind() did not raise'
        z-cr   )test.support.os_helperr   textwrapdedentr   rG   strip)r)   r   codertstdoutstderrs         r   test_access_violations MmapTests.test_access_violationsI  s\     	2 @  @B .dDAF--r   r-  N)?r.  r/  r0  r1  r*   r.   r`   r   r   skipIfr%   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r"  r4  
skipUnlesshasattrr   r7  r<  r@  rE  rP  r   rU  rZ  r_  rc  ri  rp  rt  ry  r|  r  r  r  r  r  r  r  r  r  r  r2  r-  r   r   r!   r!   #   s!   ]~@D __RWW_&FG @ H @D __RWW_&FG	$ H	$ __RWW_&EF/ G/8$K.' 8$;
E1-^
&;*895()<7r {35KL9 M9+ 6D D*<=( >(< D*<=A > A D*<= >4 D*<=	 >	"
<"17D"0H I6HE IE$V2 G+-=>R ?R -, D*<= >. D*<=1 >1(T&l D*<=J79QRF. S >F.r   r!   c                       \ rS rSrS rS rS rS rS rS r	\
R                  " \R                  \:  S5      S	 5       r\
R                  " \R                  \:  S5      S
 5       rSrg)LargeMmapTestsi  c                 "    [        [        5        g r$   r   r   r(   s    r   r*   LargeMmapTests.setUp  	    vr   c                 "    [        [        5        g r$   r  r(   s    r   r.   LargeMmapTests.tearDown  r  r   c                    [         R                  S S S:X  d  [        (       a  [        SS[	        S5      -  5        [        [        S5      n UR                  U5        UR                  U5        UR                  5         U$ ! [        [        [        4 a?     UR                  5         O! [        [        4 a     Of = f[        R                  " S5      ef = f)Nr3   rl   	largefilez-test requires %s bytes and a long time to run        r   z*filesystem does not have largefile support)rx   ry   r	   r   rE   r?   r   rT   r@   rB   r-   r!  rV   rD   r   r   )r)   
num_zeroestailrZ   s       r   _make_test_file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:7C9B::Cc                    U R                  SS5       n[        R                  UR                  5       SS[        R                  S9 nU R	                  US   S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nl        r   l        r   i    )r  r   rC   rt   rG   r)   rZ   r[   s      r   test_large_offset LargeMmapTests.test_large_offset  si    !!+t4188:qTEUEUVZ[  9r2 W 54VV 54s#   3A>A-A>-
A;	7A>>
Bc                    U R                  SS5       n[        R                  S:  a  U R                  [        5         [
        R                  UR                  5       S[
        R                  S9  S S S 5        U R                  [        5         [
        R                  UR                  5       S[
        R                  S9  S S S 5        [
        R                  UR                  5       S[
        R                  S9 nU R                  UR                  5       S5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N9= f! , (       d  f       g = f)Nl    r  r  rf   r   r   )r  rx   r  rJ   r!  r   rC   rt   rV   rG   rX   r  s      r   test_large_filesize"LargeMmapTests.test_large_filesize  s    !!+t4{{[( &&}5IIahhj+d>N>NIO 6&&z2IIahhj!D4D4DIE 3188:wt7G7GHA  ;7 I 54 6522HH 54sR   *E2D)/E2D:>9E7!EE)
D7	3E:
E	E
E	E
E*c                 Z   SnU[        U5      S-  -
  nU[        U5      -   nU R                  X25       n[        R                  UR                  5       S[        R                  S9 nU R                  XcU U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Ns     DEARdear  r4   r   rf   )rI   r  r   rC   rt   rG   )r)   boundaryr  r^   r_   rZ   r[   s          r   _test_around_boundary$LargeMmapTests._test_around_boundary  s    3t9>)c$i!!%.!188:q1A1ABa  t4 C /.BB /.s#   2B%B:B
B	B
B*z!test cannot run on 32-bit systemsc                 .    U R                  [        5        g r$   )r  r   r(   s    r   test_around_2GBLargeMmapTests.test_around_2GB      ""3'r   c                 .    U R                  [        5        g r$   )r  r   r(   s    r   test_around_4GBLargeMmapTests.test_around_4GB  r  r   r-  N)r.  r/  r0  r1  r*   r.   r  r  r  r  r   r  rx   r  r   r  r  r2  r-  r   r   r  r    sx    "3

85 s*,OP( Q( s*,OP( Q(r   r  __main__)rc   )%test.supportr   r   r   r   r   r   r	   test.support.import_helperr
   r  r   r   test.support.script_helperr   r   r   r%   rN   r   r   r^  r   rx   r  rl  r   rA   getpidr   r   r   TestCaser!   r  r.  mainr-  r   r   <module>r     s      5 1 7   	 	     
   V==299;-z2( 


L
MMn.!! n.b#:(X&& :(z zMMO r   