{G_Tc@ sddlmZddlZddlZddlZddlZddlmZeje j dj ddZ ej jZej jZej jZej jZdedeedZd Zd ejfd YZd Zed krendS(i(tdivisionN(t run_unittesttdoubletIEEEstest requires IEEE 754 doublesiicC su||Adk}t|t|}}|s>tdn|t|kr]tdn|j|j}|dkr|d||ks|dkr|d| |kr|d7}nt|tt}|t| d>|t|d>}}t||\}}d||ksAd||krN|ddkrN|d7}nt j t ||}|rq| S|S(s-Correctly-rounded true division for integers.isdivision by zeros)int/int too large to represent as a floatii( tabstZeroDivisionErrortDBL_MIN_OVERFLOWt OverflowErrort bit_lengthtmaxt DBL_MIN_EXPt DBL_MANT_DIGtdivmodtmathtldexptfloat(tatbtnegativetdtexptqtrtresult((s1/usr/local/lib/python2.7/test/test_long_future.pyttruedivs A (0 tTrueDivisionTestscB s,eZdZedZedZRS(cC sOd!}| }|j||d|j||d|j||d|j||d|jd|d|jd|d|jd|d|jd|d|jd||d?|d|jd||d?|d|jd||d?|d |jd||d?|d |j||d>d |jd ||d i|d 6|d 6}xIddddddddgD])}|jtt||WdQXqWxKddddddgD]1}t||}|j|ddj|qWx=dddd gD])}|jtt||WdQXqWdS("Nli@g?gigigԄ@gԄg?i@Bthugetmhuges float(huge)s float(mhuge)shuge / 1s huge / 2Ls huge / -1s huge / -2Ls mhuge / 100s mhuge / 100Ls1 / huges 2L / huges -1 / huges -2L / huges 100 / mhuges 100L / mhuges!expected underflow to 0 from {!r}shuge / 0s huge / 0Ls mhuge / 0s mhuge / 0Llk (t assertEqualt assertRaisesRtevaltformatR(tselfRRt namespacetoverflowt underflowRtzero((s1/usr/local/lib/python2.7/test/test_long_future.pyttest6s<      cC st|t|}}|rHtt|t|dtkrHdSytt||}Wn-tk rzd}ntk rd}nXyt||}Wn-tk rd}ntk rd}nX|j||dj ||||dS(sVerify that the result of a/b is correctly rounded, by comparing it with a pure Python implementation of correctly rounded division. b should be nonzero.iNR"t zerodivisions7Incorrectly rounded division {}/{}: expected {}, got {}( tlongR RR treprRRRRR(R RRt skip_smalltexpectedtgot((s1/usr/local/lib/python2.7/test/test_long_future.pyt check_truediv\s"+        cC s|jdd|jdd|jdd|jdd|jdd|jd+dtd|jdd dtt|jdd,d |jdd-d d.dtttttf}x|D]}xt|d|dD]l}|jddt|dddt| d|jddt|dddt| dqWqWx}ddd ddd/dddddd1g D]Q}xHtddD]7}|j|t|||j|t|| qWqWxDtdD]6}|jdtddd2d|dtdqW|jdd|jd d!xLtd"D]>}|jd|dd||jd|d|dqVWxtddd#d d$d%dd&dd3dddddd5gD]<}x3tddD]"}|jdt|||qWqWx'td'd(D]}|j|d6qWxd7d8d9gD]}xtd"D]v}tjd|}tj|d|d} |j|| |j| | |j|| |j| | q\WqIWxtd*D]} tjd"} tjdd"} tjd| } tjdd| }|j| ||j| | |j| ||j| | qWdS(:Ni{ii8iiii90iiNFidíiiiQii0&iCiiiiiiii)i2ii iii lE,J_lJbiiiii iii4i'ige~li@l(km1'}XbCK';+sQ0,52pHR!latz$hY1Qjg9i^lv.52%jSXvlPDgJ+!V!GN11? K^SelPDgJ+!V!GN11? K^Sel latz$hY1Qjg9i^lv.52%jSXvlPDgJ+!V!GN11? K^SelPDgJ+!V!GN11? K^SelHI TlDGdrY|gOs&YR5Il3qvNhiKaKP"q !a0mvK0Yy{A\< zkZ p+*eX9Ei/\;:8bG((ema! 6o}Z s'%COd YP][BTvWL? FCh_"!x"'jj4xoCD+i[9*-Jc+`S;?lcy( R,t DBL_MAX_EXPR R trangeR Rtrandomt randrange(R tbasestbaseRtmtntitMRRt_ta_bitstb_bitstxty((s1/usr/local/lib/python2.7/test/test_long_future.pyt$test_correctly_rounded_true_division|sf  3;!! !$(t__name__t __module__R%tTrueR,trequires_IEEE_754R<(((s1/usr/local/lib/python2.7/test/test_long_future.pyR5s & cC sttdS(N(RR(((s1/usr/local/lib/python2.7/test/test_long_future.pyt test_mainst__main__(t __future__RtsysR/R tunittestttest.test_supportRt skipUnlessRt __getformat__t startswithR@t float_infoR tDBL_MAXtmax_expR-tmin_expR tmant_digR RRtTestCaseRRAR=(((s1/usr/local/lib/python2.7/test/test_long_future.pyts$