ó {G_Tc@ssdZddlmZddlmZddlZddlZddlZddlZddl Z ddl Z ddl m Z m Z ddl mZmZejZejZe jejdƒjdƒd ƒZd efd „ƒYZd efd „ƒYZdejfd„ƒYZde jfd„ƒYZd„Zde jfd„ƒYZd„Z e!dkroe ƒndS(sTests for Lib/fractions.py.iÿÿÿÿ(tDecimal(t run_unittestN(tcopytdeepcopy(tdumpstloadstdoubletIEEEstest requires IEEE 754 doublest DummyFloatcBskeZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z e Z d ZRS( s8Dummy float class for testing comparisons with FractionscCs+t|tƒstdƒ‚n||_dS(Ns-DummyFloat can only be initialized from float(t isinstancetfloatt TypeErrortvalue(tselfR ((s//usr/local/lib/python2.7/test/test_fractions.pyt__init__scCsUt|tjƒr+|tj|jƒ|ƒSt|tƒrM||j|jƒStSdS(N(R tnumberstRationaltFt from_floatR RtNotImplemented(R tothertop((s//usr/local/lib/python2.7/test/test_fractions.pyt_richcmps cCs|j|tjƒS(N(Rtoperatorteq(R R((s//usr/local/lib/python2.7/test/test_fractions.pyt__eq__%scCs|j|tjƒS(N(RRtle(R R((s//usr/local/lib/python2.7/test/test_fractions.pyt__le__&scCs|j|tjƒS(N(RRtlt(R R((s//usr/local/lib/python2.7/test/test_fractions.pyt__lt__'scCs|j|tjƒS(N(RRtge(R R((s//usr/local/lib/python2.7/test/test_fractions.pyt__ge__(scCs|j|tjƒS(N(RRtgt(R R((s//usr/local/lib/python2.7/test/test_fractions.pyt__gt__)scCststdƒ‚dS(Ns/__float__ should not be invoked for comparisons(tFalsetAssertionError(R ((s//usr/local/lib/python2.7/test/test_fractions.pyt __float__,scCststdƒ‚dS(Ns-__sub__ should not be invoked for comparisons(R"R#(R R((s//usr/local/lib/python2.7/test/test_fractions.pyt__sub__0sN(t__name__t __module__t__doc__RRRRRRR!R$R%t__rsub__tNonet__hash__(((s//usr/local/lib/python2.7/test/test_fractions.pyRs         t DummyRationalcBsSeZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z dZ RS( sATest comparison of Fraction with a naive rational implementation.cCs-t||ƒ}|||_|||_dS(N(tgcdtnumtden(R R.R/tg((s//usr/local/lib/python2.7/test/test_fractions.pyR;s cCs<t|tjƒr4|j|jko3|j|jkStSdS(N(R t fractionstFractionR.t _numeratorR/t _denominatorR(R R((s//usr/local/lib/python2.7/test/test_fractions.pyR@scCs|j|j|j|jkS(N(R.R4R/R3(R R((s//usr/local/lib/python2.7/test/test_fractions.pyRGscCs|j|j|j|jkS(N(R.R4R/R3(R R((s//usr/local/lib/python2.7/test/test_fractions.pyR!JscCs|j|j|j|jkS(N(R.R4R/R3(R R((s//usr/local/lib/python2.7/test/test_fractions.pyRMscCs|j|j|j|jkS(N(R.R4R/R3(R R((s//usr/local/lib/python2.7/test/test_fractions.pyRPscCststdƒ‚dS(Ns__float__ should not be invoked(R"R#(R ((s//usr/local/lib/python2.7/test/test_fractions.pyR$UsN( R&R'R(RRRR!RRR$R*R+(((s//usr/local/lib/python2.7/test/test_fractions.pyR,8s       t DummyFractioncBseZdZRS(s6Dummy Fraction subclass for copy and deepcopy testing.(R&R'R((((s//usr/local/lib/python2.7/test/test_fractions.pyR5\stGcdTestcBseZd„ZRS(cCsþ|jdtddƒƒ|jdtddƒƒ|jdtddƒƒ|jdtddƒƒ|jdtddƒƒ|jdtddƒƒ|jdtddƒƒ|jdtddƒƒ|jdtdd ƒƒ|jd td d ƒƒdS( Niiiÿÿÿÿiiéÿÿÿii ixiTiôÿÿÿiˆÿÿÿ(t assertEqualR-(R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestMiscas(R&R'R8(((s//usr/local/lib/python2.7/test/test_fractions.pyR6_scCs|j|jfS(N(t numeratort denominator(tr((s//usr/local/lib/python2.7/test/test_fractions.pyt _componentsnst FractionTestcBs eZd„Zd„Zd„Zed„ƒZd„Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zd „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(cCs0|jt|ƒt|ƒƒ|j||ƒdS(s4Asserts that both the types and values are the same.N(R7ttype(R texpectedtactual((s//usr/local/lib/python2.7/test/test_fractions.pytassertTypedEqualstscOsUy|||ŽWn)|k r<}|j|t|ƒƒnX|jd|jƒdS(s@Asserts that callable(*args, **kwargs) raises exc_type(message).s %s not raisedN(R7tstrtfailR&(R texc_typetmessagetcallabletargstkwargste((s//usr/local/lib/python2.7/test/test_fractions.pytassertRaisesMessageys cCs|jdttƒƒƒ|jdttdƒƒƒ|jdtttddƒƒƒƒ|jd ttddƒƒƒ|jd!ttddƒƒƒ|jd"ttddƒƒƒ|jd#ttdd ƒƒƒ|jd$ttdd ƒƒƒ|jd&ttd'ƒƒƒ|jd(tttddƒd ƒƒƒ|jd)ttdtddƒƒƒƒ|jd*tttddƒtddƒƒƒƒ|jtdtddƒ|jttd+ƒ|jttddƒ|jttddƒ|jttddƒdS(,Niiiiiÿÿÿÿiþÿÿÿiii iiiMi i÷ÿÿÿiöÿÿÿi i¶ iµ iiciqsFraction(12, 0)i gø?y@s3/2yyð?(ii(ii(ii(iÿÿÿÿi(iÿÿÿÿi(ii(ii(iilm+?ÐR(lm+?ÐRilm+?ÐR(iiM(i÷ÿÿÿi(i¶ iµ yø?@(R7R<RRJtZeroDivisionErrort assertRaisesR (R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestInitƒs$%((1  cCs£|jd ttdƒƒƒ|jdttdƒƒƒ|jdttd ƒƒƒ|jtttd ƒƒ|jtttd ƒƒ|jtttd ƒƒdS(Niig@iig€IÍÌÌÌÌÌ I€gš™™™™™¹?tnantinfs-inf(ii(ii(IÍÌÌÌÌÌ I€(R7R<RRLR R (R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestInitFromFloat›s cCsÎ|jdtttdƒƒƒƒ|jdtttdƒƒƒƒ|jdtttd ƒƒƒƒ|jtttd ƒƒ|jtttd ƒƒ|jtttd ƒƒ|jtttd ƒƒdS(Ni i s1.1iiÈs3.5e-2iis.000e20RNtsnanROs-inf(i i (iiÈ(ii(R7R<RRRLR (R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestInitFromDecimal¥s   cCs„|jd0ttdƒƒƒ|jd1ttdƒƒƒ|jd2ttdƒƒƒ|jd3ttd ƒƒƒ|jd4ttd ƒƒƒ|jd5ttd ƒƒƒ|jd6ttdƒƒƒ|jd7ttdƒƒƒ|jd8ttdƒƒƒ|jd9ttdƒƒƒ|jd:ttdƒƒƒ|jd;ttdƒƒƒ|jd<ttdƒƒƒ|jd=ttdƒƒƒ|jd>ttdƒƒƒ|jtdtdƒ|jtdtdƒ|jtd td!ƒ|jtd"td#ƒ|jtd$td%ƒ|jtd&td'ƒ|jtd(td)ƒ|jtd*td+ƒ|jtd,td-ƒ|jtd.td/ƒdS(?Niit5iis3/2s +3/2iýÿÿÿs-3/2 i s 013/02 u 013/02 is 3.2 iðÿÿÿu -3.2 u -3. u .6 i5 s32.e-5i@Bs1E+06iôÏÿÿs-1.23e4is .0e+0 s-0.000e0sFraction(3, 0)s3/0s"Invalid literal for Fraction: '3/'s3/s"Invalid literal for Fraction: '/2's/2s$Invalid literal for Fraction: '3 /2's3 /2s$Invalid literal for Fraction: '3/+2's3/+2s%Invalid literal for Fraction: '+ 3/2's+ 3/2s#Invalid literal for Fraction: '3a2't3a2s%Invalid literal for Fraction: '3/7.2's3/7.2s%Invalid literal for Fraction: '3.2/7's3.2/7s!Invalid literal for Fraction: '.'t.(ii(ii(ii(iýÿÿÿi(i i(i i(ii(iðÿÿÿi(iýÿÿÿi(ii(ii5 (i@Bi(iôÏÿÿi(ii(ii(R7R<RRJRKt ValueError(R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestFromString±sZ         cCsÂtddƒ}|jddƒ|jd t|ƒƒ|jtt|ddƒ|jtt|ddƒ|jd t|ƒƒd |_d|_|jd t|ƒƒ|j td dƒ|ƒdS( NiiiiR9i R:ii(ii(ii(ii( RRR7R<RLtAttributeErrortsetattrR3R4tassertNotEqual(R R;((s//usr/local/lib/python2.7/test/test_fractions.pyt testImmutableés  cCsŸ|jttjdƒ|jdttjdƒƒƒd}|j|dfttj|ƒƒƒ|jdttjdƒƒƒ|jdttjdƒƒƒ|jdttjd ƒƒƒ|jdttjd ƒƒƒ|jtdƒttjd ƒƒƒ|jdttjdƒƒƒ|jdttjdƒƒƒd}||}|jtdtj|ƒ|jtdtj| ƒ|jtdtj|ƒdS(Niy@i iIé}ô"ig€g$@iûÿÿÿigÀll+?ÐRgöJáÇ-µDiIÍÌÌÌÌÌ Igš™™™™™ @gðsCannot convert inf to Fraction.s Cannot convert -inf to Fraction.sCannot convert nan to Fraction.y@@(i i(ii(i i(iûÿÿÿi(ll+?ÐRilm+?ÐR(IÍÌÌÌÌÌ I(RLR RRR7R<R RJ(R tbigintRORN((s//usr/local/lib/python2.7/test/test_fractions.pyt testFromFloatùs0% %   cCs†|jttjdƒ|jtddƒtjdƒƒ|jtdƒtjtdƒƒƒ|jtddƒtjtdƒƒƒ|jtdd ƒtjtd ƒƒƒ|jtd ƒtjtd ƒƒƒ|jdtddƒtjtddd ƒƒƒ|jtdtjtdƒƒ|jtdtjtdƒƒ|jtdtjtdƒƒ|jtdtjtdƒƒdS(Niy@i iis-0is0.5iès5e-3iˆt5e3is0.t9s$Cannot convert Infinity to Fraction.ROs%Cannot convert -Infinity to Fraction.s-infsCannot convert NaN to Fraction.RNs Cannot convert sNaN to Fraction.RQy@@l©7§3M“e'(RLR Rt from_decimalR7RRJ(R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestFromDecimals("%((%cCsAtdƒ}|j|jdƒtddƒƒ|j|jdƒ tddƒƒ|j|jdƒtddƒƒ|j|jdƒtddƒƒ|jtd d ƒjd ƒtd ƒƒ|jtd d ƒjd ƒtdd ƒƒ|jtdƒjdƒtdƒƒx-dD]%}|jtdtd ƒj|ƒqWdS(Ns3.1415926535897932i'iciqiþÿÿipiMijiÉiÈidiieifiiÿÿÿÿs$max_denominator should be at least 1(iiÿÿÿÿ(RR7tlimit_denominatorRJRV(R trpiti((s//usr/local/lib/python2.7/test/test_fractions.pyttestLimitDenominator+s "#""(+% cCsC|jdtjtddƒƒƒ|jdttddƒƒƒ|jdtjtddƒƒƒ|jtttddƒƒƒ|jtttddƒƒƒ|jd t tddƒƒƒ|j t t t d d d ƒƒ|j d dt tt d d d ƒt dd dƒƒƒƒ|jdttddƒƒƒdS(Niÿÿÿÿiõÿÿÿi ii iiigš™™™™™¹?t2it7g@t3t1yyš™™™™™¹?(RAtmathttruncRtintR7R"tbooltTrueR RLt OverflowErrortlongtassertAlmostEqualtcomplex(R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestConversions9s""! 2cCsû|jtddƒtddƒtddƒƒ|jtddƒtddƒtddƒƒ|jtddƒtddƒtddƒƒ|jtddƒtddƒtddƒƒ|jdtddƒtddƒƒ|jdtddƒtdƒƒ|jtdd ƒtd d ƒtd dƒƒ|jtd d ƒtdd ƒtd ƒƒ|jtd d ƒtdd ƒtdƒƒ|jdtdƒtddƒƒ|jtddƒtddƒ ƒ|jtttdƒtddƒƒdS(Niii iiýÿÿÿiii iiiùÿÿÿiig@iÿÿÿÿlm+?ÐRlm+?ÐR(R7RRARLRVtpow(R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestArithmeticJs////&#/,,##cCsZ|jtddƒtddƒdƒ|jdtddƒdƒ|jdtddƒdƒ|jtddƒdtddƒƒ|jddtddƒƒ|jddtddƒƒ|jtddƒtddƒdƒ|jdtddƒdƒ|jdtddƒdƒ|jtd dƒdtddƒƒ|jd dtddƒƒ|jddtddƒƒ|jtddƒtddƒdƒ|jd tddƒdƒ|jd tddƒd!ƒ|jtddƒdtddƒƒ|jd dtddƒƒ|jd"d#tddƒƒ|jtddƒtddƒdƒ|jd tddƒdƒ|jd$tddƒd%ƒ|jtddƒdtddƒƒ|jd dtddƒƒ|jd&d'tddƒƒ|jd tddƒdƒ|jdtddƒdƒ|jddtddƒƒ|jd(d)tddƒƒ|jd dtddƒƒ|jtddƒtddƒdƒ|jd tddƒdƒ|jtd dƒdtddƒƒ|jddtddƒƒ|jtddƒtddƒdƒ|jtddƒtddƒdƒ|jd tddƒdƒ|jd*tddƒd+ƒ|jddtddƒƒ|jttdtddƒƒ|jtddƒdtddƒƒ|jddtddƒƒ|jddtddƒƒ|jd,d-tddƒƒdS(.Ni i igš™™™™™ñ?gð?yi÷ÿÿÿgÍÌÌÌÌÌì¿i gÍÌÌÌÌÌì?gš™™™™™¹?g$@igiiidiþÿÿÿiiiÿÿÿÿg@gÐ?yš™™™™™ñ?yð?yš™™™™™ñ?yð?yÍÌÌÌÌÌì¿yð?yÍÌÌÌÌÌì?yð?yš™™™™™¹?yð?yš™™™™™¹?yð?yš™™™™™¹?yð?y$@yð?lm+?ÐRl€dê&Oá!yš™™™™™¹?yð?yð?yð?(RARRLRVRt(R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestMixedArithmeticYsV&&&&&&&&&&&&&cCsy|jtdtjtddƒtdƒƒ|jtdtjtdƒtddƒƒ|jtddƒtdƒƒdS( Ns;unsupported operand type(s) for +: 'Fraction' and 'Decimal'ii s 3.1415926s;unsupported operand type(s) for +: 'Decimal' and 'Fraction'iis2.5(RJR RtaddRRRZ(R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestMixingWithDecimalscCsQ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒdS(Niii(t assertTrueRt assertFalse(R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestComparisonsœs%%%%%%%%cCs|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒ|jtddƒtddƒkƒdS(Niiiii(RyRR,Rz(R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestComparisonsDummyRational§s8%%%%%%%%%%%%%%%%%%%%%%%%%%%cCsëtddƒ}tddƒ}|j||kƒ|j||kpM||kƒ|j||kƒ|j||ko||kƒ|j||kƒ|j||kp±||kƒ|j||kƒ|j||koã||kƒdS(Ngð?g@ii(RRRyRz(R txty((s//usr/local/lib/python2.7/test/test_fractions.pyttestComparisonsDummyFloatÇscCs°|jdtddƒkƒ|jdtddƒkƒ|jtddƒdkƒ|jtddƒdkƒ|jtddƒdkƒ|jtddƒdkƒ|jdtddƒkƒ|jdtddƒkƒ|jtd ƒtddƒkƒ|jtd ƒtd d ƒkƒ|jtd ƒtddƒkƒ|jtddƒtd ƒkƒ|jtddƒtd ƒkƒ|jtddƒtd ƒkƒdS(Niiiiig333333ã?gš™™™™™Ù?gà?ROs-infii RNiýÿÿÿiii ii§ÿÿÿ(RyRRzR (R ((s//usr/local/lib/python2.7/test/test_fractions.pyt testMixedLessÓs"""""cCs°|jdtddƒkƒ|jdtddƒkƒ|jtddƒdkƒ|jtddƒdkƒ|jdtddƒkƒ|jdtddƒkƒ|jtddƒdkƒ|jtddƒdkƒ|jtd ƒtddƒkƒ|jtd ƒtd d ƒkƒ|jtd ƒtddƒkƒ|jtddƒtd ƒkƒ|jtddƒtd ƒkƒ|jtddƒtd ƒkƒdS(Ngà?iig333333ã?gš™™™™™Ù?iiiROs-infii RNiýÿÿÿiii ii§ÿÿÿ(RyRRzR (R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestMixedLessEqualås"""""cCsç|jtdƒtdƒkƒ|jdtttjdƒdƒƒkƒ|jdttjdƒdƒkƒ|jdttjdƒdƒkƒ|jdttjdƒdƒkƒ|jdttjdƒdƒkƒdS(Ni igöJáÇ-µDilm+?ÐRlm+?ÐR(RzRR RjRkRy(R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestBigFloatComparisonsös ,&&&cCsg|jtdƒtd ƒkƒ|jttjtd ƒtd ƒƒ|jttjtd ƒtd ƒƒtddƒ}tddƒ}tddƒ}|j||kƒ|j||kƒ|j||kƒ|j||kƒx~tj tjtjtj fD]^}|jt|||ƒ|jt|||ƒ|jt|||ƒ|jt|||ƒqWdS(Ni iiigØ?ggš™™™™™É?lm+?ÐRlm+?ÐRlm+?ÐRlm+?ÐRlm+?ÐRlm+?ÐR( RzRRrRLR RR RRyRR(R R}tztwR((s//usr/local/lib/python2.7/test/test_fractions.pyttestBigComplexComparisonss%%%cCsl|jdtddƒkƒ|jdtddƒkƒ|jtddƒdkƒ|jtddƒdkƒ|jdtddƒkƒ|jdtddƒkƒ|jtddƒdkƒ|jtddƒdkƒ|jtddƒtd ƒkƒ|jtd ƒtdd ƒkƒ|jtddƒtd ƒkƒ|jtd ƒtddƒkƒdS( Ngà?iig333333ã?gš™™™™™Ù?iiiRNiROs-inf(RyRRzR (R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestMixedEquals"""cCsœ|jdttddƒƒƒ|jdttdƒƒƒ|jdttdd ƒƒƒ|jd ttddƒƒƒ|jd ttddƒƒƒdS(NsFraction(7, 3)iis Fraction(6283185307, 2000000000)s 3.1415926535s#Fraction(-1, 100000000000000000000)ii is7/3Rgl Fµx:^Vlûÿÿÿ Fµx:^V(R7treprRRB(R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestStringification s  cCss|jtdƒttddƒƒƒ|jtdƒttdƒƒƒ|jttd ƒƒttd ƒƒƒdS( Ng@iii i2il +ÛO¦±tC3’y+v°l +ÛO¦±tC3’y+v°lm+?ÐRlm+?ÐR(R7thashRRZR (R ((s//usr/local/lib/python2.7/test/test_fractions.pyttestHash)s%"c CsÁtdƒ}d|dddddf\}}}}}}}xkt||ƒtdd ƒkr©|}|||d}}|||d}}|||}||7}q?W|jtj|ƒdS( Niiiii i ii iÊš;(RtabsRqRjtpi( R tthreetlaststttstntnatdtda((s//usr/local/lib/python2.7/test/test_fractions.pyttestApproximatePi.s 0"cCsËtdƒ}ddtdƒdddf\}}}}}}xot||ƒtddƒkr­|}|d7}|||d9}|||9}|d9}||||7}q?W|jtjdƒ|ƒdS(Niii i iiÿÿÿÿiÊš;(RR‹RqRjtcos(R R}RdRŽRtfactR.tsign((s//usr/local/lib/python2.7/test/test_fractions.pyttestApproximateCos1;s 0"  cCsòtddƒ}tddƒ}|j|tt|ƒƒƒ|jt|ƒtt|ƒƒƒ|jt|ƒtt|ƒƒƒ|jt|ƒtt|ƒƒƒ|jt|ƒtt|ƒƒƒ|j |t|ƒƒ|j |t|ƒƒdS(Ni i( RR5R7RRtidRRRZRA(R R;tdr((s//usr/local/lib/python2.7/test/test_fractions.pyttest_copy_deepcopy_pickleIs""""cCs,tddƒ}|jtt|ddƒdS(Ni itai (RRLRXRY(R R;((s//usr/local/lib/python2.7/test/test_fractions.pyt test_slotsTs(R&R'RARJRMtrequires_IEEE_754RPRRRWR[R]RaReRsRuRvRxR{R|RR€RR‚R…R†RˆRŠR•R™RœRž(((s//usr/local/lib/python2.7/test/test_fractions.pyR=rs8   8       7       cCstttƒdS(N(RR=R6(((s//usr/local/lib/python2.7/test/test_fractions.pyt test_mainYst__main__("R(tdecimalRttest.test_supportRRjRRR1tsystunittestRRtcPickleRRR2RR-t skipUnlessR t __getformat__t startswithRŸtobjectRR,R5tTestCaseR6R<R=R R&(((s//usr/local/lib/python2.7/test/test_fractions.pyts2         #$ ÿè