mò
­fIc           @   sš   d  Z  d k Z d k l Z d „  Z d „  Z d „  Z d „  Z d e f d „  ƒ  YZ	 d	 e i
 f d
 „  ƒ  YZ d Z d „  Z e d j o e ƒ  n d S(   s9   Tests for binary operators on subtypes of built-in types.N(   s   test_supportc         C   s$   x |  o | |  |  }  } q W| S(   s1   Greatest common divisor using Euclid's algorithm.N(   t   at   b(   R    R   (    (    t,   /mit/python/lib/python2.4/test/test_binop.pyt   gcd   s
      c         C   s   t  |  t ƒ p t  |  t ƒ S(   s5   Test whether an object is an instance of int or long.N(   t
   isinstancet   xt   intt   long(   R   (    (    R   t   isint   s     c         C   s9   x2 t  t t t f D] } t |  | ƒ o d Sq q Wd S(   sA   Test whether an object is an instance of a built-in numeric type.i   i    N(   R   R   t   floatt   complext   TR   R   (   R   R   (    (    R   t   isnum   s      c         C   s   t  |  t ƒ S(   s6   Test wheter an object is an instance of the Rat class.N(   R   R   t   Rat(   R   (    (    R   t   isRat   s     R   c           B   s  t  Z d  Z d d g Z d d d „ Z d „  Z e e e ƒ Z d „  Z	 e e	 e ƒ Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z e Z d „  Z d „  Z d „  Z e Z d „  Z e Z d „  Z e Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! RS(   s:   Rational number implemented as a normalized pair of longs.t	   _Rat__numt	   _Rat__denl    l    c         C   s   t  | ƒ p t d | ‚ n t  | ƒ p t d | ‚ n | d j o t d ‚ n t | | ƒ } t | | ƒ |  _	 t | | ƒ |  _
 d S(   sd   Constructor: Rat([num[, den]]).

        The arguments must be ints or longs, and default to (0, 1).s&   Rat numerator must be int or long (%r)s(   Rat denominator must be int or long (%r)i    s   zero denominatorN(   R   t   numt	   TypeErrort   dent   ZeroDivisionErrorR   t   gR   t   selfR   R   (   R   R   R   R   (    (    R   t   __init__!   s     c         C   s   |  i S(   s7   Accessor function for read-only 'num' attribute of Rat.N(   R   R   (   R   (    (    R   t   _get_num0   s     c         C   s   |  i S(   s7   Accessor function for read-only 'den' attribute of Rat.N(   R   R   (   R   (    (    R   t   _get_den5   s     c         C   s   d |  i |  i f S(   s=   Convert a Rat to an string resembling a Rat constructor call.s   Rat(%d, %d)N(   R   R   R   (   R   (    (    R   t   __repr__:   s     c         C   s   t  t |  ƒ ƒ S(   s=   Convert a Rat to a string resembling a decimal numeric value.N(   t   strR	   R   (   R   (    (    R   t   __str__>   s     c         C   s   |  i d |  i S(   s   Convert a Rat to a float.f1.0N(   R   R   R   (   R   (    (    R   t	   __float__B   s     c         C   se   |  i d j o> y t |  i ƒ SWqN t j
 o t d t |  ƒ ‚ qN Xn t d t |  ƒ ‚ d S(   s,   Convert a Rat to an int; self.den must be 1.i   s   %s too large to convert to ints   can't convert %s to intN(   R   R   R   R   t   OverflowErrort   reprt
   ValueError(   R   (    (    R   t   __int__F   s     c         C   s8   |  i d j o t |  i ƒ Sn t d t |  ƒ ‚ d S(   s-   Convert a Rat to an long; self.den must be 1.i   s   can't convert %s to longN(   R   R   R   R   R    R   (   R   (    (    R   t   __long__P   s     c         C   s€   t  | ƒ o t | ƒ } n t | ƒ o3 t |  i | i | i |  i |  i | i ƒ Sn t | ƒ o t |  ƒ | Sn t	 S(   s$   Add two Rats, or a Rat and a number.N(
   R   t   otherR   R   R   R   R   R   R	   t   NotImplemented(   R   R#   (    (    R   t   __add__V   s     c         C   s€   t  | ƒ o t | ƒ } n t | ƒ o3 t |  i | i | i |  i |  i | i ƒ Sn t | ƒ o t |  ƒ | Sn t	 S(   s)   Subtract two Rats, or a Rat and a number.N(
   R   R#   R   R   R   R   R   R   R	   R$   (   R   R#   (    (    R   t   __sub__c   s     c         C   s€   t  | ƒ o t | ƒ } n t | ƒ o3 t | i |  i |  i | i |  i | i ƒ Sn t | ƒ o | t |  ƒ Sn t	 S(   s9   Subtract two Rats, or a Rat and a number (reversed args).N(
   R   R#   R   R   R   R   R   R   R	   R$   (   R   R#   (    (    R   t   __rsub__n   s     c         C   s}   t  | ƒ o% t |  i | i |  i | i ƒ Sn t | ƒ o t |  i | |  i ƒ Sn t | ƒ o t |  ƒ | Sn t	 S(   s)   Multiply two Rats, or a Rat and a number.N(
   R   R#   R   R   R   R   R   R   R	   R$   (   R   R#   (    (    R   t   __mul__y   s     %c         C   s}   t  | ƒ o% t |  i | i |  i | i ƒ Sn t | ƒ o t |  i |  i | ƒ Sn t | ƒ o t |  ƒ | Sn t	 S(   s'   Divide two Rats, or a Rat and a number.N(
   R   R#   R   R   R   R   R   R   R	   R$   (   R   R#   (    (    R   t   __truediv__…   s     %c         C   s}   t  | ƒ o% t | i |  i | i |  i ƒ Sn t | ƒ o t | |  i |  i ƒ Sn t | ƒ o | t |  ƒ Sn t	 S(   s7   Divide two Rats, or a Rat and a number (reversed args).N(
   R   R#   R   R   R   R   R   R   R	   R$   (   R   R#   (    (    R   t   __rtruediv__‘   s     %c         C   sJ   t  | ƒ o t | ƒ } n t | ƒ p t Sn |  | } | i | i S(   s.   Divide two Rats, returning the floored result.N(	   R   R#   R   R   R$   R   R   R   R   (   R   R#   R   (    (    R   t   __floordiv__   s     
c         C   s   | |  } | i | i S(   s>   Divide two Rats, returning the floored result (reversed args).N(   R#   R   R   R   R   (   R   R#   R   (    (    R   t   __rfloordiv__¦   s     
c         C   sN   t  | ƒ o t | ƒ } n t | ƒ p t Sn |  | } | |  | | f S(   s2   Divide two Rats, returning quotient and remainder.N(   R   R#   R   R   R$   R   R   (   R   R#   R   (    (    R   t
   __divmod__«   s     
c         C   s?   t  | ƒ o t | ƒ } n t | ƒ p t Sn t | |  ƒ S(   sB   Divide two Rats, returning quotient and remainder (reversed args).N(   R   R#   R   R   R$   t   divmodR   (   R   R#   (    (    R   t   __rdivmod__´   s     c         C   s   t  |  | ƒ d S(   s   Take one Rat modulo another.i   N(   R.   R   R#   (   R   R#   (    (    R   t   __mod__¼   s     c         C   s   t  | |  ƒ d S(   s,   Take one Rat modulo another (reversed args).i   N(   R.   R#   R   (   R   R#   (    (    R   t   __rmod__À   s     c         C   s‡   t  | ƒ o! |  i d j o |  i | j Sn t | ƒ o' |  i | i j o |  i | i j Sn t | ƒ o t |  ƒ | j Sn t S(   s   Compare two Rats for equality.i   N(	   R   R#   R   R   R   R   R   R	   R$   (   R   R#   (    (    R   t   __eq__Ä   s     !'c         C   s   |  | j S(   s    Compare two Rats for inequality.N(   R   R#   (   R   R#   (    (    R   t   __ne__Î   s     ("   t   __name__t
   __module__t   __doc__t	   __slots__R   R   t   propertyt   NoneR   R   R   R   R   R   R!   R"   R%   t   __radd__R&   R'   R(   t   __rmul__R)   t   __div__R*   t   __rdiv__R+   R,   R-   R/   R0   R1   R2   R3   (    (    (    R   R      s<    						
					
	
	
									
t   RatTestCasec           B   s_   t  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z RS(
   s3   Unit tests for Rat class and its support utilities.c         C   s[  |  i t d d ƒ d ƒ |  i t d d ƒ d ƒ |  i t d d ƒ d ƒ |  i t d d ƒ d ƒ |  i t d	 d ƒ d
 ƒ |  i t d d
 ƒ d ƒ |  i t d	 d
 ƒ d
 ƒ x¥ t d d ƒ D]” } x‹ t d d ƒ D]z } |  i t | | ƒ d j ƒ |  i t | | ƒ d j  ƒ |  i t | | ƒ d j ƒ |  i t | | ƒ d j  ƒ qÕ Wq¿ Wd  S(   Ni
   i   i   i   i   i   i   id   iöÿÿÿiþÿÿÿi   i    (   R   t   assertEqualR   t   ranget   it   jt   assert_(   R   RA   RB   (    (    R   t   test_gcdÕ   s      c      	   C   s  t  d d ƒ } |  i | i d ƒ |  i | i d ƒ t  d d ƒ } |  i | i d ƒ |  i | i d ƒ t  d d ƒ } |  i | i d ƒ |  i | i d ƒ t  d	 d ƒ } |  i | i d ƒ |  i | i d ƒ t  d	 d ƒ } |  i | i d ƒ |  i | i d ƒ t  d
 ƒ } |  i | i d
 ƒ |  i | i d ƒ y t  d d ƒ } Wn t j
 o n X|  i d ƒ xš d d d f  g  h  d  t  t	 f	 D]w } y t  | ƒ } Wn t j
 o n X|  i d | ƒ y t  d | ƒ } Wn t j
 o q“X|  i d | ƒ q“Wd  S(   Ni
   i   i   i   l   
 l    iñÿÿÿiþÿÿÿiöÿÿÿi   i   i    s(   Rat(1, 0) didn't raise ZeroDivisionErrort   0f0.0x0.00.0s   Rat(%r) didn't raise TypeErrors!   Rat(1, %r) didn't raise TypeError(   R   R    R   R?   R   R   R   t   failR9   t   unittestt   badR   (   R   R    RH   (    (    R   t   test_constructorä   sF    " c         C   s°   |  i t d d ƒ t d d ƒ d ƒ |  i t d d ƒ d t d d ƒ ƒ |  i d t d d ƒ t d d ƒ ƒ |  i d t d d ƒ d ƒ |  i t d d ƒ d d ƒ d  S(   Ni   i   i   i   f1.0f1.5(   R   R?   R   (   R   (    (    R   t   test_add  s
    &&&c         C   s¹   |  i t d d ƒ t d d ƒ t d d ƒ ƒ |  i t d d ƒ d t d d ƒ ƒ |  i d t d d ƒ t d d ƒ ƒ |  i t d d ƒ d d	 ƒ |  i d t d d ƒ d	 ƒ d  S(
   Ni   i   i   i   i
   i   i   f1.0f0.5(   R   R?   R   (   R   (    (    R   t   test_sub  s
    /&&c         C   s§   |  i t d d ƒ t d d ƒ t d d ƒ ƒ |  i t d d ƒ d d ƒ |  i d t d d ƒ d ƒ |  i t d d ƒ d d ƒ |  i d t d d ƒ d ƒ d  S(	   Ni   i   i   i   i
   i   f0.5f1.0(   R   R?   R   (   R   (    (    R   t   test_mul  s
    /c         C   s¶   |  i t d d ƒ t d d ƒ t d d ƒ ƒ |  i t d d ƒ d t d d ƒ ƒ |  i d t d ƒ t d d ƒ ƒ |  i d t d	 d ƒ d
 ƒ |  i t d	 d ƒ d d
 ƒ d  S(   Ni
   i   i   i   i   i	   i   f3.0i   f1.5(   R   R?   R   (   R   (    (    R   t   test_div   s
    /&#c         C   s~   |  i t d ƒ t d ƒ d ƒ |  i t d d ƒ t d d ƒ d ƒ |  i t d ƒ d d ƒ |  i d t d ƒ d ƒ d  S(   Ni
   i   i   i   (   R   R?   R   (   R   (    (    R   t   test_floordiv'  s     &c         C   s{   |  i t d ƒ t d d ƒ ƒ |  i t d ƒ d ƒ |  i d t d ƒ ƒ |  i t d ƒ d ƒ |  i d t d ƒ ƒ d  S(   Ni
   i   i   f10.0(   R   R?   R   (   R   (    (    R   t   test_eq-  s
    c         B   s   e  d  Ud  S(   N(   t   future_test(   R   (    (    R   t   test_future_div4  s    (   R4   R5   R6   RD   RI   RJ   RK   RL   RM   RN   RO   RQ   (    (    (    R   R>   Ò   s    		'						s  
from __future__ import division
self.assertEqual(Rat(10, 3) / Rat(5, 7), Rat(14, 3))
self.assertEqual(Rat(10, 3) / 3, Rat(10, 9))
self.assertEqual(2 / Rat(5), Rat(2, 5))
self.assertEqual(3.0 * Rat(1, 2), 1.5)
self.assertEqual(Rat(1, 2) * 3.0, 1.5)
self.assertEqual(eval('1/2'), 0.5)
c           C   s   t  i t ƒ d  S(   N(   t   test_supportt   run_unittestR>   (    (    (    R   t	   test_mainC  s    t   __main__(   R6   RG   t   testRR   R   R   R   R   t   objectR   t   TestCaseR>   RP   RT   R4   (
   RR   R>   R   R   RG   R   R   R   RT   RP   (    (    R   t   ?   s   					·g
	