o
    HXhQ                     @   s  d dl mZ d dl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
zd dlZW n ey9   dZY nw G dd dZG dd dejeZG dd	 d	ejeZG d
d dejeZG dd dejZG dd dejZG dd dejeZG dd dejeZG dd dejZdZejdkrdndZG dd dZeeejkdG dd dejZdd  ZG d!d" d"ejeZG d#d$ d$ejZG d%d& d&ejeZ ej!e"ed'G d(d) d)ejeZ#e$d*kre%  dS dS )+    )support)	os_helperNc                   @      e Zd Zdd ZdS )HelperMixinc              	   G   s   t t j|g|R  }| || zJttjd}t j||g|R   W d    n1 s.w   Y  ttjd}t |}W d    n1 sIw   Y  | || W t	tj d S t	tj w )Nwbrb)
marshalloadsdumpsassertEqualopenr   TESTFNdumploadunlink)selfsampleextranewf r   ;/opt/python-3.10.19/usr/lib/python3.10/test/test_marshal.pyhelper   s   zHelperMixin.helperN)__name__
__module____qualname__r   r   r   r   r   r          r   c                   @   $   e Zd Zdd Zdd Zdd ZdS )IntTestCasec                 C   s<   t jd }|r| |fD ]}| | q|d? }|sd S d S )N      )sysmaxsizer   )r   nexpectedr   r   r   	test_ints   s   
zIntTestCase.test_intsc                 C   s   d}| d }||| |d?  fD ]'}|r8dt j|dddd }t|}| || |dkr2d	}n|dL }|sqtd
}| |d td}| |d td}| |d td}| |d d S )Nl    r       I   littleT)signedr   s	   IܺvT2l   \u1Q s	   I#Egl\u1Q s	   I*;L]nl   Tv0ur{ s	   Iĳl	Tv0ur{ )intto_bytesr   r	   r   )r   Zmaxint64Zminint64basesgotr   r   r   
test_int64&   s(   


	


zIntTestCase.test_int64c                 C   s   dD ]}|  | qd S )N)TFr   )r   br   r   r   	test_bool=   s   zIntTestCase.test_boolN)r   r   r   r%   r0   r3   r   r   r   r   r      s    r   c                   @   r   )FloatTestCasec                 C   s   d}t jd }||kr"| |fD ]	}| t| q|d }||ksd}t|d}t|}| || t|d}t|}| || t jd }||k rp| |fD ]}t|}| | | |d qT|d9 }||k sOd S d S )Ng}:g6ҫsgS:^@g        r   r    gZ1%)r!   r"   r   floatr   r
   r	   r   )r   Zsmallr#   r$   r   r.   r/   r   r   r   test_floatsB   s,   




zFloatTestCase.test_floatsN)r   r   r   r6   r   r   r   r   r4   A   r   r4   c                   @   r   )StringTestCasec                 C   s0   ddddd fD ]}|  tt| qd S N    Andrè Previnabc '  )r   r   r	   r
   r   r.   r   r   r   test_unicode]   s   zStringTestCase.test_unicodec                 C   $   ddddd fD ]}|  | qd S r8   r1   r>   r   r   r   test_stringa      zStringTestCase.test_stringc                 C   r@   )N    s   Andr Previn   abc    r=   r1   r>   r   r   r   
test_bytese   rB   zStringTestCase.test_bytesN)r   r   r   r?   rA   rF   r   r   r   r   r7   \   s    r7   c                   @   r   )ExceptionTestCasec                 C   s    t t t}| t| d S N)r   r	   r
   StopIterationr   )r   r   r   r   r   test_exceptionsj   s   z!ExceptionTestCase.test_exceptionsN)r   r   r   rJ   r   r   r   r   rG   i   r   rG   c                   @   s2   e Zd Zdd Zdd Zdd Zejdd Zd	S )
CodeTestCasec                 C   s(   t jj}tt|}| || d S rH   )rG   rJ   __code__r   r	   r
   r   )r   cor   r   r   r   	test_codeo   s   zCodeTestCase.test_codec                 C   s&   d}t jjf| }tt| d S )Ni  )rG   rJ   rL   r   r	   r
   )r   countZcodesr   r   r   test_many_codeobjectst   s   z"CodeTestCase.test_many_codeobjectsc                 C   sP   t ddd}t ddd}tt||f\}}| |jd | |jd d S )Nxf1execyf2)compiler   r	   r
   r   co_filename)r   Zco1Zco2r   r   r   test_different_filenamesz   s
   z%CodeTestCase.test_different_filenamesc                 C   sL   d}t |dd}tt|}|jD ]}t|tjr#| |j	|j	 qd S )Nzdef f(): pass
def g(): passZmyfilerS   )
rV   r   r	   r
   	co_consts
isinstancetypesCodeTypeZassertIsrW   )r   r.   rM   objr   r   r   test_same_filename_used   s   
z$CodeTestCase.test_same_filename_usedN)	r   r   r   rN   rP   rX   r   cpython_onlyr^   r   r   r   r   rK   n   s    rK   c                	   @   sD   e Zd Zdddddgdddd	Zd
d Zdd Zdd Zdd ZdS )ContainerTestCasezfoo@bar.baz.spamgHzns@   r   .zyx.41)
rb   rb   rb   rb   rb   rb   rb   rb   rb   rb   Fr:   )ZastringZafloatZanintZ
ashortlongZalistZatupleZabooleanZaunicodec                 C   s   |  | j d S rH   )r   dr   r   r   r   	test_dict   s   zContainerTestCase.test_dictc                 C      |  t| j  d S rH   )r   listrc   itemsrd   r   r   r   	test_list      zContainerTestCase.test_listc                 C   rf   rH   )r   tuplerc   keysrd   r   r   r   
test_tuple   rj   zContainerTestCase.test_tuplec                 C   s&   t tfD ]}| || j  qd S rH   )set	frozensetr   rc   rl   )r   constructorr   r   r   	test_sets   s   zContainerTestCase.test_setsN)r   r   r   rc   re   ri   rm   rq   r   r   r   r   r`      s    
r`   c                   @   r   )BufferTestCasec                 C   6   t d}| | tt|}| t|t d S NrD   )	bytearrayr   r   r	   r
   r   typebytesr   r2   r   r   r   r   test_bytearray      
zBufferTestCase.test_bytearrayc                 C   rs   rt   )
memoryviewr   r   r	   r
   r   rv   rw   rx   r   r   r   test_memoryview   rz   zBufferTestCase.test_memoryviewc                 C   s,   t  dd}tt|}| |d d S )NBrD   )arrayr   r	   r
   r   )r   ar   r   r   r   
test_array   s   zBufferTestCase.test_arrayN)r   r   r   ry   r|   r   r   r   r   r   rr      s    rr   c                   @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )BugsTestCasec                 C   s   t dgd  d S )N     )r   r
   rd   r   r   r   test_bug_5888452      zBugsTestCase.test_bug_5888452c                 C   sF   |  ttjd |  ttjd |  ttjtdd d d  d S )N   0   fr   A   r*   )assertRaises	Exceptionr   r	   r
   rd   r   r   r   test_patch_873224   s   &zBugsTestCase.test_patch_873224c                 C   s8   |  ttddd |  ttddd d S )N   r   r    )r   r   r	   r
   rd   r   r   r   test_version_argument   s   z"BugsTestCase.test_version_argumentc              	   C   s<   t dD ]}t|g}zt| W q ty   Y qw d S )N   )rangerw   r   r	   r   )r   icr   r   r   	test_fuzz   s   
zBugsTestCase.test_fuzzc                    s.   dd }|dt j  fdd}|d| d S )Nc                 S   s\   |d|  d  |d|  d  |d|  d  |d|  d d|    |d|  d  d S )Ns   )   Ns   (   s   [   s   {Nr   s   >   r   )Ncheckr   r   r   	run_tests   s
   z4BugsTestCase.test_loads_recursion.<locals>.run_testsd   c                    s     ttj|  d S rH   r   
ValueErrorr   r	   )r.   rd   r   r   r      s   z0BugsTestCase.test_loads_recursion.<locals>.checkra   )r   r	   )r   r   r   r   rd   r   test_loads_recursion   s   z!BugsTestCase.test_loads_recursionc                 C   s   g  }}t jdkrd}nd}t|d D ]}|dg |d }qt|}t|}| t|t| | t|d t|d  | t|d t|d  |dg | 	t
tj| d S )Nntr   i  r   r   r*   )osnamer   appendr   r
   r	   r   lenr   r   )r   headlastZMAX_MARSHAL_STACK_DEPTHr   dataZnew_headr   r   r   test_recursion_limit   s   



z!BugsTestCase.test_recursion_limitc                 C   s>   t tttttttfD ]}td|fi }| 	t
tj|  q
d S )Nsubtyp)r+   r5   complexrk   rg   dictrn   ro   rv   r   r   r   r
   )r   typr   r   r   r   test_exact_type_match   s   z"BugsTestCase.test_exact_type_matchc                 C   s   t d}d| }t| d S )Ng    .Ar;   )r+   r   r
   )r   sizeZ
testStringr   r   r   test_large_marshal
  s   zBugsTestCase.test_large_marshalc                 C      d}|  ttj| d S )Ns	   l       r   )r   Zinvalid_stringr   r   r   test_invalid_longs     zBugsTestCase.test_invalid_longsc              
   C   s   ddddddddgff}d	D ]}t |}g }zpttjd
!}|D ]}t|| |r/|| ||  q W d    n1 sAw   Y  ttjd+}t	|D ]\}}| 
|t| |re|| | 
|| |  qQW d    n1 szw   Y  W ttj qttj w d S )Nr    r;   s   def      ?r   r   r2      c)rC   s   0123r   r   )r   r   r   r   r   r   writer   tell	enumerater   r   readr   )r   r   ZinterleavedZilenZ	positionsr   rc   r   r   r   r   test_multiple_dumps_and_loads  s0   

z*BugsTestCase.test_multiple_dumps_and_loadsc                 C   r   )NT)r   	TypeErrorr   r	   )r   Zunicode_stringr   r   r   !test_loads_reject_unicode_strings,  r   z.BugsTestCase.test_loads_reject_unicode_stringsc              	   C   s:   G dd dt j}dD ]}| ttj|t| qd S )Nc                       s   e Zd Z fddZ  ZS )z/BugsTestCase.test_bad_reader.<locals>.BadReaderc                    s(   t  |}|d ur|dkr|d7 }|S )N   i@B )superreadinto)r   bufr#   	__class__r   r   r   3  s   z8BugsTestCase.test_bad_reader.<locals>.BadReader.readinto)r   r   r   r   __classcell__r   r   r   r   	BadReader2  s    r   )r   y              ?s
   0123456789
0123456789)ioBytesIOr   r   r   r   r
   )r   r   valuer   r   r   test_bad_reader1  s   
zBugsTestCase.test_bad_readerc                 C   s8   t d}tt|D ]}| tt j|d|  qd S )N)helloZdollyNr   )r   r
   r   r   r   EOFErrorr	   )r   r   r   r   r   r   test_eof<  s   
zBugsTestCase.test_eofN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    
r   l        l    r'   r   c                   @   r   )
NullWriterc                 C   s   d S rH   r   r>   r   r   r   r   E  s   zNullWriter.writeN)r   r   r   r   r   r   r   r   r   D  r   r   z!test cannot run on 32-bit systemsc                   @   s   e Zd Zdd Zejeddddd Zejeddddd	 Zejee	d
 dddd Z
ejee	d
 dddd Zejee	d eed
  dddd Zejee	d eed
  dddd Zejeddddd ZdS )LargeValuesTestCasec                 C   s   |  ttj|t  d S rH   )r   r   r   r   r   )r   r   r   r   r   check_unmarshallableJ  rj   z(LargeValuesTestCase.check_unmarshallabler   F)r   Zmemusedry_runc                 C      |  d|  d S )N   xr   r   r   r   r   r   rF   M     zLargeValuesTestCase.test_bytesc                 C   r   )NrQ   r   r   r   r   r   test_strQ  r   zLargeValuesTestCase.test_strr    c                 C   r   )NrH   r   r   r   r   r   rm   U  r   zLargeValuesTestCase.test_tuplec                 C   s   |  d g|  d S rH   r   r   r   r   r   ri   Y  r   zLargeValuesTestCase.test_list   c                 C      |  tt| d S rH   )r   rn   r   r   r   r   r   test_set]     zLargeValuesTestCase.test_setc                 C   r   rH   )r   ro   r   r   r   r   r   test_frozensetc  r   z"LargeValuesTestCase.test_frozensetc                 C   s   |  t| d S rH   )r   ru   r   r   r   r   ry   i  r   z"LargeValuesTestCase.test_bytearrayN)r   r   r   r   r   Z
bigmemtest
LARGE_SIZErF   r   pointer_sizerm   ri   r!   	getsizeofr   r   ry   r   r   r   r   r   H  s,    





r   c                 C   s   	 t || v r	d S | t | t|ttttfr'|D ]}t| | qt
| S t|tr?|	 D ]\}}t| | t| | q0t
| S rH   )idaddrZ   rg   rk   rn   ro   CollectObjectIDsr   rh   r   )Zidsr]   ekvr   r   r   r   m  s   

r   c                   @   s   e Zd ZddddeddhfZdddZdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS ) InstancingTestCase{   獗n?r;   )r   r;   Fc                 C   s   ||f}t t |}tdtjd D ]}t||}t t t|}| || q|s[t|d}	t t t|	}
| |
| |sO| t	|	t	| d S | 
t	|	t	| d S d S )N   r    r   )r   rn   r   r   versionr
   r	   r   ZassertGreaterr   ZassertGreaterEqual)r   Zrsample	recursivesimpler   Zn0r   Zs3Zn3s2Zn2r   r   r   helper3~  s   zInstancingTestCase.helper3c                 C   s    d}|  | | j|dd d S )Ni T)r   r   r   )r   Zintobjr   r   r   testInt  s   
zInstancingTestCase.testIntc                 C      d}|  | | | d S )Nr   r   )r   Zfloatobjr   r   r   	testFloat     
zInstancingTestCase.testFloatc                 C   r   )NZabcdeabcdeabcder   )r   strobjr   r   r   testStr  r   zInstancingTestCase.testStrc                 C   r   )Ns   abcdeabcdeabcder   )r   Zbytesobjr   r   r   	testBytes  r   zInstancingTestCase.testBytesc                 C   s,   | j D ]}||g}| | | | qd S rH   rl   r   r   )r   r]   Zlistobjr   r   r   testList  
   

zInstancingTestCase.testListc                 C   s,   | j D ]}||f}| | | | qd S rH   r   )r   r]   Ztupleobjr   r   r   	testTuple  r   zInstancingTestCase.testTuplec                 C   s4   | j D ]}|df|dfh}| | | | qd S Nr    r   r   )r   r]   Zsetobjr   r   r   testSet  
   

zInstancingTestCase.testSetc                 C   s8   | j D ]}t|df|dfh}| | | | qd S r   )rl   ro   r   r   )r   r]   Zfrozensetobjr   r   r   testFrozenSet  s
   

z InstancingTestCase.testFrozenSetc                 C   s4   | j D ]}d|d||di}| | | | qd S )Nr   goodbyer   )r   r]   Zdictobjr   r   r   testDict  r   zInstancingTestCase.testDictc                 C   s`   t td}| }W d    n1 sw   Y  tdr$t|td}| | | | d S Nr   z.pyrS   )r   __file__r   endswithrV   r   r   )r   r   coder   r   r   
testModule  s   


zInstancingTestCase.testModulec                 C   sN   d}d|d||di}||d< | j |dd ||g}|| | j |dd d S )Nr   r   r   r   T)r   )r   r   )r   r]   rc   lr   r   r   testRecursion  s   
z InstancingTestCase.testRecursionN)FF)r   r   r   ro   rl   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   {  s    
r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )CompatibilityTestCasec                 C   sb   t td}| }W d    n1 sw   Y  tdr$t|td}t||}t| d S r   )r   r   r   r   rV   r   r
   r	   )r   r   r   r   r   r   r   r   _test  s   

zCompatibilityTestCase._testc                 C      |  d d S )Nr   r  rd   r   r   r   test0To3     zCompatibilityTestCase.test0To3c                 C   r  )Nr    r  rd   r   r   r   test1To3  r  zCompatibilityTestCase.test1To3c                 C   r  Nr   r  rd   r   r   r   test2To3  r  zCompatibilityTestCase.test2To3c                 C   r  )Nr   r  rd   r   r   r   test3To3  r  zCompatibilityTestCase.test3To3N)r   r   r   r  r  r  r
  r  r   r   r   r   r    s    r  c                   @   s*   e Zd ZdZeeZdd Zdd ZdS )InterningTestCasezthis is an interned stringc                 C   sX   t t | j}| || j | t|t| j t|}| t|t| d S rH   )r   r	   r
   r   r   r   r!   internr   r.   r   r   r   r   
testIntern  s
   
zInterningTestCase.testInternc                 C   sZ   t t | jd}| || j | t|t| j t|}| t|t| d S r	  )	r   r	   r
   r   r   ZassertNotEqualr   r!   r  r  r   r   r   testNoIntern  s
   
zInterningTestCase.testNoInternN)r   r   r   r   r!   r  r  r  r   r   r   r   r    s
    
r  zrequires _testcapic                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )CAPI_TestCasec              	   C   st   t tjd D ]0}tdtj| ttjd}| }W d    n1 s&w   Y  t	tj | 
|d qd S )Nr    xV4r   s   xV4)r   r   r   	_testcapiZpymarshal_write_long_to_filer   r   r   r   r   r   )r   r   r   r   r   r   r   test_write_long_to_file  s   
z%CAPI_TestCase.test_write_long_to_filec              	   C   s   ddddddd f}t tjd D ]3}t|tj| ttjd	}| }W d    n1 s0w   Y  t	tj | 
t|| qd S )
N   €rD   r   F@      @       @z
long line r   r    r   )r   r   r   r  Zpymarshal_write_object_to_filer   r   r   r   r   r   r	   )r   r]   r   r   r   r   r   r   test_write_object_to_file  s   
z'CAPI_TestCase.test_write_object_to_filec                 C      t tjd}|d W d    n1 sw   Y  ttj\}}ttj | |d | |d t tjd}|d W d    n1 sKw   Y  | t	 ttj W d    n1 sfw   Y  ttj d S )Nr   s   4xxxxi4  r      )
r   r   r   r   r  Zpymarshal_read_short_from_filer   r   r   r   r   r   rpr   r   r   test_read_short_from_file     z'CAPI_TestCase.test_read_short_from_filec                 C   r  )Nr   s   xV4xxxxr  r   s   V4)
r   r   r   r   r  Zpymarshal_read_long_from_filer   r   r   r   r  r   r   r   test_read_long_from_file%  r  z&CAPI_TestCase.test_read_long_from_filec              	   C   s
  d}t tjd D ]y}t||}ttjd}||d  W d    n1 s)w   Y  t	tj\}}t
tj | || ttjd}||d d  W d    n1 s\w   Y  | t t	tj W d    n1 sww   Y  t
tj q	d S N)r  rD   r   r  r  r    r   s   xxxx)r   r   r   r
   r   r   r   r   r  Z$pymarshal_read_last_object_from_filer   r   r   r   r   r]   r   r   r   r  r  r   r   r   test_read_last_object_from_file3  s"   z-CAPI_TestCase.test_read_last_object_from_filec              	   C   s  d}t tjd D ]}t||}ttjd}||d  W d    n1 s)w   Y  t	tj\}}t
tj | || | |t| ttjd}||d d  W d    n1 sdw   Y  | t t	tj W d    n1 sw   Y  t
tj q	d S r!  )r   r   r   r
   r   r   r   r   r  Zpymarshal_read_object_from_filer   r   r   r   r   r"  r   r   r   test_read_object_from_fileC  s$   z(CAPI_TestCase.test_read_object_from_fileN)	r   r   r   r  r  r  r   r#  r$  r   r   r   r   r    s    	r  __main__)&testr   Ztest.supportr   r~   r   r   r!   Zunittestr   r[   r  ImportErrorr   ZTestCaser   r4   r7   rG   rK   r`   rr   r   r   r"   r   r   ZskipIfr   r   r   r  r  r_   Z
skipUnlessr  r   mainr   r   r   r   <module>   sN    $ $`
Q