o
    ey                     @   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rJdd Zejdd dS 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)NzTo be implemented)NotImplementedErrorself r	   G/usr/lib/python3/dist-packages/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v6v7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"   200z-20.  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 |d}| t|j d S )	Nr   r      ÿÿu    ÿÿ      )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   sh   | j }|td}| t|| | d| |td}| d| |td}| d| d S )N r   z  r7   r   )r   
from_bytesr;   r(   
isinstancer   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   r0   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      rE      r'   r   r   r   r   r   r   r	   r	   r
   test_less_than      zTestIntegerBase.test_less_thanc                 C   s   |  ddddd\}}}}}| ||k | |dk | ||k | |dk | ||k | ||k | ||k | ||k d S )NrH   rI   rJ   r'   rK   r	   r	   r
   test_less_than_or_equal   rM   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 rG   r'   rK   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 )NrH   rI   rN   r'   r0   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   rJ   )r   r   boolr(   r0   r	   r	   r
   	test_bool   s   


zTestIntegerBase.test_boolc                 C   sb   |  dd  ddddd \}}}}}| |  | |  | |  | |  d S )Nr8   d   r   )r   r(   is_negativer   rK   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   rD   a   r   rJ   i  r   r(   rA   r   r   r)   r	   r	   r
   test_addition      zTestIntegerBase.test_additionc                 C   s~   |  ddd\}}}| t|| | j | || d | |d d | || d | |d d | |d d d S )	NrY   rD   rZ   S   r[   rI   rJ   ir\   r)   r	   r	   r
   test_subtraction   r^   z TestIntegerBase.test_subtractionc                 C   sr   |  dddd\}}}}| t|| | j | || d | |d d | |d d | |d d d S )N      rJ   r+   rE   i   r\   r0   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 )	Nr8      r!   r3   rV   O   c                      s    d S Nr   r	   r	   r   r	   r
   <lambda>       z0TestIntegerBase.test_floor_div.<locals>.<lambda>)r   r(   rA   r   r   r   ZeroDivisionErrorr   r   r   r	   rh   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   rb   rN   r8   r9   rJ   c                          d S rg   r	   r	   rh   r	   r
   ri     rj   z0TestIntegerBase.test_remainder.<locals>.<lambda>c                      rn   )Nr	   r	   rh   r	   r
   ri     rj   )r   r(   rA   r   r   r   rk   r   rl   r	   rh   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 )Nra   r8   rc   @   r!   rE   rV   )r   r(   rA   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   rb      rY   r   r9   r!   r3   i\ iE  rN   rV   re   )	r   r(   rA   rr   r   r   r   rk   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 )Nra   r!         r9   )r   inplace_powr   r   r   r	   r	   r
   test_inplace_exponentiation!  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   rc   r   )r   r   absrK   r	   r	   r
   test_abs*  s   &zTestIntegerBase.test_absc                 C   sb   |  ddddd \}}}}| t|j | | d | | d | | dd  d S )Nrc   r   1   rR   rU   rY   2   )r   r   r   sqrtr   r0   r	   r	   r
   	test_sqrt2  s
   zTestIntegerBase.test_sqrtc                 C   s  |  t| djd |  t| djd | dddks"J | dddv s.J dD ]"}td|D ]}|d | }| ||}|||| fv sQJ q7q0|  t| djd |  t| d	jd
 | dddv suJ | dddv sJ d S )Nrb   r   r2   r9   )r9   ra   )   rH   rt      r         %   )   +   /   5   r!   r   ra   rR   ro   )ra   rY   rv   )r   r   r   r   range)r   pisquareresr	   r	   r
   test_sqrt_module:  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+      (   r2   '   r!   r"   r   r   r$   r	   r	   r
   test_in_place_addU     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+   iirD   i_ iʠi`yij'  r   r$   r	   r	   r
   test_in_place_suba  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 )	Nr8   rb   rw   r!   r   rc   ir"   r   r$   r	   r	   r
   test_in_place_mulm  r   z!TestIntegerBase.test_in_place_mulc                    sl     dd\}}||; } |d |dd ; } |d |d; } |d  fdd} t| d S )	Nr+   rY      r!   r"   r   c                     s     d} | d; } d S )N	   r   r   )r   r   r	   r
   t     
z0TestIntegerBase.test_in_place_modulus.<locals>.t)r   r   r   rk   )r   r   r   r   r	   r   r
   test_in_place_modulusy  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   r}   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 )Nrq      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 )Nrv   r9   r   re   c                      s    d? S Nr2   r	   r	   rh   r	   r
   ri     rj   z2TestIntegerBase.test_right_shift.<locals>.<lambda>r!   r"   rE   r2   r   r   r(   rA   r   r   r   rl   r	   rh   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 )Nrv   r9   r   r   re   ra   rE   c                     s     d} | dL } d S N   r2   r   r   r   r	   r
   l  r   z4TestIntegerBase.test_in_place_right_shift.<locals>.lc                          d} | dd L } | S Nr   r!   r"   r   r   r   r	   r
   m1     
z5TestIntegerBase.test_in_place_right_shift.<locals>.m1c                     r   )Nr2   r!   r"   r   r   r   r	   r
   m2  r   z5TestIntegerBase.test_in_place_right_shift.<locals>.m2r2   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 )
Nrv   r9   r   r       c                      s    d> S r   r	   r	   rh   r	   r
   ri     rj   z2TestIntegerBase._test_left_shift.<locals>.<lambda>c                      s    dd > S )Nr!   r"   r	   r	   rh   r	   r
   ri         r   rl   r	   rh   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 )Nrv   r9   r   r   r   rq   r   c                     s     d} | dK } d S r   r   r   r   r	   r
   r     r   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   r9   r   re   r   r2   r!   r"   i  )r   r   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   ra   rt   rN   i)r   r(   is_evenr   is_oddrK   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   r9      r:   r   )r   r   size_in_bitsr   r   r0   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   r9      i  i   r   r!   r8   )r   r   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 ]}|  | |d d   | | |d   qUd S )Nr   r   r9   r!   r8   ra   i  i  rU   r"   )r   r   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   ira   rY   r!   r3   )r   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 )Nra   r8   r!   rR   rv      r9   rc   r+      r"     )r   multiply_accumulater   r)   r	   r	   r
   test_multiply_accumulate&  s   z(TestIntegerBase.test_multiply_accumulatec                 C   st   |  dd\}}|| | |d |d | |d |d | |d |dd  | |dd  d S )Nr8   r   r   rc   r!   r"   )r   setr   r$   r	   r	   r
   test_set7  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!   rb   rV   r   i ii  r8   iiKS~i&  i  rR   )	r   r(   rA   inverser   r   r   r   rk   r   r	   r	   r
   test_inverseB  s    zTestIntegerBase.test_inversec                 C   s*   |  dd\}}|| | |d d S )Nr!   rb   r8   )r   inplace_inverser   r$   r	   r	   r
   test_inplace_inverseQ  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   rt   rc   r!   r9   )r   r(   rA   gcdr   r   r0   r	   r	   r
   test_gcdW  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   rt   rc   r   r   f   )r   r(   rA   lcmr   r   rK   r	   r	   r
   test_lcm`  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 ]5}| ||d |d |d  | ||  |d |d |d  | ||d |  |d |d  qkd S )N))r   r9   r9   )r   -   r9   )re      r2   )rb   r   r9   )ib  i  r2   )r   i&  r2   )rb   l   -& r2   r9   r   r!   r   rc   r2   r   ra   re   )r   jacobi_symbolr   r   r   r   )r   datajskntvr	   r	   r
   test_jacobi_symbolk  s&   
$&z"TestIntegerBase.test_jacobi_symbolc                 C   s   dg dfdg dfdg dfdg dfd	g d
fdg dfdg dfdg dfdg dfdg dfdg dfdg dfdg dfdg dfg}| j j}|D ]\}}|D ]\}}| |||| qTqNd S )Nr8   )r9   r9   r!   r2   r8   r   ra   r9   rb   r2   r   r   rY   r9   re   r2   r   r   rR   r9   r   r2   r   r   rH   r9   rI   r2   rw   r   rv   r9   rt   r2   r   r   r   r9   r+   r2   r   r   r   r9   r   r2   r&   r      r9      r2      r      r9   r   r2   r   r   rb   )r   r   r8   r2   r   rb   r   r   r9   rY   r2   r   r   r9   rR   r   r   r9   r   r2   rH   r2   rI   r9   r   r   r   r   r2   r   r+   r   r   r9   r   r2   r   r&   r9   r   r   r  r9   r  r2   r  r2   r   r9   r  rY   )r   r!   r9   r  r   r   r   r2   rY   r   re   r9   r  rR   r2   r  r  r  rI   r   rw   r9   r   r   r   r9   r   r2   r   r   r   r   r9   r&   r2   r   r   r  r  r   r  r   r9   r   )r   r  r   r   rb   r9   r   r   r  r   r   r  r   r   r  r   r   rt   r9   r   r   r+   r9   r   r   r%  r   r   r  r  r  r  r  r   )r   r   r8   r9   r   r)  r  r  r   r  r   )r   r   r   r9   r  r  r"  r   r   r  r$  r+  r   r2   )r   r   r%  r&  r   r  r  r9   r  r  r   r2   rH   )r   r   r,  r   r   r  r  r   r  r   r   r-  )rH   r   r  rw   r2   r   r*  r  r$  r   r.  r   r%  r&  r   )r  r   r/  r  r  r(  rw   )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  rt   )r   r  r  r   r   r  r  r  r  r   r   r  r   r   r"  r   )rt   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   r1  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   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   r1  r   r   r#  r$  r   r.  r  )r   r   r  r   r  r/  r  r  r0  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   )r   r   r  r   r)  r
  r   r   r  r   r   r  r   r   r1  r   r   r  r$  r+  r.  r   r%  r  r   r   r  r  )r   r   r(  )r   r   r   )r   r   r   r   kjr   jr	   r	   r
   test_jacobi_symbol_wikipedia  s*   













z,TestIntegerBase.test_jacobi_symbol_wikipediac                 C   s    |  d\}| t|d d S )Nrv   0x10)r   r   hexry   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 )Nra   rb   r      r   ir   r&   r!   i   r9   rH   rU   rt   s@   (ynpqB,f)Z*r}q:'z8%	[CUE2:r   r2   )r   _mult_modulo_bytesr   r   rk   r   )r   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*   r1   r5   r>   rB   rF   rL   rO   rP   rQ   rT   rX   r]   r`   rd   rm   rp   rs   ru   rz   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   r4  r7  r?  r	   r	   r	   r
   r   .   sl    !
	

			

		#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        
zTestIntegerInt.setUpNr@  rA  rB  r   r	   r	   r	   r
   rC    s    rC  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 ]}tj|d}| |d|d	  k  | |d| k q d S )
Nr"   re   )
exact_bits   r   rJ     r!   r9   )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 q&d S )
NFr"   re   )max_bitsrH  r   rJ   rI  r!   )r   r   rJ  r   r(   )r   flagrK  rL  rM  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 rg   )counterr   r	   r	   r
   __init__  rD  zItestIntegerRandom.test_random_bits_custom_rng.<locals>.CustomRNG.__init__c                 S   s   |  j |7  _ td| S rg   )rR  bchr)r   sizer	   r	   r
   __call__  s   zItestIntegerRandom.test_random_bits_custom_rng.<locals>.CustomRNG.__call__N)r@  rA  rB  rS  rV  r	   r	   r	   r
   	CustomRNG  s    rW  r   )rG  randfuncra   )objectr   rJ  r   rR  )r   rW  
custom_rngrL  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odkn   qtdD ]}|ddd}| d|  ko6dk n   q#| jt|dddd | jt|ddd	 d S )
N   r9   rw   )min_inclusivemax_inclusive)r]  max_exclusiver!   r8   )r]  r^  r_  )r^  r_  )r   random_ranger   r(   r   r   )r   funcr   rL  r	   r	   r
   test_random_range  s     z#testIntegerRandom.test_random_rangeN)r@  rA  rB  rN  rQ  r[  rb  r	   r	   r	   r
   rF    s
    rF  c              
      s  g }|t t7 }zddlm G fdddt}|t |7 }W n* ttfyJ } ztjdkr6tj	
d n
tj	
dt|  W Y d }~nd }~ww zddlm  G  fd	d
d
t}|t |7 }W n ttfy } ztj	
dt|  W Y d }~nd }~ww |t t7 }|S )Nr   
IntegerGMPc                          e Zd Z fddZdS )z!get_tests.<locals>.TestIntegerGMPc                    
    | _ d S r   r   r   rc  r	   r
   r     rD  z'get_tests.<locals>.TestIntegerGMP.setUpNrE  r	   rc  r	   r
   TestIntegerGMP      rg  win32zSkipping GMP tests on Windows
zSkipping GMP tests (%s)
IntegerCustomc                       re  )z*get_tests.<locals>.TestIntegerCustomModexpc                    rf  r   r   r   rj  r	   r
   r     rD  z0get_tests.<locals>.TestIntegerCustomModexp.setUpNrE  r	   rj  r	   r
   TestIntegerCustomModexp  rh  rl  z"Skipping custom modexp tests (%s)
)r   rC  Cryptodome.Math._IntegerGMPrd  r   ImportErrorOSErrorsysplatformstdoutwriter/   Cryptodome.Math._IntegerCustomrk  rF  )configtestsrg  erl  r	   )rk  rd  r
   	get_tests  s,   
 rx  __main__c                   C   s   t t S r   )unittest	TestSuiterx  r	   r	   r	   r
   ri   )  r   ri   suite)defaultTest)__doc__rp  rz  Cryptodome.SelfTest.st_commonr   Cryptodome.Util.py3compatCryptodome.Math._IntegerNativer   TestCaser   rC  rF  rx  r@  r|  mainr	   r	   r	   r
   <module>   s&   !      9 