o
    g                      @   s   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rEe  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   E/Users/admin/.pyenv/versions/3.10.0/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__A   s   
zMyIndexable.__init__c                 C   s   | j S r   r   r   r   r   r   r   D   s   zMyIndexable.__index__N)__name__
__module____qualname__r    r   r   r   r   r   r   @   s    r   c                   @   s\   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S )	SliceTestc                 C   s$   |  tt |  ttdddd d S )Nr            )assertRaisesr	   r   r!   r   r   r   test_constructorJ   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_reprN   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_hashQ   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   Exca       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__e   s   z)SliceTest.test_cmp.<locals>.BadCmp.__eq__N)r"   r#   r$   r:   r   r9   r   r   BadCmpd       r;   c                          kS r   r   r   s1s2r   r   <lambda>k       z$SliceTest.test_cmp.<locals>.<lambda>c                      r=   r   r   r   r>   r   r   rA   p   rB   c                      r=   r   r   r   r>   r   r   rA   u   rB   )r   r+   assertNotEqual	Exceptionobjectr)   )r   Zs3r;   r   )r5   r?   r@   r   test_cmpW   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_membersw   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   s`   t ddd}dD ]%}tt||}| || | |d|d | t|t| qd S )NrO      r'   )r   r   r&      )r   r   r   r+   rK   rC   id)r   rH   protocoltr   r   r   test_pickle   s   zSliceTest.test_picklec                 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    ro   )r   rH   weakrefrefr   
gc_collectZassertIsNone)r   ro   owr   r   r   
test_cycle   s   

zSliceTest.test_cycleN)r"   r#   r$   r*   r-   r1   rF   rJ   rN   r^   rh   rn   ru   r   r   r   r   r%   H   s     E
r%   __main__)r\   r   rZ   Zunittestrp   pickler   r   testr   r   r   rE   r   ZTestCaser%   r"   mainr   r   r   r   <module>   s   & 7