ó {G_Tc@sždZddlZddlmZd„Zd„Zd„Zd„Zdefd „ƒYZ d ej fd „ƒYZ d Z d „Z edkrše ƒndS(s9Tests for binary operators on subtypes of built-in types.iÿÿÿÿN(t test_supportcCs"x|r|||}}qW|S(s1Greatest common divisor using Euclid's algorithm.((tatb((s+/usr/local/lib/python2.7/test/test_binop.pytgcds cCst|tƒpt|tƒS(s5Test whether an object is an instance of int or long.(t isinstancetinttlong(tx((s+/usr/local/lib/python2.7/test/test_binop.pytisint scCs4x-ttttfD]}t||ƒrdSqWdS(sATest whether an object is an instance of a built-in numeric type.ii(RRtfloattcomplexR(RtT((s+/usr/local/lib/python2.7/test/test_binop.pytisnumscCs t|tƒS(s6Test wheter an object is an instance of the Rat class.(RtRat(R((s+/usr/local/lib/python2.7/test/test_binop.pytisRatsR cBs"eZdZddgZddd„Zd„ZeedƒZd„Z ee dƒ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!dZ"RS(s:Rational number implemented as a normalized pair of longs.t _Rat__numt _Rat__denllcCs‰t|ƒstd|‚nt|ƒs8td|‚n|dkrPtd‚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(Rt TypeErrortZeroDivisionErrorRRRR(tselftnumtdentg((s+/usr/local/lib/python2.7/test/test_binop.pyt__init__!s    cCs|jS(s7Accessor function for read-only 'num' attribute of Rat.(R(R((s+/usr/local/lib/python2.7/test/test_binop.pyt_get_num0scCs|jS(s7Accessor function for read-only 'den' attribute of Rat.(R(R((s+/usr/local/lib/python2.7/test/test_binop.pyt_get_den5scCsd|j|jfS(s=Convert a Rat to an string resembling a Rat constructor call.s Rat(%d, %d)(RR(R((s+/usr/local/lib/python2.7/test/test_binop.pyt__repr__:scCstt|ƒƒS(s=Convert a Rat to a string resembling a decimal numeric value.(tstrR (R((s+/usr/local/lib/python2.7/test/test_binop.pyt__str__>scCs|jd|jS(sConvert a Rat to a float.gð?(RR(R((s+/usr/local/lib/python2.7/test/test_binop.pyt __float__BscCsa|jdkrJyt|jƒSWqJtk rFtdt|ƒ‚qJXntdt|ƒ‚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(RRRt OverflowErrortreprt ValueError(R((s+/usr/local/lib/python2.7/test/test_binop.pyt__int__Fs cCs3|jdkrt|jƒStdt|ƒ‚dS(s-Convert a Rat to an long; self.den must be 1.iscan't convert %s to longN(RRRR R(R((s+/usr/local/lib/python2.7/test/test_binop.pyt__long__Ps cCstt|ƒrt|ƒ}nt|ƒrVt|j|j|j|j|j|jƒSt|ƒrpt|ƒ|StS(s$Add two Rats, or a Rat and a number.(RR RRRR R tNotImplemented(Rtother((s+/usr/local/lib/python2.7/test/test_binop.pyt__add__Vs   cCstt|ƒrt|ƒ}nt|ƒrVt|j|j|j|j|j|jƒSt|ƒrpt|ƒ|StS(s)Subtract two Rats, or a Rat and a number.(RR RRRR R R#(RR$((s+/usr/local/lib/python2.7/test/test_binop.pyt__sub__cs   cCstt|ƒrt|ƒ}nt|ƒrVt|j|j|j|j|j|jƒSt|ƒrp|t|ƒStS(s9Subtract two Rats, or a Rat and a number (reversed args).(RR RRRR R R#(RR$((s+/usr/local/lib/python2.7/test/test_binop.pyt__rsub__ns   cCsnt|ƒr-t|j|j|j|jƒSt|ƒrPt|j||jƒSt|ƒrjt|ƒ|StS(s)Multiply two Rats, or a Rat and a number.(RR RRRR R R#(RR$((s+/usr/local/lib/python2.7/test/test_binop.pyt__mul__ys !  cCsnt|ƒr-t|j|j|j|jƒSt|ƒrPt|j|j|ƒSt|ƒrjt|ƒ|StS(s'Divide two Rats, or a Rat and a number.(RR RRRR R R#(RR$((s+/usr/local/lib/python2.7/test/test_binop.pyt __truediv__…s !  cCsnt|ƒr-t|j|j|j|jƒSt|ƒrPt||j|jƒSt|ƒrj|t|ƒStS(s7Divide two Rats, or a Rat and a number (reversed args).(RR RRRR R R#(RR$((s+/usr/local/lib/python2.7/test/test_binop.pyt __rtruediv__‘s !  cCsCt|ƒrt|ƒ}nt|ƒs+tS||}|j|jS(s.Divide two Rats, returning the floored result.(RR RR#RR(RR$R((s+/usr/local/lib/python2.7/test/test_binop.pyt __floordiv__s    cCs||}|j|jS(s>Divide two Rats, returning the floored result (reversed args).(RR(RR$R((s+/usr/local/lib/python2.7/test/test_binop.pyt __rfloordiv__¦s cCsGt|ƒrt|ƒ}nt|ƒs+tS||}||||fS(s2Divide two Rats, returning quotient and remainder.(RR RR#(RR$R((s+/usr/local/lib/python2.7/test/test_binop.pyt __divmod__«s    cCs8t|ƒrt|ƒ}nt|ƒs+tSt||ƒS(sBDivide two Rats, returning quotient and remainder (reversed args).(RR RR#tdivmod(RR$((s+/usr/local/lib/python2.7/test/test_binop.pyt __rdivmod__´s   cCst||ƒdS(sTake one Rat modulo another.i(R.(RR$((s+/usr/local/lib/python2.7/test/test_binop.pyt__mod__¼scCst||ƒdS(s,Take one Rat modulo another (reversed args).i(R.(RR$((s+/usr/local/lib/python2.7/test/test_binop.pyt__rmod__ÀscCsvt|ƒr(|jdko'|j|kSt|ƒrV|j|jkoU|j|jkSt|ƒrrt|ƒ|kStS(sCompare two Rats for equality.i(RRRRR R R#(RR$((s+/usr/local/lib/python2.7/test/test_binop.pyt__eq__Äs  " cCs ||k S(s Compare two Rats for inequality.((RR$((s+/usr/local/lib/python2.7/test/test_binop.pyt__ne__ÎsN(#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/R0R1R2R3t__hash__(((s+/usr/local/lib/python2.7/test/test_binop.pyR s>                t RatTestCasecBs_eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z RS( s3Unit tests for Rat class and its support utilities.cCs[|jtddƒdƒ|jtddƒdƒ|jtddƒdƒ|jtddƒdƒ|jtd dƒd ƒ|jtdd ƒdƒ|jtd d ƒd ƒx¥tdd ƒD]”}x‹tdd ƒD]z}|jt||ƒd kƒ|jt| |ƒd kƒ|jt|| ƒd kƒ|jt| | ƒd kƒqÕWq¿WdS( Ni i iiii iidiöÿÿÿiþÿÿÿii(t assertEqualRtranget assertTrue(Rtitj((s+/usr/local/lib/python2.7/test/test_binop.pyttest_gcdØsc Cs tddƒ}|j|jdƒ|j|jdƒtddƒ}|j|jdƒ|j|jdƒtddƒ}|j|jdƒ|j|jdƒtd dƒ}|j|jdƒ|j|jdƒtd dƒ}|j|jdƒ|j|jdƒtd ƒ}|j|jd ƒ|j|jd ƒytd d ƒ}Wntk ranX|jd ƒx–ddddgidttf D]s}yt|ƒ}Wntk rºnX|jd|ƒytd |ƒ}Wntk ròq‘X|jd|ƒq‘WdS(Ni iiil liñÿÿÿiþÿÿÿiöÿÿÿiiis(Rat(1, 0) didn't raise ZeroDivisionErrort0gysRat(%r) didn't raise TypeErrors!Rat(1, %r) didn't raise TypeError(( R R@RRRtfailR9tunittestR(RRtbad((s+/usr/local/lib/python2.7/test/test_binop.pyttest_constructorçsD   (  cCs°|jtddƒtddƒdƒ|jtddƒdtddƒƒ|jdtddƒtddƒƒ|jdtddƒdƒ|jtddƒddƒdS(Niiiigð?gø?(R@R (R((s+/usr/local/lib/python2.7/test/test_binop.pyttest_adds &&&cCs¹|jtddƒtddƒtddƒƒ|jtddƒdtddƒƒ|jdtddƒtddƒƒ|jtddƒdd ƒ|jdtddƒd ƒdS( Niiiii iigð?gà?(R@R (R((s+/usr/local/lib/python2.7/test/test_binop.pyttest_subs /&&cCs§|jtddƒtddƒtddƒƒ|jtddƒddƒ|jdtddƒdƒ|jtddƒddƒ|jdtddƒdƒdS( Niiiii igà?gð?(R@R (R((s+/usr/local/lib/python2.7/test/test_binop.pyttest_muls /cCs¶|jtddƒtddƒtddƒƒ|jtddƒdtddƒƒ|jdtdƒtddƒƒ|jdtd dƒd ƒ|jtd dƒdd ƒdS( Ni iiiii ig@igø?(R@R (R((s+/usr/local/lib/python2.7/test/test_binop.pyttest_div#s /&#cCs~|jtdƒtdƒdƒ|jtddƒtddƒdƒ|jtdƒddƒ|jdtdƒdƒdS(Ni iii(R@R (R((s+/usr/local/lib/python2.7/test/test_binop.pyt test_floordiv*s &cCs{|jtdƒtddƒƒ|jtdƒdƒ|jdtdƒƒ|jtdƒdƒ|jdtdƒƒdS(Ni iig$@(R@R (R((s+/usr/local/lib/python2.7/test/test_binop.pyttest_eq0s cBs edUdS(N(t future_test(R((s+/usr/local/lib/python2.7/test/test_binop.pyttest_future_div7s( R4R5R6RERJRKRLRMRNRORPRR(((s+/usr/local/lib/python2.7/test/test_binop.pyR?Õ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) cCstjtƒdS(N(Rt run_unittestR?(((s+/usr/local/lib/python2.7/test/test_binop.pyt test_mainFst__main__(R6RHttestRRRR RtobjectR tTestCaseR?RQRTR4(((s+/usr/local/lib/python2.7/test/test_binop.pyts     ºo