ó
BwLc           @   ss   d  Z  d Z d d l Td d l Z d e j f d     YZ i  d  Z e d k ro d	   Z e j	 d
 d  n  d S(   s+   Self-tests for (some of) Crypto.Util.numbers   $Id$i˙˙˙˙(   t   *Nt	   MiscTestsc           B   sP   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 RS(   c         C   s    d d l  m a d d  l a d  S(   Ni˙˙˙˙(   t   number(   t   Crypto.UtilR   t   math(   t   self(    (    sD   /usr/lib/python2.7/dist-packages/Crypto/SelfTest/Util/test_number.pyt   setUp%   s    c         C   s˝  |  j  t t j d d  |  j  t t j d d  |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d	 d   |  j d t j d
 d   |  j d t j d d   xt d d d  D]x} |  j d t j d |   d } xM| d | d k r´t | d d |  \ } } | t |  } |  j | d | | f | d | t j | d |  f  t | d |  \ } } | t |  } |  j | | | f | | t j | |  f  t | d d |  \ } } | t |  } |  j | d | | f | d | t j | d |  f  | d 9} qhWq=Wd S(   s   Util.number.ceil_shifti˙˙˙˙i   i    i   i   i   i   i   i   i   i	   i   l    l    Ni   (   t   assertRaisest   AssertionErrorR   t
   ceil_shiftt   assertEqualt   ranget   divmodt   int(   R   t   bt   nt   qt   rt   expected(    (    sD   /usr/lib/python2.7/dist-packages/Crypto/SelfTest/Util/test_number.pyt   test_ceil_shift*   sJ    $$c         C   să  |  j  t t j d d  |  j  t t j d d  |  j  t t j d d  |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d	 d   |  j d t j d
 d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d	 d   |  j d t j d
 d   |  j d t j d d   |  j d t j d d   |  j d t j d d	   |  j d t j d d	   |  j d t j d d	   |  j d t j d d	   |  j d t j d	 d	   |  j d t j d
 d	   |  j d t j d d	   |  j d t j d d	   |  j d t j d d	   |  j d t j d d	   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d	 d   |  j d t j d
 d   |  j d t j d d   |  j d t j d d   |  j d t j d d   |  j d t j d d   d S(   s   Util.number.ceil_divt   1i   i    i˙˙˙˙iţ˙˙˙i   iý˙˙˙i   i   i   i   i   i   i	   i÷˙˙˙iü˙˙˙iř˙˙˙iů˙˙˙iú˙˙˙iű˙˙˙N(   R   t	   TypeErrorR   t   ceil_divt   ZeroDivisionErrorR
   (   R   (    (    sD   /usr/lib/python2.7/dist-packages/Crypto/SelfTest/Util/test_number.pyt   test_ceil_div]   sl    c         C   sá  |  j  t t j d  |  j  t t j d  |  j  t t j d  |  j d t j d   |  j d t j d   |  j  t t j d  |  j d t j d   |  j  t t j d  |  j  t t j d	  |  j  t t j d
  d } d } xs | d k  rf| d | k rC|  j | t j |  d | | f  | d 7} n |  j  t t j |  | d 7} qô Wxs t d d d  D]_ } |  j  t t j d | d  |  j | t j d |   |  j  t t j d | d  qzWd S(   s   Util.number.exact_log2t   0i˙˙˙˙i    i   i   i   i   i   i   i   i   i   s   expected=2**%d, n=%di@   l    NiA   (   R   R   R   t
   exact_log2t
   ValueErrorR
   R   (   R   t   eR   (    (    sD   /usr/lib/python2.7/dist-packages/Crypto/SelfTest/Util/test_number.pyt   test_exact_log2˘   s,    &c         C   sž  |  j  d t j d d   |  j t t j d d  |  j  d t j d d   |  j t t j d d  |  j  d t j d d   |  j  d t j d d   |  j  d t j d d   |  j t t j d d  |  j  d t j d d   |  j  d t j d d   |  j  d t j d d   |  j  d t j d d   |  j t t j d d  |  j t t j d d  |  j  d t j d d d	 t  |  j t t j d d d	 t d
 S(   s   Util.number.exact_divi   i   i   i   i˙˙˙˙iţ˙˙˙iü˙˙˙i    t   allow_divzeroN(   R
   R   t	   exact_divR   R   R   t   True(   R   (    (    sD   /usr/lib/python2.7/dist-packages/Crypto/SelfTest/Util/test_number.pyt   test_exact_div˝   s     "c      	   C   sŔ   |  j  t t j d d  x  t d d  D] } x t d d  D]u } | d k rm |  j  t t j | |  q? |  j | | t t j	 t
 |  |   f | | t j | |  f  q? Wq) Wd S(   s   Util.number.floor_divR   i   iö˙˙˙i
   i    N(   R   R   R   t	   floor_divR   R   R
   R   R   t   floort   float(   R   t   aR   (    (    sD   /usr/lib/python2.7/dist-packages/Crypto/SelfTest/Util/test_number.pyt   test_floor_divÚ   s    +c         C   sŠ  |  j  t t j d  |  j  t t j d  d } t j |  } |  j | d d  |  j | d | d >d k d  |  j | d | >k  d  d } t j | |  } |  j t j | d |  d  |  j | d d  |  j | d | d >d k d  |  j | d | >k  d  d } t j | |  } |  j t j | d d ?|  d  |  j | d d  |  j | d | d >d k d  |  j | d | >k  d  d	 S(   s   Util.number.getStrongPrimei   i  i   i   i    l    i   i   Ni   i  i   i  (   R   R   R   t   getStrongPrimet   assertNotEqualR
   t   GCD(   R   t   bitst   xR   (    (    sD   /usr/lib/python2.7/dist-packages/Crypto/SelfTest/Util/test_number.pyt   test_getStrongPrimeĺ   s&    " "$"c         C   sź   |  j  t j d  t  |  j  t j d  t  |  j  t j d  t  |  j  t j d"  t  xQ d$ d& d' d( d) d* d+ d, d- d. d/ d0 f D]% } |  j  t j t |   t  q Wd  S(1   s   Util.number.isPrimei   i   i   l    i˙  i   i+   i   iÓ   i=   i   i;  i5w  l   H
 l   9 l   ^ l   <= l   eEm l   É
Ű l   & l   5L(l   Ç)S l   SŚ l   ďZ8l   Ý5q:l   ?érl   }Ňe l   Bs l   =f l   ó^ř; l   ĺ=ńw NlV                                                                                                                                                                              lV   ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ iU  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;.( (   R
   R   t   isPrimeR    t   Falset   long(   R   t	   composite(    (    sD   /usr/lib/python2.7/dist-packages/Crypto/SelfTest/Util/test_number.pyt   test_isPrimeű   s    	(
   t   __name__t
   __module__R   R   R   R   R!   R&   R,   R1   (    (    (    sD   /usr/lib/python2.7/dist-packages/Crypto/SelfTest/Util/test_number.pyR   $   s   		3	E				c         C   s   d d l  m } | t  S(   Ni˙˙˙˙(   t   list_test_cases(   t   Crypto.SelfTest.st_commonR4   R   (   t   configR4   (    (    sD   /usr/lib/python2.7/dist-packages/Crypto/SelfTest/Util/test_number.pyt	   get_tests  s    t   __main__c           C   s   t  j t    S(   N(   t   unittestt	   TestSuiteR7   (    (    (    sD   /usr/lib/python2.7/dist-packages/Crypto/SelfTest/Util/test_number.pyt   <lambda>  s    t   defaultTestt   suite(
   t   __doc__t   __revision__t   Crypto.Util.python_compatR9   t   TestCaseR   R7   R2   R=   t   main(    (    (    sD   /usr/lib/python2.7/dist-packages/Crypto/SelfTest/Util/test_number.pyt   <module>   s   
ç	