B
    u9a9P                 @   s   d dl Z d dlZd dlZd dlZd dlZeedddkrBededej	ej
B jZdd
dZdZG dd dejZedkre  dS )    Nfloat_repr_style ZshortzHcorrectly-rounded string->float conversions not available on this systemam      # A numeric string consists of:
    (?P<sign>[-+])?          # an optional sign, followed by
    (?=\d|\.\d)              # a number with at least one digit
    (?P<int>\d*)             # having a (possibly empty) integer part
    (?:\.(?P<frac>\d*))?     # followed by an optional fractional part
    (?:E(?P<exp>[-+]?\d+))?  # and an optional exponent
    \Z
5      c          	   C   s,  t | }|dkrtd|dp$d}t|d| }t|dpFdt| }|dd	k}|d
t|d  d
td|   }	}
|	s|rdS dS |	 |
  }||dkr|	|? n|	| > |
k7 }t||| }|	t| d> |
t|d>  }	}
t|	|
\}}d| |
ks(d| |
krR|d@ rR|d7 }| |d krR|d }|d7 }| |krn||| ksrt| |ks||| kst||  |kr|rdS dS |s|rdS dS d|d d  }d|d d  }||> ||  }}d	|rd	nd|d|  |d|  ||d|  S )zConvert a finite decimal string to a hex string representing an
    IEEE 754 binary64 float.  Return 'inf' or '-inf' on overflow.
    This function makes no use of floating-point arithmetic at any
    stage.Nzinvalid numeric stringZfracr   intexp0sign-
   r   z	-0x0.0p+0z0x0.0p+0      z-infinf      z{}0x{:x}.{:0{}x}p{:+d}   )
strtod_parser
ValueErrorgroupr   lenmax
bit_lengthdivmodAssertionErrorformat)smant_digmin_expmax_expmZfractionZintpartr   negativeabdeqrZhexdigsshift r)   !/usr/lib/python3.7/test_strtod.pystrtod   sF    $" &  

r+   r   c               @   sv   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	e
jje
jjd ddddd Zdd Zdd ZdS )StrtodTestsc          	   C   sx   yt |}W n> tk
r4   |d dkr,dnd}Y n  tk
rJ   d}Y n
X | }t|}| ||d||| dS )zCompare the result of Python's builtin correctly rounded
        string->float conversion (using float) to a pure Python
        correctly rounded string->float implementation.  Fail if the
        two methods give different results.r   r   z-infr   zmemory errorzEIncorrectly rounded str->float conversion for {}: expected {}, got {}N)floatOverflowErrorMemoryErrorhexr+   assertEqualr   )selfr   ZfsZgotZexpectedr)   r)   r*   check_strtodW   s    
zStrtodTests.check_strtodc       
      C   s`  xXdD ]N}dd|   }dd|   }|d dkr>|d7 }xt tD ]}t||d| }}x"|d dkr|d |d  }}qfW |d d	kst|| }}xL|d
k rd||}	| |	 d|dd  |d }	| |	 |d9 }qW || }}xX|d
k rRd||}	| |	 d|dd  |d }	| |	 |d9 }|d8 } qW qJW qW d S )N)r      r         l       r4   l       r   r   r   r   )r   r      	   l      Fx:^V z{}e{}(   )range	TEST_SIZErandom	randranger   r   r3   )
r2   kupperlowerinr%   digitsexponentr   r)   r)   r*   test_short_halfway_casesj   s2    






z$StrtodTests.test_short_halfway_casesc             C   s   xt dt D ]}td}t|d\}}|r@|d |d  }}|d8 }d| d |d  }}|dkrt||> }d}n|d|   }|}d	||}| | qW d S )
Nd   l          l          r   i2  r   r   r4   z{}e{})r:   r;   r<   r=   r   r   r3   )r2   rA   bitsr%   r    rC   rD   r   r)   r)   r*   test_halfway_cases   s    
zStrtodTests.test_halfway_casesc       	      C   s   ddddg}xn|D ]f\}}}xZt dD ]N}|td| d|  }|}d||}| | |d	9 }|d	9 }|d
8 }q&W qW d S )N)l     9V iiV  )l   %o$CK i!  i  )l   jT& iiM  )r   iiM  i  r   z{}e{}r   r   )r:   r<   r=   r   r3   )	r2   Z
boundariesrB   r%   ujrC   rD   r   r)   r)   r*   test_boundaries   s    
zStrtodTests.test_boundariesc             C   sb   x\t ddD ]N}d|  dd  }x6t tD ]*}|tdd }d||}| | q,W qW d S )	Nipir   r   i3  ii  z{}e{})r:   r;   r<   r=   r   r3   )r2   rD   baserK   rC   r   r)   r)   r*   test_underflow_boundary   s    z#StrtodTests.test_underflow_boundaryc             C   s\   xVdD ]N}d| }x@t dt D ]0}t|}tdd}d||}| | q W qW d S )N)r4   r      r5   r            r6   r9   )   2   r   ipi  z{}e{})r:   r;   r<   r=   r   r3   )r2   ZndigsZdig10rA   rC   rD   r   r)   r)   r*   test_bigcomp   s    

zStrtodTests.test_bigcompc          
      sT  d d}xDt dD ]6}x.t tD ] }t|}td}|d fddt |D 7 }tdd	gr|d
7 }td}|d fddt |D 7 }nd}tdd	gr|tddg7 }|t|7 }tdd}|d fddt |D 7 }|| r| | q&yt| W n tk
r:   Y q&X d	s&t	dq&W qW d S )NZ000000123456789)+r   r   i  r4   r   c             3   s   | ]}t  V  qd S )N)r<   choice).0_)rC   r)   r*   	<genexpr>   s    z+StrtodTests.test_parsing.<locals>.<genexpr>TF.c             3   s   | ]}t  V  qd S )N)r<   rW   )rX   rY   )rC   r)   r*   rZ      s   r   r%   Er   r   c             3   s   | ]}t  V  qd S )N)r<   rW   )rX   rY   )rC   r)   r*   rZ      s   zexpected ValueError)
r:   r;   r<   rW   r=   joinr3   r-   r   r   )r2   ZsignsrA   rK   r   Zintpart_lenZfracpart_lenZexponent_lenr)   )rC   r*   test_parsing   s4    

 

zStrtodTests.test_parsingr   r   F)sizeZmemuseZdry_runc          	   C   s`   dd|  }|  t t| W d Q R X ~dd|  d }|  t t| W d Q R X ~d S )Nz1.1z0.r	   )ZassertRaisesr   r-   )r2   maxsizer   r)   r)   r*   test_oversized_digit_strings   s    z(StrtodTests.test_oversized_digit_stringsc             C   s   dd }dd }|  t|dd |  t|dd |  t|dd |  t|dd |  t|dd |  t|dd d S )	Nc             S   s   d d| d  | S )z* Long string with value 1.0 and exponent nz	0.{}1e+{}r	   r   )r   )rB   r)   r)   r*   positive_exp  s    z6StrtodTests.test_large_exponents.<locals>.positive_expc             S   s   d d|  | S )z+ Long string with value 1.0 and exponent -nz1{}e-{}r	   )r   )rB   r)   r)   r*   negative_exp  s    z6StrtodTests.test_large_exponents.<locals>.negative_expi'  g      ?i N  i0u  )r1   r-   )r2   rc   rd   r)   r)   r*   test_large_exponents  s    z StrtodTests.test_large_exponentsc          ,   C   sx   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,g,}x|D ]}|  | qbW d S )-Nz02183167012312112312312.23538020374420446192e-370z712579816049008305546974391768996369464963024663104e-357z717489628565202117263145367596028389348922981857013e-357z718487398785991994634182916638542680759613590482273e-357z732002864200581033134358724675198044527469366773928e-358z794393431193180696942841837085033647913224148539854e-358z773608278998966969345824653500136787876436005957953e-358z764774478836417299491718435234611299336288082136054e-358z713704940134126574534878641876947980878824688451169e-357z746697445774047060960624497964425416610480524760471e-358z728639097178261763178489759107321392745108491825303e-311z1.00000000000000001e44z-1.0000000000000000100000000000000000000001e44z399999999999999994487665465554760717039532578546e-47Zo9654371763336549317990355136719971183455700459144696213413350821416312194420007991306908470147322020121018368e0a  104308485241983990666713401708072175773165034278685682646111762292409330928739751702404658197872319129036519947435319418387839758990478549477777586673075945844895981012024387992135617064532141489278815239849108105951619997829153633535314849999674266169258928940692239684771590065027025835804863585454872499320500023126142553932654370362024104462255244034053203998964360882487378334860197725139151265590832887433736189468858614521708567646743455601905935595381852723723645799866672558576993978025033590728687206296379801363024094048327273913079612469982585674824156000783167963081616214710691759864332339239688734656548790656486646106983450809073750535624894296242072010195710276073042036425579852459556183541199012652571123898996574563824424330960027873516082763671875e-1075z247032822920623295e-341z799037485700245683102805043437346965248029601286431e-373z799617639833743863161109961162881027406769510558457e-373z798852915025769345295749278351563179840130565591462e-372z799059944827693569659153042769690930905148015876788e-373z798914979205069368270421829889078356254059760327101e-372z,1000000000000000000000000000000000000000e-16z-10000000000000000000000000000000000000000e-17z=991633793189150720000000000000000000000000000000000000000e-33z;4106250198039490000000000000000000000000000000000000000e-38z*10.900000000000000012345678912345678912345a  11651287494059419563861790709256988151903479322938522856916519154189084656466977171489691608488398792047332126810029685763620092606534076968286334920536334924763766067178320990794927368304039797998410780646182269333271282839761794603623958163297658510063352026077076106072540390412314438457161207373275477458821194440646557259102208197382844892733860255628785183174541939743301249188486945446244053689504749943655197464973191717009938776287102040358299419343976193341216682148401588363162253931420379903449798213003874174172790742957567330246138038659650118748200625752770984217933648838167281879845022933912352785884444833681591202045229462491699354638895656152216187535257259042082360747878839946016222830869374205287663441403533948204085390898399055004119873046875e-1075a^  5254406533529552661096610603582028195612589849649138922565278497589560452182570597137658742514361936194432482059988700016338656575174473559922258529459120166686600002102838072098506622244175047522649953606315120077538558010753730576321577387528008403025962370502479105305382500086822727836607781816280407336531214924364088126680234780012085291903592543223403975751852488447885154107229587846409265285440430901153525136408849880173424692750069991045196209464308187671479664954854065777039726878381767789934729895619590000470366389383963331466851379030183764964083197053338684769252973171365139701890736933147103189912528110505014483268752328506004517760913030437151571912928276140468769502257147431182910347804663250851413437345649151934269945872064326973371182115272789687312946393533547747886024677951678751174816604738791256853675690543663283782215866825e-1180Z32602129298404963083833853479113577253105939995688e2Z5260212929840496308383385347911357725310593999568896e0z826021292984049630838338534791135772531059399956889601e-2Z5260212929840496308383385347911357725310593999568895e0Z5260212929840496308383385347911357725310593999568897e0Z5260212929840496308383385347911357725310593999568996e0Z5260212929840496308383385347911357725310593999568866e0z9007199254740992.00A5  179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792a9  179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497791.999a9  179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792.001z:999999999999999944488848768742172978818416595458984375e-54zA9999999999999999444888487687421729788184165954589843749999999e-54zA9999999999999999444888487687421729788184165954589843750000001e-54z0.000000000000000000000000000000000000000010000000000000000057612911342378542997169042119121403423543508714776317814976295686899169228986994124665807319451982237978882039897143840789794921875)r3   )r2   Ztest_stringsr   r)   r)   r*   test_particular  s\    
zStrtodTests.test_particularN)__name__
__module____qualname__r3   rE   rH   rL   rN   rU   r^   testZsupportZ
bigmemtestZ_2Grb   re   rf   r)   r)   r)   r*   r,   V   s   +	$"r,   __main__)r   r   r   )r<   ZunittestresysZtest.supportrj   getattrZSkipTestcompileVERBOSE
IGNORECASEmatchr   r+   r;   ZTestCaser,   rg   mainr)   r)   r)   r*   <module>   s   

9  \