
    <e9P                        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    r ej        d           ej        dej	        ej
        z            j        Zdd
ZdZ G d dej                  Zedk    r ej                     dS dS )    Nfloat_repr_style 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           	      H   	 t          |           }|t          d          |                    d          pd}t          |                    d          |z             }t          |                    d          pd          t	          |          z
  }|                    d          dk    }|d	t          |d
          z  z  d	t          d
|           z  }
}	|	s|rdndS |	                                |
                                z
  }||d
k    r|	|z	  n|	| z  |
k    z  }t          ||          |z
  }|	t          | d
          z  |
t          |d
          z  }
}	t          |	|
          \  }}d|z  |
k    sd|z  |
k    r/|dz  r*|dz  }|                                |dz   k    r
|dz  }|dz  }||                                z   |k    r|rdndS |s|rdndS d|dz
  dz  z   }d|dz
  dz  z
  }||z  ||z
  }}d                    |rdnd|d|z  z  |d|z  z  ||d|z  z             S )Nzinvalid numeric stringfracr   intexp0sign-
   r   z	-0x0.0p+0z0x0.0p+0      -infinf      z{}0x{:x}.{:0{}x}p{:+d}   )	strtod_parser
ValueErrorgroupr   lenmax
bit_lengthdivmodformat)smant_digmin_expmax_expmfractionintpartr   negativeabdeqrhexdigsshifts                    '/usr/lib/python3.11/test/test_strtod.pystrtodr1      ss    	aAy1222wwv$"H!''%..8+,,G
aggenn#
$
$s8}}
4Cwwv#%H2s3{{?"BAt$4qA  7&6{{J6 	
'AAFF!q&&aRA	--AAw("A QB

?AQNqA!Q<<DAqsQww!A#((q1u(	Q<<>>XaZ''!GAFA 	1<<>>G##!,vvu, 7&6{{J6 8A:/!G!QE:q5yqA#**R	R[	BK	AgI      r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	e
j                            e
j        j        dz   d	d
          d             Zd Zd ZdS )StrtodTestsc           	      "   	 	 t          |          }|                                }n-# t          $ r |d         dk    rdnd}Y nt          $ r d}Y nw xY wt	          |          }|                     ||d                    |||                     d S )Nr   r   r   r   zmemory errorzEIncorrectly rounded str->float conversion for {}: expected {}, got {})floathexOverflowErrorMemoryErrorr1   assertEqualr   )selfr    fsgotexpecteds        r0   check_strtodzStrtodTests.check_strtodW   s    	/
	qB &&((CC  	3 	3 	3aDCKK&&UCCC 	! 	! 	! CCC	! !993//5va3/G/G	I 	I 	I 	I 	Is   ' AAAc                    dD ]]}dd|z  z   }dd|z  z   }|dz  dk    r|dz  }t          t                    D ]$}t          j        ||d          |}}|dz  dk    r|dz  |dz   }}|dz  dk    ||}}|dk     rjd	                    ||          }	|                     |	           d	                    |d
dz  z  |dz
            }	|                     |	           |dz  }|dk     j||}}|dk     rod	                    ||          }	|                     |	           d	                    |d
dz  z  |dz
            }	|                     |	           |dz  }|dz  }|dk     o&_d S )N)r      r         l       rA   l       r   r   r   l      Fx:^V {}e{}r   (   range	TEST_SIZErandom	randranger   r?   )
r;   kupperlowerinr+   digitsexponentr    s
             r0   test_short_halfway_casesz$StrtodTests.test_short_halfway_casesj   s   ! '	" '	"AadlOEadlOEqyA~~
9%%  "  " 'ua88!1 !eqjj61q5qA !eqjj $%avoovx88A%%a(((vB2FFA%%a(((aKF voo $%avoovx88A%%a(((vB2FFA%%a(((aKFMH voo3 "'	" '	"r2   c                 L   t          dt          z            D ]}t          j        d          }t	          |d          \  }}|r
|dz   |dz
  }}|dz  }d|z  dz   |dz
  }}|dk    r||z  }d}n|d| z  z  }|}d	                    ||          }|                     |           d S )
Nd   l          l          r   i2  r   r   rA   rD   )rG   rH   rI   rJ   r   r   r?   )r;   rN   bitsr+   r$   rP   rQ   r    s           r0   test_halfway_caseszStrtodTests.test_halfway_cases   s    sY'' 	! 	!A#J//D $&&DAq (5y!a%1IA Q37AEqA Avva QUvx00Aa    -	! 	!r2   c                     g d}|D ]r\  }}}t          d          D ]\}|t          j        d|z  d|z            z   }|}d                    ||          }|                     |           |dz  }|dz  }|dz  }]sd S )N))l     9V iiV  )l   %o$CK i!  i  )l   jT& M  )r   rX   rY     r   rD   r   r   )rG   rI   rJ   r   r?   )	r;   
boundariesrO   r+   ujrP   rQ   r    s	            r0   test_boundarieszStrtodTests.test_boundaries   s      
 " 	 	GAq!4[[  V-bdAaC888NN6844!!!$$$RRQ	 	r2   c                     t          dd          D ]h}d| z  ddz  z  }t          t                    D ]E}|t          j        dd          z   }d                    ||          }|                     |           Fid S )	Npir   r   i3  irZ   rD   rF   )r;   rQ   baser^   rP   r    s         r0   test_underflow_boundaryz#StrtodTests.test_underflow_boundary   s     dD)) 	% 	%Hy=AtG+D9%% % % 0 = ==NN6844!!!$$$$%	% 	%r2   c                     dD ]u}d|z  }t          dt          z            D ]V}t          j        |          }t          j        dd          }d                    ||          }|                     |           Wvd S )N)rA   r      rB   r            rC   rE   )   2   r   ra   i  rD   rF   )r;   ndigsdig10rN   rP   rQ   r    s          r0   test_bigcompzStrtodTests.test_bigcomp   s    B 	% 	%EIE2	>** % %)%00!+D#66NN6844!!!$$$$	%	% 	%r2   c           	      t   dd}t          d          D ]}t          t                    D ]}t          j        |          }t          j        d          }|d                    fdt          |          D                       z  }t          j        ddg          rK|d	z  }t          j        d          }|d                    fd
t          |          D                       z  }nd}t          j        ddg          rv|t          j        ddg          z  }|t          j        |          z  }t          j        dd          }|d                    fdt          |          D                       z  }||z   r|                     |           g	 t          |           y# t          $ r Y w xY wd S )N000000123456789)+r   r   rZ   rA   r   c              3   @   K   | ]}t          j                  V  d S NrI   choice.0_rP   s     r0   	<genexpr>z+StrtodTests.test_parsing.<locals>.<genexpr>   s-      OOqV]622OOOOOOr2   TF.c              3   @   K   | ]}t          j                  V  d S rr   rs   ru   s     r0   rx   z+StrtodTests.test_parsing.<locals>.<genexpr>   A       !? !?%& "(v!6!6 !? !? !? !? !? !?r2   r   r+   Er   r   c              3   @   K   | ]}t          j                  V  d S rr   rs   ru   s     r0   rx   z+StrtodTests.test_parsing.<locals>.<genexpr>   r{   r2   )	rG   rH   rI   rt   rJ   joinr?   r6   r   )	r;   signsrN   r^   r    intpart_lenfracpart_lenexponent_lenrP   s	           @r0   test_parsingzStrtodTests.test_parsing   s   " t 	< 	<A9%% < <M%(($.q11RWWOOOOE+<N<NOOOOOO=$// %HA#)#3A#6#6L !? !? !? !?*/*=*=!? !? !? ? ? ?AA $%L=$// ?Sz222Au---A#)#3Aq#9#9L !? !? !? !?*/*=*=!? !? !? ? ? ?A - <%%a((((<a%   /<	< 	<s   F%%
F32F3r   r   F)sizememusedry_runc                 4   dd|z  z   }|                      t                    5  t          |           d d d            n# 1 swxY w Y   ~dd|z  z   dz   }|                      t                    5  t          |           d d d            n# 1 swxY w Y   ~d S )Nz1.1z0.r   )assertRaisesr   r6   )r;   maxsizer    s      r0   test_oversized_digit_stringsz(StrtodTests.test_oversized_digit_strings   s    3= z** 	 	!HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	3= 3&z** 	 	!HHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	AAs!   ?AA0BBBc                 "   d }d }|                      t           |d                    d           |                      t           |d                    d           |                      t           |d                    d           |                      t           |d                    d           |                      t           |d                    d           |                      t           |d                    d           d S )Nc                 <    	 d                     d| dz
  z  |           S )Nz	0.{}1e+{}r   r   r   rO   s    r0   positive_expz6StrtodTests.test_large_exponents.<locals>.positive_exp  s#    <%%c1Q3i333r2   c                 6    	 d                     d| z  |           S )Nz1{}e-{}r   r   r   s    r0   negative_expz6StrtodTests.test_large_exponents.<locals>.negative_exp  s    =##CE1---r2   i'  g      ?i N  i0u  )r:   r6   )r;   r   r   s      r0   test_large_exponentsz StrtodTests.test_large_exponents  s   	4 	4 	4	. 	. 	. 	||E2233S999||E2233S999||E2233S999||E2233S999||E2233S999||E2233S99999r2   c                 B    g d}|D ]}|                      |           d S )N),z02183167012312112312312.23538020374420446192e-370z712579816049008305546974391768996369464963024663104e-357z717489628565202117263145367596028389348922981857013e-357z718487398785991994634182916638542680759613590482273e-357z732002864200581033134358724675198044527469366773928e-358z794393431193180696942841837085033647913224148539854e-358z773608278998966969345824653500136787876436005957953e-358z764774478836417299491718435234611299336288082136054e-358z713704940134126574534878641876947980878824688451169e-357z746697445774047060960624497964425416610480524760471e-358z728639097178261763178489759107321392745108491825303e-311z1.00000000000000001e44z-1.0000000000000000100000000000000000000001e44z399999999999999994487665465554760717039532578546e-47o9654371763336549317990355136719971183455700459144696213413350821416312194420007991306908470147322020121018368e0a  104308485241983990666713401708072175773165034278685682646111762292409330928739751702404658197872319129036519947435319418387839758990478549477777586673075945844895981012024387992135617064532141489278815239849108105951619997829153633535314849999674266169258928940692239684771590065027025835804863585454872499320500023126142553932654370362024104462255244034053203998964360882487378334860197725139151265590832887433736189468858614521708567646743455601905935595381852723723645799866672558576993978025033590728687206296379801363024094048327273913079612469982585674824156000783167963081616214710691759864332339239688734656548790656486646106983450809073750535624894296242072010195710276073042036425579852459556183541199012652571123898996574563824424330960027873516082763671875e-1075z247032822920623295e-341z799037485700245683102805043437346965248029601286431e-373z799617639833743863161109961162881027406769510558457e-373z798852915025769345295749278351563179840130565591462e-372z799059944827693569659153042769690930905148015876788e-373z798914979205069368270421829889078356254059760327101e-372z,1000000000000000000000000000000000000000e-16z-10000000000000000000000000000000000000000e-17z=991633793189150720000000000000000000000000000000000000000e-33z;4106250198039490000000000000000000000000000000000000000e-38z*10.900000000000000012345678912345678912345a  11651287494059419563861790709256988151903479322938522856916519154189084656466977171489691608488398792047332126810029685763620092606534076968286334920536334924763766067178320990794927368304039797998410780646182269333271282839761794603623958163297658510063352026077076106072540390412314438457161207373275477458821194440646557259102208197382844892733860255628785183174541939743301249188486945446244053689504749943655197464973191717009938776287102040358299419343976193341216682148401588363162253931420379903449798213003874174172790742957567330246138038659650118748200625752770984217933648838167281879845022933912352785884444833681591202045229462491699354638895656152216187535257259042082360747878839946016222830869374205287663441403533948204085390898399055004119873046875e-1075a^  5254406533529552661096610603582028195612589849649138922565278497589560452182570597137658742514361936194432482059988700016338656575174473559922258529459120166686600002102838072098506622244175047522649953606315120077538558010753730576321577387528008403025962370502479105305382500086822727836607781816280407336531214924364088126680234780012085291903592543223403975751852488447885154107229587846409265285440430901153525136408849880173424692750069991045196209464308187671479664954854065777039726878381767789934729895619590000470366389383963331466851379030183764964083197053338684769252973171365139701890736933147103189912528110505014483268752328506004517760913030437151571912928276140468769502257147431182910347804663250851413437345649151934269945872064326973371182115272789687312946393533547747886024677951678751174816604738791256853675690543663283782215866825e-118032602129298404963083833853479113577253105939995688e25260212929840496308383385347911357725310593999568896e0z826021292984049630838338534791135772531059399956889601e-25260212929840496308383385347911357725310593999568895e05260212929840496308383385347911357725310593999568897e05260212929840496308383385347911357725310593999568996e05260212929840496308383385347911357725310593999568866e0z9007199254740992.005  179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792a9  179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497791.999a9  179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792.001z:999999999999999944488848768742172978818416595458984375e-54zA9999999999999999444888487687421729788184165954589843749999999e-54zA9999999999999999444888487687421729788184165954589843750000001e-54z0.000000000000000000000000000000000000000010000000000000000057612911342378542997169042119121403423543508714776317814976295686899169228986994124665807319451982237978882039897143840789794921875)r?   )r;   test_stringsr    s      r0   test_particularzStrtodTests.test_particular  sI    O O O`  	! 	!Aa    	! 	!r2   N)__name__
__module____qualname__r?   rR   rV   r_   rc   rm   r   testsupport
bigmemtest_2Gr   r   r    r2   r0   r4   r4   V   s        I I I&)" )" )"V! ! !4  (	% 	% 	%% % %"< "< "<H 
\$,"22"5aOO
 
 PO
: : :$T! T! T! T! T!r2   r4   __main__)r   r   r   )rI   unittestresystest.supportr   getattrSkipTestcompileVERBOSE
IGNORECASEmatchr   r1   rH   TestCaser4   r   mainr   r2   r0   <module>r      s     				 



    
73"B''722
(
 ; < < <
 
  Z"-! ! "' 7 7 7 7r 	X! X! X! X! X!(# X! X! X!t
 zHMOOOOO r2   