B
    u9a8                 @   sf  d dl Z d dlmZmZmZ d dlmZ dd Zdd Zdd	 Z	d
d Z
G dd deZG dd de jZG dd dZdd ZG dd deZG dd deedZG dd deZG dd deZee G dd de jZG dd  d eZG d!d" d"eZG d#d$ d$eZG d%d& d&eZG d'd( d(eZG d)d* d*ZG d+d, d,e jZed-krbe   dS ).    N)eqlene)ABCMetac             C   s   x| r||  |  } }qW |S )N )abr   r    /usr/lib/python3.7/test_binop.pygcd   s    r
   c             C   s
   t | tS )N)
isinstanceint)xr   r   r	   isint   s    r   c             C   s&   x t ttfD ]}t| |rdS qW dS )N   r   )r   floatcomplexr   )r   Tr   r   r	   isnum   s    
r   c             C   s
   t | tS )N)r   Rat)r   r   r   r	   isRat   s    r   c               @   s   e Zd ZddgZd.ddZdd Zeed	Zd
d Zeed	Z	dd Z
dd Zdd Zdd Zdd ZeZdd Zdd Zdd Ze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	S )/r   	_Rat__num	_Rat__denr   r   c             C   sb   t |std| t |s(td| |dkr8tdt||}t|| | _t|| | _d S )NzRat numerator must be int (%r)z Rat denominator must be int (%r)r   zzero denominator)r   	TypeErrorZeroDivisionErrorr
   r   r   r   )selfnumdengr   r   r	   __init__"   s    
zRat.__init__c             C   s   | j S )N)r   )r   r   r   r	   _get_num1   s    zRat._get_numNc             C   s   | j S )N)r   )r   r   r   r	   _get_den6   s    zRat._get_denc             C   s   d| j | jf S )NzRat(%d, %d))r   r   )r   r   r   r	   __repr__;   s    zRat.__repr__c             C   s   t t| S )N)strr   )r   r   r   r	   __str__?   s    zRat.__str__c             C   s   | j d | j S )Ng      ?)r   r   )r   r   r   r	   	__float__C   s    zRat.__float__c             C   sN   | j dkr:y
t| jS  tk
r8   tdt|  Y nX tdt|  d S )Nr   z%s too large to convert to intzcan't convert %s to int)r   r   r   OverflowErrorrepr
ValueError)r   r   r   r	   __int__G   s    

zRat.__int__c             C   sV   t |rt|}t|r>t| j|j |j| j  | j|j S t|rRt| | S tS )N)r   r   r   r   r   r   r   NotImplemented)r   otherr   r   r	   __add__Q   s    zRat.__add__c             C   sV   t |rt|}t|r>t| j|j |j| j  | j|j S t|rRt| | S tS )N)r   r   r   r   r   r   r   r)   )r   r*   r   r   r	   __sub__^   s    zRat.__sub__c             C   sV   t |rt|}t|r>t|j| j | j|j  | j|j S t|rR|t|  S tS )N)r   r   r   r   r   r   r   r)   )r   r*   r   r   r	   __rsub__i   s    zRat.__rsub__c             C   sT   t |r"t| j|j | j|j S t|r<t| j| | jS t|rPt| | S tS )N)r   r   r   r   r   r   r   r)   )r   r*   r   r   r	   __mul__t   s    zRat.__mul__c             C   sT   t |r"t| j|j | j|j S t|r<t| j| j| S t|rPt| | S tS )N)r   r   r   r   r   r   r   r)   )r   r*   r   r   r	   __truediv__   s    zRat.__truediv__c             C   sT   t |r"t|j| j |j| j S t|r<t|| j | jS t|rP|t|  S tS )N)r   r   r   r   r   r   r   r)   )r   r*   r   r   r	   __rtruediv__   s    zRat.__rtruediv__c             C   s2   t |rt|}nt|stS | | }|j|j S )N)r   r   r   r)   r   r   )r   r*   r   r   r   r	   __floordiv__   s    
zRat.__floordiv__c             C   s   ||  }|j |j S )N)r   r   )r   r*   r   r   r   r	   __rfloordiv__   s    zRat.__rfloordiv__c             C   s6   t |rt|}nt|stS | | }|| ||  fS )N)r   r   r   r)   )r   r*   r   r   r   r	   
__divmod__   s    
zRat.__divmod__c             C   s(   t |rt|}nt|stS t|| S )N)r   r   r   r)   divmod)r   r*   r   r   r	   __rdivmod__   s
    
zRat.__rdivmod__c             C   s   t | |d S )Nr   )r4   )r   r*   r   r   r	   __mod__   s    zRat.__mod__c             C   s   t || d S )Nr   )r4   )r   r*   r   r   r	   __rmod__   s    zRat.__rmod__c             C   sT   t |r| jdko| j|kS t|r<| j|jko:| j|jkS t|rPt| |kS tS )Nr   )r   r   r   r   r   r   r)   )r   r*   r   r   r	   __eq__   s    z
Rat.__eq__)r   r   )__name__
__module____qualname__	__slots__r   r   propertyr   r    r   r!   r#   r$   r(   r+   __radd__r,   r-   r.   __rmul__r/   r0   r1   r2   r3   r5   r6   r7   r8   r   r   r   r	   r      s2   






		r   c               @   sT   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S )RatTestCasec             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
 x~tddD ]p}xjtddD ]\}| t||dk | t| |dk  | t|| dk | t| | dk  qW qW d S )N
                  r   d   i   r   )assertEqualr
   range
assertTrue)r   ijr   r   r	   test_gcd   s    zRatTestCase.test_gcdc          	   C   sv  t dd}| |jd | |jd t dd}| |jd | |jd t dd}| |jd | |jd t dd}| |jd | |jd t d}| |jd | |jd	 yt d	d
}W n tk
r   Y nX | d xddddg i d t tf	D ]l}yt |}W n tk
r(   Y nX | d|  yt d	|}W n tk
r\   Y nX | d|  qW d S )NrA   rD   rC      irH   i   r   r   z(Rat(1, 0) didn't raise ZeroDivisionError0g        y                r   zRat(%r) didn't raise TypeErrorz!Rat(1, %r) didn't raise TypeError)r   rJ   r   r   r   Zfailunittestr   )r   r   Zbadr   r   r	   test_constructor   s>    




zRatTestCase.test_constructorc             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d d |  tddd d d S )NrC   rP   r   rE   g      ?g      ?)rJ   r   )r   r   r   r	   test_add   s
    zRatTestCase.test_addc             C   s   |  tddtdd tdd |  tddd tdd |  dtdd tdd |  tddd d	 |  dtdd d	 d S )
NrQ   rC   rE      rA   r   rP   g      ?g      ?)rJ   r   )r   r   r   r	   test_sub  s
    "zRatTestCase.test_subc             C   s~   |  tddtdd tdd |  tddd d |  dtdd d |  tddd d |  dtdd d d S )	NrC   rP   rE   rQ   rA   rV   g      ?g      ?)rJ   r   )r   r   r   r	   test_mul	  s
    "zRatTestCase.test_mulc             C   s   |  tddtdd tdd |  tddd tdd |  dtd tdd |  dtd	d d
 |  td	dd d
 d S )NrA   rP   rE   rQ      	   rC   g      @r   g      ?)rJ   r   )r   r   r   r	   test_div  s
    "zRatTestCase.test_divc             C   s`   |  tdtd d |  tddtdd d |  tdd d |  dtd d d S )NrA      rC   rP   )rJ   r   )r   r   r   r	   test_floordiv  s    zRatTestCase.test_floordivc             C   sZ   |  tdtdd |  tdd |  dtd |  tdd |  dtd d S )NrA   rI   rC   g      $@)rJ   r   )r   r   r   r	   test_eq  s
    zRatTestCase.test_eqc             C   s   |  tddtdd tdd |  tddd tdd |  dtd tdd |  dtd	d d
 |  td	dd d
 |  tdd d S )NrA   rP   rE   rQ   rY   rZ   rC   g      @r   g      ?z1/2g      ?)rJ   r   eval)r   r   r   r	   test_true_div$  s    "zRatTestCase.test_true_divN)r9   r:   r;   rO   rT   rU   rW   rX   r[   r]   r^   r`   r   r   r   r	   r@      s   $r@   c               @   s   e Zd Zdd Zdd ZdS )OperationLoggerc             C   s
   || _ d S )N)logger)r   rb   r   r   r	   r   1  s    zOperationLogger.__init__c             G   s   | j |  d S )N)rb   )r   argsr   r   r	   log_operation3  s    zOperationLogger.log_operationN)r9   r:   r;   r   rd   r   r   r   r	   ra   /  s   ra   c             G   sL   g }g }x|D ]}| ||j  qW y| |  W n tk
rF   Y nX |S )N)appendr   )opclasseslogZ	instancescr   r   r	   op_sequence6  s    
rj   c               @   s$   e Zd Zdd Zdd Zdd ZdS )Ac             C   s   |  d tS )NzA.__eq__)rd   r)   )r   r*   r   r   r	   r8   E  s    
zA.__eq__c             C   s   |  d tS )NzA.__le__)rd   r)   )r   r*   r   r   r	   __le__H  s    
zA.__le__c             C   s   |  d tS )NzA.__ge__)rd   r)   )r   r*   r   r   r	   __ge__K  s    
zA.__ge__N)r9   r:   r;   r8   rl   rm   r   r   r   r	   rk   D  s   rk   c               @   s$   e Zd Zdd Zdd Zdd ZdS )Bc             C   s   |  d tS )NzB.__eq__)rd   r)   )r   r*   r   r   r	   r8   P  s    
zB.__eq__c             C   s   |  d tS )NzB.__le__)rd   r)   )r   r*   r   r   r	   rl   S  s    
zB.__le__c             C   s   |  d tS )NzB.__ge__)rd   r)   )r   r*   r   r   r	   rm   V  s    
zB.__ge__N)r9   r:   r;   r8   rl   rm   r   r   r   r	   rn   O  s   rn   )	metaclassc               @   s$   e Zd Zdd Zdd Zdd ZdS )Cc             C   s   |  d tS )NzC.__eq__)rd   r)   )r   r*   r   r   r	   r8   [  s    
zC.__eq__c             C   s   |  d tS )NzC.__le__)rd   r)   )r   r*   r   r   r	   rl   ^  s    
zC.__le__c             C   s   |  d tS )NzC.__ge__)rd   r)   )r   r*   r   r   r	   rm   a  s    
zC.__ge__N)r9   r:   r;   r8   rl   rm   r   r   r   r	   rp   Z  s   rp   c               @   s$   e Zd Zdd Zdd Zdd ZdS )Vc             C   s   |  d tS )NzV.__eq__)rd   r)   )r   r*   r   r   r	   r8   g  s    
zV.__eq__c             C   s   |  d tS )NzV.__le__)rd   r)   )r   r*   r   r   r	   rl   j  s    
zV.__le__c             C   s   |  d tS )NzV.__ge__)rd   r)   )r   r*   r   r   r	   rm   m  s    
zV.__ge__N)r9   r:   r;   r8   rl   rm   r   r   r   r	   rq   e  s   rq   c               @   s   e Zd Zdd ZdS )OperationOrderTestsc             C   s4  |  ttttddg |  ttttddg |  ttttddg |  ttttddg |  ttttddg |  ttttddg |  ttttddg |  ttttddg |  ttttddg |  ttttd	dg | tt	t |  tttt	dd
g |  tttt	ddg d S )NzA.__eq__zB.__eq__zC.__eq__zA.__le__zA.__ge__zB.__ge__zB.__le__zC.__ge__zC.__le__zV.__eq__zV.__ge__)
rJ   rj   r   rk   rn   rp   r   rL   
issubclassrq   )r   r   r   r	   test_comparison_orderst  s    z*OperationOrderTests.test_comparison_ordersN)r9   r:   r;   rt   r   r   r   r	   rr   s  s   rr   c               @   s   e Zd Zdd ZdS )SupEqc             C   s   dS )NTr   )r   r*   r   r   r	   r8     s    zSupEq.__eq__N)r9   r:   r;   r8   r   r   r   r	   ru     s   ru   c               @   s   e Zd ZdZdS )SN)r9   r:   r;   r8   r   r   r   r	   rv     s   rv   c               @   s   e Zd ZdS )FN)r9   r:   r;   r   r   r   r	   rw     s   rw   c               @   s   e Zd ZdZdS )XN)r9   r:   r;   r8   r   r   r   r	   rx     s   rx   c               @   s   e Zd ZdZdS )SNN)r9   r:   r;   __ne__r   r   r   r	   ry     s   ry   c               @   s   e Zd Zdd ZdZdS )XNc             C   s   dS )NTr   )r   r*   r   r   r	   r8     s    z	XN.__eq__N)r9   r:   r;   r8   rz   r   r   r   r	   r{     s   r{   c               @   s   e Zd Zdd Zdd ZdS )FallbackBlockingTestsc             C   s   t  t t t f\}}}}| || | || | || | || | tt|| | tt|| | tt|| d S )N)ru   rw   rv   rx   rJ   assertRaisesr   r   )r   efsr   r   r   r	   test_fallback_rmethod_blocking  s    z4FallbackBlockingTests.test_fallback_rmethod_blockingc             C   sf   t  t t   }}}| ||k | tt|| | tt|| | ||k | tt|| d S )N)ru   ry   r{   ZassertFalser}   r   r   )r   r~   ZsnZxnr   r   r	   test_fallback_ne_blocking  s    z/FallbackBlockingTests.test_fallback_ne_blockingN)r9   r:   r;   r   r   r   r   r   r	   r|     s   r|   __main__) rS   operatorr   r   r   abcr   r
   r   r   r   objectr   ZTestCaser@   ra   rj   rk   rn   rp   rq   registerrr   ru   rv   rw   rx   ry   r{   r|   r9   mainr   r   r   r	   <module>   s4    *j

