U
    Mf1|                     @   s   d Z ddlZddlZddlmZ ddlT ddlmZ G dd dejZ	G dd	 d	e	Z
G d
d dejZi fddZedkrdd Zejdd dS )zSelf-test for Math.Numbers    N)list_test_cases)*)IntegerNativec                   @   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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d1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkS )lTestIntegerBasec                 C   s   t dd S )NzTo be implemented)NotImplementedErrorself r	   I/tmp/pip-unpacked-wheel-l_0d1exj/Cryptodome/SelfTest/Math/test_Numbers.pysetUp0   s    zTestIntegerBase.setUpc                 G   s   t | j|S N)mapInteger)r   argr	   r	   r
   Integers3   s    zTestIntegerBase.Integersc           
      C   s   | j }|d}||}|d}| t|d |d}|d}|d}|d}|d}	| || | |d | || | |d | |d | |d | |d | |d | |	d | ||k ||}| || | |d	d k d S )
N   g      ?l    d(	 l d(	   l    l    r   )r   assertRaises
ValueErrorassertEqualassertFalse)
r   r   v1v2v3v4v5v6Zv7Zv8r	   r	   r
   test_init_and_equality6   s.    z&TestIntegerBase.test_init_and_equalityc                 C   s<   |  ddd \}}| t|d | t|dd  d S )Ni     )r   r   intr   r   r   r	   r	   r
   test_conversion_to_intW   s    z&TestIntegerBase.test_conversion_to_intc                 C   sX   |  dddd \}}}| |dk | |dk | |dk | |dd k d S )Nr   ir   r       r   
assertTruer   r   r   r   r   r	   r	   r
   test_equality_with_ints\   s
    z'TestIntegerBase.test_equality_with_intsc                 C   sh   |  ddddd \}}}}| t|dk | t|dk | t|dk | t|d	k d S )
N   r   ir   r    Z200z-20A.  10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376)r   r&   strr   r   r   r   r   r	   r	   r
   test_conversion_to_strc   s
    z&TestIntegerBase.test_conversion_to_strc                 C   s8   |  ddd \}}| t|d | t|d d S )Nr   P   zInteger(-1)z"Integer(1208925819614629174706176))r   r   reprr"   r	   r	   r
   	test_reprj   s    zTestIntegerBase.test_reprc                 C   s   | j }|d}| td|  |d}| td|  | td|d | t|jd | td|jd	d
 | td|jdd	d
 |d}| t|j | jt|jdd
 d S )Nr   i  u   ÿþu    ÿþ      u   þÿlittle	byteorderu   þÿ bittle)r   r   bto_bytesr   r   )r   r   r   r   r   r	   r	   r
   test_conversion_to_byteso   s    z(TestIntegerBase.test_conversion_to_bytesc                 C   s   | j }|d}| t|| | d| |d}| d| |d}| d| |dd}| d| |jddd}| d| |jdd	d}| d
| | t|jdd d S )N    r   s    r4   s   r   bigr6   r5         	r9   )r   
from_bytesr&   
isinstancer   r   r   )r   r   r   r   r   r   r   r   r	   r	   r
   test_conversion_from_bytes   s    


z*TestIntegerBase.test_conversion_from_bytesc                 C   s   |  dddd\}}}}| ||k | |dk | ||k | |dk | ||k | ||k | | dd k d S )NY   Z   r   )r   r&   r   r   r,   r	   r	   r
   test_inequality   s    zTestIntegerBase.test_inequalityc                 C   s   |  ddddd\}}}}}| ||k  | |dk  | ||k  | |dk  | ||k  | ||k  | ||k  | ||k  d S N      rF      r%   r   r   r   r   r   r   r	   r	   r
   test_less_than   s    zTestIntegerBase.test_less_thanc                 C   s   |  ddddd\}}}}}| ||k | |dk | ||k | |dk | ||k | ||k | ||k | ||k d S )NrI   rJ   rK   r%   rL   r	   r	   r
   test_less_than_or_equal   s    z'TestIntegerBase.test_less_than_or_equalc                 C   s   |  ddddd\}}}}}| ||k | |dk | ||k | ||k | |dk | ||k | ||k | ||k | ||k d S rH   r%   rL   r	   r	   r
   test_more_than   s    zTestIntegerBase.test_more_thanc                 C   sp   |  dddd\}}}}| ||k | |dk | ||k | ||k | |dk | ||k d S )NrI   rJ   rN   r%   r,   r	   r	   r
   test_more_than_or_equal   s    z'TestIntegerBase.test_more_than_or_equalc                 C   s`   |  dddd\}}}}| | | t| | | | t| | | | | d S )Nr   
   r   rK   )r   r   boolr&   r,   r	   r	   r
   	test_bool   s    


zTestIntegerBase.test_boolc                 C   sb   |  dd  ddddd \}}}}}| |  | |  | |  | |  d S )Nr3   d   r   )r   r&   Zis_negativer   rL   r	   r	   r
   test_is_negative   s
    &z TestIntegerBase.test_is_negativec                 C   s~   |  ddd\}}}| t|| | j | || d | |d d | || d | |d d | |d d d S )N   rE   a   r   rK   i  r   r&   rB   r   r   r'   r	   r	   r
   test_addition   s    zTestIntegerBase.test_additionc                 C   s~   |  ddd\}}}| t|| | j | || d | |d d | || d | |d d | |d d d S )	NrX   rE   rY   S   rZ   rJ   rK   ir[   r'   r	   r	   r
   test_subtraction   s    z TestIntegerBase.test_subtractionc                 C   sr   |  dddd\}}}}| t|| | j | || d | |d d | |d d | |d d d S )N      rK   r)   rF   i   r[   r,   r	   r	   r
   test_multiplication   s    z#TestIntegerBase.test_multiplicationc                    s   |  dddd \ }}| t | | j | |  d | |d d | |d d | |dd  d | t fdd d S )	Nr3      r   r/   rV   O   c                      s    d S Nr   r	   r	   r   r	   r
   <lambda>      z0TestIntegerBase.test_floor_div.<locals>.<lambda>)r   r&   rB   r   r   r   ZeroDivisionErrorr   r   r   r	   rf   r
   test_floor_div   s    zTestIntegerBase.test_floor_divc                    s   |  ddd\ }}| t | | j |  | d |  d d | |d d |  d d | t fdd | t fd	d d S )
Nr   r`   rN   r3   r4   rK   c                      s    d S re   r	   r	   rf   r	   r
   rg     rh   z0TestIntegerBase.test_remainder.<locals>.<lambda>c                      s    d S )Nr	   r	   rf   r	   r
   rg     rh   )r   r&   rB   r   r   r   ri   r   rj   r	   rf   r
   test_remainder	  s    zTestIntegerBase.test_remainderc                 C   s   |  ddd\}}}| t|| | j | || d | t||d | |d d | t|dd | |d d | |d d | tt|d d S )Nr_   r3   ra   @   r   rF   rV   )r   r&   rB   r   r   powr   r   r'   r	   r	   r
   test_simple_exponentiation  s    z*TestIntegerBase.test_simple_exponentiationc                 C   s   |  ddd\}}}| tt|||| j | t|||d | t|d|d | t||dd | t|ddd | t|ddd | t|ddd d | t|dd d	d
 | tt|dd | tt|dd | tt|dd d S )Nr   r`      rX   r   r4   r   r/   i\ iE  rN   rV   rc   )	r   r&   rB   ro   r   r   r   ri   r   r'   r	   r	   r
   test_modular_exponentiation   s    z+TestIntegerBase.test_modular_exponentiationc                 C   sF   |  d}|d | |d |  d}|dd | |d d S )Nr_   r         r4   )r   Zinplace_powr   r   r   r	   r	   r
   test_inplace_exponentiation0  s    


z+TestIntegerBase.test_inplace_exponentiationc                 C   s   |  dd  ddddd \}}}}}| t|dd  | t|d | t|d | t|d | t|dd  d S )Nr   rU   ra   r   )r   r   absrL   r	   r	   r
   test_abs9  s    &zTestIntegerBase.test_absc                 C   sb   |  ddddd \}}}}| t|j | | d | | d | | dd  d S )Nra   r   1   rR   rU   rX   2   )r   r   r   sqrtr   r,   r	   r	   r
   	test_sqrtA  s
    zTestIntegerBase.test_sqrtc                 C   s  |  t| djd |  t| djd | dddksDt| dddks\tdD ]D}td|D ]4}|d | }| ||}|||| fksntqnq`|  t| djd |  t| d	jd
 | dddkst| dddkstd S )Nr`   r   r.   r4   )r4   r_   )   rI   rq      r         %   )   +   /   5   r   r}   r_   rR   rl   )r_   rX   rs   )r   r   r   r{   AssertionErrorrange)r   piZsquareresr	   r	   r
   test_sqrt_moduleI  s    z TestIntegerBase.test_sqrt_modulec                 C   sp   |  dd\}}||7 }| |d |d7 }| |d |d7 }| |d |dd 7 }| |ddd   d S )	NrR   r)      (   r.   '   r   r    r   r   r"   r	   r	   r
   test_in_place_addd  s    z!TestIntegerBase.test_in_place_addc                 C   sd   |  dd\}}||8 }| |d |d8 }| |d |d8 }| |d |d8 }| |d	 d S )
NrR   r)   iirE   i_ iʠi`yij'  r   r"   r	   r	   r
   test_in_place_subp  s    z!TestIntegerBase.test_in_place_subc                 C   sp   |  dd\}}||9 }| |d |d9 }| |d |d9 }| |d |dd 9 }| |ddd   d S )	Nr3   r`   rt   r   r   ra   ir    r   r"   r	   r	   r
   test_in_place_mul|  s    z!TestIntegerBase.test_in_place_mulc                    sl     dd\}}||; } |d |dd ; } |d |d; } |d  fdd} t| d S )	Nr)   rX      r   r    r   c                     s     d} | d; } d S )N	   r   r   )r   r   r	   r
   t  s    
z0TestIntegerBase.test_in_place_modulus.<locals>.t)r   r   r   ri   )r   r   r   r   r	   r   r
   test_in_place_modulus  s    z%TestIntegerBase.test_in_place_modulusc                 C   s   |  ddd\}}}| t||@ | j | ||@ d | |d@ d | ||@ d | |d@ d | |d@ d | |dd d @ d d S )N   ry   0      r   r    r[   r'   r	   r	   r
   test_and  s    zTestIntegerBase.test_andc                 C   sz   |  ddd\}}}| t||B | j | ||B d | |dB d | ||B d | |dd B dd d  d S )Nrn      r      ir   r    r[   r'   r	   r	   r
   test_or  s    zTestIntegerBase.test_orc                    s   |  ddd\ }}|  d?   | t |? | j |  |? d |  d? d | t fdd |  dd	 ? d | |d? d
 | |dd	 ? d d S )Nrs   r4   r   rc   c                      s    d? S Nr.   r	   r	   rf   r	   r
   rg     rh   z2TestIntegerBase.test_right_shift.<locals>.<lambda>r   r    rF   r.   r   r   r&   rB   r   r   r   rj   r	   rf   r
   test_right_shift  s    z TestIntegerBase.test_right_shiftc                    s     ddd\}}}|dL } |d |dL } |d ||L } |d |dL } |d  fdd	} t|  fd
d} d|   fdd} d|  d S )Nrs   r4   r   r   rc   r_   rF   c                     s     d} | dL } d S N   r.   r   r   r   r	   r
   l  s    
z4TestIntegerBase.test_in_place_right_shift.<locals>.lc                     s     d} | dd L } | S Nr   r   r    r   r   r   r	   r
   m1  s    
z5TestIntegerBase.test_in_place_right_shift.<locals>.m1c                     s     d} | dd L } | S )Nr.   r   r    r   r   r   r	   r
   m2  s    
z5TestIntegerBase.test_in_place_right_shift.<locals>.m2r.   r   r   r   r   )r   r   r   r   r   r   r   r	   r   r
   test_in_place_right_shift  s    z)TestIntegerBase.test_in_place_right_shiftc                    s   |  ddd\ }}|  d>   | t |> | j |  |> d |  d> d | |d> d | t fdd | t fd	d d S )
Nrs   r4   r   r       c                      s    d> S r   r	   r	   rf   r	   r
   rg     rh   z2TestIntegerBase._test_left_shift.<locals>.<lambda>c                      s    dd > S )Nr   r    r	   r	   rf   r	   r
   rg     rh   r   rj   r	   rf   r
   _test_left_shift  s    z TestIntegerBase._test_left_shiftc                    s     ddd\}}}|dK } |d |dK } |d ||K } |d |dK } |d  fdd	} t|  fd
d} t| d S )Nrs   r4   r   r   r   rn   r   c                     s     d} | dK } d S r   r   r   r   r	   r
   r     s    
z3TestIntegerBase.test_in_place_left_shift.<locals>.lc                     s     d} | dd K } d S r   r   r   r   r	   r
   m  s    
z3TestIntegerBase.test_in_place_left_shift.<locals>.mr   )r   r   r   r   r   r   r	   r   r
   test_in_place_left_shift  s    z(TestIntegerBase.test_in_place_left_shiftc                 C   s   |  ddd\}}}| |dd | |dd | ||d | |dd | |dd | t|jd | |dd	 d | t|jd | t|jd | t|jd | t|jd
 d S )Ni  rV   r4   r   rc   r   r.   r   r    i  )r   r   Zget_bitr   r   r'   r	   r	   r
   test_get_bit  s    zTestIntegerBase.test_get_bitc                 C   s   |  ddddd\}}}}}| |  | |  | |  | |  | |  | |  | |  | |  | |  | |  d S )Nr   r_   rq   rN   i)r   r&   Zis_evenr   Zis_oddrL   r	   r	   r
   test_odd_even  s    zTestIntegerBase.test_odd_evenc                 C   sZ   |  dddd\}}}}| | d | | d | | d | t|j d S )Nr   r4   r?   r8   r   )r   r   size_in_bitsr   r   r,   r	   r	   r
   test_size_in_bits
  s
    z!TestIntegerBase.test_size_in_bitsc                 C   s   |  dddddd\}}}}}}| | d | | d | | d | | d | | d | t|j d S )	Nr   r4      i  i   r   r   r3   )r   r   Zsize_in_bytesr   r   r   r   r   r   r   r   r   r   r	   r	   r
   test_size_in_bytes  s     z"TestIntegerBase.test_size_in_bytesc                 C   s   |  | d  | | d  | | d  |  | d  |  | d  | | d  | | d  |  | d  td	d
D ]8}|  | |d d   | | |d   qd S )Nr   r   r4   r   r3   r_   i  i  rU   r    )r   r   Zis_perfect_squarer&   r   )r   xr	   r	   r
   test_perfect_square  s    z#TestIntegerBase.test_perfect_squarec                 C   sZ   |  ddd\}}}|d |d |dd  | t|jd | t|j| d S )N   ir_   rX   r   r/   )r   Zfail_if_divisible_byr   r   r'   r	   r	   r
   test_fail_if_divisible_by)  s    

z)TestIntegerBase.test_fail_if_divisible_byc                 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 S )Nr_   r3   r   rR   rs      r4   ra   r)      r      )r   Zmultiply_accumulater   r'   r	   r	   r
   test_multiply_accumulate5  s    z(TestIntegerBase.test_multiply_accumulatec                 C   st   |  dd\}}|| | |d |d | |d |d | |d |dd  | |dd  d S )Nr3   r   r   ra   r   r    )r   setr   r"   r	   r	   r
   test_setF  s    


zTestIntegerBase.test_setc                 C   s   |  dddddd\}}}}}}| t||| j | ||d | |dd | |dd | |dd	 | |d
d | t|jd | t|jd | t|jd | t|jd d S )Nr   r`   rV   r   i ii  r3   iiKS~i&  i  rR   )	r   r&   rB   Zinverser   r   r   r   ri   r   r	   r	   r
   test_inverseQ  s     zTestIntegerBase.test_inversec                 C   s*   |  dd\}}|| | |d d S )Nr   r`   r3   )r   Zinplace_inverser   r"   r	   r	   r
   test_inplace_inverse`  s    
z$TestIntegerBase.test_inplace_inversec                 C   s   |  dddd\}}}}| t||| j | ||d | |dd | ||d | |dd | |dd d S )Nr   rR   rq   ra   r   r4   )r   r&   rB   gcdr   r   r,   r	   r	   r
   test_gcdf  s    zTestIntegerBase.test_gcdc                 C   s   |  ddddd\}}}}}| t||| j | ||d | |dd | ||d | |dd | |dd | |dd | |dd d S )Nr   rR   rq   ra   r   r   f   )r   r&   rB   Zlcmr   r   rL   r	   r	   r
   test_lcmo  s    zTestIntegerBase.test_lcmc              	   C   sF  d}| j j}tddD ]}| ||dd qtdddD ]}| |d|d q:| t|dd | t|dd | t|dd | t|dd | t|dd | t|dd	 | t|dd | t|dd
 |D ]j}| ||d |d |d  | ||  |d |d |d  | ||d |  |d |d  qd S )N))r   r4   r4   )r~   -   r4   )rc      r.   )r`   r   r4   )ib  i  r.   )r   i&  r.   )r`   l   -& r.   r4   r   r   r   ra   r.   r   r_   rc   )r   jacobi_symbolr   r   r   r   )r   datajskntvr	   r	   r
   test_jacobi_symbolz  s$    
$z"TestIntegerBase.test_jacobi_symbolc              ,   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gf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/d0d1d2d3d4dgfd5dd6d!ddd7d8d9d%d:d'd(d)d;d<ddd=d>dddd?d@ddd2dAd4dBgfdCdd6dddDddd9d
dd'ddd*dddEdddFddd?ddd1ddd4dgfdGdddHddDd7d$d	d%d:dIdJd)d*d<ddd+d>dFdKdLd?d@dd1dMd3ddNgfdOdddHddd7d$d	d%dddJdPd*dQddEd+d>ddKdd?d@ddRdMd3d4dBgfdSdd6ddd"dd$d9d
d&ddd)ddddEddd,dd.d?dd0ddd3ddgfdTdd6d!ddd7d$d9d%d:dd(ddd<ddUd=ddd-d.dd@dd1d2d3ddBgfdVddd!ddDd#dd	d%d:d'd(d)ddQddEd+dWdFdKd.d?d/dd1d2dddBgfdXdddddDdd8d	d
d:ddd)d;dddEdd>dFdddddd1ddAddgfdYdd6dHddd#d$d9d%d:ddJdddQddd=d>ddKd.dZd/dd1dMd3d4dNgfd[dd6dHdd"d#dd9d%d&d'dJdd*dddEd=dd,d-dd?d/d0d1dMdd4dgf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gfd]ddd!ddDd#dd	d%d:dd(dddQddd+d>dFdKdd?d/ddd2dd^dBgfg}| j j}|D ],\}}|D ]\}}| |||| qqd S )_Nr3   )r4   r4   )r   r.   )r3   r   )r_   r4   )r`   r.   )r   r   )rX   r4   )rc   r.   )r   r   )rR   r4   )r}   r.   )r   r   )rI   r4   )rJ   r.   )rt   r   )rs   r4   )rq   r.   )r   r   )r~   r4   )r)   r.   )r   r   )r   r4   )r   r.   )r$   r   )   r4   )   r.   )   r   )   r4   )r   r.   )r   r   r`   )r3   r.   )r`   r   )r   r4   )rX   r.   )r   r4   )rR   r   )r}   r4   )r   r.   )rI   r.   )rJ   r4   )r   r.   )r)   r   )r   r4   )r   r.   )r$   r4   )r   r   )r   r4   )r   r.   )r   r.   )r   r4   rX   )r   r4   )r   r.   )rX   r   )rc   r4   )rR   r.   )rJ   r   )rt   r4   )r   r4   )r~   r.   )r   r4   )r$   r.   )r   r   )r   r4   r   )r`   r4   )rq   r4   )r)   r4   r}   )r3   r4   )r}   r   )r   r4   )r   r.   )r   r   )r   r4   )r   r.   rI   )rI   r   )rt   r.   )r   r   rt   rq   )rq   r   r~   )r~   r   r   r   )r   r   r   r   r   )r   r   )r   r   r   )r   r   r   r   Zkjr   jr	   r	   r
   test_jacobi_symbol_wikipedia  s&    BBBBBBBBBBBBBBz,TestIntegerBase.test_jacobi_symbol_wikipediac                 C   s    |  d\}| t|d d S )Nrs   Z0x10)r   r   hexru   r	   r	   r
   test_hex  s    zTestIntegerBase.test_hexc                 C   s   | j j}|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 | t|ddd | t|ddd d S )Nr_   r`   r~      r   ir   r$   r   i   r4   rI   rU   rq   s@   (ynpqB,f)Z*r}q:'z8%	[CUE2:r   r.   )r   Z_mult_modulo_bytesr   r   ri   r   )r   Zmodmultr   modulust1t2expectr	   r	   r
   test_mult_modulo_bytes  s&    z&TestIntegerBase.test_mult_modulo_bytesN)8__name__
__module____qualname__r   r   r   r#   r(   r-   r1   r<   rC   rG   rM   rO   rP   rQ   rT   rW   r\   r^   rb   rk   rm   rp   rr   rv   rx   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   r   .   sj   !
	

			

		#r   c                   @   s   e Zd Zdd ZdS )TestIntegerIntc                 C   s
   t | _d S r   )r   r   r   r	   r	   r
   r     s    zTestIntegerInt.setUpNr   r   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	S )
testIntegerRandomc                 C   s~   t dD ],}tjdd}| |dk  | |dk qt ddD ]8}tj|d}| |d|d	  k  | |d| k q@d S )
Nr    rc   )
exact_bits   r?   rK     r   r4   )r   r   randomr   )r   _a
bits_valuer	   r	   r
   test_random_exact_bits  s    z(testIntegerRandom.test_random_exact_bitsc                 C   st   d}t dD ]*}tjdd}|p&|dk }| |dk q| | t ddD ]"}tj|d}| |d	| k qLd S )
NFr    rc   )Zmax_bitsr   r?   rK   r   r   )r   r   r   r   r&   )r   flagr   r   r   r	   r	   r
   test_random_max_bits  s    
z&testIntegerRandom.test_random_max_bitsc                 C   s6   G dd dt }| }tjd|d}| |jd d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z@testIntegerRandom.test_random_bits_custom_rng.<locals>.CustomRNGc                 S   s
   d| _ d S re   )counterr   r	   r	   r
   __init__  s    zItestIntegerRandom.test_random_bits_custom_rng.<locals>.CustomRNG.__init__c                 S   s   |  j |7  _ td| S re   )r   Zbchr)r   sizer	   r	   r
   __call__  s    zItestIntegerRandom.test_random_bits_custom_rng.<locals>.CustomRNG.__call__N)r   r   r   r   r   r	   r	   r	   r
   	CustomRNG  s   r   r   )r   Zrandfuncr_   )objectr   r   r   r   )r   r   Z
custom_rngr   r	   r	   r
   test_random_bits_custom_rng  s    z-testIntegerRandom.test_random_bits_custom_rngc                 C   s   t j}tdD ].}|ddd}| d|  ko4dkn   qtdD ].}|ddd}| d|  koldk n   qF| jt|dddd | jt|ddd	 d S )
N   r4   rt   )min_inclusivemax_inclusive)r   max_exclusiver   r3   )r   r   r   )r   r   )r   Zrandom_ranger   r&   r   r   )r   funcr   r   r	   r	   r
   test_random_range  s      z#testIntegerRandom.test_random_rangeN)r   r   r   r   r   r   r   r	   r	   r	   r
   r     s   r   c              
      s  g }|t t7 }z0ddlm G fdddt}|t |7 }W nR ttfk
r } z0tjdkrntj	
d ntj	
dt|  W 5 d }~X Y nX z0ddlm  G  fd	d
d
t}|t |7 }W n: ttfk
r } ztj	
dt|  W 5 d }~X Y nX |t t7 }|S )Nr   
IntegerGMPc                       s   e Zd Z fddZdS )z!get_tests.<locals>.TestIntegerGMPc                    s
    | _ d S r   r   r   r   r	   r
   r     s    z'get_tests.<locals>.TestIntegerGMP.setUpNr   r	   r   r	   r
   TestIntegerGMP  s   r   win32zSkipping GMP tests on Windows
zSkipping GMP tests (%s)
IntegerCustomc                       s   e Zd Z fddZdS )z*get_tests.<locals>.TestIntegerCustomModexpc                    s
    | _ d S r   r   r   r  r	   r
   r   -  s    z0get_tests.<locals>.TestIntegerCustomModexp.setUpNr   r	   r  r	   r
   TestIntegerCustomModexp,  s   r  z"Skipping custom modexp tests (%s)
)r   r   ZCryptodome.Math._IntegerGMPr   r   ImportErrorOSErrorsysplatformstdoutwriter+   ZCryptodome.Math._IntegerCustomr  r   )configtestsr   er  r	   )r  r   r
   	get_tests  s$    
&&r  __main__c                   C   s   t t S r   )unittestZ	TestSuiter  r	   r	   r	   r
   rg   8  rh   rg   suite)ZdefaultTest)__doc__r  r  ZCryptodome.SelfTest.st_commonr   ZCryptodome.Util.py3compatZCryptodome.Math._IntegerNativer   ZTestCaser   r   r   r  r   r  mainr	   r	   r	   r
   <module>"   s"        /9 