mò %U²Ic@sšdZdkZdklZd„Zd„Zd„Zd„Zdefd„ƒYZ d ei fd „ƒYZ d Z d „Z ed jo e ƒndS(s9Tests for binary operators on subtypes of built-in types.N(s test_supportcCs$x|o|||}}qW|S(s1Greatest common divisor using Euclid's algorithm.N(tatb(RR((t,/data/zmath/lib/python2.4/test/test_binop.pytgcds cCst|tƒp t|tƒS(s5Test whether an object is an instance of int or long.N(t isinstancetxtinttlong(R((Rtisint scCs9x2ttttfD]}t||ƒodSqqWdS(sATest whether an object is an instance of a built-in numeric type.iiN(RRtfloattcomplextTRR(RR ((Rtisnums  cCs t|tƒS(s6Test wheter an object is an instance of the Rat class.N(RRtRat(R((RtisRatsR cBstZdZddgZddd„Zd„ZeeeƒZd„Z ee eƒZ d„Z d „Z d „Z d „Zd „Zd „ZeZd„Zd„Zd„ZeZd„ZeZd„ZeZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z!RS(s:Rational number implemented as a normalized pair of longs.t _Rat__numt _Rat__denllcCst|ƒptd|‚nt|ƒptd|‚n|djo td‚nt||ƒ}t||ƒ|_ t||ƒ|_ dS(sdConstructor: 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)iszero denominatorN( Rtnumt TypeErrortdentZeroDivisionErrorRtgRtselfRR(RRRR((Rt__init__!s    cCs|iS(s7Accessor function for read-only 'num' attribute of Rat.N(RR(R((Rt_get_num0scCs|iS(s7Accessor function for read-only 'den' attribute of Rat.N(RR(R((Rt_get_den5scCsd|i|ifS(s=Convert a Rat to an string resembling a Rat constructor call.s Rat(%d, %d)N(RRR(R((Rt__repr__:scCstt|ƒƒS(s=Convert a Rat to a string resembling a decimal numeric value.N(tstrR R(R((Rt__str__>scCs|id|iS(sConvert a Rat to a float.f1.0N(RRR(R((Rt __float__BscCse|idjo>yt|iƒSWqNtj otdt|ƒ‚qNXntdt|ƒ‚dS(s,Convert a Rat to an int; self.den must be 1.is%s too large to convert to intscan't convert %s to intN(RRRRt OverflowErrortreprt ValueError(R((Rt__int__FscCs8|idjot|iƒSntdt|ƒ‚dS(s-Convert a Rat to an long; self.den must be 1.iscan't convert %s to longN(RRRRR R(R((Rt__long__PscCs€t|ƒot|ƒ}nt|ƒo3t|i|i|i|i|i|iƒSnt|ƒot|ƒ|Snt S(s$Add two Rats, or a Rat and a number.N( RtotherR RRRRR R tNotImplemented(RR#((Rt__add__Vs   cCs€t|ƒot|ƒ}nt|ƒo3t|i|i|i|i|i|iƒSnt|ƒot|ƒ|Snt S(s)Subtract two Rats, or a Rat and a number.N( RR#R RRRRR R R$(RR#((Rt__sub__cs   cCs€t|ƒot|ƒ}nt|ƒo3t|i|i|i|i|i|iƒSnt|ƒo|t|ƒSnt S(s9Subtract two Rats, or a Rat and a number (reversed args).N( RR#R RRRRR R R$(RR#((Rt__rsub__ns   cCs}t|ƒo%t|i|i|i|iƒSnt|ƒot|i||iƒSnt|ƒot|ƒ|Snt S(s)Multiply two Rats, or a Rat and a number.N( RR#R RRRRR R R$(RR#((Rt__mul__ys %  cCs}t|ƒo%t|i|i|i|iƒSnt|ƒot|i|i|ƒSnt|ƒot|ƒ|Snt S(s'Divide two Rats, or a Rat and a number.N( RR#R RRRRR R R$(RR#((Rt __truediv__…s %  cCs}t|ƒo%t|i|i|i|iƒSnt|ƒot||i|iƒSnt|ƒo|t|ƒSnt S(s7Divide two Rats, or a Rat and a number (reversed args).N( RR#R RRRRR R R$(RR#((Rt __rtruediv__‘s %  cCsJt|ƒot|ƒ}nt|ƒptSn||}|i|iS(s.Divide two Rats, returning the floored result.N( RR#R RR$RRRR(RR#R((Rt __floordiv__s   cCs||}|i|iS(s>Divide two Rats, returning the floored result (reversed args).N(R#RRRR(RR#R((Rt __rfloordiv__¦s cCsNt|ƒot|ƒ}nt|ƒptSn||}||||fS(s2Divide two Rats, returning quotient and remainder.N(RR#R RR$RR(RR#R((Rt __divmod__«s   cCs?t|ƒot|ƒ}nt|ƒptSnt||ƒS(sBDivide two Rats, returning quotient and remainder (reversed args).N(RR#R RR$tdivmodR(RR#((Rt __rdivmod__´s   cCst||ƒdS(sTake one Rat modulo another.iN(R.RR#(RR#((Rt__mod__¼scCst||ƒdS(s,Take one Rat modulo another (reversed args).iN(R.R#R(RR#((Rt__rmod__ÀscCs‡t|ƒo!|idjo |i|jSnt|ƒo'|i|ijo|i|ijSnt|ƒot|ƒ|jSntS(sCompare two Rats for equality.iN( RR#RRRRR R R$(RR#((Rt__eq__Äs ! ' cCs ||j S(s Compare two Rats for inequality.N(RR#(RR#((Rt__ne__Îs("t__name__t __module__t__doc__t __slots__RRtpropertytNoneRRRRRRR!R"R%t__radd__R&R'R(t__rmul__R)t__div__R*t__rdiv__R+R,R-R/R0R1R2R3(((RR s<                 t RatTestCasecBs_tZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z RS( s3Unit tests for Rat class and its support utilities.cCs[|itddƒdƒ|itddƒdƒ|itddƒdƒ|itddƒdƒ|itd dƒd ƒ|itdd ƒdƒ|itd d ƒd ƒx¥tdd ƒD]”}x‹tdd ƒD]z}|it||ƒd jƒ|it| |ƒd jƒ|it|| ƒd jƒ|it| | ƒd jƒqÕWq¿WdS( Ni i iiii iidiöÿÿÿiþÿÿÿii(Rt assertEqualRtrangetitjtassert_(RRARB((Rttest_gcdÕsc Cstddƒ}|i|idƒ|i|idƒtddƒ}|i|idƒ|i|idƒtddƒ}|i|idƒ|i|idƒtd dƒ}|i|idƒ|i|idƒtd dƒ}|i|idƒ|i|idƒtd ƒ}|i|id ƒ|i|id ƒytd d ƒ}Wntj onX|id ƒxšdddfghdtt f D]w}yt|ƒ}Wnt j onX|id|ƒytd |ƒ}Wnt j oq“X|id|ƒq“WdS(Ni iiil liñÿÿÿiþÿÿÿiöÿÿÿiiis(Rat(1, 0) didn't raise ZeroDivisionErrort0f0.0x0.00.0sRat(%r) didn't raise TypeErrors!Rat(1, %r) didn't raise TypeError( R RRR?RRRtfailR9tunittesttbadR(RRRH((Rttest_constructoräsF  "cCs°|itddƒtddƒdƒ|itddƒdtddƒƒ|idtddƒtddƒƒ|idtddƒdƒ|itddƒddƒdS(Niiiif1.0f1.5(RR?R (R((Rttest_add s &&&cCs¹|itddƒtddƒtddƒƒ|itddƒdtddƒƒ|idtddƒtddƒƒ|itddƒdd ƒ|idtddƒd ƒdS( Niiiii iif1.0f0.5(RR?R (R((Rttest_subs /&&cCs§|itddƒtddƒtddƒƒ|itddƒddƒ|idtddƒdƒ|itddƒddƒ|idtddƒdƒdS( Niiiii if0.5f1.0(RR?R (R((Rttest_muls /cCs¶|itddƒtddƒtddƒƒ|itddƒdtddƒƒ|idtdƒtddƒƒ|idtd dƒd ƒ|itd dƒdd ƒdS( Ni iiiii if3.0if1.5(RR?R (R((Rttest_div s /&#cCs~|itdƒtdƒdƒ|itddƒtddƒdƒ|itdƒddƒ|idtdƒdƒdS(Ni iii(RR?R (R((Rt test_floordiv's &cCs{|itdƒtddƒƒ|itdƒdƒ|idtdƒƒ|itdƒdƒ|idtdƒƒdS(Ni iif10.0(RR?R (R((Rttest_eq-s cBs edUdS(N(t future_test(R((Rttest_future_div4s( R4R5R6RDRIRJRKRLRMRNRORQ(((RR>Ò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) cCstitƒdS(N(t test_supportt run_unittestR>(((Rt test_mainCst__main__(R6RGttestRRRRR RtobjectR tTestCaseR>RPRTR4( RRR>RRRGRR R RTRP((Rt?s      ·g