U
    g%                     @   s   d Z ddlZddlmZ ddlT ddlmZ ddlmZm	Z	m
Z
mZmZmZm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)*)Integer)PROBABLY_PRIME	COMPOSITEmiller_rabin_test
lucas_testtest_probable_primegenerate_probable_primegenerate_probable_safe_primec                   @   s   e Zd Zddddddddd	d
dd d dfZddddddddddddddddd d  dfZdd Zd d! Zd"d# Zd$d% Zd&d' Z	d(d) Z
d*S )+TestPrimality                                 lE   q)8(WRv#%a9AMo-*7wg;02wQX@CkEf
<_fufqsQ$c;Q|n ?|TA)ynE'd.(6W-+O`'2_6$_ot`G<
8P r            	   
                           i C   l   I1t#c                 C   sP   | j D ]}| t|dt q| jD ]}| t|dt q$| ttdd d S )Nr   )primesassertEqualr   r   
compositesr   assertRaises
ValueError)selfprime	composite r/   K/tmp/pip-unpacked-wheel-_q8s9isk/Cryptodome/SelfTest/Math/test_Primality.pytest_miller_rabin9   s
    

zTestPrimality.test_miller_rabinc                 C   sR   | j D ]}t|}| |t q| jD ]}t|}| |t q&| ttd d S )Nr&   )r'   r   r(   r   r)   r   r*   r+   )r,   r-   resr.   r/   r/   r0   
test_lucas@   s    

zTestPrimality.test_lucasc                 C   s   ddddd d f}|D ]}|  t|t qd}|D ]}|  t|t q6dd	lm} |d d
 D ]}t|}|  |t qdd S )Nl	    l   W3>Lk{T@l   q4}2zn1dY/`93yr   i	  r   )l   vK
+.QF:yUc,$tcq l   !3eYlmkE	r?-_Ve+l   t#gXvnG;.%yfu&1#93Y2:k r   )
sieve_based   )r(   r	   r   r   ZCryptodome.Util.numberr4   )r,   r'   pZ
not_primesnpr4   r2   r/   r/   r0   test_is_primeI   s    
zTestPrimality.test_is_primec                 C   s   t dd}| | d d S )Ni   
exact_bits)r
   r(   size_in_bitsr,   r6   r/   r/   r0   test_generate_prime_bit_size^   s    
z*TestPrimality.test_generate_prime_bit_sizec                 C   s6   dd }t dD ] }td|d}| |d d qd S )Nc                 S   s   | d dkS )Nr   r   r/   )numberr/   r/   r0   ending_with_onec   s    zATestPrimality.test_generate_prime_filter.<locals>.ending_with_oner"      )r:   Zprime_filterr   r   )ranger
   r(   )r,   r?   xqr/   r/   r0   test_generate_prime_filterb   s    z(TestPrimality.test_generate_prime_filterc                 C   s   t dd}| | d d S )Nr$   r9   )r   r(   r;   r<   r/   r/   r0   test_generate_safe_primek   s    
z&TestPrimality.test_generate_safe_primeN)__name__
__module____qualname__r'   r)   r1   r3   r8   r=   rD   rE   r/   r/   r/   r0   r   4   s   $0		r   c                 C   s   g }|t t7 }|S N)r   r   )configtestsr/   r/   r0   	get_testso   s    rL   __main__c                   C   s   t t S rI   )unittestZ	TestSuiterL   r/   r/   r/   r0   <lambda>u       rO   suite)ZdefaultTest)__doc__rN   ZCryptodome.SelfTest.st_commonr   ZCryptodome.Util.py3compatZCryptodome.Math.Numbersr   ZCryptodome.Math.Primalityr   r   r   r   r	   r
   r   ZTestCaser   rL   rF   rQ   mainr/   r/   r/   r0   <module>"   s   $	;