B
    18\g                 @   s   d Z ddlmZ ddlmZ ddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZmZ ddlmZmZ ejZejZG dd deZG d	d
 d
eZG dd dejZG dd de
jZdd ZG dd de
jZedkre
  dS )zTests for Lib/fractions.py.    )Decimal)requires_IEEE_754N)copydeepcopy)dumpsloadsc               @   s\   e Zd 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eZdS )
DummyFloatz8Dummy float class for testing comparisons with Fractionsc             C   s   t |tstd|| _d S )Nz-DummyFloat can only be initialized from float)
isinstancefloat	TypeErrorvalue)selfr    r   W/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_fractions.py__init__   s    
zDummyFloat.__init__c             C   s>   t |tjr|t| j|S t |tr6|| j|jS tS d S )N)r	   numbersZRationalF
from_floatr   r   NotImplemented)r   otheropr   r   r   _richcmp   s
    
zDummyFloat._richcmpc             C   s   |  |tjS )N)r   operatoreq)r   r   r   r   r   __eq__!       zDummyFloat.__eq__c             C   s   |  |tjS )N)r   r   le)r   r   r   r   r   __le__"   r   zDummyFloat.__le__c             C   s   |  |tjS )N)r   r   lt)r   r   r   r   r   __lt__#   r   zDummyFloat.__lt__c             C   s   |  |tjS )N)r   r   ge)r   r   r   r   r   __ge__$   r   zDummyFloat.__ge__c             C   s   |  |tjS )N)r   r   gt)r   r   r   r   r   __gt__%   r   zDummyFloat.__gt__c             C   s   dst dd S )NFz/__float__ should not be invoked for comparisons)AssertionError)r   r   r   r   	__float__(   s    zDummyFloat.__float__c             C   s   dst dd S )NFz-__sub__ should not be invoked for comparisons)r$   )r   r   r   r   r   __sub__,   s    zDummyFloat.__sub__N)__name__
__module____qualname____doc__r   r   r   r   r   r!   r#   r%   r&   __rsub__r   r   r   r   r      s   r   c               @   sH   e Zd 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S )DummyRationalzATest comparison of Fraction with a naive rational implementation.c             C   s$   t ||}|| | _|| | _d S )N)mathgcdnumden)r   r/   r0   gr   r   r   r   4   s    
zDummyRational.__init__c             C   s,   t |tjr$| j|jko"| j|jkS tS d S )N)r	   	fractionsFractionr/   
_numeratorr0   _denominatorr   )r   r   r   r   r   r   9   s    zDummyRational.__eq__c             C   s   | j |j | j|j k S )N)r/   r5   r0   r4   )r   r   r   r   r   r   @   s    zDummyRational.__lt__c             C   s   | j |j | j|j kS )N)r/   r5   r0   r4   )r   r   r   r   r   r#   C   s    zDummyRational.__gt__c             C   s   | j |j | j|j kS )N)r/   r5   r0   r4   )r   r   r   r   r   r   F   s    zDummyRational.__le__c             C   s   | j |j | j|j kS )N)r/   r5   r0   r4   )r   r   r   r   r   r!   I   s    zDummyRational.__ge__c             C   s   dst dd S )NFz__float__ should not be invoked)r$   )r   r   r   r   r%   N   s    zDummyRational.__float__N)r'   r(   r)   r*   r   r   r   r#   r   r!   r%   r   r   r   r   r,   1   s   r,   c               @   s   e Zd ZdZdS )DummyFractionz6Dummy Fraction subclass for copy and deepcopy testing.N)r'   r(   r)   r*   r   r   r   r   r6   Q   s   r6   c               @   s   e Zd Zdd ZdS )GcdTestc          	   C   sd  |  td tdd W d Q R X t . tddt | 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 | tddd | td
dd | ttd
tdtd	 | ttd
dtddtd	d W d Q R X d S )Nzfractions\.gcd   ignorer      i      x   T   iig      ^@g      (@g      U@M   7   i  )assertWarnsRegexDeprecationWarningr.   warningscatch_warningsfilterwarningsassertEqualr   )r   r   r   r   testMiscV   s&    zGcdTest.testMiscN)r'   r(   r)   rH   r   r   r   r   r7   T   s   r7   c             C   s   | j | jfS )N)	numeratordenominator)rr   r   r   _componentsm   s    rL   c               @   s   e Zd Zdd Zdd Zdd Ze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;S )<FractionTestc             C   s$   |  t|t| |  || dS )z4Asserts that both the types and values are the same.N)rG   type)r   expectedactualr   r   r   assertTypedEqualss   s    zFractionTest.assertTypedEqualsc          
   O   sV   y||| W n2 |k
r@ } z|  |t| W dd}~X Y nX | d|j  dS )z@Asserts that callable(*args, **kwargs) raises exc_type(message).Nz%s not raised)rG   strfailr'   )r   exc_typemessagecallableargskwargser   r   r   assertRaisesMessagex   s
    "z FractionTest.assertRaisesMessagec          	   C   s  |  dtt  |  dttd |  dtttdd |  dttdd |  dttdd |  d	ttd
d
 |  dttdd |  dttdd |  dttd |  dtttddd |  dttdtdd |  dtttddtdd | tdtdd | ttd | ttd d | ttdd! | ttdd" | ttddd d S )#N)r   r8   )r;   r8   r;   )r;      r[   )r:   r8   r:   r8   )r8   r8   )r8         
   )r;   r<   r<   )l      m+?R r8   l      m+?R )r[   r@      )ir^   r]   i	   )i	  i	     ic  q   zFraction(12, 0)r=   r   y      ?      @z3/2y                y              ?)rG   rL   r   rZ   ZeroDivisionErrorassertRaisesr   )r   r   r   r   testInit   s&    "
zFractionTest.testInitc             C   sv   |  dttd |  dttd |  dttd | tttd | tttd | tttd	 d S )
N)r^   r]   g      @)r   r8   g       )l   L33f l          g?naninfz-inf)rG   rL   r   re   
ValueErrorr
   OverflowError)r   r   r   r   testInitFromFloat   s    zFractionTest.testInitFromFloatc             C   s   |  dtttd |  dtttd |  dtttd | tttd | tttd | tttd	 | tttd
 d S )N)r`   r_   z1.1)r;      z3.5e-2)r   r8   z.000e20rg   snanrh   z-inf)rG   rL   r   r   re   ri   rj   )r   r   r   r   testInitFromDecimal   s    z FractionTest.testInitFromDecimalc             C   s  |  dttd |  dttd |  dttd |  dttd |  dttd	 |  d
ttd |  dttd |  dttd |  dttd |  dttd |  dttd |  dttd |  dttd |  dttd | tdtd | tdtd | tdtd  | td!td" | td#td$ | td%td& | td'td( | td)td* | td+td, | td-td. d S )/N)r^   r8   5)r[   r]   z3/2z 
  +3/2)r]   z-3/2  )   r]   z    013/02 
  )   r^   z 3.2 )ir^   z -3.2 )rp   r8   z -3. )r[   r^   z .6 )r8   i5  z32.e-5)i@B r8   z1E+06)ir8   z-1.23e4)r   r8   z .0e+0	z-0.000e0zFraction(3, 0)z3/0z"Invalid literal for Fraction: '3/'z3/z"Invalid literal for Fraction: '/2'z/2z$Invalid literal for Fraction: '3 /2'z3 /2z$Invalid literal for Fraction: '3/+2'z3/+2z%Invalid literal for Fraction: '+ 3/2'z+ 3/2z#Invalid literal for Fraction: '3a2'Z3a2z%Invalid literal for Fraction: '3/7.2'z3/7.2z%Invalid literal for Fraction: '3.2/7'z3.2/7z!Invalid literal for Fraction: '.'.)rG   rL   r   rZ   rd   ri   )r   r   r   r   testFromString   sX    zFractionTest.testFromStringc             C   s   t dd}|dd | dt| | tt|dd | tt|dd	 | dt| d
|_d|_| dt| | 	t d
d| d S )Nr;   r[   r]   r<   )r;   r[   rI   r=   rJ         )rv   r]   )
r   r   rG   rL   re   AttributeErrorsetattrr4   r5   assertNotEqual)r   rK   r   r   r   testImmutable   s    
zFractionTest.testImmutablec             C   s*  |  ttjd | dttd d}| |dftt| | dttd | dttd | d	ttd
 | dttd | tdttd | dttd | dttd d}|| }| tdtj| | tdtj|  | t	dtj| d S )Ny      @      @)r_   r8   r_   l   {C	 r8   )r   r8   g       g      $@)r]   g      )l      l+?R r8   gJ-Dl      m+?R )l   L33f l           g	@g      z(cannot convert Infinity to integer ratioz#cannot convert NaN to integer ratio)
re   r   r   r   rG   rL   r
   rZ   rj   ri   )r   Zbigintrh   rg   r   r   r   testFromFloat   s0    
zFractionTest.testFromFloatc             C   s  |  ttjd | tddtd | tdttd | tddttd | tddttd	 | td
ttd | dtdd ttd | tdtjtd | tdtjtd | tdtjtd | tdtjtd d S )Ny      @      @r_   r8   r   z-0r^   z0.5i  z5e-3i  Z5e3l       73Me'z 0.999999999999999999999999999999z(cannot convert Infinity to integer ratiorh   z-infz#cannot convert NaN to integer ratiorg   rm   )	re   r   r   Zfrom_decimalrG   r   rZ   rj   ri   )r   r   r   r   testFromDecimal  s(    zFractionTest.testFromDecimalc             C   s   t d}| |dt dd | |d t dd | |dt dd | |dt dd | t d	d
dt d | t d	d
dt dd | t ddt d x"dD ]}| tdt dj| qW d S )Nz3.1415926535897932i'  ic  rc   ip   iM  j      rl   d   r8   e   f   r   )r   r:   z$max_denominator should be at least 1)r   rG   Zlimit_denominatorrZ   ri   )r   Zrpiir   r   r   testLimitDenominator,  s    
z!FractionTest.testLimitDenominatorc             C   sr  |  dttdd |  dttdd |  dttdd |  dttdd |  dttdd |  dttdd |  dttdd |  dttd	d |  dttd
d |  dttdd | dt	tdd | dt	tdd |  dt
tdd | tt
td | dt
ttdtd |  dttdd d S )Nr:   ir_   r8   r`   r\   ir   r{   iiFTr[   r]   g?A  22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222227gUUUUUU?A  33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333331y?        )rQ   r-   truncr   floorceilintroundrG   boolr
   re   rj   assertAlmostEqualcomplex)r   r   r   r   testConversions:  s"    zFractionTest.testConversionsc             C   s   |  tdttdd |  tdttdd |  tdttdd |  tddttd	d
d |  tddttdd
d d S )Ni8ijr\   i      r:   r_   ir   r8   i)rQ   r   r   )r   r   r   r   	testRoundR  s
    zFractionTest.testRoundc             C   s<  |  tddtddtdd  |  tdd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tddtdd  | d	td	dtd  |  tdd
tdd
td
d  |  tddtdd
td
  |  tddtdd
td  | dtdtdd  |  tddtdd
  ttdtdd}| |jd |  |jd tddd }|  |tdd |  |jd |  |jd tddd }|  |tdd |  |jd |  |jd tddd }|  |tdd |  |jd |  |jd d S )Nr8   r]   r_   r^   rp      rv   ra   l      m+?R r[   i      g       @r:   r   r\   )	rG   r   rQ   powr   realimagrI   rJ   )r   zpr   r   r   testArithmeticY  s4    """""  zFractionTest.testArithmeticc             C   s2  |  tddtddd  |  dtddd  |  dtddd  |  tdddtdd  |  ddtdd  |  ddtdd  |  tddtddd  |  d	tddd  |  d
tddd  |  tdddtdd  |  ddtdd  |  ddtdd  |  tddtddd  |  dtddd  |  dtddd  |  tdddtdd  |  ddtdd  |  ddtdd  |  tddtddd  |  dtddd  |  dtddd  |  tdddtdd  |  ddtdd  |  ddtdd  |  dtddd  |  dtddd  |  ddtdd  |  ddtdd  |  ddtdd  |  tddtddd  |  dtddd  |  tdddtdd  |  ddtdd  |  tddtddd  |  tddtddd  |  dtddd  |  dtddd  |  ddtdd  tdtdd}| d|j | d|j |  tdddtdd  |  ddtdd  |  ddtdd  |  ddtdd  | tt	jtddd d S )Nr`   r_   r8   g?g      ?y?        y      ?        igy        ra   g?y?        g?y?        g      $@y      $@        r   l      m+?R l     d&O!g        r   r\   r]   rv   r:   g       @g      ?)
rQ   r   r   r   r   rG   r   re   rd   r   )r   r   r   r   r   testMixedArithmeticv  s^    
z FractionTest.testMixedArithmeticc             C   s<   |  ttjtddtd |  ttjtdtdd d S )Nr[   r`   z	3.1415926)re   r   r   addr   r   )r   r   r   r   testMixingWithDecimal  s    

z"FractionTest.testMixingWithDecimalc             C   s   |  tddtddk  | tddtddk  |  tddtddk |  tddtddk | tddtddk |  tddtddk | tddtddk | tddtddk |  tddtddk d S )Nr8   r]   r[   )
assertTruer   assertFalse)r   r   r   r   testComparisons  s    zFractionTest.testComparisonsc             C   s  |  tddtddk |  tddtddk | tddtddk | tddtddk |  tddtddk  | tddtddk  | tddtddk  | tddtddk | tddtddk |  tddtddk |  tddtddk |  tddtddk | tddtddk | tddtddk |  tddtddk |  tddtddk |  tddtddk  | tddtddk  | tddtddk  | tddtddk | tddtddk |  tddtddk |  tddtddk |  tddtddk | tddtddk | tddtddk |  tddtddk |  tddtddk d S )Nr8   r]   r[   rv   r;   )r   r   r,   r   )r   r   r   r   testComparisonsDummyRational  s8    z)FractionTest.testComparisonsDummyRationalc             C   s   t d}tdd}| ||k | ||k p2||k | ||k | ||koV||k | ||k | ||k pz||k | ||k | ||ko||k d S )NgUUUUUU?r8   r[   )r   r   r   r   )r   xyr   r   r   testComparisonsDummyFloat  s    
z&FractionTest.testComparisonsDummyFloatc             C   s4  |  dtddk  | dtddk  |  tdddk  | tdddk  |  tdddk  | tdddk  |  dtddk  | dtddk  | td	tddk  |  td
tddk  | tdtddk  |  tddtd	k  | tddtd
k  | tddtdk  d S )Nr]   r^   rv   r[   r8   g333333?g?g      ?rh   z-infr   r_   rg   rp   r;      r=      i)r   r   r   r
   )r   r   r   r   testMixedLess  s    zFractionTest.testMixedLessc             C   s4  |  dtddk | dtddk |  tdddk | tdddk |  dtddk | dtddk |  tdddk | tdddk | td	tddk |  td
tddk | tdtddk |  tddtd	k | tddtd
k | tddtdk d S )Ng      ?r8   r]   g333333?g?rv   r[   r^   rh   z-infr   r_   rg   rp   r;   r   r=   r   i)r   r   r   r
   )r   r   r   r   testMixedLessEqual   s    zFractionTest.testMixedLessEqualc             C   s   |  tdtdk |  dtttdd k  | dttdd k  |  dttdd k | dttdd k |  dttdd k d S )Nl      m+?R gJ-Dr8   )r   r   r
   r-   r   r   )r   r   r   r   testBigFloatComparisons  s     z$FractionTest.testBigFloatComparisonsc             C   s  |  tdtdk | ttjtdtd | ttjtdtd tdd}tdd}tdd}| ||k |  ||k |  ||k | ||k x\tj	tjtjtj
fD ]D}| t||| | t||| | t||| | t||| qW d S )Nl      m+?R r[   r   g      ?g        g?)r   r   r   re   r   r   r"   r   r   r   r    )r   r   r   wr   r   r   r   testBigComplexComparisons  s    


z&FractionTest.testBigComplexComparisonsc             C   s  |  dtddk | dtddk |  tdddk | tdddk |  dtddk | dtddk |  tdddk | tdddk | tddtd	k | td	tdd
k | tddtdk | tdtddk d S )Ng      ?r8   r]   g333333?g?rv   r[   r^   rg   r;   rh   z-inf)r   r   r   r
   )r   r   r   r   testMixedEqual-  s    zFractionTest.testMixedEqualc             C   sp   |  dttdd |  dttd |  dttdd |  d	ttdd |  d
ttdd d S )NzFraction(7, 3)r;   r[   z Fraction(6283185307, 2000000000)z3.1415926535z#Fraction(-1, 100000000000000000000)r8   l   Fx:^V z7/37)rG   reprr   rR   )r   r   r   r   testStringification;  s    z FractionTest.testStringificationc             C   s   t jj}t jj}| tdttdd | tdd ttdd  | ttdttd | |ttd| | ttdtd	  d S )	Ng      @r^   r]   r_   2   l      m+?R r8   r:   )
sys	hash_infomodulusrh   rG   hashr   ry   r
   __hash__)r   ZhmodZhinfr   r   r   testHashD  s     zFractionTest.testHashc       	      C   s   t d}d|dddddf\}}}}}}}xVt|| t ddkr~|}|| |d  }}|| |d  }}|| | }||7 }q*W | tj| d S )Nr[   r   r8      i ʚ;r       )r   absr   r-   pi)	r   ZthreelaststsnZnaddar   r   r   testApproximatePiO  s     zFractionTest.testApproximatePic             C   s   t d}ddt ddddf\}}}}}}xZt|| t ddkr|}|d7 }|||d  9 }||| 9 }|d9 }||| | 7 }q*W | td| d S )Nr8   r   i ʚ;r]   r:   )r   r   r   r-   cos)r   r   r   r   r   Zfactr/   signr   r   r   testApproximateCos1\  s     z FractionTest.testApproximateCos1c             C   s   t dd}tdd}| |tt| | t|tt| | t|tt| | t|tt| | t|tt| | 	|t| | 	|t| d S )Nrq   r;   )
r   r6   rG   r   r   idr   r   ry   rQ   )r   rK   Zdrr   r   r   test_copy_deepcopy_picklej  s    

z&FractionTest.test_copy_deepcopy_picklec             C   s    t dd}| tt|dd d S )Nrq   r;   ar_   )r   re   rw   rx   )r   rK   r   r   r   
test_slotsu  s    
zFractionTest.test_slotsN)!r'   r(   r)   rQ   rZ   rf   r   rk   rn   rt   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   rM   q   s:   
5: 
	rM   __main__)r*   decimalr   Ztest.supportr   r-   r   r   r2   r   unittestrD   r   r   pickler   r   r3   r   r.   objectr   r,   r6   TestCaser7   rL   rM   r'   mainr   r   r   r   <module>   s2         