o
    HXh$                     @   s   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d Zdd ZG dd	 d	eZG d
d dejZedkrIe  dS dS )    N)loadsdumps)supportc                 C   s   	 t | drt| S td)N	__index__zBslice indices must be integers or None or have an __index__ method)hasattroperatorindex	TypeError)arg r   9/opt/python-3.10.19/usr/lib/python3.10/test/test_slice.pyevaluate_slice_index   s   

r   c                 C   s   	 t |}| jd u rdnt| j}|dk rtd|dkr"td|dk r(dnd}|dk r2|d n|}| jd u rB|dk r?|n|}nt| j}|dk rRt|| |nt||}| jd u re|dk rb|n|}nt| j}|dk rut|| |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   r   r   r   slice_indices   s$   


 

 
r   c                   @   s   e Zd Zdd Zdd ZdS )MyIndexablec                 C   s
   || _ d S Nvalue)selfr   r   r   r   __init__B   s   
zMyIndexable.__init__c                 C   s   | j S r   r   r   r   r   r   r   E   s   zMyIndexable.__index__N)__name__
__module____qualname__r    r   r   r   r   r   r   A   s    r   c                   @   sl   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S )	SliceTestc                 C   s$   |  tt |  ttdddd d S )Nr            )assertRaisesr	   r   r!   r   r   r   test_constructorK   s   zSliceTest.test_constructorc                 C   s   |  ttdddd d S )Nr   r&   r'   zslice(1, 2, 3))assertEqualreprr   r!   r   r   r   	test_reprO   s   zSliceTest.test_reprc                 C   sN   |  tttd |  t td  W d    d S 1 s w   Y  d S )N   )r)   r	   hashr   __hash__r!   r   r   r   	test_hashR   s   "zSliceTest.test_hashc                    s6  t dddt dddt ddd}|  | | | d  | d | d G dd dt G  fd	d
d
t}t | t | |  |  fdd t d| t d| |  |  fdd t dd| t dd| |  |  fdd d S )Nr   r&   r'   r(   )r   r&   r'    c                   @      e Zd ZdS )zSliceTest.test_cmp.<locals>.ExcNr"   r#   r$   r   r   r   r   Excb       r5   c                          e Zd Z fddZdS )z"SliceTest.test_cmp.<locals>.BadCmpc                    s    r   r   )r   otherr5   r   r   __eq__f   s   z)SliceTest.test_cmp.<locals>.BadCmp.__eq__N)r"   r#   r$   r:   r   r9   r   r   BadCmpe       r;   c                          kS r   r   r   s1s2r   r   <lambda>l       z$SliceTest.test_cmp.<locals>.<lambda>c                      r=   r   r   r   r>   r   r   rA   q   rB   c                      r=   r   r   r   r>   r   r   rA   v   rB   )r   r+   assertNotEqual	Exceptionobjectr)   )r   Zs3r;   r   )r5   r?   r@   r   test_cmpX   s,   

zSliceTest.test_cmpc                 C   s   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 d}| }t |}| |j|u  d S )Nr   r&   r'   c                   @   r3   )z(SliceTest.test_members.<locals>.AnyClassNr4   r   r   r   r   AnyClass   r6   rG   )r   r+   r   r   r   Z
assertTrue)r   srG   objr   r   r   test_membersx   s    
zSliceTest.test_membersc                 C   s   z| |}W n ty   d}Y nw zt||}W n ty%   d}Y nw | || |dkrJ|jdkrLt| | }t|| }| || d S d S d S )NZ
valueerrorr   )indicesr   r   r+   r   range)r   r   r   actualZexpectedr   r   r   check_indices   s    zSliceTest.check_indicesc                 C   s  |  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  dg d dd  ddddddd d!d"dd g}ddd d!d"dd g}tj|dd#D ]}t| }|D ]	}| 	|| qSqK| 	tdddd$ | 
t td d W d    n	1 sw   Y  | 
t tdddd% W d    n	1 sw   Y  | 
t td&ddd% W d    n	1 sw   Y  | 
t tdd'dd% W d    n	1 sw   Y  | 
t tddd(d% W d    n	1 sw   Y  | 
t tdddd) W d    n	1 s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   rO   r   r&   )r   rO   r&   r   )r   rO   r&   r   )	   r   r   )rP   r   rQ   r'   )r'   r   rQ   i)r   r   r   i)r   r   r   i)rP   r   r   irP   )r   rP   r         )rP   rS   r   )rP   rP   r   id   r   i   ii   5   i   @)repeatr.   g        g      $@g      ?g      @)r   r.   r   )r+   r   rK   listrL   sysmaxsize	itertoolsproductrN   r)   r   r	   r   )r   ZvalsZlengthsZ
slice_argsrH   r   r   r   r   test_indices   sv   &&"zSliceTest.test_indicesc                    sF   g  G  fdddt }| }d|dd< |  tdddfg d S )Nc                       r7   )z3SliceTest.test_setslice_without_getslice.<locals>.Xc                    s     ||f d S r   )append)r   iktmpr   r   __setitem__   s   z?SliceTest.test_setslice_without_getslice.<locals>.X.__setitem__N)r"   r#   r$   rd   r   rb   r   r   X   r<   re   *   r   r&   )rE   r+   r   )r   re   xr   rb   r   test_setslice_without_getslice   s
   z(SliceTest.test_setslice_without_getslicec                 C   sr   dd l }tddd}t|jd D ]%}tt||}| || | |d|d | t	|t	| qd S )Nr   rO      r'   r      )
pickler   rL   HIGHEST_PROTOCOLr   r   r+   rK   rC   id)r   rk   rH   protocoltr   r   r   test_pickle   s   zSliceTest.test_picklec                 C   s   t dd}t|}| || t ddd}t|}| || t ddgddgddg}t|}| || | |j|j | |j|j | |j|j d S Nr   rO   r&   r'   r(   r.      )r   copyZassertIsr   r   r   r   rH   cr   r   r   	test_copy   s   



zSliceTest.test_copyc                 C   s   t dd}t|}| || t ddd}t|}| || t ddgddgddg}t|}| || | || | |j|j | |j|j | |j|j d S rq   )r   rs   deepcopyr+   ZassertIsNotr   r   r   rt   r   r   r   test_deepcopy	  s   



zSliceTest.test_deepcopyc                 C   sD   G dd d}| }t ||_t|}d }t  | |  d S )Nc                   @   r3   )z#SliceTest.test_cycle.<locals>.myobjNr4   r   r   r   r   myobj  s    ry   )r   rH   weakrefrefr   
gc_collectZassertIsNone)r   ry   owr   r   r   
test_cycle  s   

zSliceTest.test_cycleN)r"   r#   r$   r*   r-   r1   rF   rJ   rN   r^   rh   rp   rv   rx   r   r   r   r   r   r%   I   s     E

r%   __main__)r\   r   rZ   Zunittestrz   rs   rk   r   r   testr   r   r   rE   r   ZTestCaser%   r"   mainr   r   r   r   <module>   s    & \