o
    HXh7                     @   s*  d dl Z d dlmZ d dlZd dlZd dlZd dlZejjZ	de	 Z
e
d ZdZdZd dde
e
d? ddgZd	Zede	 D ]Zeed  ed> Zq=[ed
d eD dd eD  7 ZejjZejjZejjZejjZde dee d   Zdd Zdd ZG dd de jZ e!dkre "  dS dS )    N)support      F      l   UU*UU* l   *UU*UU
    c                 C   s   g | ]}| qS  r   .0xr   r   8/opt/python-3.10.19/usr/lib/python3.10/test/test_long.py
<listcomp>       r   c                 C      g | ]}| qS r   r   r	   r   r   r   r      r   c                 C   s   t jjd }t jj| }d|> }g d}| dkrdS | dk r$t|   S |  | }|dk r3| | > n| |? t| d|>  @ B }|||d@  7 }|||k |krTtd|d	 dkrd|d	 dt jj ksfJ |d|  t jjksrJ t	
t||S )
z9
    Correctly-rounded integer-to-float conversion.

    r   r   )r   r   r   r   r   r   r           r      z%integer too large to convert to floatr   )sys
float_infomant_digmax_expint_to_float
bit_lengthboolOverflowErrormaxmathldexpfloat)nZ	PRECISIONZ	SHIFT_MAXZQ_MAXZROUND_HALF_TO_EVEN_CORRECTIONshiftqr   r   r   r   '   s    ,$r   c                 C   s
  | |A dk }t | t |} }|std| t| krtd|  |  }|dkr3| d| | ks@|dk rD| d|   |krD|d7 }t|tt }| t| d> |t|d> } }t| |\}}d| |kstd| |krx|d dkrx|d7 }t	
||}|r| S |S )z-Correctly-rounded true division for integers.r   zdivision by zeroz)int/int too large to represent as a floatr   r   )absZeroDivisionErrorDBL_MIN_OVERFLOWr   r   r   DBL_MIN_EXPDBL_MANT_DIGdivmodr   r   )abnegativedexpr"   rresultr   r   r   truedivU   s    2 $r0   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d Zdd Zdd Zdd Zdd Zej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/d0 Zd]d2d3Zejd4d5 Zd6d7 Zd8d9 Z ej!d:d; Z"ej!ej#e$j%d< d=d>d?d@dA Z&dBdC Z'ej!ej#e$j%dD dEd>d?dFdG Z(ej!dHdI Z)dJdK Z*dLdM Z+dNdO Z,dPdQ Z-dRdS Z.dTdU Z/dVdW Z0dXdY Z1dZd[ Z2d\S )^LongTestc                 C   s   |  |d |t }|t d }d}d}tt td  dB }||k rb|d? d }t||| }| d|  ko<tkn   || }||> }|d@ rT|d|> d B }tt td  }||k s$| ||  kom|kn   t dk rz| }|S )Nr   r   r         ?)ZassertGreaterSHIFTintrandommin
assertTrue)selfndigitsZnbits_hiZnbits_loanswernbitsr.   bitsr   r   r   getran{   s(   	zLongTest.getranc                 C   s<   d}t | D ]}|t> tdtB }qt dk r| }|S )Nr   r2   )ranger3   r5   randintMASK)r9   r:   ir   r   r   getran2   s   zLongTest.getran2c           
      C   s   | j }| j||dk t||\}}|| || }}|| || }}	|||	d |||d |||d |||| | d |dkrU| d|  koO|k n  d n| ||  k o`dkn  d W d    d S W d    d S 1 sxw   Y  d S )Nr   yzmultiplication does not commutez(divmod returns different quotient than /z#divmod returns different mod than %zx != q*y + r after divmodr   zbad mod from divmod)assertEqualsubTestr(   r7   )
r8   r   rD   eqr"   r.   Zq2Zr2ZpabZpbar   r   r   check_division   s   ""	"zLongTest.check_divisionc                 C   s   t tdtd t tttd  }|td  |D ]}| |}|D ]}| |p,d}| || q$q| dd | dd | dd	 | d
d | dd | dd | dd | dd | dd | dd | dd | dd d S )Nr         l   !Us/w3al   ZW3al   +Q@{dB]OlNl   OOlNl   teo%gqCgx<l   &ghrsGl   Q5K4+o-bkl   C4+o-bkl   .#wflD&I-Xl   ZnSu9bl   cv<Il   rdFBu'pl   PhbIi|$l   1m{Wqi8l   s~5^Fiy+l   'H
<{Cl   `<{Cl   ED_5(Nl   oybal   =2zz6 l   9tm)listr>   	MAXDIGITSKARATSUBA_CUTOFFappendr=   rH   )r8   digitslenxr   lenyrD   r   r   r   test_division   sD   
zLongTest.test_divisionc           	   
   C   s   t tddt tttd  }|td td g dd |D }|D ]I}d|> d }|D ]>}||k r5q.| j||d( d|> d }|| }d|| > d|>  d|>  d }| || W d    n1 sgw   Y  q.q$d S )Nr      
   d   c                 S   s   g | ]}|t  qS r   )r3   )r
   digitr   r   r   r          z+LongTest.test_karatsuba.<locals>.<listcomp>)abitsbbits)rK   r>   rM   extendrF   rE   )	r8   rO   r<   rX   r)   rY   r*   r   rD   r   r   r   test_karatsuba   s2   
zLongTest.test_karatsubac              	   C   s  | j }| j|dy ||d@ d ||dB | ||dA | ||d@ | ||dB d ||dA |  |||   |||@ | |||B | |||A d ||| @ d ||| B d ||| A d || d|   || |d   W d    n1 sw   Y  tdt D ]R}d| }| j|||d< |||> |? | ||| ||?  ||| ||>  ||| @ ||? |>  ||| @ ||d  @  W d    n1 sw   Y  qd S )N)r   r   r   r   r   )r   r    p2)rE   rF   r>   r3   )r8   r   rG   r    r\   r   r   r   check_bitop_identities_1   s:   z!LongTest.check_bitop_identities_1c                 C   s
  | j }| j||dq |||@ ||@  |||B ||B  |||A ||A  |||A |A | |||@ | | B   |||B | | @   |||A ||B ||@  @  |||A || @ | |@ B  |||A ||B | | B @  W d    d S 1 s~w   Y  d S )NrC   rE   rF   )r8   r   rD   rG   r   r   r   check_bitop_identities_2  s    "z!LongTest.check_bitop_identities_2c                 C   s   | j }| j|||dN |||@ |@ |||@ @  |||B |B |||B B  |||A |A |||A A  ||||B @ ||@ ||@ B  ||||@ B ||B ||B @  W d    d S 1 s\w   Y  d S )N)r   rD   zr^   )r8   r   rD   r`   rG   r   r   r   check_bitop_identities_3  s    "z!LongTest.check_bitop_identities_3c              
   C   s   t D ]}| | qtdtd }|D ]*}| |}| | |D ]}| |}| || | ||| || d  q!qd S )Nr   r   )specialr]   r>   rL   r=   r_   ra   )r8   r   rO   rP   rQ   rD   r   r   r   test_bitop_identities  s   


zLongTest.test_bitop_identitiesc                 C   s   g }d}|dk rd| }}|r t ||\}}|t| |s|  |p(dg}dd | ddddd|  dd	d
 |D  S )Nr   r   -Z0bZ0o 0x)r      rT      c                 s   s    | ]}d | V  qdS )Z0123456789abcdefNr   r
   rA   r   r   r   	<genexpr>1  s    z'LongTest.slow_format.<locals>.<genexpr>)r(   rN   r4   reversejoin)r8   r   baserO   signr.   r   r   r   slow_format%  s   

zLongTest.slow_formatc              	   C   s   dt fdtfdtfdtfdtffD ]K\}}||}| j||jd | ||}| || W d    n1 s8w   Y  | j|d | t	|d| W d    n1 sWw   Y  qd S )Nr   rg   rT   rh   )r   mapper)gotr   )
binoctstrreprhexrF   __name__ro   rE   r4   )r8   r   rm   rp   rq   expectedr   r   r   check_format_13  s   *zLongTest.check_format_1c                 C   sN   t D ]}| | qtdD ]}tdtd D ]}| |}| | qqd S )NrT   r   )rb   ry   r>   rL   r=   )r8   r   rA   rP   r   r   r   test_format<  s   
zLongTest.test_formatc           
      C   s  dddd fg}|D ]4\}}dD ]-}dD ](}|| | }|}|dkr)|t ur)| }z
| t|| W q t y<   Y qw qq
| t td | t td	 | t td
 | t td | t tdd | t tdd | tddd | tddd | tddd | tddd | tddd | tddd | tddd | tddd | tddd | tddd | tddd | td dd | t td!d | t td"d d#d$d%d&d'd(d)d*d+d,d d,d  g}|D ]
}	| t td-|	 q| t td. d S )/N)Z100000000000000000000l      Fx:^V Ze10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000rT   rU   )re   +rd   )re    	z  		  rd   Z123LZ123lZ0Lz-37LZ0x32Lrh   Z1L      +   Z000r   Z0o123S   Z0x123i#  Z0b100r   z	 0O123   z 0X123  z 0B100 0z+0z-0Z00Z08z-012395is        i   l                    l         l        r   Z42u   こんにちは)
ValueErrorrE   r4   assertRaises)
r8   ZLLsvrn   prefixssZvvZinvalid_basesrm   r   r   r   	test_longD  sZ   
zLongTest.test_longc                 C   sB   G dd d}|  tt|  G dd d}| t| d d S )Nc                   @      e Zd Zdd ZdS )z*LongTest.test_conversion.<locals>.JustLongc                 S      dS N*   r   r8   r   r   r   __long__     z3LongTest.test_conversion.<locals>.JustLong.__long__N)rw   
__module____qualname__r   r   r   r   r   JustLong  s    r   c                   @   s   e Zd Zdd Zdd ZdS )z+LongTest.test_conversion.<locals>.LongTruncc                 S   r   r   r   r   r   r   r   r     r   z4LongTest.test_conversion.<locals>.LongTrunc.__long__c                 S   r   )N  r   r   r   r   r   	__trunc__  r   z5LongTest.test_conversion.<locals>.LongTrunc.__trunc__N)rw   r   r   r   r   r   r   r   r   	LongTrunc  s    r   r   )r   	TypeErrorr4   rE   )r8   r   r   r   r   r   test_conversion}  s   zLongTest.test_conversionc                 C   sh   zt |}W n ty   d}Y nw zt|}W n ty#   d}Y nw d|||}| ||| d S )NoverflowzAError in conversion of integer {} to float.  Got {}, expected {}.)r   r   r   formatrE   )r8   r    actualrx   msgr   r   r   check_float_conversion  s   
zLongTest.check_float_conversionc           
      C   s  g d}|D ]}|  t|| |  t| |  qdD ]!\}}tdD ]}|  ttd| d|  d| d|   q%qdD ]!\}}tdD ]}|  ttd| d|  d| d|   qIqAtt}dt }|| d }|  t|t |  t|d t |  t|d t | tt| |  td| t  | tt|  | tt|d  | tt| | tt|d  | ttd| d  | ttd|  | tt||  td	D ]0}d| d
 d }d| d }|  tt|| d| d
 }d| d }|  tt|| q|d ||d |d ||d |d ||d d| d d| || g}|| tddD ]}tddD ]}|	d|d  |  qEq>|D ]}	| 
|	 | 
|	  qXd S )N)r   r   r   l    l    l                       l   l             l         )r   r   )r   r   rJ   r   r   r   rS   r   )   r   r   rg   r   r   r   ))r   r   r   )r   r   r   r   r   )r   rg   r   )rg   rg   )	   rg   )rT   rg   )      )r   r   )   r   )rI   rh   )r   rh   r   r   rU   l         r   rg      5   )rE   r   r>   r4   DBL_MAXDBL_MAX_EXPr   r   rZ   rN   r   )
r8   Zexact_valuesr   rD   pZint_dbl_maxZ	top_powerZhalfwayZtest_valuesvaluer   r   r   test_float_conversion  s`   
..

zLongTest.test_float_conversionc                 C   sr   dD ]}|  tt|| qd}dd> }| }|||td}dD ]
}| tt|| q!| t|t|d d S )N)g             r         ?       @AX  123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345r   i0u  )hugemhugeshuger   )$float(huge)float(mhuge)zcomplex(huge)zcomplex(mhuge)zcomplex(huge, 1)zcomplex(mhuge, 1)zcomplex(1, huge)zcomplex(1, mhuge)z	1. + hugez	huge + 1.z
1. + mhugez
mhuge + 1.z	1. - hugez	huge - 1.z
1. - mhugez
mhuge - 1.z	1. * hugez	huge * 1.z
1. * mhugez
mhuge * 1.z
1. // hugez
huge // 1.z1. // mhugezmhuge // 1.z	1. / hugez	huge / 1.z
1. / mhugez
mhuge / 1.z
1. ** hugez
huge ** 1.z1. ** mhugezmhuge ** 1.zmath.sin(huge)zmath.sin(mhuge)zmath.sqrt(huge)zmath.sqrt(mhuge)z(float(shuge) should not equal int(shuge))rE   r   r4   r   r   r   evalZassertNotEqual)r8   r   r   r   r   	namespacetestr   r   r   test_float_overflow  s   zLongTest.test_float_overflowc                 C   s   t t j}ttdg d D ] }d| }t |}| || || }t |}| || qdd>  ddfD ]}| tt j| | tt j| q9d S )NrT   )rU     '  r   r   r   r   )	r   log10erK   r>   ZassertAlmostEquallogr   r   )r8   ZLOG10Er-   r   r   rx   r   Zbadr   r   r   	test_logs  s   

zLongTest.test_logsc           
         s  | j }G  fddd g d}dD ]!}||d |d ||d |d t|d t|t|d g q|ddd	tjttjg td
}|ddd	dd> |d ||d g |dd |D  |D ]r} |}|D ]i} |}||k||k  }| j|||dK ||k||k  }	|||	 |||k|dk |||k|dk |||k |dk  |||k|dk |||k|dk |||k|dk W d    n1 sw   Y  qlqdd S )Nc                       sH   e Zd Zdd Z fddZdd Zdd Zd	d
 Zdd Zdd Z	dS )z)LongTest.test_mixed_compares.<locals>.Ratc           	      S   s,  t |tr|| _d| _d S t |trtt|\}}|dks-d|  kr*dk s-J  J d}d}|rct||}t|}||? dksEJ ||> |B }||8 }d|  krZdk s]J  J ||8 }|s3|dkrn||> }d}n|}d| > }|dk r|| }|| _|| _t|t| |ksJ d S t	d| )Nr   r   r2   r      r   zcan't deal with %r)

isinstancer4   r    r,   r   r   frexpr#   r   r   )	r8   r   fr   ZCHUNKtoprV   r    r,   r   r   r   __init__  s8   


$

z2LongTest.test_mixed_compares.<locals>.Rat.__init__c                    s<   t | s	 |}| j|j | j|j }}||k||k  S )N)r   r    r,   )r8   otherr   rD   Ratr   r   _cmp__F  s   
z0LongTest.test_mixed_compares.<locals>.Rat._cmp__c                 S   s   |  |dkS Nr   r   r8   r   r   r   r   __eq__K     z0LongTest.test_mixed_compares.<locals>.Rat.__eq__c                 S   s   |  |dkS r   r   r   r   r   r   __ge__M  r   z0LongTest.test_mixed_compares.<locals>.Rat.__ge__c                 S   s   |  |dkS r   r   r   r   r   r   __gt__O  r   z0LongTest.test_mixed_compares.<locals>.Rat.__gt__c                 S   s   |  |dkS r   r   r   r   r   r   __le__Q  r   z0LongTest.test_mixed_compares.<locals>.Rat.__le__c                 S   s   |  |dk S r   r   r   r   r   r   __lt__S  r   z0LongTest.test_mixed_compares.<locals>.Rat.__lt__N)
rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s    (r   )r   gMbP?gGz?r   g      ?g@xDZbti)g      Bg      Cg      @Cr   g333333?r   r   r   r   i N  c                 S   r   r   r   r	   r   r   r   r   a  r   z0LongTest.test_mixed_compares.<locals>.<listcomp>)r   rD   Rcmp)rE   rZ   r4   r   maxsizer   rF   )
r8   rG   casestr   ZRxrD   ZRyr   Zxycmpr   r   r   test_mixed_compares  s:   9$
zLongTest.test_mixed_comparesc                 C   s  |  tddd |  tddd |  tddd |  tddd |  tdd	d
 |  tdd	d |  tddd |  tddd |  tddd |  tddd |  tddd |  tddd |  tddd |  tddd |  tddd |  tddd |  tddd |  tddd |  tddd |  tddd |  tddd |  tddd |  td dd |  td dd |  ttd!d"dd! |  ttd!d"dd# |  ttd!d" dd$ |  ttd!d" dd% | ttd&d' |  td&d(d) |  td&d*d+ |  tdd,d |  td d,d |  tdd,d- |  tdd,d. |  tdd/d- |  tdd/d. |  tdd0d1 |  tdd0d. |  tdd2d3 |  tdd2d. | ttd&d4 |  td&d5d6 |  tdd7d8 |  td d7d9 |  tdd7d: |  tdd7d; |  tdd<d: |  tdd<d; |  tdd=d> |  tdd=d; |  tdd?d@ |  tdd?d; | ttd&dA |  tdBdCdD | ttddE | ttddF | ttddG | ttddH | tdItddJ | tdItddK | tdItddL | tdItddM | tdNtddO | tdPtddQ dRdS ttdTtdUd D dVdS ttdWtdXd D  D ]5}|dYvr| ttdZ| | ttd| | ttd| | ttd[d\ | | ttd[d\  | qpd]D ]}d^D ]}|  t||tt|| qqd S )_Ni[r,   Z	123456789,z123,456,789_Z123_456_789r   rd   1r   z-1z-3z  1z -1z+3z +1z 3r|   z 1rJ   r   3Xi  Z4d2i.z-4d2Z8xz     4d2z    -4d2berh   ZBEz-bez-BEIz,xZ_xZ	4996_02d2Z_XZ	4996_02D2oZ2322z-2322z-oz oz 2322z+oz+2322z,oZ_oZ111_4540_1322r*   Z11z-11Z10011010010z-10011010010z-bz bz 10011010010z+bz+10011010010z,b90  Z_bZ11_0000_0011_1001z1.3Z_cz,cz+czCannot specify bothz_,z,_z_,dz,_dzCannot specify ',' with 's'z,szCannot specify '_' with 's'Z_sc                 S      g | ]}t |qS r   chrr	   r   r   r   r     rW   z+LongTest.test__format__.<locals>.<listcomp>r)   r`   c                 S   r   r   r   r	   r   r   r   r     rW   AZzbcdoxXeEfFgGn%r   r   rU   zeEfFgG%)r   r   r   rU   r   i.i)	rE   r   r4   r   r   ZassertRaisesRegexr>   ordr   )r8   format_specr   r   r   r   test__format__q  s   
zLongTest.test__format__c                 C   s:   |  tttd |  tttd |  tttd d S )Ninfz-infnan)r   r   r4   r   r   r   r   r   r   test_nan_inf  s   zLongTest.test_nan_infc                 C   s   |  t dd }W d    n1 sw   Y  | dd | dd | dd | dd | dd | dd | dd | dd d S )Nr   r   rJ   r   r   r   r$   rE   r8   r   r   r   r   test_mod_division  s   
zLongTest.test_mod_divisionc                 C   s  dd> }| }|  || d |  || d |  || d |  || d |  d| d |  d| d |  d| d |  d| d |  d| |d?  | d |  d| |d?  | d |  d| |d?  | d |  d| |d?  | d |  ||d>  d	 |  d
| | d
 ||d}dD ]
}| tt|| qdD ]}t||}|  |dd|  qdD ]
}| tt|| qd S )Nr   i@  r   r   r   i  g     Ԅ@g     Ԅr2   i@B )r   r   )r   r   zhuge / 1zhuge / 2z	huge / -1z	huge / -2zmhuge / 100zmhuge / 200)z1 / hugez2 / hugez	-1 / hugez	-2 / hugez100 / mhugez200 / mhugezexpected underflow to 0 from %r)zhuge / 0z	mhuge / 0)rE   r   r   r   r$   )r8   r   r   r   r   Z	underflowr/   Zzeror   r   r   test_true_division  s6   

zLongTest.test_true_divisionc                 C   s   |  t dd }W d    n1 sw   Y  | dd | dd | dd | dd | dd | dd | dd | dd | dd | dd | dd | dd d S )Nr   r   r   rJ   r   r   r   r   r   r   r   test_floordiv  s   
zLongTest.test_floordivTc              
   C   s   |rt t|t|dt k rdS z	tt||}W n ty%   d}Y n ty/   d}Y nw zt|| }W n tyC   d}Y n tyM   d}Y nw | ||d|||| dS )zVerify that the result of a/b is correctly rounded, by
        comparing it with a pure Python implementation of correctly
        rounded division.  b should be nonzero.r   Nr   Zzerodivisionz7Incorrectly rounded division {}/{}: expected {}, got {})	r   r#   r'   ru   r0   r   r$   rE   r   )r8   r)   r*   Z
skip_smallrx   rq   r   r   r   check_truediv  s&   	
zLongTest.check_truedivc                 C   s  |  dd |  dd |  dd |  dd |  dd |  ddt  d |  dd	dtt    |  ddd
  d |  dddd   dttttt f}|D ]8}t|d |d D ],}|  ddt|d  ddt| d   |  ddt|d  ddt| d   q^qSddddddd
 ddddddd  fD ]}tddD ]}|  |t | | |  |t | |  qqtdD ]}|  dt d d dd  d|  dt d  q|  dd |  d d! td"D ]}|  d|d  d|  |  d| d|d   qddd#dd$d%dd&ddd
 ddddddd  fD ]}tddD ]}|  dt | | | q'q td'd(D ]}|  |dd)  q>d*dd
 dd" fD ]7}td"D ]/}td|}t|d| d }	|  ||	 |  | |	 |  ||	  |  | |	  qYqStd+D ]9}
td"}tdd"}td| }tdd| }|  || |  ||  |  | | |  | |  qd S ),N{   r   i8rJ   r   ige~ r   r   iNF rU   í l       90r   Q   r   i0& iC r      r   r   ii)   2   rT         i
  l   E,J_   l     Jb   r   r   rg   rh       i   i4  l    d(	 r   )	r   r   r'   r&   r>   r   r%   r5   	randrange)r8   basesrm   r-   mr    rA   Mr)   r*   r   Za_bitsZb_bitsr   rD   r   r   r   $test_correctly_rounded_true_division8  sx   *,"
	
z-LongTest.test_correctly_rounded_true_divisionc                 C   s   |  t dd>  W d    n1 sw   Y  |  t ddd>  >  W d    n1 s0w   Y  |  t dd?  W d    n1 sIw   Y  |  t ddd>  ?  W d    d S 1 sfw   Y  d S )Nr   r   r   r   )r   r   r   r   r   r   test_negative_shift_count  s   

"z"LongTest.test_negative_shift_countc                 C   s   |  dd |  dd | t dd>  W d    n1 s w   Y  |  ddd> > d | t ddd>  >  W d    d S 1 sGw   Y  d S )Nr   r   r   r   )rE   r   r   r   r   r   r   test_lshift_of_zero  s   
"zLongTest.test_lshift_of_zeroc                 C   s,   |  dtj> d |  dtjd > d d S )Nr   r   rE   r   r   r   r   r   r   test_huge_lshift_of_zero  s   z!LongTest.test_huge_lshift_of_zeror   g?F)Zmemusedry_runc                 C   s$   |  dtjd > dd> tj>  d S )Nr   r   r  )r8   sizer   r   r   test_huge_lshift  s   $zLongTest.test_huge_lshiftc                 C   s,   |  ddd> ? d |  ddd> ? d d S )Nr   r   r   r   ir   )rE   r   r   r   r   test_huge_rshift  s   zLongTest.test_huge_rshift  g?c                 C   sJ   dd> d t j> }| |t jd ? dd> d  | |t jd ? d d S )Nr   r  r   i  rS   r   r   )r   r   rE   )r8   r  r   r   r   r   test_huge_rshift_of_huge  s   z!LongTest.test_huge_rshift_of_hugec                 C   s>   dd }| d }|d }|  || d |  || d d S )Nr   rU   r   )assertIs)r8   r)   r*   cr   r   r   #test_small_ints_in_huge_calculation  s
   
z,LongTest.test_small_ints_in_huge_calculationc                 C   s   t ddD ]a}| ||d  | ||d  | ||d  | ||d  | ||d@  | ||dB  | ||dA  | ||   | ||d  | |tt| | ||d> d? t| qd}| || d | d| d d S )Nr  i  r   r   r   r   l            )r>   r  r4   rt   )r8   rA   r   r   r   test_small_ints  s   zLongTest.test_small_intsc                 C   s  d}t ddD ]P}| }| |tt|d |dkr6| d|d  t|  ko1d| k n   n| |d |dkrW| |dt	t
t|t
d |   q| d d | d d | d d | d d | d	 d d
D ]H}d| }| |d  | | d|  | | | |d  | |  |d  | |d  |d  | | d  |d  qd S )Ng|=ii  z-0br   r   r   r   r   )r   rJ   r   rh   r     r	  !   ?   @      )r>   r   rE   lenrr   lstripr7   r#   r   floorr   )r8   Ztinyr   krA   r)   r   r   r   test_bit_length  s4   0zLongTest.test_bit_lengthc                 C   s   t ddD ]}| | t|d qdD ]0}d| }| | d | |d  | | |dA  d | |d d	A  |d
  qd S )Nir   r   )rT   r  r   r!  A   i  iZ i r   r   r   r   i  rg   )r>   rE   	bit_countrr   count)r8   r)   r-   r   r   r   test_bit_count  s   zLongTest.test_bit_countc                 C   s  i ddddddddddddddd	dd
ddddddddddddddddddddd}t dddD ]$}| D ]\}}t|| d}|| }| || | t|t qGqA| tddd | tddd | tddd | tddd | tddd | tddd | tddd | tddd | tddd | td dd | td!dd" | td#dd" | td$dd% | td&dd% | td'dd( | td)d*d+ | td,d*d- | td.dd/ | td.dd0 | td.d*d1 | td.d2d3 | td.d4d5 | td.d6d7 | td.d8d9 | td.d:d; | td.d<d= | td.d>d? | td.d@d | td.dAd | td.dBd t dd"D ] }td| dC d*}d| dD }| || | t|t qyt dD ]$}t d"D ]}	tdEdF}
t|
|}| ||
 | t|t qqdGdHdIdJdd" dd" fD ]}| tdK|dK qt d"D ]}	tdEdF}
t|
}| ||
 | t|t qdL}|D ]}| 	t
td| q d S )MNr   r   r   rJ   r   rS   r   rT   r   rg   r   r   r   r   rI   r   r
  rh   )r        ii  r   ijr   i8ikr   iii1   r  3   rU         r  r     i,  iԡ r   i i i l   ! l   ! l   ~! l    ! r   l   ! r  l   `! il    ! r   l    '! il    z+ il    v|o r  l    ,Gx iiiiF i ir   r   r   r   r   i{ )Zbrianr   y                )r>   itemsroundrE   r  typer4   r5   r  r   r   )r8   Z	test_dictoffsetr&  r   rq   rx   expectr    rA   r   Zhuge_nZbad_exponentsr   r   r   r   
test_round  s   &
zLongTest.test_roundc                    s<  d< fdd	}i dddddd	d
dddddddddddddddddddddd d!d"d#d$d%}||d&d'd( i dddddd	d
ddddddddd)dd*dddddd+dddd,d d-d"d.d$d/}||d0d'd( ddddd	ddd1d2d3d4
}||d&dd( ddddd	d+dd,d2d5d4
}||d0dd(  j tdjdd&dd(  j tdjdd&d'd(  j tdjdd0dd(  j tdjdd0d'd(  j tdjd6d&dd(  j tdjd6d0dd(  ddd&d7  dd8d&d9  dd8d&d:  djd8d&d'd(d;   tdjdd& d S )=NFc                    sb   |   D ]*\}}z |jt|||d| W q ty. } z
td||||d }~ww d S )Nsignedz7failed to convert {0} with byteorder={1} and signed={2})r3  rE   to_bytesr#  	ExceptionAssertionErrorr   tests	byteorderr:  r   rx   errr   r   r   checkQ  s    
z%LongTest.test_to_bytes.<locals>.checkr       r      r         r                                                  s                        bigTr9                               little            )
r   r   rK  r   rS  rU  rW     rZ          r       rS   s       s        s   F)r   r   r;  rE   )r8   rB  tests1tests2tests3tests4r   r   r   test_to_bytesP  s   	
	
zLongTest.test_to_bytesc                    s  dM fdd	}i dddddddd	d
d	ddddddddddddddddddddddd d!d"d#d$d%d&}||d'd(d) i dddddddd	d
dddddddddd dddd*dd+dddddd
ddd!d"d#d$d%d,}||d-d(d) ddd	dd.ddd!d/d#d0d1}||d'dd) ddd	dd.ddd!d/d#d0d2}||d-dd) G d3d4 d4t } t|dd'|  |dd'd	  t|jdd'dd)|  |jdd'dd)d	  t|dd-|  |dd-d	  t|jdd-dd)|  |jdd-dd)d	  t jg d5d'd(d)d$  t jd5d'd(d)d$  t jtd6d'd(d)d$  t jtd6d'd(d)d$  t jtd7d6d'd(d)d$  t jtd6d'd(d)d$  t	t jdgd'  t	t jdgd8  t	t jdgd9  t
t jd:d'  t
t jd;d'  t
t jdd'  t
t jdd'd(  t
|jd:d'  t
|jd;d'  t
|jdd'  t
t jdd'd( G d<d= d=t }|dd'} t||  |d> G d?d@ d@t }	|	dd'} t||	  |d	  t|dAdBdC G dDdE dE}
G dFdG dG}G dHdI dI}G dJdK dK}dLD ],} t |
 |d	  t
t j| |  t
t j| |  tt j| | q;d S )NNFc                    s^   |   D ](\}}z tj|||d| W q ty, } z
td||||d }~ww d S )Nr9  z9failed to convert {0} with byteorder={1!r} and signed={2})r3  rE   r4   
from_bytesr<  r=  r   r>  r   r   r   rB    s    
z'LongTest.test_from_bytes.<locals>.checkro  r   rC  s     rD  r   rc  rE  r   rj  rG  rF  rH  r   rJ  rI  rL  rK  rN  rM  rP  rO  rR  rQ  rT  rS  rV  rU  rX  rW  rY  rZ  r\  r^  )ri  r[  r]  r_  r`  Tr9  ra  rb  )rd  re  rf  rg  rh  r   rl  rm  )ro  rC  rD  rL  rH  rE  rV  rX  ri  rj  rk  )ro  rC  rD  rL  rH  rE  rc  rJ  rd  rj  rn  c                   @      e Zd ZdS )z'LongTest.test_from_bytes.<locals>.myintNrw   r   r   r   r   r   r   myint      ry  )rS  r   r   r]  Bzbig zlittle re    c                   @   r   )z(LongTest.test_from_bytes.<locals>.myint2c                 S   s   t | |d S )Nr   )r4   __new__)clsr   r   r   r   r}  9  s   z0LongTest.test_from_bytes.<locals>.myint2.__new__Nrw   r   r   r}  r   r   r   r   myint28      r  r   c                   @   r   )z(LongTest.test_from_bytes.<locals>.myint3c                 S   s
   d| _ d S )Nbar)foo)r8   r   r   r   r   r   A  s   
z1LongTest.test_from_bytes.<locals>.myint3.__init__N)rw   r   r   r   r   r   r   r   myint3@  r  r  r  Znoner  c                   @   r   )z,LongTest.test_from_bytes.<locals>.ValidBytesc                 S   r   )NrD  r   r   r   r   r   	__bytes__J  r   z6LongTest.test_from_bytes.<locals>.ValidBytes.__bytes__Nrw   r   r   r  r   r   r   r   
ValidBytesI  r  r  c                   @   r   )z.LongTest.test_from_bytes.<locals>.InvalidBytesc                 S   r   )Nabcr   r   r   r   r   r  M  r   z8LongTest.test_from_bytes.<locals>.InvalidBytes.__bytes__Nr  r   r   r   r   InvalidBytesL  r  r  c                   @   rw  )z.LongTest.test_from_bytes.<locals>.MissingBytesNrx  r   r   r   r   MissingBytesO  s    r  c                   @   r   )z.LongTest.test_from_bytes.<locals>.RaisingBytesc                 S   s   dd  d S )Nr   r   r   r   r   r   r   r  Q  s   z8LongTest.test_from_bytes.<locals>.RaisingBytes.__bytes__Nr  r   r   r   r   RaisingBytesP  r  r  )r`  rh  rp  )r4   r  r5  rv  rE   	bytearrayarray
memoryviewr   r   r   getattrr$   )r8   rB  rq  rr  rs  rt  ry  r  rA   r  r  r  r  r  Z
byte_orderr   r   r   test_from_bytes  st  	
	




zLongTest.test_from_bytesc                    sF   G dd dt   fddtdD }tt |D ]}| |d qd S )Nc                   @   s   e Zd ZdddZdS )z<LongTest.test_access_to_nonexistent_digit_0.<locals>.Integerr   c                 S   s   t | |}d|_|S )Nr  )r4   r}  r  )r~  r   r8   r   r   r   r}  b  s   zDLongTest.test_access_to_nonexistent_digit_0.<locals>.Integer.__new__Nr   r  r   r   r   r   Integera  s    r  c                    s   g | ]} d qS r  r   ri   r  r   r   r   g  rW   z?LongTest.test_access_to_nonexistent_digit_0.<locals>.<listcomp>r   r   )r4   r>   maprE   )r8   Zintegersr    r   r  r   "test_access_to_nonexistent_digit_0]  s
   z+LongTest.test_access_to_nonexistent_digit_0c                 C   s@   dD ]}dD ]}|  t||> t |  t||? t qqd S )N)TF)r   r   )rE   r5  r4   )r8   r   r!   r   r   r   test_shift_boolk  s   zLongTest.test_shift_boolc              	   C   s   G dd dt }ddddtjd dd|d	g}|D ]$}| \}}| ||ft |df | t|t  | t|t  qd S )
Nc                   @   rw  )z-LongTest.test_as_integer_ratio.<locals>.myintNrx  r   r   r   r   ry  s  rz  ry  rT   r   r  r   TFr   )r4   r   r   as_integer_ratiorE   r5  )r8   ry  r?  r   	numeratordenominatorr   r   r   test_as_integer_ratior  s   zLongTest.test_as_integer_ratioN)T)3rw   r   r   r=   rB   rH   rR   r[   r]   r_   ra   rc   ro   ry   rz   r   r   r   r   Zrequires_IEEE_754r   r   r   r   r   r   r   r   r   r   r  r  r  Zcpython_onlyr  Z
bigmemtestr   r   r  r  r  r  r  r'  r+  r8  ru  r  r  r  r  r   r   r   r   r1   s   sh    '		9
E\a"

[
	

"Jc +r1   __main__)#Zunittestr   r   r   r5   r   r  int_infobits_per_digitr3   ZBASEr@   rM   rL   rb   r\   r>   rA   rN   r   r   r   r   r   min_expr&   r   r'   r%   r   r0   ZTestCaser1   rw   mainr   r   r   r   <module>   sN    
 .          