
    <e$                         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mZmZ d dl	m
Z
 d Zd Z G d de          Z G d d	ej                  Zed
k    r ej                     dS dS )    N)loadsdumps)supportc                 j    	 t          | d          rt          j        |           S t          d          )N	__index__zBslice indices must be integers or None or have an __index__ method)hasattroperatorindex	TypeError)args    &/usr/lib/python3.11/test/test_slice.pyevaluate_slice_indexr      sB    
 sK   0~c"""/0 0 	0    c                 .   	 t          j        |          }| j        dnt          | j                  }|dk     rt	          d          |dk    rt	          d          |dk     rdnd}|dk     r|dz
  n|}| j        |dk     r|n|}n=t          | j                  }|dk     rt          ||z   |          nt          ||          }| j        |dk     r|n|}n=t          | j                  }|dk     rt          ||z   |          nt          ||          }|||fS )N   r   zlength should not be negativezslice step cannot be zero)	r	   r
   stepr   
ValueErrorstartmaxminstop)slicelengthr   lowerupperr   r   s          r   slice_indicesr      sF   
 ^F##F
"11(<UZ(H(HD zz8999qyy4555 ((BBE((FQJJE {u$U[11.3aiiEFNE***S=N=N zquue#EJ//,01HHs4&=%(((#dE:J:J$r   c                       e Zd Zd Zd ZdS )MyIndexablec                     || _         d S Nvalue)selfr#   s     r   __init__zMyIndexable.__init__B   s    


r   c                     | j         S r!   r"   r$   s    r   r   zMyIndexable.__index__E   s
    zr   N)__name__
__module____qualname__r%   r    r   r   r   r   A   s2              r   r   c                   V    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S )	SliceTestc                     |                      t          t                     |                      t          t          dddd           d S )Nr            )assertRaisesr   r   r'   s    r   test_constructorzSliceTest.test_constructorK   s<    )U+++)UAq!Q77777r   c           	      j    |                      t          t          ddd                    d           d S )Nr   r/   r0   zslice(1, 2, 3))assertEqualreprr   r'   s    r   	test_reprzSliceTest.test_reprO   s1    eAq!nn--/?@@@@@r   c                 
   |                      t          t          t          d                     |                      t                    5  t          d                                           d d d            d S # 1 swxY w Y   d S )N   )r2   r   hashr   __hash__r'   s    r   	test_hashzSliceTest.test_hashR   s    )T588444y)) 	  	 !HH	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   	"A88A<?A<c                    t          ddd          t          ddd          t          ddd          }|                                |                     |           |                     d            |                     d           |                     d            G d dt                     G fd	d
t                    }t           |                      t           |                      |                                |                     fd           t          d |                      t          d |                      |                                |                     fd           t          dd |                      t          dd |                      |                                |                     fd           d S )Nr   r/   r0   r1   )r   r/   r0    c                       e Zd ZdS )SliceTest.test_cmp.<locals>.ExcNr(   r)   r*   r+   r   r   Excr@   b           Dr   rB   c                       e Zd Z fdZdS )"SliceTest.test_cmp.<locals>.BadCmpc                     r!   r+   )r$   otherrB   s     r   __eq__z)SliceTest.test_cmp.<locals>.BadCmp.__eq__f   s    	r   N)r(   r)   r*   rH   )rB   s   r   BadCmprE   e   s.              r   rI   c                       k    S r!   r+   s1s2s   r   <lambda>z$SliceTest.test_cmp.<locals>.<lambda>l       rRx r   c                       k    S r!   r+   rK   s   r   rN   z$SliceTest.test_cmp.<locals>.<lambda>q   rO   r   c                       k    S r!   r+   rK   s   r   rN   z$SliceTest.test_cmp.<locals>.<lambda>v   rO   r   )r   r5   assertNotEqual	Exceptionobjectr2   )r$   s3rI   rB   rL   rM   s      @@@r   test_cmpzSliceTest.test_cmpX   s+   1a^^1a^^1a^^R   B###B%%%B	***B###	 	 	 	 	) 	 	 		 	 	 	 	 	 	V 	 	 	 6688__6688__R   #/////0001ffhh1ffhhR   #/////0001a""1a""R   #/////00000r   c                    t          d          }|                     |j        d            |                     |j        d           |                     |j        d            t          dd          }|                     |j        d           |                     |j        d           |                     |j        d            t          ddd          }|                     |j        d           |                     |j        d           |                     |j        d            G d d          } |            }t          |          }|                     |j        |u            d S )Nr   r/   r0   c                       e Zd ZdS )(SliceTest.test_members.<locals>.AnyClassNrA   r+   r   r   AnyClassrY      rC   r   rZ   )r   r5   r   r   r   
assertTrue)r$   srZ   objs       r   test_memberszSliceTest.test_membersx   s_   !HH$'''###&&&!QKK!$$$###&&&!QNN!$$$######	 	 	 	 	 	 	 	 hjj#JJ#&&&&&r   c                    	 |                     |          }n# t          $ r d}Y nw xY w	 t          ||          }n# t          $ r d}Y nw xY w|                     ||           |dk    rT|j        dk    rKt          |                     |           }t          |          |         }|                     ||           d S d S d S )N
valueerrorr   )indicesr   r   r5   r   range)r$   r   r   actualexpecteds        r   check_indiceszSliceTest.check_indices   s    	"]]6**FF 	" 	" 	"!FFF	"	$$UF33HH 	$ 	$ 	$#HHH	$***Q;;5:??EMM&112FV}}U+HVX..... ;??s    ''< A
Ac                    |                      t          d                               d          d           |                      t          d d d                              d          d           |                      t          dd d                              d          d           |                      t          d d d                              d          d           |                      t          d d d	                              d          d
           |                      t          dd d	                              d          d           |                      t          d d                              d          d           |                      t          d d                              d          d           |                      t          d d                              d          d           |                      t          d dd                              d          d           |                      t          d dd                              d          d           |                      t          d dd                              d          d           |                      t          d d                              d          d           |                      t          d d                              d          d           |                      t          d d                              d          d           |                      t          d dd                              d          d           |                      t          d dd                              d          d           |                      t          d dd                              d          d           |                      t          dd                              d          t          d                               d                     |                      t          ddd                              d          t          d d d                              d                     |                      t          ddd                              d          d           |                      t          t	          d                    d d t
          j        dz
           dg           d ddz   ddddddd d!d"ddz  g}ddd d!d"ddz  g}t          j        |d#          D ]&}t          | }|D ]}| 	                    ||           '| 	                    t          ddd          d$           | 
                    t                    5  t          d                               d           d d d            n# 1 swxY w Y   | 
                    t                    5  t          ddd                              d%           d d d            n# 1 swxY w Y   | 
                    t                    5  t          d&dd                              d%           d d d            n# 1 swxY w Y   | 
                    t                    5  t          dd'd                              d%           d d d            n# 1 swxY w Y   | 
                    t                    5  t          ddd(                              d%           d d d            n# 1 swxY w Y   | 
                    t                    5  t          ddd                              d)           d d d            n# 1 swxY w Y   |                      t          ddd                              d%          d*           |                      t          t          d          dd                              d%          d*           |                      t          dt          d          d                              d%          d*           |                      t          ddt          d                                        d%          d*           |                      t          ddd                              t          d%                    d*           d S )+N
   )r   rg   r   r/   )r   rg   r/   r   )r   rg   r/   r   )	   r   r   )rh   r   ri   r0   )r0   r   ri   i)r   r   r   i)r   r   r   i)rh   r   r   irh   )r   rh   r         )rh   rk   r   )rh   rh   r   id   r   i   ii   5   i   @)repeatr9   g        g      $@g      ?g      @)r   r9   r   )r5   r   ra   listrb   sysmaxsize	itertoolsproductre   r2   r   r   r   )r$   valslengths
slice_argsr\   r   s         r   test_indiceszSliceTest.test_indices   sF	   t//77;;[IIItdQ//77;;[IIIqdQ//77;;[IIItdB//77;;[IIItdB//77;;[IIIqdB//77;;[IIItR0044i@@@tS))11"55yAAAtS))11"55yAAAtS"--55b99:FFFtS"--55b99;GGGtS"--55b99;GGGtQ//33Y???tR0044jAAAtR0044jAAAtQ++33B77DDDtQ++33B77DDDtR,,44R88*EEE$""**2..$KK##	
 	
 	
 	#r""**2..$b!!))"--	
 	
 	
 	tS!,,44R88+FFFeBii):):3;?):;aSAAA q#vgvsBAq!R3OaBq#v.#+D;;; 	. 	.Jz"A! . .""1f----.5B??B/// z** 	$ 	$$KK###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ z** 	' 	'!ROO##A&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'
 y)) 	) 	)#r1%%a(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)y)) 	) 	)!T1%%a(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)y)) 	) 	)!R%%a(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)y)) 	) 	)!ROO##C(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	q"a0033Y???{1~~r155==a@@)LLLq+b//155==a@@)LLLq"k!nn55==a@@)LLLq"a00Q@@)LLLLLsl   5#W$$W(+W(	%X::X>X>%ZZZ5%[&&[*-[*%\<<] ] !%^^^c                     g  G fddt                     } |            }d|dd<   |                     t          dd          dfg           d S )Nc                       e Zd Z fdZdS )3SliceTest.test_setslice_without_getslice.<locals>.Xc                 6                         ||f           d S r!   )append)r$   iktmps      r   __setitem__z?SliceTest.test_setslice_without_getslice.<locals>.X.__setitem__   s    

Aq6"""""r   N)r(   r)   r*   r   )r   s   r   Xr|      s.        # # # # # # #r   r   *   r   r/   )rT   r5   r   )r$   r   xr   s      @r   test_setslice_without_getslicez(SliceTest.test_setslice_without_getslice   s    	# 	# 	# 	# 	# 	# 	# 	# 	# 	# ACC!A#aR0122222r   c                    dd l }t          ddd          }t          |j        dz             D ]}t	          t          ||                    }|                     ||           |                     |                    d          |                    d                     |                     t          |          t          |                     d S )Nr   rg      r0   r      )
pickler   rb   HIGHEST_PROTOCOLr   r   r5   ra   rR   id)r$   r   r\   protocolts        r   test_picklezSliceTest.test_pickle   s    "b!f59:: 	. 	.HeAx(())AQ"""QYYr]]AIIbMM:::1r!uu----		. 	.r   c                 2   t          dd          }t          j        |          }|                     ||           t          ddd          }t          j        |          }|                     ||           t          ddgddgddg          }t          j        |          }|                     ||           |                     |j        |j                   |                     |j        |j                   |                     |j        |j                   d S Nr   rg   r/   r0   r1   r9      )r   copyassertIsr   r   r   r$   r\   cs      r   	test_copyzSliceTest.test_copy   s    !RLLIaLLa!ROOIaLLa 1a&1a&1a&))IaLLaagqw'''afaf%%%afaf%%%%%r   c                 ^   t          dd          }t          j        |          }|                     ||           t          ddd          }t          j        |          }|                     ||           t          ddgddgddg          }t          j        |          }|                     ||           |                     ||           |                     |j        |j                   |                     |j        |j                   |                     |j        |j                   d S r   )r   r   deepcopyr5   assertIsNotr   r   r   r   s      r   test_deepcopyzSliceTest.test_deepcopy	  s   !RLLM!A!ROOM!A 1a&1a&1a&))M!AA!'***((((((((r   c                      G d d          } |            }t          |          |_        t          j        |          }d }t	          j                     |                      |                       d S )Nc                       e Zd ZdS )#SliceTest.test_cycle.<locals>.myobjNrA   r+   r   r   myobjr     s          r   r   )r   r\   weakrefrefr   
gc_collectassertIsNone)r$   r   ows       r   
test_cyclezSliceTest.test_cycle  ss    EGGAhhKNN!!##r   N)r(   r)   r*   r3   r7   r<   rV   r^   re   ry   r   r   r   r   r   r+   r   r   r-   r-   I   s        8 8 8A A A     1 1 1@' ' './ / / CM CM CMJ3 3 3. . .& & &") ) )$    r   r-   __main__)rt   r	   rr   unittestr   r   r   r   r   testr   r   r   rT   r   TestCaser-   r(   mainr+   r   r   <module>r      s        



                 0 0 0! ! !L    &   Y Y Y Y Y! Y Y Yv zHMOOOOO r   