
    daf]6                     ,   d dl mZ d dlZd dlZd dlmZ ej                  Zd addZ G d dej                        Z
 G d dej                        Z G d	 d
ej                        Zd Z G d dej                        Zedk(  r ej                           yy)    )supportN)
cmp_to_keyc                 ,   t         rt        d|        |d d  }|r|j                  t        |             n|j                          t	        |      t	        |      k7  rVt        d|        t        dt	        |      t	        |             t        |       t        |       t        |       t
        dz  ay t        |      D ]T  \  }}||   }||ust        d|        t        d|||       t        |       t        |       t        |       t
        dz  a y  y )Nz    checkingkeyzerror inzlength mismatch;   zout of order at index)verboseprintsortr   lennerrors	enumerate)tagexpectedrawcompareorigigoodmaybes           )/root/Python-3.12.4/Lib/test/test_sort.pycheckr   
   s     nc"q6DZ()

8}C j# #h-S:hdc
1X& 	4Au*c")1dE:(O$K#JqLG	    c                       e Zd Zd Zy)TestBasec           	      P   dg}t        dd      D ](  }d|z  }|j                  t        |dz
  |dz                * |j                  g d        G fddt               G d d	t              }|D ]  }t        t        |            }t        rt        d
|       |d d  }t        d||       |d d  }|j                          t        d||       |d d  }t        j                  |       t        d||       |d d  }|j                          |d d  }t        d||d        t        rt        d       t        d       |d d  }|j                  t        d              t        d||       t        |      dk\  r*d }|d d  }| j                  t        |j                  |       |D 	cg c]
  }	 |	       }}	|d d  }t        j                  |       d_        d}
	 |j                          |
rd_        t        d||       t        |      D 	cg c]  }	 |t        j                   d      |	        }}	|D cg c]  }||j"                  f }}|j                          |D 	cg c]  \  }}	|	 }}}	t        d||        y c c}	w # t        $ r d}
Y w xY wc c}	w c c}w c c}	}w )Nr   r   
      )r   d   i  c                   (    e Zd ZdZd Z fdZd Zy)+TestBase.testStressfully.<locals>.ComplainsTc                     || _         y Nr   )selfr   s     r   __init__z4TestBase.testStressfully.<locals>.Complains.__init__6   s	    r   c                     j                   r0t        j                         dk  rt        rt        d| |       t        | j
                  |j
                  k  S )NgMbP?z        complaining at)maybe_complainrandomr	   r
   RuntimeErrorr   )r%   other	Complainss     r   __lt__z2TestBase.testStressfully.<locals>.Complains.__lt__9   sB    ++%0G6eD&&vv''r   c                      d| j                   z  S )NzComplains(%d)r$   r%   s    r   __repr__z4TestBase.testStressfully.<locals>.Complains.__repr__@   s    &//r   N)__name__
__module____qualname__r(   r&   r-   r0   )r,   s   r   r,   r!   3   s    !N(0r   r,   c                       e Zd Zd Zd Zd Zy)(TestBase.testStressfully.<locals>.Stablec                      || _         || _        y r#   r   index)r%   r   r   s      r   r&   z1TestBase.testStressfully.<locals>.Stable.__init__D   s    
r   c                 4    | j                   |j                   k  S r#   r   r%   r+   s     r   r-   z/TestBase.testStressfully.<locals>.Stable.__lt__H   s    xx%))++r   c                 8    d| j                   | j                  fz  S )NzStable(%d, %d)r7   r/   s    r   r0   z1TestBase.testStressfully.<locals>.Stable.__repr__K   s    '488TZZ*@@@r   N)r1   r2   r3   r&   r-   r0    r   r   Stabler5   C   s    ,Ar   r=   zTesting sizeidentityreversedzrandom permutationzreversed via functionc                     || kD  || k  z
  S r#   r<   abs     r   <lambda>z*TestBase.testStressfully.<locals>.<lambda>a   s    qsQqSk r   z3    Checking against an insane comparison function.z?        If the implementation isn't careful, this may segfault.c                 H    t        t        j                         dz        dz
  S )N   r   )intr)   rA   s     r   rD   z*TestBase.testStressfully.<locals>.<lambda>g   s    FMMOa4G0H10L r   r   z(an insane function left some permutationc                     t         r#   r*   xs    r   bad_keyz)TestBase.testStressfully.<locals>.bad_keyk   s    &&r   TFz+exception during sort left some permutation	stability)rangeextendobjectlistr	   r
   r   reverser)   shuffler   r   r   assertRaisesr*   r(   	randranger8   )r%   sizespowernr=   rK   syrL   r   it_complainede	augmentedr,   s                @r   testStressfullyzTestBase.testStressfully+   s   1b\ 	*EU
ALLqsAaC)	* 	_%	0 	0 		AV 		A  3	%AU1XAna(!A*a#!AIIK*a#!ANN1&1-!AIIK!A)1a1IJKLWX!AFFz"LMFN<aC1v{'aD!!,G!D'()!1)A)!ANN1'+I$!M% +0	(CQJ:?(CQ((,a0CAC/01!!QWW1I1NN()tq!)A)+q!$g3	%D *   % $% D1)s*   %JJ#J6J"J"JJN)r1   r2   r3   r^   r<   r   r   r   r   *   s    V%r   r   c                       e Zd Zd Zd Zy)TestBugsc                      G fdd      }t        d      D cg c]	  } |        c}| j                  t        j                         y c c}w )Nc                       e Zd Z fdZy)"TestBugs.test_bug453523.<locals>.Cc                     r(t        j                          dk  rj                          nj                  d       t        j                          dk  S )Ng      ?rF   g      ?)r)   popappend)r%   r+   Ls     r   r-   z)TestBugs.test_bug453523.<locals>.C.__lt__   s8    4/EEGHHQK}},,r   Nr1   r2   r3   r-   )rg   s   r   Crc      s    -r   ri   2   )rN   rT   
ValueErrorr   )r%   ri   r   rg   s      @r   test_bug453523zTestBugs.test_bug453523   s>    
	- 	-  )$QQS$*aff- %s   Ac                     g }t        d      D ]i  }fd}ddg| j                  t        j                  t	        |             fd}| j                  t        j                  t	        |             |g}k y )N   c                 \    j                  d       j                          | |kD  | |k  z
  S NrF   )rf   re   rK   rZ   rg   s     r   mutating_cmpz7TestBugs.test_undetected_mutation.<locals>.mutating_cmp   s*    A!a%((r   r   r   r   c                 F    j                  d       d d = | |kD  | |k  z
  S rp   )rf   rq   s     r   rr   z7TestBugs.test_undetected_mutation.<locals>.mutating_cmp   s(    aDA!a%((r   )rN   rT   rk   r   r   )r%   memorywasterr   rr   rg   s       @r   test_undetected_mutationz!TestBugs.test_undetected_mutation   su    r 	*A) 1Aj!&&j6NO) j!&&j6NO(>L	*r   N)r1   r2   r3   rl   ru   r<   r   r   r`   r`      s    . *r   r`   c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestDecorateSortUndecoratec                     dj                         }|d d  }t        j                  |       |j                  t        j
                         d }|j                  t        |             y )N,The quick Brown fox Jumped over The lazy Dogr   c                 X    | j                         |j                         }}||kD  ||k  z
  S r#   )lower)rK   rZ   xlowerylowers       r   my_cmpz9TestDecorateSortUndecorate.test_decorated.<locals>.my_cmp   s*    WWY	FFVO88r   )splitr)   rS   r   strr{   r   )r%   datacopyr~   s       r   test_decoratedz)TestDecorateSortUndecorate.test_decorated   sQ    =CCEAwt		cii	 	9 			j(	)r   c                 j    dj                         }| j                  t        |j                  d        y )Nry   c                      yNr   r<   rK   rZ   s     r   rD   z>TestDecorateSortUndecorate.test_baddecorator.<locals>.<lambda>   s    r   r   )r   rT   	TypeErrorr   r%   r   s     r   test_baddecoratorz,TestDecorateSortUndecorate.test_baddecorator   s)    =CCE)TYYMBr   c                     t        d      D cg c]  }t        j                  d      |f }}|d d  }|j                  d        |j                          | j	                  ||       y c c}w )N   r   c                     | d   S r   r<   )ts    r   rD   z;TestDecorateSortUndecorate.test_stability.<locals>.<lambda>   s
    ! r   r   )rN   r)   rU   r   assertEqual)r%   r   r   r   s       r   test_stabilityz)TestDecorateSortUndecorate.test_stability   s_    49#J?q!!#&*??Aw		n	%		t$	 @s   A)c                     t        t        dd            }|d d  }| j                  t        |j                  d        | j                  ||       y )Nr   c                     d| z  S Nr   r<   rJ   s    r   rD   zDTestDecorateSortUndecorate.test_key_with_exception.<locals>.<lambda>   s
    ac r   r   )rQ   rN   rT   ZeroDivisionErrorr   r   )r%   r   dups      r   test_key_with_exceptionz2TestDecorateSortUndecorate.test_key_with_exception   sE    E"aL!1g+TYYMJs#r   c                 |    t        t        d            fd}| j                  t        j                  |       y )Nr   c                 .    d d = t        d      d d  | S Nrn   rN   )rK   r   s    r   kz<TestDecorateSortUndecorate.test_key_with_mutation.<locals>.k   s    QBiDGHr   r   )rQ   rN   rT   rk   r   )r%   r   r   s     @r   test_key_with_mutationz1TestDecorateSortUndecorate.test_key_with_mutation   s0    E"I	 	*diiQ7r   c                     t        t        d             G fddt              }| j                  t        j
                  |       y )Nr   c                   $    e Zd Zd Z fdZd Zy)ITestDecorateSortUndecorate.test_key_with_mutating_del.<locals>.SortKillerc                      y r#   r<   r%   rK   s     r   r&   zRTestDecorateSortUndecorate.test_key_with_mutating_del.<locals>.SortKiller.__init__   s    r   c                 ,    d d = t        d      d d  y r   r   r   s    r   __del__zQTestDecorateSortUndecorate.test_key_with_mutating_del.<locals>.SortKiller.__del__   s    G)Qr   c                 0    t        |       t        |      k  S r#   )idr:   s     r   r-   zPTestDecorateSortUndecorate.test_key_with_mutating_del.<locals>.SortKiller.__lt__   s    $x"U)++r   N)r1   r2   r3   r&   r   r-   r   s   r   
SortKillerr      s    $,r   r   r   )rQ   rN   rP   rT   rk   r   r%   r   r   s     @r   test_key_with_mutating_delz5TestDecorateSortUndecorate.test_key_with_mutating_del   s7    E"I	, 	, 	*diiZ@r   c                     t        t        d             G fddt              }| j                  t        j
                  |       y )Nr   c                       e Zd Zd Z fdZy)WTestDecorateSortUndecorate.test_key_with_mutating_del_and_exception.<locals>.SortKillerc                     |dkD  rt         y Nr   rI   r   s     r   r&   z`TestDecorateSortUndecorate.test_key_with_mutating_del_and_exception.<locals>.SortKiller.__init__   s    q5&& r   c                 >    d d = t        t        d            d d  y r   )rQ   rN   r   s    r   r   z_TestDecorateSortUndecorate.test_key_with_mutating_del_and_exception.<locals>.SortKiller.__del__   s    GuRy/Qr   N)r1   r2   r3   r&   r   r   s   r   r   r      s    '*r   r   r   )rQ   rN   rP   rT   r*   r   r   s     @r   (test_key_with_mutating_del_and_exceptionzCTestDecorateSortUndecorate.test_key_with_mutating_del_and_exception   s7    E"I	* 	* 	,		zBr   c           
          t        t        d            }t        j                  |       |j	                  d       | j                  |t        t        ddd                   y )Nr   T)rR   c   )rQ   rN   r)   rS   r   r   r   s     r   test_reversez'TestDecorateSortUndecorate.test_reverse   sG    E#Jt		$	tE"RO45r   c                 f   t        d      D cg c]  }t        j                  d      |f }}|d d  }|d d  }d }d }|j                  t	        |      d       |j                  t	        |             | j                  ||       |j                  d d       | j                  ||       y c c}w )	Nr   r   c                 ,    | d   |d   }}||kD  ||k  z
  S r   r<   rK   rZ   x0y0s       r   r~   zATestDecorateSortUndecorate.test_reverse_stability.<locals>.my_cmp   &    qT1Q4BGR((r   c                 ,    | d   |d   }}||kD  ||k  z
  S r   r<   r   s       r   my_cmp_reversedzJTestDecorateSortUndecorate.test_reverse_stability.<locals>.my_cmp_reversed   r   r   T)r   rR   r   c                     | d   S r   r<   rJ   s    r   rD   zCTestDecorateSortUndecorate.test_reverse_stability.<locals>.<lambda>  s
    1 r   )rN   r)   rU   r   r   r   )r%   r   r   copy1copy2r~   r   s          r   test_reverse_stabilityz1TestDecorateSortUndecorate.test_reverse_stability   s    49#J?q!!#&*??QQ	)	) 			j($	7

z/2
3u%

~t
4u% @s   B.N)r1   r2   r3   r   r   r   r   r   r   r   r   r   r<   r   r   rw   rw      s2    *C%$8
A
C(6&r   rw   c                    t        j                  d       t        j                  |       |d d  }|D cg c]  }|f }}|D cg c]  }|ff }}|||fD ]^  }t        |      }t        |D cg c]  }d|f c}      D cg c]  }|d   	 }}t	        ||      D ]  \  }	}
| j                  |	|
        ` y c c}w c c}w c c}w c c}w )Nr   r   )r)   seedrS   sortedzipassertIs)r%   rg   L_1rK   L_2L_3	optimizedrZ   	referenceoptrefs              r   &check_against_PyObject_RichCompareBoolr     s      KKN
NN1
A$C
AA4
C

qQD7
C
3_ $1I	#)!*<QAa5*<#=>aQqT>	>i3 	$JS#MM#s#	$$ 
 +=>s   
B8B=-C
Cc                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestOptimizedComparesc                 |   ddgddgddgg}|D ]  }| j                  t        |j                         | j                  t        |D cg c]  }|f c}j                         | j                  t        |D cg c]  }|ff c}j                          ddgddgddgddgg}|D ]  }t        | |        y c c}w c c}w )Nr   foog        )r   r   g?            )rT   r   r   r   )r%   heterogeneous_listsrg   rK   float_int_listss        r   test_safe_object_comparez.TestOptimizedCompares.test_safe_object_compare$  s     !5z #U| (%02 % 	DAi0i):11$):)?)?@i1)=aA4')=)B)BC	D
 c7!#;7;( ! 	<A24;	< *;)=s   
B44B9c           
      f  	  G 	fddt               } G d dt              } G d dt              t        d      D cg c]  } | ||      |g       }}|d   	| j                  t              5  |j                          d d d        t        d      D cg c]  } | ||      |g       }}|d   	| j                  t              5  |D cg c]  }|f c}j                          d d d         G d	 d
      } |        |       g}| j                  t        |j
                         | j                  t        |D cg c]  }|f c}j
                         t        t        d            dgz   t        d      D cg c]  }t        |       c}dgz   t        d      D cg c]  }t        |       c}t        d      D cg c]  } t        d       |       c}g}|D ]  }t        | |        y c c}w # 1 sw Y   yxY wc c}w c c}w # 1 sw Y   (xY wc c}w c c}w c c}w c c}w )Nc                       e Zd Z fdZy)ITestOptimizedCompares.test_unsafe_object_compare.<locals>.WackyComparatorc                 >    _         t        j                  | |      S r#   )	__class__rG   r-   )r%   r+   
WackyList2elems     r   r-   zPTestOptimizedCompares.test_unsafe_object_compare.<locals>.WackyComparator.__lt__:  s    !+zz$..r   Nrh   )r   r   s   r   WackyComparatorr   9  s    /r   r   c                       e Zd Zy)DTestOptimizedCompares.test_unsafe_object_compare.<locals>.WackyList1N)r1   r2   r3   r<   r   r   
WackyList1r   >  s    r   r   c                       e Zd Zd Zy)DTestOptimizedCompares.test_unsafe_object_compare.<locals>.WackyList2c                     t         r#   )rk   r:   s     r   r-   zKTestOptimizedCompares.test_unsafe_object_compare.<locals>.WackyList2.__lt__B  s      r   Nrh   r<   r   r   r   r   A  s    !r   r   r   r   c                       e Zd Zd Zy)MTestOptimizedCompares.test_unsafe_object_compare.<locals>.PointlessComparatorc                     t         S r#   )NotImplementedr:   s     r   r-   zTTestOptimizedCompares.test_unsafe_object_compare.<locals>.PointlessComparator.__lt__R  s    %%r   Nrh   r<   r   r   PointlessComparatorr   Q  s    &r   r   r   r   u   ￿c                     | |k  S r#   r<   r   s     r   rD   zBTestOptimizedCompares.test_unsafe_object_compare.<locals>.<lambda>]  s
    1 r   )rG   rQ   rN   rT   rk   r   r   r   bytesr   r   )
r%   r   r   r   rg   rK   r   listsr   r   s
           @@r   test_unsafe_object_comparez0TestOptimizedCompares.test_unsafe_object_compare4  s   
	/c 	/
	 		! 	! ;@)DQZ+Q/0DDuz* 	FFH	 ;@)DQZ+Q/0DDuz* 	%aaT""$	%
	& 	& !"$7$9:)QVV,)A%6qqd%6%;%;< eCj!eI-"'*-Q#a&-
:$)#J/q%(/:?*EQ-*_-a0EG  	<A24;	<3 E	 	 E 	% 	% &7
 ./EsN    G63G;HH
HH 
H
?H$$H)H.
;HHHc           	      f    t        | t        d      D cg c]  }t        |       c}       y c c}w Nr   )r   rN   r   r   s     r   test_unsafe_latin_comparez/TestOptimizedCompares.test_unsafe_latin_comparea  s3    .t;@:6G67 7:!f 6G 	H 6G   .
c                 T    t        | t        d      D cg c]  }| c}       y c c}w r   )r   rN   r   s     r   test_unsafe_long_comparez.TestOptimizedCompares.test_unsafe_long_comparee  s/    .t;@:6G67 78 6G 	H 6Gs   	%
c           	      f    t        | t        d      D cg c]  }t        |       c}       y c c}w r   )r   rN   floatr   s     r   test_unsafe_float_comparez/TestOptimizedCompares.test_unsafe_float_comparei  s3    .t;@:6G67 7<Ah 6G 	H 6Gr   c           	          t        | t        d      gdz         t        | t        d      D cg c]  }t        d       c}       y c c}w )Nnanr   )r   r   rN   )r%   _s     r   test_unsafe_tuple_comparez/TestOptimizedCompares.test_unsafe_tuple_comparem  sJ     	/teEl^C5GH.t;@:6G67 7<El 6G 	H 6Gs   A
c                     | j                  t        g dj                         | j                  t        ddgj                         | j                  t        ddgj                         y )N))      ?r   )FA   )rB   r   )r   rB   )rT   r   r   r/   s    r   test_not_all_tuplesz)TestOptimizedCompares.test_not_all_tuplesy  sO    )%B%G%GH)h%9%>%>?)h%9%>%>?r   c                 J    ddg}t        ddg      }| j                  ||       y )Nr   r   )r   r   )r%   r   actuals      r   test_none_in_tuplesz)TestOptimizedCompares.test_none_in_tuples~  s+    y)I./*r   N)r1   r2   r3   r   r   r   r   r   r   r   r  r<   r   r   r   r   #  s0    < +<ZHHH
H@
+r   r   __main__r#   )testr   r)   unittest	functoolsr   r	   r   r   TestCaser   r`   rw   r   r   r1   mainr<   r   r   <module>r	     s        
//
@W%x   W%v!*x   !*JZ&!2!2 Z&z$8^+H-- ^+D zHMMO r   