U
    ¾śgb!  ć                   @   s    d Z ddlZddlZddlT ddlmZ ddlmZ ddlm	Z	 G dd de
ZG d	d
 d
ejZG dd dejZi fddZedkrdd Zejdd dS )z/Self-tests for (some of) Cryptodome.Util.numberé    N)Ś*)Ślist_test_cases)Śnumber)Ślong_to_bytesc                   @   s   e Zd ZdZdS )ŚMyErrorzDummy exception used for testsN)Ś__name__Ś
__module__Ś__qualname__Ś__doc__© r   r   śH/tmp/pip-unpacked-wheel-_q8s9isk/Cryptodome/SelfTest/Util/test_number.pyr   %   s   r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )Ś	MiscTestsc                 C   sj  |   ttjdd” |   ttjdd” |   ttj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 dd”” |  dt d	d”” |  dt d
d”” |  dt dd”” |  dt dd”” dS )zUtil.number.ceil_divŚ1é   r   é’’’’é   é   é   é   é   é   é   é	   N)ŚassertRaisesŚ	TypeErrorr   Zceil_divŚZeroDivisionErrorŚassertEqual©Śselfr   r   r   Śtest_ceil_div-   s>    zMiscTests.test_ceil_divc                 C   sĘ   |   ttjd” |   ttjd” |   ttjd” d}tdD ]:}t |”}|  |d|d > kd” |  |d|> k d” q<d}t |”}|  |d d” |  |d|d > kd” |  |d|> k d” dS )	zUtil.number.getPrimei’’’r   r   r   éd   é   r   N)r   Ś
ValueErrorr   ZgetPrimeŚranger   ŚassertNotEqual)r   ŚbitsŚiŚxr   r   r   Śtest_getPrimeW   s    

zMiscTests.test_getPrimec                 C   sF  |   ttjd” |   ttjd” d}t |”}|  |d d” |  |d|d > d kd” |  |d|> k d” d}t ||”}|  t |d |”d” |  |d d” |  |d|d > d kd” |  |d|> k d” d}t ||”}|  t |d d? |”d” |  |d d” |  |d|d > d kd” |  |d|> k d” d	S )
zUtil.number.getStrongPrimeé   i  r!   r   r   r   i  i  N)r   r"   r   ZgetStrongPrimer$   r   ZGCD)r   r%   r'   Śer   r   r   Śtest_getStrongPrimei   s&    
zMiscTests.test_getStrongPrimec                 C   sĘ   |   t d”d” |   t d”d” |   t d”d” |   t d”d” |   t d”d” |   t d”d” |   t dd	 d ”d” |   t dd	 d  ”d” d
D ]}|   t t|”d” q¦dS )zUtil.number.isPrimeéż’’’Féž’’’r   r   Tr   r   i’  )i iį§ idĮl   u^¾ß l   ³+%!al   MnŌz¾]l   g4Š+ l   I>6l   S{AKWl   ĆbŹ\\QN l   ćzIlv3 l   _VB;.( N)r   r   ZisPrimeŚint)r   Z	compositer   r   r   Śtest_isPrime   s    zMiscTests.test_isPrimec                 C   sn   |   t d”d” |   t d”d” |   t d”d” |   t d”d” |   t d”d” |  ttjd	” d S )
Nr   r   é¢   r   i@ŗ¢ é   lE   „)żļ8^n, ¾“n:zb“|DELU"źN79YĮ ŖS¾h"¶*f8<>k®tkĀ26"z ¼BT6ū	ķV“ ĻRNccĖ\Ä¢Õ]š]rX"Sw~oŻ Ė8I(jęO3½2ĒøŅ
 i   r   )r   r   Śsizer   r"   r   r   r   r   Ś	test_size   s    zMiscTests.test_sizeN)r   r   r	   r   r(   r+   r/   r3   r   r   r   r   r   +   s
   *r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Ś	LongTestsc                 C   st   |   tdd” |   tdd” |   tdd” |   tdd” |   tdd” |   td	d
” |   tdd” d S )Nr   ó    r   ó   r)   ó    l       üs   ’    l   wĢ*M	 s   "3DUfwl   ļLUs	   "3DUfw©r   r   r   r   r   r   Śtest1   s    zLongTests.test1c                 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” d S )Nr   r   r5   r   s     r   s     i’’  s   ’’i   s      r)   r7   l      ür   s    ’   r   s      ’   é
   s
        ’   é   s         ’   r8   r   r   r   r   Śtest2¦   s    zLongTests.test2c                 C   s   |   ttd” d S )Nr   )r   r"   r   r   r   r   r   Ś	test_err1²   s    zLongTests.test_err1N)r   r   r	   r9   r<   r=   r   r   r   r   r4      s   	r4   c                 C   s    g }|t t7 }|t t7 }|S ©N)r   r   r4   )ŚconfigŚtestsr   r   r   Ś	get_tests¶   s    rA   Ś__main__c                   C   s   t  t ”S r>   )ŚunittestZ	TestSuiterA   r   r   r   r   Ś<lambda>½   ó    rD   Śsuite)ZdefaultTest)r
   ŚmathrC   ZCryptodome.Util.py3compatZCryptodome.SelfTest.st_commonr   ZCryptodome.Utilr   ZCryptodome.Util.numberr   Ś	Exceptionr   ZTestCaser   r4   rA   r   rF   Śmainr   r   r   r   Ś<module>   s   p