B
    u9a:             "   @   s$  d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZmZmZmZmZ ddlmZmZmZmZ ddlZddlZddlZeddgdZeddgdZejd Zed	d	gdZeejd< ed	d	gdZeejd< eeeeiZeejd< eer&ee  j!" ndeee  j!" iZ#eernej$ej%ej&ej'ej(ej)ej*ej+ej,g	ndeej$ej%ej&ej'ej(ej)ej*ej+ej,g	iZ-d
d Z.ej/Z/ej0Z0ej1Z1ej2Z2ej3Z3ej4Z4ej5Z5ej6Z6e/e0e1e2e3e4e5e6gZ7eere   ndee   iZ8dd Z9dZ:e;dkr0ej<d Z=ne>Z=ej?@e=pFejAZBeBejC e: ejC ZDej?EeD aFdZGeHedr~dndZIeJeIdZKeLeIdZMG dd dejNZOG dd deOZPG dd deOZQG dd dejNZRG dd deRZSG dd  d eRZTG d!d" d"ejNZUG d#d$ d$eUZVG d%d& d&eUZWG d'd( d(ejNZXG d)d* d*eXZYG d+d, d,eXZZG d-d. d.ejNZ[G d/d0 d0e[Z\G d1d2 d2e[Z]d3d4 Z^d5d6 Z_G d7d8 d8ejNZ`G d9d: d:e`ZaG d;d< d<e`ZbG d=d> d>ejNZcG d?d@ d@ecZdG dAdB dBecZeG dCdD dDejNZfG dEdF dFefZgG dGdH dHefZhG dIdJ dJejNZiG dKdL dLeiZjG dMdN dNeiZkG dOdP dPejNZlG dQdR dRelZmG dSdT dTelZnG dUdV dVejNZoG dWdX dXeoZpG dYdZ dZeoZqG d[d\ d\ejNZrG d]d^ d^erZsG d_d` d`erZtG dadb dbejNZuG dcdd ddeuZvG dedf dfeuZwG dgdh dhejNZxG didj djexZyG dkdl dlexZzeMG dmdn dnejNZ{G dodp dpejNZ|G dqdr dre|Z}G dsdt dte|Z~G dudv dvejNZG dwdx dxejNZG dydz dzejNZG d{d| d|ejNZeeJed}G d~d dejNZeSeTeVeWeYeZe\e]eaebedeeegehejekemenepeqeseteveweyeze}e~eeeeePeQg"Zesveddd Znede{ ede dddZe;dkr ddlZedZejddddd ejddddd e \ZZejreddd n&ereddeejd neddd dS )ag  
These are the test cases for the Decimal module.

There are two groups of tests, Arithmetic and Behaviour. The former test
the Decimal arithmetic using the tests provided by Mike Cowlishaw. The latter
test the pythonic behaviour according to PEP 327.

Cowlishaw's tests can be downloaded from:

   http://speleotrove.com/decimal/dectest.zip

This test module can be called from command line with one parameter (Arithmetic
or Behaviour) to test each part, or without parameter to test both parts. If
you're working through IDLE, you can import this test module and call test_main()
with the corresponding argument.
    N)run_unittestrun_doctestis_resource_enabledrequires_IEEE_754requires_docstrings)import_fresh_module
TestFailedrun_with_localecpython_onlydecimalZ_decimal)Zfresh)Zblocked	fractionsc                s,   t || | t fdd D  d S )Nc             3   s(   | ] }|kr | n |  V  qd S )N ).0s)dexpectedr   "/usr/lib/python3.7/test_decimal.py	<genexpr>K   s    z!assert_signals.<locals>.<genexpr>)getattr
assertTrueall)clscontextattrr   r   )r   r   r   assert_signalsI   s    
r   c             C   s2   | sd S | j dttt|  dd}| | d S )N	   r   )precroundingtraps)ContextROUND_HALF_EVENdictfromkeysSignals
setcontext)mZDefaultTestContextr   r   r   initb   s
     r&   Zdecimaltestdata__main__F
DecClampedTz.test requires build with -DEXTRA_FUNCTIONALITYztest requires regular buildc               @   sp   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )IBMTestCasesz?Class which tests the Decimal class against the IBM test cases.c          &   C   s  | j  | _| j  | _dg| _t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| _| j tkr| jd | jd | jd | jd | jd | jd | jd  | jd! | j	| j
| j| j| jd"| _d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdH%| _ttttttttdI| _| j j| j j| j j| j j| j j| j j| j j| j j| j j| j j| j j| j j dJ| _!dK| _"d S )LN#Zscbx164Zscbx165Zexpx901Zexpx902Zexpx903Zexpx905Zlnx901Zlnx902Zlnx903Zlnx905Zlogx901Zlogx902Zlogx903Zlogx905Zpowx1183Zpowx1184Zpowx4001Zpowx4002Zpowx4003Zpowx4005Zpowx4008Zpowx4010Zpowx4012Zpowx4014Zpwsx803Zpwsx805Zpowx4302Zpowx4303Zpowx4342Zpowx4343Zpwmx325Zpwmx326)Z	precisionr   ZmaxexponentZminexponentclamplogical_and_applynumber_classcompare_signalcompare_totalcompare_total_magcopy_decimalcopy_abscopy_negate	copy_sign
divide_intlogical_invertis_canonical	is_finiteis_infiniteis_nan	is_normalis_qnan	is_signedis_snanis_subnormalis_zeromax_magmin_mag
next_minus	next_plusnext_toward
logical_or	normalizeremainder_nearsame_quantumsqrtto_eng_stringto_integral_valueto_integral_exactto_sci_stringlogical_xor)%andZapplyclassZ
comparesigZcomparetotalZcomparetotmagcopyZcopyabsZ
copynegatecopysignZ	divideintinvertZiscanonicalZisfiniteZ
isinfiniteisnanZisnormalZisqnanZissignedZissnanZissubnormalZiszeroZmaxmagZminmagZ	nextminusZnextplusZ
nexttowardorreduceZremaindernearZsamequantumZ
squarerootZtoengZ
tointegralZtointegralxZtoscixor)ZceilingZdownfloorZ	half_downZ	half_evenZhalf_upZupZ05up)ZclampedZconversion_syntaxZdivision_by_zeroZdivision_impossibleZdivision_undefinedZinexactZinvalid_contextZinvalid_operationZoverflowZroundedZ	subnormalZ	underflow)r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rJ   )#r   r   r   readcontextignore_listsetskipped_test_idsCaddchange_precisionchange_rounding_methodchange_max_exponentchange_min_exponentchange_clamp
ChangeDictNameAdapterROUND_CEILING
ROUND_DOWNROUND_FLOORROUND_HALF_DOWNr    ROUND_HALF_UPROUND_UP
ROUND_05UPRoundingDictClampedInvalidOperationDivisionByZeroInexactOverflowRounded	Subnormal	Underflow
ErrorNamesLogicalFunctions)selfr   r   r   setUp   s    	



zIBMTestCases.setUpc             C   sX   | j tkrF| j jdkrF| jd | jd | jd | j|S | j ||S dS )a2  Work around the limitations of the 32-bit _decimal version. The
           guaranteed maximum values for prec, Emax etc. are 425000000,
           but higher values usually work, except for rare corner cases.
           In particular, all of the IBM tests pass with maximum values
           of 1070000000.i@Ti?i9N)	r   r_   MAX_EMAXr[   _unsafe_setprec_unsafe_setemax_unsafe_setemincreate_decimalDecimal)rz   vr   r   r   r   read_unlimited  s    zIBMTestCases.read_unlimitedc             C   s   t r
tjt|x}xp|D ]h}|dddd}y| |}W q | jjk
r } z| d|j	j
 d |  W d d }~X Y qX qW W d Q R X d S )Nz
 
zException "z" raised on line )skip_expectedunittestZSkipTestopenreplace	eval_liner   DecimalExceptionfail	__class____name__)rz   fileflinet	exceptionr   r   r   	eval_file  s    

zIBMTestCases.eval_filec             C   s   | ddkrX|d d dkrX|dsX|dd d |dd dd   }n|dd  }x | jD ]}| |dkrrd S qrW |sd S d|kr| |S | |S d S )	Nz -> r      z--z  --z->   :)find
startswithsplitstripr\   eval_directiveeval_equation)rz   r   ignorer   r   r   r   ,  s    ( 
zIBMTestCases.eval_linec             C   sl   dd | dD \}}|dkr,| j| }n"yt|}W n tk
rL   Y nX | j|dd }|| d S )Nc             s   s   | ]}|   V  qd S )N)r   lower)r   xr   r   r   r   ?  s    z.IBMTestCases.eval_directive.<locals>.<genexpr>r   r   c              W   s   d S )Nr   )argsr   r   r   <lambda>H      z-IBMTestCases.eval_directive.<locals>.<lambda>)r   ro   int
ValueErrorrf   get)rz   r   functvaluer   r   r   r   >  s    zIBMTestCases.eval_directivec                s  t st dk rd S  j  yt|d}|d   }|d }trTtd|dd |d  }|dd  }|d   }|d }|dd  }W n" t	t
tfk
r    jjY nX d	d
 }	| jkrd S  j||}
|
dkrd S t j|
}g }d}d} fdd|D x t j D ]}d jj|< qW xD ]}d jj|< q8W x8t|D ]*\}}|dd dkrd| }|r|d | }qZn|| }d}|	|}|
dkrltr^xD ]}d jj|< y| j| W nR |k
r   Y nP t j k
r8 } z d|||f  W d d }~X Y nX  d||f  d jj|< qW  j|}n | j}|| qZW |	|}tr|
dkrxD ]}d jj|< y||  W nR |k
r   Y nP t j k
r } z d|||f  W d d }~X Y nX  d||f  d jj|< qW fddt j D }x|D ]}d jj|< y||  W nV |k
r   Y nT t j k
r } z dt|||f  W d d }~X Y nX  d||f  qZW x|D ]}d jj|< qW trtd j y,t|| }|
 jkr>ttt |}W nR t j k
r| } z d||f  W d d }~X Y n   td|  Y nX  ! }|j"t#d j"t#d  $||d| d |   $|d| d t|  d S )Ng?z->r   zTest  )endr   r   c             S   s@   |  dd dd} |  dd dd} |  dd dd} | S )Nz''ZSingleQuotez""ZDoubleQuote'r   ")r   )valr   r   r   	FixQuotes_  s    z-IBMTestCases.eval_equation.<locals>.FixQuotesZrescaler   c                s   g | ]} j |  qS r   )rx   r   )r   r   )rz   r   r   
<listcomp>o  s    z.IBMTestCases.eval_equation.<locals>.<listcomp>r   )rO   rL   z Raised %s in %s when %s disabledzDid not raise %s in %sc                s   g | ]}| kr|qS r   r   )r   e)theirexceptionsr   r   r     s    zRaised %s in %s; expected %sz--zRaised %s in %szERROR:)keyzIncorrect answer for z -- got zIncorrect flags set in )%TEST_ALLrandomr   clear_flagsr   r   DEBUGprintr   	TypeErrorAttributeError
IndexErrorr   rq   r^   rg   r   r   r#   r   	enumeratecountEXTENDEDERRORTESTr   r   r   appendOrderedSignalstypestrry   r   evalgetexceptionssortreprassertEqual)rz   r   ZSidesLidr   Zvalstempans
exceptionsr   ZfnameZvalsZconglomerateZquoter   ir   r   errorr   Zordered_errorsresultZmyexceptionsr   )rz   r   r   r   K  s    





 
 
$
"
zIBMTestCases.eval_equationc                s    fddt  j D S )Nc                s   g | ]} j j| r|qS r   )r   flags)r   r   )rz   r   r   r     s    z.IBMTestCases.getexceptions.<locals>.<listcomp>)r#   r   )rz   r   )rz   r   r     s    zIBMTestCases.getexceptionsc             C   s0   | j tkr$| j jdkr$| j| n|| j_d S )Ni@T)r   r_   MAX_PRECr   r}   r   )rz   r   r   r   r   ra     s    zIBMTestCases.change_precisionc             C   s   || j _d S )N)r   r   )rz   r   r   r   r   rb     s    z#IBMTestCases.change_rounding_methodc             C   s0   | j tkr$| j jdkr$| j| n|| j_d S )Ni@T)r   r_   r   r   r   Emin)rz   expr   r   r   rd     s    z IBMTestCases.change_min_exponentc             C   s0   | j tkr$| j jdkr$| j| n|| j_d S )Ni@T)r   r_   r   r   r~   Emax)rz   r   r   r   r   rc     s    z IBMTestCases.change_max_exponentc             C   s   || j _d S )N)r   r+   )rz   r+   r   r   r   re     s    zIBMTestCases.change_clampN)r   
__module____qualname____doc__r{   r   r   r   r   r   r   ra   rb   rd   rc   re   r   r   r   r   r)      s     r)   c               @   s   e Zd ZeZdS )CIBMTestCasesN)r   r   r   r_   r   r   r   r   r   r     s   r   c               @   s   e Zd ZeZdS )PyIBMTestCasesN)r   r   r   Pr   r   r   r   r   r     s   r   c               @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zed
d Z	dd Z
dd Zdd Zdd Zedd Zdd Zdd Zdd ZdS )ExplicitConstructionTestz6Unit tests for Explicit Construction cases of Decimal.c             C   s   | j j}| | |d d S )N0)r   r   r   )rz   r   r   r   r   test_explicit_empty  s    z,ExplicitConstructionTest.test_explicit_emptyc             C   s   | j j}| t|d  d S )N)r   r   assertRaisesr   )rz   r   r   r   r   test_explicit_from_None  s    z0ExplicitConstructionTest.test_explicit_from_Nonec             C   s   | j j}|d}| t|d |d}| t|d |d}| t|d |d}| t|d x`tdd	D ]R}xLd
D ]D}x>tddD ]0}|d| |  }||}| t|t| qW q~W qtW d S )N-   45i{e	500000123iz-45r   r       )r      r   )r   r   r   r   range)rz   r   r   nsignr   r   r   r   r   test_explicit_from_int  s    
z/ExplicitConstructionTest.test_explicit_from_intc          	   C   s  | j j}| j j}| j j}| t|dd | t|dd | t|dd | t|dd | t|dd | t|dd	 | t|d
d | t|dd | t|dd | t|dd x6dD ].}x(dD ] }| t||d | d qW qW | }d|j|< | ||d | t|ddd | ||d | ||d | ||d | ||d | ||d | ||d W d Q R X d S )Nr   NaNr   z45.34Z45e2z4.5E+3uglyz1.3E4 
z1.3E+4z  -7.89z-7.89z  3.45679  z3.45679z	1_3.3e4_0z1.33E+41Z1_0_0_01000)r   r       u    z	9.311E+28Txyz1234r   yu   1 2 3u    1 2 r   u     z12 3z1_2_ 3)	r   r   rq   localcontextr   r   r   r   r   )rz   r   rq   r   Zleadtrailcr   r   r   test_explicit_from_string  s6    


z2ExplicitConstructionTest.test_explicit_from_stringc             C   sR   dd l }| jj}| j }|d}| t||d | t||d d S )Nr   z9.999999)	_testcapir   r   r   unicode_legacy_stringr   r   r   )rz   r   r   r   r   r   r   r   test_from_legacy_stringsG  s    

z1ExplicitConstructionTest.test_from_legacy_stringsc             C   s6  | j j}|d}| t|d |d}| t|d |d}| t|d |d}| t|d |d	}| t|d
 | t|d | t|d | t|d | t||dddf | t|d | t|d | t|d | t|d | t|d | t|d | t|d | t|d d S )N)r   )r   r   r   )r   )   r   r   z-45)r   )r   r      r   z45.34)r   )	r   r   r   r   r   r   r   r   r   iz-4.34913534E-17)r   r   FInfinity)r   )r   r   r   r   r   )   )r   r   r   r   r   r   )g        )r   r   r   r   r   r   r   )r   r   r   r   r   r   )r   )r   r   r   r   r   zwrong!)r   )r   r   r   r   r   g        )r   )r   r   r   r   r   1)r   r   r   )r   )r   r   r   Nr   r   )r   )r   r   r   r   r   )r   )r   
   r   r   r   r   )r   )r   r   r   ar   r   )r   r   r   r   r   r   )rz   r   r   r   r   r   test_explicit_from_tuplesQ  s.    z2ExplicitConstructionTest.test_explicit_from_tuplesc             C   s   | j j}|ddgdg}| t|d |ddddddddddg	dg}| t|d	 |dd
dg}| t|d	 |ddddddddddg	df}| t|d	 d S )Nr   r   r   r   r   r   r   iz-4.34913534E-17)	r   r   r   r   r   r   r   r   r   )r   r   r   r   )rz   r   r   r   r   r   test_explicit_from_list|  s      z0ExplicitConstructionTest.test_explicit_from_listc             C   s\   | j j}| t|dd | t|dd | |d|d | |d|d d S )Nr   Fr   T)r   r   assertIsboolr   )rz   r   r   r   r   test_explicit_from_bool  s
    z0ExplicitConstructionTest.test_explicit_from_boolc             C   s   | j j}|d}||}| t|d |d}||}| t|d |d}||}| t|d |d}||}| t|d d S )	Nr   r   i{er   iz-45r   r   )r   r   r   r   )rz   r   r   r   r   r   r   test_explicit_from_Decimal  s    z3ExplicitConstructionTest.test_explicit_from_Decimalc             C   s6  | j j}|d}| t|| | t|d | |td  | |td  | |td  | t|tdt|d | t|tdt|d | t|tdt|d | t|td	t|d
 x>t	dD ]2}t
dt

 d d  }| |t|| qW d S )Ng?z90.1000000000000000055511151231257827021181583404541015625naninfz-infr   r   z	-Infinityz-0.0z-0   g{Gz?g       @g      ?)r   r   r   r   r   r   floatr=   r:   r   r   expovariate)rz   r   rr   r   r   r   r   test_explicit_from_float  s&    
z1ExplicitConstructionTest.test_explicit_from_floatc             C   s  | j j}| j j}| j j}t| j  }d|_| }| t|d |	 }| t|d | 
t|j	d  |	d}| || | |	d|	d |d}| t|d |	d}| t|d | t|	dd	 |d
}| t|d |	d
}| t|d |d}||}| t|d |	|}| t|d d|_d|j|< x8dD ]0}|	|}| t|| | t|| qdW d|_d|j|< | 
||j	d d|_| t|	dd | t|	dd | t|	dd | t|	dd | 
||j	d | 
t|j	d | 
t|j	dd | 
||j	d | 
||j	d d|_| 
||j	d  | 
||j	|d  d!|j|< | t|	d d	 | |j|  d!|j|< | t|	|d d	 | |j|  d S )"Nr   r   i  in  z457E+2Z456789z4.57E+5z3.14
r   )r   )	r   r   r   r   r   r   r   r   r   iz-4.34913534E-17z	-4.35E-17i{er   z5.00E+8   T)	l        l         l    i   r   il        l    l            i  z0E-017z0E-17r   z-Infz	-InfinityNaN123r   )r   r   ir   Z5678z 1234Z12_34ZNaN12345F)r   r   rq   ru   rS   
getcontextr   r   r   r   r   r   assertIsInstancer   r   
isinstancer   r   r   )rz   r   rq   ru   ncr   Zprevdecr   r   r   r   $test_explicit_context_create_decimal  sr    











z=ExplicitConstructionTest.test_explicit_context_create_decimalc             C   sb  | j j}| j  }|d}| t|| | t|d | |td	  | |td
  | |td
  | t|tdt|d | t|tdt|d | t|tdt|d | t|td	t|d
 d|_xBtdD ]6}tdt d d  }| |t|| q$W d S )Ng?z0.1000000000000000055511151231r  r  z-infr   r   z	-Infinityz-0.0z-0d   r	  g{Gz?g       @g      ?)r   r   r   r   r   r   r   r   r
  r=   r:   r   r   r   r  )rz   r   r  r  r   r   r   r   r   'test_explicit_context_create_from_float  s(    

z@ExplicitConstructionTest.test_explicit_context_create_from_floatc             C   sB   | j j}dddd}x(| D ]\}}| t||| qW d S )Nr   z	0.0000372z-NaN2400)u   １u   ٠.٠٣٧٢e-٣u   -nan౨౪౦౦)r   r   itemsr   r   )rz   r   test_valuesinputr   r   r   r   test_unicode_digits3  s    z,ExplicitConstructionTest.test_unicode_digitsN)r   r   r   r   r   r   r   r   r
   r   r  r  r  r  r   r  r  r  r  r   r   r   r   r     s   8
+Yr   c               @   s   e Zd ZeZdS )CExplicitConstructionTestN)r   r   r   r_   r   r   r   r   r   r  >  s   r  c               @   s   e Zd ZeZdS )PyExplicitConstructionTestN)r   r   r   r   r   r   r   r   r   r  @  s   r  c               @   s@   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dS )ImplicitConstructionTestz6Unit tests for Implicit Construction cases of Decimal.c             C   s   | j j}| ttdt  d S )NzDecimal(5) + None)r   r   r   r   r   locals)rz   r   r   r   r   test_implicit_from_NoneF  s    z0ImplicitConstructionTest.test_implicit_from_Nonec             C   s<   | j j}| t|dd d | |dd |d d S )Nr   r   Z50l   2}r )r   r   r   r   )rz   r   r   r   r   test_implicit_from_intJ  s    z/ImplicitConstructionTest.test_implicit_from_intc             C   s   | j j}| ttdt  d S )NzDecimal(5) + "3")r   r   r   r   r   r  )rz   r   r   r   r   test_implicit_from_stringR  s    z2ImplicitConstructionTest.test_implicit_from_stringc             C   s   | j j}| ttdt  d S )NzDecimal(5) + 2.2)r   r   r   r   r   r  )rz   r   r   r   r   test_implicit_from_floatV  s    z1ImplicitConstructionTest.test_implicit_from_floatc             C   s(   | j j}| |d|d |d d S )Nr   r   2   )r   r   r   )rz   r   r   r   r   test_implicit_from_DecimalZ  s    z3ImplicitConstructionTest.test_implicit_from_Decimalc                s8  | j j}G dd d}| t| |dd | t|d| d | tdd | tdd	 | td
d | tdd | tdd | tdd dddddddg}xz|D ]r\} t|  fdd t|fdd | td| d d  d  | td| d d d  qW d S ) Nc               @   sL   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	dd Z
dS )z,ImplicitConstructionTest.test_rop.<locals>.Ec             S   s   dt | S )Nzdivmod )r   )rz   otherr   r   r   
__divmod__c  s    z7ImplicitConstructionTest.test_rop.<locals>.E.__divmod__c             S   s   t |d S )Nz rdivmod)r   )rz   r%  r   r   r   __rdivmod__e  s    z8ImplicitConstructionTest.test_rop.<locals>.E.__rdivmod__c             S   s   dt | S )Nzlt )r   )rz   r%  r   r   r   __lt__g  s    z3ImplicitConstructionTest.test_rop.<locals>.E.__lt__c             S   s   dt | S )Nzgt )r   )rz   r%  r   r   r   __gt__i  s    z3ImplicitConstructionTest.test_rop.<locals>.E.__gt__c             S   s   dt | S )Nzle )r   )rz   r%  r   r   r   __le__k  s    z3ImplicitConstructionTest.test_rop.<locals>.E.__le__c             S   s   dt | S )Nzge )r   )rz   r%  r   r   r   __ge__m  s    z3ImplicitConstructionTest.test_rop.<locals>.E.__ge__c             S   s   dt | S )Nzeq )r   )rz   r%  r   r   r   __eq__o  s    z3ImplicitConstructionTest.test_rop.<locals>.E.__eq__c             S   s   dt | S )Nzne )r   )rz   r%  r   r   r   __ne__q  s    z3ImplicitConstructionTest.test_rop.<locals>.E.__ne__N)r   r   r   r&  r'  r(  r)  r*  r+  r,  r-  r   r   r   r   Eb  s   r.  r   z	divmod 10z
10 rdivmodzDecimal(10) < E()zgt 10zDecimal(10) > E()zlt 10zDecimal(10) <= E()zge 10zDecimal(10) >= E()zle 10zDecimal(10) == E()zeq 10zDecimal(10) != E()zne 10)+__add____radd__)-__sub____rsub__)*__mul____rmul__)/__truediv____rtruediv__)%__mod____rmod__)z//__floordiv____rfloordiv__)z**__pow____rpow__c                s   d  t | S )Nr   )r   )rz   r%  )lopr   r   r     r   z3ImplicitConstructionTest.test_rop.<locals>.<lambda>c                s   t |  d S )Nr   )r   )rz   r%  )ropr   r   r     r   zE()zDecimal(10)r   10)r   r   r   divmodr   setattr)rz   r   r.  ZoplistZsymr   )rB  rC  r   test_rop^  s0    z!ImplicitConstructionTest.test_ropN)
r   r   r   r   r  r   r!  r"  r$  rG  r   r   r   r   r  C  s   r  c               @   s   e Zd ZeZdS )CImplicitConstructionTestN)r   r   r   r_   r   r   r   r   r   rH    s   rH  c               @   s   e Zd ZeZdS )PyImplicitConstructionTestN)r   r   r   r   r   r   r   r   r   rI    s   rI  c               @   s:   e Zd ZdZdd Zdd Zedddd	 Zd
d ZdS )
FormatTestz#Unit tests for the format function.c             C   sX  | j j}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,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddg}x*|D ]"\}}}| t|||| qW | t|djd d S )N)r   z0E-15z0e-15)r   z2.3E-15z2.3e-15)r   z2.30E+2z2.30e+2)r   z2.30000E-15z2.30000e-15)r   z1.23456789123456789e40z1.23456789123456789e+40)r   z1.5z1.5e+0)r   z0.15z1.5e-1)r   z0.015z1.5e-2)r   z0.0000000000015z1.5e-12)r   z15.0z1.50e+1)r   z-15z-1.5e+1)r   r   z0e+0)r   0E1z0e+1)r   z0.0z0e-1)r   z0.00z0e-2)z.6ez0E-15z0.000000e-9)z.6er   z0.000000e+6)z.6ez9.999999z9.999999e+0)z.6ez	9.9999999z1.000000e+1)z.6ez-1.23e5z-1.230000e+5)z.6ez1.23456789e-3z1.234568e-3)r   r   r   )r   z0.0z0.0)r   z0E-2z0.00)r   z0.00E-8z0.0000000000)r   rK  r   )r   z3.2E132)r   z3.2E2320)r   z3.20E2rM  )r   z3.200E2z320.0)r   z3.2E-6z	0.0000032)z.6fz0E-15z0.000000)z.6frK  z0.000000)z.6fr   z0.000000)z.0fr   r   )z.0fz0e-2r   )z.0fz
3.141592653)z.1fz
3.14159265z3.1)z.4fz
3.14159265z3.1416)z.6fz
3.14159265z3.141593)z.7fz
3.14159265z	3.1415926)z.8fz
3.14159265z
3.14159265)z.9fz
3.14159265z3.141592650)gr   r   )rO  z0.0z0.0)rO  rK  z0e+1)GrK  z0E+1)rO  z0E-5z0.00000)rO  z0E-6z0.000000)rO  z0E-7z0e-7)rO  z-0E2z-0e+2)z.0gz
3.14159265rN  )z.0nz
3.14159265rN  )z.1gz
3.14159265rN  )z.2gz
3.14159265z3.1)z.5gz
3.14159265z3.1416)z.7gz
3.14159265z3.141593)z.8gz
3.14159265z	3.1415926)z.9gz
3.14159265z
3.14159265)z.10gz
3.14159265z
3.14159265)r;  rK  z0%)r;  Z0E0z0%)r;  z0E-1z0%)r;  z0E-2z0%)r;  z0E-3z0.0%)r;  z0E-4z0.00%)z.3%r   z0.000%)z.3%0E10z0.000%)z.3%z0E-10z0.000%)z.3%z2.34z234.000%)z.3%z1.234567z123.457%)z.0%z1.23z123%)r   r   r   )r   z-NaN123z-NaN123)z+gZNaN456z+NaN456)z.3eInfr   )z.16fz-Infz	-Infinity)z.0gz-sNaNz-sNaN)r   z1.00z1.00)6123z   123)z<6rT  z123   )z>6rT  z   123)z^6rT  z 123  )z=+6rT  z+  123)z#<10r   z
NaN#######)z#<10z-4.3z
-4.3######)z#<+10z0.0130z
+0.0130###)z#< 10z0.0130z
 0.0130###)z@>10z-Infz
@-Infinity)z#>5z-Infz	-Infinity)z?^5rT  z?123?)z%^6rT  z%123%%)z ^6z-45.6z-45.6 )z/=10z-45.6z
-/////45.6)z/=+10z45.6z
+/////45.6)z/= 10z45.6z
 /////45.6)z =10z-infz
- Infinity)z ^16z-infz   -Infinity    )z >10z1.2345z
    1.2345)z <10z1.2345z
1.2345    ),Z1234567z	1,234,567)rU  123456z123,456)rU  Z12345z12,345)rU  r   z1,234)rU  rT  rT  )rU  12rW  )rU  r   r   )rU  r   r   )rU  z-1234567z
-1,234,567)rU  z-123456z-123,456)z7,rV  z123,456)z8,rV  z 123,456)z08,rV  z	0,123,456)z+08,rV  z+123,456)z 08,rV  z 123,456)z08,z-123456z-123,456)z+09,rV  z
+0,123,456)z07,z1234.56z1,234.56)z08,z1234.56z1,234.56)z09,z1234.56z	01,234.56)z010,z1234.56z
001,234.56)z011,z1234.56z0,001,234.56)z012,z1234.56z0,001,234.56)z08,.1fz1234.5z01,234.5)rU  z
1.23456789z
1.23456789)z,%z
123.456789z12,345.6789%)z,erV  z
1.23456e+5)z,ErV  z
1.23456E+5)za=-7.0z0.12345zaaaa0.1)z	<^+15.20%r  z<<+Infinity%<<<)z>,%ZsNaN1234567zsNaN1234567%)z=10.10%r  z
   NaN123%r   s   -020)r   r   r   formatr   r   
__format__)rz   r   r  fmtr   r   r   r   r   test_formatting  s   zFormatTest.test_formattingc       	         s@  j j yddlm} W n tk
r6   d Y nX fdd}dA fdd	}d	|d
d
dgdd}d||gdd}d|d
d
dgdd}d|ddd|gdd}dd|d
d
dg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,|d(d- |d,|d*d- |d,|d.d/ |d,|d0d1 |d,|d2d1 |d,|d3d4 |d5|d*d6 |d5|d.d6 |d5|d0d6 |d5|d2d7 |d5|d3d8 |d5|d9d8 |d5|d:d; |d5|d<d= | d>|d?d@ d S )BNr   )CHAR_MAXzlocale.CHAR_MAX not availablec                s"    j tkrddd | D S | S )Nr   c             S   s   g | ]}t |qS r   )chr)r   r   r   r   r   r   ?  s    zCFormatTest.test_n_format.<locals>.make_grouping.<locals>.<listcomp>)r   r_   join)lst)rz   r   r   make_grouping>  s    z/FormatTest.test_n_format.<locals>.make_groupingr   c                s0   j tkr | ||S  | j||dS d S )N)_localeconv)r   r_   rY  )r   overriderZ  )r   rz   r   r   get_fmtA  s    
z)FormatTest.test_n_format.<locals>.get_fmt.r   rU  )decimal_pointgroupingthousands_sepr   r   &r   r   r   r2  s   ¿zutf-8s   ´z12.7z12,7z1-2&7i[z123,456,789Z	123456789z123 456 789l   c}z123456-78-9012-3z.6nz
1.23457e+8z
1,23457e+8z
1&23457e+8i  Z03nr   Z04nZ05nZ01234Z06nZ001234i90  z12,345Z07nz012,345Z08nz	0,012,345Z09nZ010nz
00,012,345i@ z1-2345-6z	01-2345-6z0-01-2345-6Z011nZ012nz00-01-2345-6Z013nz000-01-2345-6z-1.5Z020nu   -0´000´000´000´001¿5)Nr   )r   r   localer\  ImportErrorskipTestdecoder   )	rz   r\  r`  rc  en_USfr_FRru_RUZcrazyZdotsep_wider   )r   rz   r   test_n_format6  sl    zFormatTest.test_n_formatLC_ALLps_AFc             C   sn   | j j}t d }t d }|dkr:| d|d |dkrT| d|d | t|ddd	 d S )
Nre  rg  u   ٫z5inappropriate decimal point separator ({!a} not {!a})u   ٬z1inappropriate thousands separator ({!a} not {!a})z100000000.123r   u   100٬000٬000٫123)r   r   ri  
localeconvrk  rX  r   )rz   r   re  rg  r   r   r   &test_wide_char_separator_decimal_point  s    

z1FormatTest.test_wide_char_separator_decimal_pointc             C   sP   G dd d| j j}|d}| | j j|j |d}| | j j|j d S )Nc               @   s   e Zd Zdd ZdS )z;FormatTest.test_decimal_from_float_argument_type.<locals>.Ac             S   s   t || _d S )N)r   a_type)rz   r   r   r   r   __init__  s    zDFormatTest.test_decimal_from_float_argument_type.<locals>.A.__init__N)r   r   r   rv  r   r   r   r   A  s   rw  g     @E@*   )r   r   
from_floatr   ru  )rz   rw  r   r   r   r   %test_decimal_from_float_argument_type  s
    

z0FormatTest.test_decimal_from_float_argument_typeN)	r   r   r   r   r[  rp  r	   rt  rz  r   r   r   r   rJ    s     YrJ  c               @   s   e Zd ZeZdS )CFormatTestN)r   r   r   r_   r   r   r   r   r   r{    s   r{  c               @   s   e Zd ZeZdS )PyFormatTestN)r   r   r   r   r   r   r   r   r   r|    s   r|  c               @   sh   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )ArithmeticOperatorsTestz:Unit tests for all arithmetic operators, binary and unary.c             C   s   | j j}|d}|d}| || |d | || |d |d }| ||d | t|t| d| }| ||d | t|t| ||7 }| ||d |d7 }| ||d d S )Nz-11.1z22.2z11.1r   z-6.1z16.1)r   r   r   r   )rz   r   d1d2r   r   r   r   test_addition  s    z%ArithmeticOperatorsTest.test_additionc             C   s   | j j}|d}|d}| || |d | || |d |d }| ||d | t|t| d| }| ||d | t|t| ||8 }| ||d |d8 }| ||d d S )	Nz-11.1z22.2z-33.3z33.3r   z-16.1z16.1z-38.3)r   r   r   r   )rz   r   r~  r  r   r   r   r   test_subtraction  s    z(ArithmeticOperatorsTest.test_subtractionc             C   s   | j j}|d}|d}| || |d | || |d |d }| ||d | t|t| d| }| ||d | t|t| ||9 }| ||d |d9 }| ||d d S )Nz-5rN  z-15r   z-25z-75)r   r   r   r   )rz   r   r~  r  r   r   r   r   test_multiplication  s    z+ArithmeticOperatorsTest.test_multiplicationc             C   s   | j j}|d}|d}| || |d | || |d |d }| ||d | t|t| d| }| ||d | t|t| || }| ||d |d }| ||d d S )	Nz-52z-2.5z-0.4r   z-1.25z-0.8z-0.625)r   r   r   r   )rz   r   r~  r  r   r   r   r   test_division  s    z%ArithmeticOperatorsTest.test_divisionc             C   s   | j j}|d}|d}| || |d | || |d |d }| ||d | t|t| d| }| ||d | t|t| || }| ||d |d }| ||d d S )N5r  r   r   r      r   )r   r   r   r   )rz   r   r~  r  r   r   r   r   test_floor_division"  s    z+ArithmeticOperatorsTest.test_floor_divisionc             C   s   | j j}|d}|d}| || |d | || |d |d }| ||d | t|t| d| }| ||d | t|t| ||C }| ||d |dC }| ||d	 d S )
Nr  r  Z25rL  r   Z625r  Z16807Z390625)r   r   r   r   )rz   r   r~  r  r   r   r   r   test_powering>  s    z%ArithmeticOperatorsTest.test_poweringc             C   s   | j j}|d}|d}| || |d | || |d |d }| ||d | t|t| d| }| ||d | t|t| ||; }| ||d |d; }| ||d d S )Nr  r  r   r   r  )r   r   r   r   )rz   r   r~  r  r   r   r   r   test_moduleZ  s    z#ArithmeticOperatorsTest.test_modulec             C   s  | j j}|d}|d}t||\}}| ||d | ||d | t|t| | t|t| t|d\}}| ||d | ||d | t|t| | t|t| td|\}}| ||d | ||d | t|t| | t|t| d S )Nr  r  r   r   r  )r   r   rE  r   r   )rz   r   r~  r  pqr   r   r   test_floor_div_modulev  s$    z-ArithmeticOperatorsTest.test_floor_div_modulec             C   sT   | j j}| |d
 |d | |d |d | t|dt|d d S )Nr   i)r   r   r   abs)rz   r   r   r   r   test_unary_operators  s    z,ArithmeticOperatorsTest.test_unary_operatorsc             C   s
  | j j}| j j}| j j}|d}|d}|d}|d}||f||f||f||f||ff}||f||f||f||f||f||f||ff}	tjtjtjtjf}
tj	tj
f}x`||	 D ]T\}}xJ|
| D ]>}|||}|tj
krdnd}| ||d||j||| qW qW | }d|j|< x^|D ]V\}}xJ|D ]B}|||}|tj
krNdnd}| ||d||j||| q0W q"W xF|	D ]>\}}x2|D ]*}| |tj	|| | |tj
|| qW qW x6||	 D ]*\}}x|
D ]}| |||| qW qW W d Q R X d S )	Nr   sNaNrR  r  TFz8expected {0!r} for operator.{1}({2!r}, {3!r}); got {4!r}r   )r   r   rq   r   operatorltlegtgeeqner  rX  r   r   r   )rz   r   rq   r   r   r   r   r   Z
qnan_pairsZ
snan_pairsZ	order_opsZequality_opsr   r   opZgotr   ctxr   r   r   test_nan_comparisons  sD    ".





z,ArithmeticOperatorsTest.test_nan_comparisonsc             C   sH   | j j}|d|d}| |dd| | t|djd d S )Nr   r   z-2)r   r   r5   r   r   r   )rz   r   r   r   r   r   test_copy_sign  s    z&ArithmeticOperatorsTest.test_copy_signN)r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r}    s   7r}  c               @   s   e Zd ZeZdS )CArithmeticOperatorsTestN)r   r   r   r_   r   r   r   r   r   r    s   r  c               @   s   e Zd ZeZdS )PyArithmeticOperatorsTestN)r   r   r   r   r   r   r   r   r   r    s   r  c          
   C   s  | j j}| j j}| j j}| j j}| j j}| j j}| j j}| j j}|d}	|d}
|	|
 }| j	
  | j  |	|
 }| }| |j|  | ||j|	d | |j|  | N}| |j|  | |j|  | ||j|	|d | |j|  ~W d Q R X | |j|  ~W d Q R X | ||d | ||d | }| |j|  x&||||fD ]}| |j|  qhW d S )Nr   r   r   r  z0.333333333333333333333333)r   r   rq   rr   rt   rw   rs   r  r   finish1r]   synchrowaitr   r   r   dividecompareassertFalser   )r   r   rq   rr   rt   rw   rs   r  r   r~  d3test1test2c2c3c1sigr   r   r   thfunc1  s@    

r  c          
   C   s  | j j}| j j}| j j}| j j}| j j}| j j}| j j}| j j}|d}	|d}
|	|
 }| }d|_	|	|
 }| }| 
|j|  | ||j|dd | 
|j|  ||X}| 
|j|  | |j|  d|j|< | ||j|dd | 
|j|  ~W d Q R X | |j|  | |j|  ~W d Q R X | j  | j  | ||d | ||d	 | |j|  | 
|j|  x&||||fD ]}| |j|  qW d S )
Nr   r      Z1e425000000i  Tz1e-425000000z0.333333333333333333333333z0.333333333333333333)r   r   rq   rr   rt   rw   rs   r  r   r   r   r   r   multiplyr  r   r  r  r]   finish2r   )r   r   rq   rr   rt   rw   rs   r  r   r~  r  r  Zthiscontextr  r  r  r  r   r   r   thfunc2  sH    



r  c               @   s   e Zd ZdZdd ZdS )ThreadingTestz0Unit tests for thread local contexts in Decimal.c             C   s   | j j}| j tkr$| j js$| d |j}|j}|j}d|_d|_d|_t	 | _
t	 | _t	 | _tjt| fd}tjt| fd}|  |  | j  | j  x"t| j  D ]}| |j|  qW |  |  ||_||_||_d S )Nzcompiled without threading   i@Ti)targetr   )r   DefaultContextr_   HAVE_THREADSrk  r   r   r   	threadingZEventr  r  r  ZThreadr  r  startr  r#   r  r   r^  )rz   r  Z	save_precZ	save_emaxZ	save_eminZth1Zth2r  r   r   r   test_threading6  s2    





zThreadingTest.test_threadingN)r   r   r   r   r  r   r   r   r   r  0  s   r  c               @   s   e Zd ZeZdS )CThreadingTestN)r   r   r   r_   r   r   r   r   r   r  ]  s   r  c               @   s   e Zd ZeZdS )PyThreadingTestN)r   r   r   r   r   r   r   r   r   r  `  s   r  c               @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(S ))UsabilityTestz*Unit tests for Usability cases of Decimal.c             C   s  | j j}|d}|d}|d}| || | || | || | || | || | || | || | || | |d | d| | |d | |d | |d | |t  | |t t	t
|td}|d d  }t| |  | || d S )Nz23.42r      r   r   gY@@r  )r   r   assertGreaterassertGreaterEqual
assertLessassertLessEqualr   assertNotEqualobjectlistmapr   r   Zshuffler   )rz   r   dadbdcr   br   r   r   test_comparison_operatorsf  s0    
z'UsabilityTest.test_comparison_operatorsc             C   s   | j j}|d}|d}| |d | |d | |d | |d | |d | |d | d| | d| | d| | d| | d| | d| | d|d d S )Nz0.25z3.0g      @g      ?g      ?g?z0.1)r   r   r  r  r  r  r  r   )rz   r   r  r  r   r   r   test_decimal_float_comparison  s     z+UsabilityTest.test_decimal_float_comparisonc             C   s   | j j}|d}|d}| |d | d| | |d | d| | d| | |d | |d | d| | |dt | |dt | |dt | |dt d S )Nz0.25z3.0y      ?        y      ?        y      @        y      @      ?)	r   r   r  r   r  r(  NotImplementedr*  r)  )rz   r   r  r  r   r   r   test_decimal_complex_comparison  s    z-UsabilityTest.test_decimal_complex_comparisonc       
   	   C   s  | j j}t| j  j}| j j}| j j}| j j}tr6tjnd}trDtj	nd}trRtj
nd}|||d}	||	 ||	_| |d|dd | |dd|d | |dd|d	t|  | |d
t| |dd | |dd|d	t|  | |d
t| |dd | |d|dd | |dd|d d|	_| |dd |dd | |dd|dd  | |dd|dt|  | |dt| |dd | |d|dd | |d|dd | |d|dd | |d|dd | ||dj|dd | t|dd|d | |d|dd | |dd|d W d Q R X d S )Niɚ;i6eilʈ)r   r   r   r   l	   ZmH;5B r   Z1ez-1el   !0QYz0.1r   i,  r   i6l   c(	 Z9er  l   g] {   lg] z-infr  i)r   r   r   ZFractionr   r   rq   r_   r|   MIN_EMIN	MIN_ETINYr   r  r   r   r  r  r  r  r   r)  r  r  r(  )
rz   Dr   r   r   rq   emaxeminZetinyr   r   r   r    test_decimal_fraction_comparison  s@    z.UsabilityTest.test_decimal_fraction_comparisonc             C   sP   | j j}|d}t|}| t|t| t|}| t|t| d S )Nz43.24)r   r   rS   r   r   deepcopy)rz   r   r   r   r  r   r   r   test_copy_and_deepcopy_methods  s    

z,UsabilityTest.test_copy_and_deepcopy_methodsc                s  j j j j}fdd}| d | d | d | d | d  fdd	d
D }| d d d d d d d d d d d d d d d dg x$|D ]}|||t| qW | d|d tt d 	| d 	| d dddd d!d"d#d$g}x2|D ]*}t
|} |}|||| qbW | v}	 d%}
d&|	_||
}d'|	_||
}d(|	_||
}|| || d)|	_d*d+ }
| |
||
 W d Q R X d S ),Nc                s    t | }|  } || |S )N)hash__hash__r   )r   r   r  )rz   r   r   hashit  s    z.UsabilityTest.test_hash_method.<locals>.hashitr  r   z	-InfinityZnan123z-NaNc                s:   g | ]2}t d dD ]"}dD ]} |d| |  qqqS )ir   )r   r   r   )r   )r   r%   r   r   )r   r   r   r     s   z2UsabilityTest.test_hash_method.<locals>.<listcomp>)r                     r   !   =   >   ?   @   A   B   z-1z-0z0.00z-0.000rQ  z-0E12z10.0z	-23.00000Z1230E100z
-4.5678E50l       z	1.634E100z
90.697E100z
188.83E100z
1652.9E100Z	56531E100r  rR  z-Infr  z0.0z-.0e1z34.0z2.5z
112390.625z	-0.515625z123456789.1   r   r  i'  iL  i  )r   r   r   extendr   r   r   r   r  r   r
  r   )rz   r   r  r  r   Ztest_stringsr   r   r   r   r   Zh1Zh2Zh3r   )r   rz   r   test_hash_method  sh    


zUsabilityTest.test_hash_methodc             C   s   | j j}|d}|d}d}d}| t||| | t||| | t||| | t||| | t||| | t||| | t||| | t||| d S )Nz15.32z28.5r  r  )r   r   r  minmax)rz   r   r~  r  l1l2r   r   r   test_min_and_max_methods8  s    z&UsabilityTest.test_min_and_max_methodsc             C   s(   | j j}| |d | |d d S )Nr   z0.372)r   r   r  r   )rz   r   r   r   r   test_as_nonzeroL  s    zUsabilityTest.test_as_nonzeroc             C   s4   | j j}|d}| t|d | t|d d S )Nz15.32zDecimal('15.32'))r   r   r   r   r   )rz   r   r   r   r   r   test_tostring_methodsT  s    z#UsabilityTest.test_tostring_methodsc       
      C   s  | j j}|d}|d}| t|d | t|d | t|d | t|d dddd	d
ddddg	}x&|D ]\}}| t||| qtW | ttj|d | ttj|d | ttj|d | t	tj|d | t	tj|d dddddddddg	}x(|D ] \}}| t
||| qW | ttj
|d | ttj
|d | ttj
|d | t	tj
|d | t	tj
|d dddddddddddddddd g}x&|D ]\}}| t||| qW | tt|d | tt|d | tt|d | t	t|d | t	t|d d!d"d#d$d%d&d'd(d)d*d+d,d-d.g}x.|D ]&\}}}	| tt||||	 qjW d S )/NZ66z15.32r  r  gp=
ף.@)z123.00r  )z3.2r   )z3.54r   )z3.899r   )z-2.3r   )z-11.0i)z0.0r   )z-0E3r   )z89891211712379812736.1l   {#'s{M z-NaNr  r  rR  z-Inf)z3.2r   )z3.54r   )z3.899r   )z-2.3r   )z89891211712379812736.1l   {#'s{M )z-3.5)z-2.5r   )z-1.5r   )z-0.5r   )z0.5r   )z1.5r   )z2.5r   )z3.5r   )z123.456r  z0E+4)z123.456r   z0E+3)z123.456r   z1E+2)z123.456r   z1.2E+2)z123.456r   rT  )z123.456r   z123.5)z123.456r   z123.46)z123.456r   z123.456)z123.456r   z123.4560)z123.455r   z123.46)z123.445r   z123.44)rR  r   r   )z-Infir   )ZsNaN314r   ZNaN314)r   r   r   r   r
  mathrZ   r   r   OverflowErrorZceilroundr   )
rz   r   r~  r  Z
test_pairsr   r   Ztest_triplesr   r  r   r   r   test_tonum_methods\  s    z UsabilityTest.test_tonum_methodsc             C   s\   | j j}xNdD ]F}t||}| t| td|}| ||drNdnd qW d S )N)r  Znan1234z-nanz-nan2468g      ?r2  g      )	r   r   r
  r   r  rV   rT   r   r   )rz   r   r   r   r   r   r   r   test_nan_to_float  s    
zUsabilityTest.test_nan_to_floatc             C   s0   | j j}x"dD ]}||}| tt| qW d S )N)snanz-snanZsnan1357z	-snan1234)r   r   r   r   r
  )rz   r   r   r   r   r   r   test_snan_to_float  s    
z UsabilityTest.test_snan_to_floatc             C   s|   | j j}|d}| |tt| |d}| |tt| |d}| |tt| |d}| |tt| d S )N)r   )r   r   )r   )r   r   r   )r   )r   r   r   r   r   )r   )	r   r   r   r   r   r   r   r   r   i)r   r   r   r   r   )rz   r   r   r   r   r   test_eval_round_trip  s    z"UsabilityTest.test_eval_round_tripc             C   sD  | j j}|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 S )Nr   )r   )r   r   i)r   )r   r   r   z-4.34913534E-17)r   )	r   r   r   r   r   r   r   r   r   ir   )r   )r   r   )r   )r   r   r   r   r   r   r   r   )r   )r   r   r   r   r   r   )r   )r   r   r   %   )r   )r   r  )r   r   r  )r   )r   r   r   r   r   r   r   r   )r   )r   r   r   r   r   r   )r   )r   r   r   N)r   r   r  )r   r   r   )r   )r   r   r   r   r   )r   )r   r   r  r   r   )r   )r   r   )r   r   r   as_tuple)rz   r   r   r   r   r   test_as_tuple  s6    zUsabilityTest.test_as_tuplec       	   	   C   s  | j j}| t|j|d | t|j|d | t|j|d | t|j|d xtddD ]}xtdD ]}xdD ]}|d	|||f }| }|\}}| |t | |t	 | |t	 | 
|d
 | t||d | |||| | q|W qrW qdW d S )Nr  z-infz-nanZsnan123r  r   i  )r/  r2  z%s%dE%dr   r   )r   r   r   r  as_integer_ratior   r   r  tupler   r  r   r  Zgcd)	rz   r   r   Zcoeffr   r   Zpqr  r  r   r   r   test_as_integer_ratio  s*    
z#UsabilityTest.test_as_integer_ratioc             C   sd  | j j}G dd d|}|d}|d}|| }| t|| ||}| t|| t|}| t|| | || t|}| t|| | || |d}||}| t|| | || ||}| t|| | || | |jd  ||}| t|| | || d|_||}| t|| | || | |jd  d S )Nc               @   s   e Zd ZdZdS )z1UsabilityTest.test_subclassing.<locals>.MyDecimalN)r   r   r   r   r   r   r   r   	MyDecimal8  s   r  r   r   z1.0r   )	r   r   r  r   r  rS   r   r  r   )rz   r   r  r~  r  r   r   r%   r   r   r   test_subclassing4  s<    


zUsabilityTest.test_subclassingc             C   s@   | j j}| j j}| }| t|d t||d d S )Nr   )r   r   r  r   r   rK   )rz   r   r  r   r   r   r   test_implicit_contextc  s
    z#UsabilityTest.test_implicit_contextc          
   C   sf  | j j}| j j}| j j}| j j}| j j}| j j}| j j}| j j}| j j	}	| j j
}
| j j}|| 
}d|_d|_d|_|d}|d}|d}|  | t|jd dd | |j|	  | |j|
  |  | j||jd d | |j|  | |jd dd	 | |jd dd
 |  | t|jd dd | |j|	  | |j|
  |  | j||djd d | |j|  |  | t|jd dd | |j|	  | |j|
  |  | j||djd d | |j|  |  | t|jd dd | j||djd d | |j|  |  | t|jd dd | j||jd d | |j|  |  | t|jd dd | j||djd d | |j|  |  | t|jd dd | j||djd d | |j|  |  | t|jd dd | j||jd d | |j|  | t|j d dd |  | t|j!d dd | |j|  | |j|	  | |j|
  | |j|  | |j|  |  | j||j!d d | |j|  d|_"| t|j#d dd d|_"|  t|j$|dd d}| |d | j||j$|dd d | |j|  |  t|j%dd d}| |d | j||j%|dd d | |j|  |  t|j&dd d}| |d | j||j&dd d | |j|  |  t|j'dd d}| |d | j||j'dd d | |j|  |  t|j(dd d}| |d  | j||j(dd d | |j|  |  t|j)dd d}| |d | j||j)|dd d | |j|  |  t|j*dd d}| |d | j||j*|dd d | |j|  |  t|j+dd d}| |d | j||j+|dd d | |j|  |  t|j,dd d}| |d | j||j,|dd d | |j|  |  t|j-dd d}| |d  | j||j-dd d | |j|  |  t|j.d!d d}| |d" | j||j.dd d | |j|  |  t|j/dd d}| |d# | j||j/d$d d | |j|  |  t|j0d!d d}| |d" | j||j0d$d d | |j|  |  t|j1d!d%d d}| |d& | j||j1|dd%d d | |j|  t2|_3t|d'j4d d d(}| |d t5|_3t|d'j4d d d(}| |d) t|d'j4t6d d(}| |d |  | j||dj4d d | |j|  t2|_3t|d'j7d d d(}| |d t5|_3t|d'j7d d d(}| |d) t|d'j7t6d d(}| |d |  | j||dj7d d | |j|  t2|_3t|d'j8d d d(}| |d t5|_3t|d'j8d d d(}| |d) t|d'j8t6d d(}| |d |  | j||dj8d d | |j|  t6|_3t|d*j9|d+d d d,}| |d- t5|_3t|d*j9|d+d d d,}| |d. t|d*j9|d+t6d d,}| |d- |  | j||j9|d/t6d d( | |j|  W d Q R X || X}d|_d|_d|_|d d00}| |jd | |jd | |jd W d Q R X W d Q R X d S )1Nr  i  iZ111Z1e9999z1e-9999)r   z1.609487E+48FTz4.709530r   z2.045323r  r   Z1111000z9.999999E+999r  r   r   z
+Subnormalz0E-1005r   ZNan891287828Z
NaN1287828i    z-1r   e   Z101r  rD  r   Z11100z1.11E+9i'  r   Z225z1.5)r   r   r   z1.50001z1e-3)r   r   r   z1.501z1.500z1e-10)r  ):r   r   r   r   rq   rr   rt   rw   rv   rs   ru   rp   r   r   r   r   r   r   r   r   r   r   r  r<   r@   lnlog10logbr7   rD   rE   rH   r.   rK   capitalsrL   r  r/   r,   rG   rP   r  rB   r  rC   rI   rotatescalebshiftfmar    r   to_integralri   rm   rM   rN   quantize)rz   r   r   r   rq   rr   rt   rw   rv   rs   ru   rp   r   r   r   zr   r   r   r   r   test_none_argsl  s   zUsabilityTest.test_none_argsc             C   s   | j j}| |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 | |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|d|d d S )Nr   r   iu'  i  i7  r  i  r  i   r   i  z9.123ii  r   ir   C   )r   r   r   r  r/   r0   r1   r,   rG   rP   r  rB   r  rC   rF   r  rI   r  rJ   r  r  r	  )rz   r   r   r   r   test_conversions_from_int[	  sV    z'UsabilityTest.test_conversions_from_intN)r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r   r   r   r   r  c  s*   $*	Tg
-!/	 pr  c               @   s   e Zd ZeZdS )CUsabilityTestN)r   r   r   r_   r   r   r   r   r   r  	  s   r  c               @   s   e Zd ZeZdS )PyUsabilityTestN)r   r   r   r   r   r   r   r   r   r  	  s   r  c               @   s\   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	dd Z
dd Zdd ZdS )PythonAPItestsc             C   sT   | j j}| t|tj | t|tj | |dtj | 	|dtj d S )Nr   )
r   r   r   
issubclassnumbersNumberr  ZRealr  ZassertNotIsInstance)rz   r   r   r   r   test_abc	  s
    zPythonAPItests.test_abcc             C   s  xt tjd D ]}| jj}tjd }| jtjd< |d}t||}t|}| 	|| t
rt
d}td}t
tjd< t||}	ttjd< t|	}
| |
tj | 	|
| ttjd< t||}t
tjd< t|}
| |
t
j | 	|
| t
d }td }t
tjd< t||}	ttjd< t|	}
| |
tj | 	|
| ttjd< t||}t
tjd< t|}
| |
t
j | 	|
| |tjd< qW d S )Nr   r   z-3.141590000z-3.123e81723)r   pickleHIGHEST_PROTOCOLr   r   sysmodulesdumpsloadsr   r_   r   r  r  ZDecimalTuple)rz   protor   savedecimalr   r  r   r   r   Zsxr  Zsyr   r   r   test_pickle	  sL    















zPythonAPItests.test_picklec             C   s   | j j}x`tddD ]R}d|d  }| t||tt| ||}|t}| |t|| qW | t	t|d | t	t|d | t
t|d | t
t|d d S )	Ni   z%0.2fg      Y@z-nanr  r  z-inf)r   r   r   r   r   r
  r
  ri   r   r   r  )rz   r   r   r   r   r  r   r   r   test_int	  s    
zPythonAPItests.test_intc             C   sp   | j j}xbtddD ]T}d|d  }| t||tt| ||}|t}| |t	|| qW d S )Nir   z%0.2fg      Y@)
r   r   r   r   r   r
  r
  ri   r  Ztrunc)rz   r   r   r   r   r  r   r   r   
test_trunc	  s    
zPythonAPItests.test_truncc             C   s  | j j}G dd d|}| t|| |d}| t|| | t|d | |jd d}| |||| | |t	d
  | |t	d  | |t	d	  | t|t	dt|d
 | t|t	dt|d | t|t	d	t|d | t|jd xBtdD ]6}tdt d d  }| |t	|| qBW d S )Nc               @   s   e Zd Zdd ZdS )z1PythonAPItests.test_from_float.<locals>.MyDecimalc             S   s
   d| _ d S )Nr   )r   )rz   _r   r   r   rv  	  s    z:PythonAPItests.test_from_float.<locals>.MyDecimal.__init__N)r   r   r   rv  r   r   r   r   r  	  s   r  g?z90.1000000000000000055511151231257827021181583404541015625r   l   s\&5$3|	 r  r  z-infr   r   z	-Infinityabcr	  g{Gz?g       @g      ?)r   r   r   r  ry  r   r   r   r   r
  r=   r:   r   r   r   r   r  )rz   r   r  r  Zbigintr   r   r   r   r   test_from_float	  s.    

zPythonAPItests.test_from_floatc             C   s   | j j}| j j}| j j}|dtd}| |tj|d |dt	d}| |tj|d |d|gd}| 
||jtj | t|dd | t|dd	 | t|d
d d S )Nr   )r   r   z3.1415z3.1416)r   r   g       zDecimal('-0')g      ?zDecimal('1')r   zDecimal('10'))r   r   r   rs   ri   r   create_decimal_from_floatr  Zpirm   r   r   )rz   r   r   rs   r   r   r   r   test_create_decimal_from_float
  s,    



z-PythonAPItests.test_create_decimal_from_floatc             C   s   | j j}| j j}| j j}|ddd}| |d|d|d | |dj|dtd|d | j||d	j|d
|d | }|d}|j||dtd}| ||d d S )Ni iay)r   r   z7.335z.01z7.34)r   z7.33Z10e99999Z1e100000)r   z0.871831e800Z1e797)r   r   r   z	8.71E+799)r   r   r   rq   r   r  ri   r   )rz   r   r   rq   r   r   r   r   r   r   test_quantize'
  s"    

zPythonAPItests.test_quantizec             C   s   | j j}|d}| |j| | |jd | | | |d}| t|ttd | t	t
|dd | t	t
|dd | t	t
|dd | t	t
|d	d d S )
Nz9.8182731e181273r   r   r   realr  imag	conjugate__complex__)r   r   r   r)  r*  r+  complexr
  r   r   rF  )rz   r   r   r   r   r   test_complex?
  s    zPythonAPItests.test_complexc          	   C   s  | j j}| j j}| j j}| j j}| j j}| }d|_d|_d|_| }|	  | 
|d|d | 
|d|dd | 
||ddd | 
||dd |	  | j||d|d | |j|  | |j|  |	  | 
|dj|dd	 | j||d
j|d | |j|  | |j|  |	  | 
|dj|d|d | j||dj|d | |j|  | |j|  | 
|dj|d|d | 
|dj|dd | 
|dj|d|d | 
|dj|d|d | 
|dj|dd | 
|dj|dd | 
|dj|dd | 
|dj|d|d | 
|dj|ddd |	  | j||dj|d|d | |j|  | |j|  | 
|dj|d|d|d | 
|dj|d|d|d | 
|dj|d |d|d  | 
|d!j|d"|d|d# | 
|d!j|d"|d|d | 
|dj|d$|d|d% |	  | j||dj |d&|d | |j|  | |j|  | 
|d'j!|d(|d|d) | 
|d*j"|d+|d	d,|d- | jt#|dj$|d | jt#|dj%|d | jt#|dj&|d | jt#|dj'|d | jt#|dj(|d | jt#|dj)|d | jt#|dj*|d | jt#|dj+|d | |dj,|d | |dj-|d | jt#|dj.|d | jt#|dj/|d | jt#|dj0|d | 
|d.j1|dd | 
|dj2|dd | 
|dj3|dd/ | 
|d0j4|dd0 | 
|d1j5|d2|dd | 
|d1j6|d2|dd | 
|d3j7|d2|dd | 
|d4j8d|dd | 
|d4j8d|dd |	  | j||d4j9d|d | |j|  | |j|  | 
|d4j:d|dd | jt#|j;d5|d | jt#|dj<|d | 
|d= d | jt#|d$j>|d | jt#|d$j?|d | jt#|dj=d6d | jt#|dj=d6d7 W d Q R X d S )8Nr   r   r   )r   )r   r   r   r   r   r  r   z0.7z-infr   z-0.9z9.73z1E+1Z9999i'  z-2000i0rT  r  z0.0625z0.2r   )r   r%  r   r  z0.01z0.0101z0.0z-0.3z0.02z-0.03z-0.0z-1z0.1Z1e10z9.99z1.5z-0.5z9.9z0.9)thirdr   r%  z7E+1iz
+Subnormalz0.21Z11rD  Z01Z23g?r   )r   )@r   r   r   r   rq   rt   r   r   r   r   r   r   r   r   r  r   r  r  rD   rE   rH   r
  rN   rM   rK   r  r/   r  rB   r  rC   rF   r  rI   r	  r   r8   r9   r:   r;   r=   r?   r>   rA   r<   r@   adjustedr+  radixr  r7   r.   rL   r,   rG   rP   r  r  r  ry  r  	canonicalr3   r4   )rz   r  r   r   rq   rt   Zxcr   r   r   r   test_named_parametersO
  s    
""
"
"

z$PythonAPItests.test_named_parametersc             C   s  | j }|j}|j}|j}|j}|j}|j}|j}|j}	|j	}
|j
}| t|t | t|| | t|| | t|t | t|| | t|t | t||
 | t||	 | t|| | t||	 | t||
 | t|| | t|| | t|| | t|	| | t|
| | t|| | t|j| | t|j| | t|j| | t|jt | t|j| d S )N)r   r   rq   FloatOperationrr   rt   rw   rv   rs   ru   rp   r   r  ArithmeticErrorr   ZeroDivisionErrorZConversionSyntaxZDivisionImpossibleZDivisionUndefinedZInvalidContext)rz   r   r   rq   r4  rr   rt   rw   rv   rs   ru   rp   r   r   r   test_exception_hierarchy
  sB    z'PythonAPItests.test_exception_hierarchyN)r   r   r   r  r  r!  r"  r%  r'  r(  r.  r3  r7  r   r   r   r   r  	  s   3 pr  c               @   s   e Zd ZeZdS )CPythonAPItestsN)r   r   r   r_   r   r   r   r   r   r8  
  s   r8  c               @   s   e Zd ZeZdS )PyPythonAPItestsN)r   r   r   r   r   r   r   r   r   r9  
  s   r9  c               @   s  e Zd Zdd Zedd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Z d;d< Z!d=d> Z"d?d@ Z#dAdB Z$dCdD Z%dEdF Z&dGdH Z'dIdJ Z(dKdL Z)dMdN Z*dOdP Z+dQdR Z,dSdT Z-dUdV Z.dWdX Z/dYdZ Z0d[d\ Z1d]d^ Z2d_d` Z3dadb Z4dcdd Z5dedf Z6dgdh Z7didj Z8dkdl Z9dmdn Z:dodp Z;dqdr Z<dsdt Z=dudv Z>dwdx Z?dydz Z@d{d| ZAd}d~ ZBdS )ContextAPItestsc          
   C   s   | j j}| j j}| j j}| j j}| }|d d d d d d d d d}x||gD ]z}| |jd | |jt | |j	d | |j
d | |jd | |jd t| |dg  t| |d|||g qHW d S )	N)r   r   r   r   r  r+   r   r   r  i?B ir   r   r   r   )r   r   rq   rr   rt   r   r   r   r    r   r   r  r+   r   )rz   r   rq   rr   rt   r  r  r   r   r   r   r  
  s"    
zContextAPItests.test_none_argsc             C   sv   dd l }| j }x&tD ]}|||_| |j| qW |d}| tt	|d| |d}| tt	|d| d S )Nr   r   r   z	ROUND_ UP)
r   r   r   RoundingModesr   r   r   r   r   rF  )rz   r   r   Zrndr   r   r   r   r     s    



z(ContextAPItests.test_from_legacy_stringsc             C   s  xt tjd D ]}| jj}tjd }| jtjd< | }tt||}| 	|j
|j
 | 	|j|j | 	|j|j | 	|j|j | 	|j|j | 	|j|j | 	|j|j | 	|j|j trttfttfgnttfg}x|D ]\}}xttD ]|\}	}
xntt| D ]\\}}
xNtt| D ]<\}}
tdd}tdd}tdd}td}td}|tjd< |j|||t|	 ||t| d | t| d | d}t||}|tjd< t|}| ||j | 	|j
| | 	|j| | 	|j| | 	|jt|	  | 	|j| | 	|j| t| |dt| d |  t| |d	t| d |  q>W q$W q
W qW |tjd< qW d S )
Nr   r   r  ir   r   )r   r   r   r   r  r+   r   r   r   r   )r   r  r  r   r   r  r  r  r  r   r   r   r   r   r  r+   r   r   r_   r   r   r;  r   r   	randranger  r   )rz   r  r   r  r   r   combinationsZdumperloaderZrir#  fiZtir   r  r  capsr+   r   r   r   r   r   r    sX    





0zContextAPItests.test_picklec             C   sB   | j j}| |ddd|ddi g | |ddddi g d S )Nr   r   g      ?)r   r   )r   r   ZassertInZassertNotIn)rz   r   r   r   r   test_equality_with_other_typesN  s    z.ContextAPItests.test_equality_with_other_typesc             C   s   | j j}| j j}| }| }| t|t| | t|jt|j | t|jt|j t|j	 }t|j	 }| 
|| | 
|j|j d S )N)r   r   r   rS   r  r   r   r   r]   keysr   )rz   r   r   r   r   Zk1Zk2r   r   r   	test_copyT  s    zContextAPItests.test_copyc             C   s"   | j j}| }| tt|d d S )NZ_clamp)r   r   r   r   r   )rz   r   r   r   r   r   test__clampc  s    zContextAPItests.test__clampc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   z-1)r   r   r   r  r   r   r   )rz   r   r   r   r   r   r   r   test_absn  s    zContextAPItests.test_absc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   )r   r   r   r`   r   r   r   )rz   r   r   r   r   r   r   r   test_addw  s    zContextAPItests.test_addc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   )r   r   r   r  r   r   r   )rz   r   r   r   r   r   r   r   test_compare  s    zContextAPItests.test_comparec             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   )r   r   r   r/   r   r   r   )rz   r   r   r   r   r   r   r   test_compare_signal  s    z#ContextAPItests.test_compare_signalc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   )r   r   r   r0   r   r   r   )rz   r   r   r   r   r   r   r   test_compare_total  s    z"ContextAPItests.test_compare_totalc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   )r   r   r   r1   r   r   r   )rz   r   r   r   r   r   r   r   test_compare_total_mag  s    z&ContextAPItests.test_compare_total_magc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   z-1)r   r   r   r3   r   r   r   )rz   r   r   r   r   r   r   r   test_copy_abs  s    zContextAPItests.test_copy_absc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   z-1)r   r   r   r2   r   r   r   )rz   r   r   r   r   r   r   r   test_copy_decimal  s    z!ContextAPItests.test_copy_decimalc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   z-1)r   r   r   r4   r   r   r   )rz   r   r   r   r   r   r   r   test_copy_negate  s    z ContextAPItests.test_copy_negatec             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   z-2)r   r   r   r5   r   r   r   )rz   r   r   r   r   r   r   r   r    s    zContextAPItests.test_copy_signc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   r  r   r   r   )rz   r   r   r   r   r   r   r   test_divide  s    zContextAPItests.test_dividec             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   r6   r   r   r   )rz   r   r   r   r   r   r   r   test_divide_int  s    zContextAPItests.test_divide_intc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   rE  r   r   r   )rz   r   r   r   r   r   r   r   test_divmod  s    zContextAPItests.test_divmodc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   r   r   r   r   )rz   r   r   r   r   r   r   r   test_exp  s    zContextAPItests.test_expc             C   s^  | j j}| j j}| }||d|d|d}| |ddd| | ||ddd| | |d|dd| | |dd|d| | ||d|dd| | t|jddd | t|jddd | t|jddd | t|j|d|dd	 | t|j|d
|dd | t|dj|dd	 | t|d
j|dd d S )Nr   r   r   r  rN  4r   r   znot a decimalr   r  gZd;O?)r   r   r   r	  r   r   r   )rz   r   r   r   r   r   r   r   test_fma  s(    

zContextAPItests.test_fmac             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   r9   r   r   r   )rz   r   r   r   r   r   r   r   test_is_finite!  s    zContextAPItests.test_is_finitec             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   r:   r   r   r   )rz   r   r   r   r   r   r   r   test_is_infinite*  s    z ContextAPItests.test_is_infinitec             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   r;   r   r   r   )rz   r   r   r   r   r   r   r   test_is_nan3  s    zContextAPItests.test_is_nanc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   r<   r   r   r   )rz   r   r   r   r   r   r   r   test_is_normal<  s    zContextAPItests.test_is_normalc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   r=   r   r   r   )rz   r   r   r   r   r   r   r   test_is_qnanE  s    zContextAPItests.test_is_qnanc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   r>   r   r   r   )rz   r   r   r   r   r   r   r   test_is_signedN  s    zContextAPItests.test_is_signedc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   r?   r   r   r   )rz   r   r   r   r   r   r   r   test_is_snanW  s    zContextAPItests.test_is_snanc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   r@   r   r   r   )rz   r   r   r   r   r   r   r   test_is_subnormal`  s    z!ContextAPItests.test_is_subnormalc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   rA   r   r   r   )rz   r   r   r   r   r   r   r   test_is_zeroi  s    zContextAPItests.test_is_zeroc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   r  r   r   r   )rz   r   r   r   r   r   r   r   test_lnr  s    zContextAPItests.test_lnc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   r  r   r   r   )rz   r   r   r   r   r   r   r   
test_log10{  s    zContextAPItests.test_log10c             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   r  r   r   r   )rz   r   r   r   r   r   r   r   	test_logb  s    zContextAPItests.test_logbc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   )r   r   r   r,   r   r   r   )rz   r   r   r   r   r   r   r   test_logical_and  s    z ContextAPItests.test_logical_andc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Ni  r   )r   r   r   r7   r   r   r   )rz   r   r   r   r   r   r   r   test_logical_invert  s    z#ContextAPItests.test_logical_invertc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   )r   r   r   rG   r   r   r   )rz   r   r   r   r   r   r   r   test_logical_or  s    zContextAPItests.test_logical_orc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   )r   r   r   rP   r   r   r   )rz   r   r   r   r   r   r   r   test_logical_xor  s    z ContextAPItests.test_logical_xorc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   r  r   r   r   )rz   r   r   r   r   r   r   r   test_max  s    zContextAPItests.test_maxc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   rB   r   r   r   )rz   r   r   r   r   r   r   r   test_max_mag  s    zContextAPItests.test_max_magc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   r  r   r   r   )rz   r   r   r   r   r   r   r   test_min  s    zContextAPItests.test_minc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   rC   r   r   r   )rz   r   r   r   r   r   r   r   test_min_mag  s    zContextAPItests.test_min_magc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   Zminusr   r   r   )rz   r   r   r   r   r   r   r   
test_minus  s    zContextAPItests.test_minusc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   r  r   r   r   )rz   r   r   r   r   r   r   r   test_multiply  s    zContextAPItests.test_multiplyc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   rD   r   r   r   )rz   r   r   r   r   r   r   r   test_next_minus  s    zContextAPItests.test_next_minusc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   rE   r   r   r   )rz   r   r   r   r   r   r   r   test_next_plus  s    zContextAPItests.test_next_plusc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   rF   r   r   r   )rz   r   r   r   r   r   r   r   test_next_toward  s    z ContextAPItests.test_next_towardc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   rH   r   r   r   )rz   r   r   r   r   r   r   r   test_normalize  s    zContextAPItests.test_normalizec             C   sn   | j j}| j j}| }| |d||d | |d||d | |d||d d S )Nr  r   i)r   r   r   r   r.   )rz   r   r   r   r   r   r   test_number_class&  s    z!ContextAPItests.test_number_classc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   plusr   r   r   )rz   r   r   r   r   r   r   r   	test_plus/  s    zContextAPItests.test_plusc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | ||d|d| | t|jdd | t|jdd | |jddddd d S )	Nr   r   r   rR  r   r   r   )modulor  r   )r   r   r   powerr   r   r   )rz   r   r   r   r   r   r   r   
test_power8  s    zContextAPItests.test_powerc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   r  r   r   r   )rz   r   r   r   r   r   r   r   r(  F  s    zContextAPItests.test_quantizec             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   Z	remainderr   r   r   )rz   r   r   r   r   r   r   r   test_remainderR  s    zContextAPItests.test_remainderc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   rI   r   r   r   )rz   r   r   r   r   r   r   r   test_remainder_near^  s    z#ContextAPItests.test_remainder_nearc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   r  r   r   r   )rz   r   r   r   r   r   r   r   test_rotatej  s    zContextAPItests.test_rotatec             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   rK   r   r   r   )rz   r   r   r   r   r   r   r   	test_sqrtv  s    zContextAPItests.test_sqrtc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   rJ   r   r   r   )rz   r   r   r   r   r   r   r   test_same_quantum  s    z!ContextAPItests.test_same_quantumc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   r  r   r   r   )rz   r   r   r   r   r   r   r   test_scaleb  s    zContextAPItests.test_scalebc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   r  r   r   r   )rz   r   r   r   r   r   r   r   
test_shift  s    zContextAPItests.test_shiftc             C   s   | j j}| j j}| }||d|d}| |dd| | ||dd| | |d|d| | t|jdd | t|jdd d S )Nr   r   r   r  )r   r   r   subtractr   r   r   )rz   r   r   r   r   r   r   r   test_subtract  s    zContextAPItests.test_subtractc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   rL   r   r   r   )rz   r   r   r   r   r   r   r   test_to_eng_string  s    z"ContextAPItests.test_to_eng_stringc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   rO   r   r   r   )rz   r   r   r   r   r   r   r   test_to_sci_string  s    z"ContextAPItests.test_to_sci_stringc             C   sJ   | j j}| j j}| }||d}| |d| | t|jd d S )Nr   rD  )r   r   r   rN   r   r   r   )rz   r   r   r   r   r   r   r   test_to_integral_exact  s    z&ContextAPItests.test_to_integral_exactc             C   s\   | j j}| j j}| }||d}| |d| | t|jd | t|jdd d S )Nr   rD  r   )r   r   r   rM   r   r   r   )rz   r   r   r   r   r   r   r   test_to_integral_value  s    z&ContextAPItests.test_to_integral_valueN)Cr   r   r   r  r
   r   r  rA  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  r  rN  rO  rP  rQ  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  rp  rs  r(  rt  ru  rv  rw  rx  ry  rz  r|  r}  r~  r  r  r   r   r   r   r:  
  s~   =																												r:  c               @   s   e Zd ZeZdS )CContextAPItestsN)r   r   r   r_   r   r   r   r   r   r    s   r  c               @   s   e Zd ZeZdS )PyContextAPItestsN)r   r   r   r   r   r   r   r   r   r    s   r  c               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )ContextWithStatementc          	   C   sb   | j j}| j j}| }| }| }W d Q R X | }| ||d | ||d | ||d d S )Nz!did not restore context correctlyzdid not copy the contextz __enter__ returned wrong context)r   r  r   r  assertIsNot)rz   r  r   orig_ctx	enter_ctxset_ctx	final_ctxr   r   r   test_localcontext  s    z&ContextWithStatement.test_localcontextc       	   	   C   s   | j j}| j j}| j j}| j j}| }|dd}||}| }W d Q R X | }| ||d | |j|jd | ||d | ||d d S )Nrx  )r   z!did not restore context correctlyzdid not set correct contextzdid not copy the contextz __enter__ returned wrong context)r   r   r  r   r  r   r   r  )	rz   r   r  r   r  new_ctxr  r  r  r   r   r   test_localcontextarg  s    

z)ContextWithStatement.test_localcontextargc          
   C   s  | j j}| j j}| j j}| j j}| j j}| j j}| }|  |dd}| }	| |	j	|j	 | |	j
|j
 d|	j
|< d|	_| |jd | ||	jd | |	j	|  ||^}
| |
j	|j	 | |
j
|j
 | ||
j|dd | |
j	|  | |
j	|  ~
W d Q R X | |	j	|  ~	W d Q R X | |jd | |j	|  | |j	|  | |j	|  | |j	|  d S )Ni  )r   Tiz0e-999z3.4e200r   )r   r   r   r  r   rp   rt   r   r   r   r   r   r  r   r   r   rr  r  )rz   r   r   r  r   rp   rt   r  r  r  r  r   r   r   test_nested_with_statements  s>    


z0ContextWithStatement.test_nested_with_statementsc             C   s\   | j j}| D}~| 0}~| }~| }~W d Q R X W d Q R X W d Q R X W d Q R X d S )N)r   r   )rz   r   r  r  r  c4r   r   r   test_with_statements_gc1  s    z-ContextWithStatement.test_with_statements_gc1c             C   sb   | j j}| J}||6}~|| }~||
}~~W d Q R X W d Q R X W d Q R X W d Q R X d S )N)r   r   )rz   r   r  r  r  r  r   r   r   test_with_statements_gc2*  s    


z-ContextWithStatement.test_with_statements_gc2c             C   s"  | j j}| j j}| j j}| j j}| }~|dd}|| ||}~| |jd ~|dd}|| ~| | jd |dd}	||	 | | jd ||	^}
~	| |
jd ~
|dd}|| ~| | jd | }| |jd ~W d Q R X W d Q R X W d Q R X W d Q R X d S )Nr   )r   r   r   r   )r   r   r   r  r$   r   r   )rz   r   r   r  r$   r  Zn1r  Zn2Zn3r  Zn4r  r   r   r   test_with_statements_gc36  s<    





z-ContextWithStatement.test_with_statements_gc3N)	r   r   r   r  r  r  r  r  r  r   r   r   r   r    s   #r  c               @   s   e Zd ZeZdS )CContextWithStatementN)r   r   r   r_   r   r   r   r   r   r  W  s   r  c               @   s   e Zd ZeZdS )PyContextWithStatementN)r   r   r   r   r   r   r   r   r   r  Y  s   r  c               @   s8   e Zd Zdd Zdd Zedd Zdd Zd	d
 ZdS )ContextFlagsc          
      s   j j} j j} j j} j j} j j} j j} j j} fdd}|dddtg g d}	|	j	|dgf|	j
|dgf|	j|d	|d
gf|	j|d	|d
gf|	j|d	|d
gfg}
|g|g|g|g|g|||||gg}x|
D ]\}}|	  || }dd |	j D }x|D ]}|	  x|D ]}||	| q"W || }t|}x"|D ]}||krL|| qLW |jtd dd |	j D }|jtd  ||dd||f    ||dd||f   qW qW d S )Nc                s2    j tkr$d| j|< | j| r.|n
| | d S )NT)r   r_   r   r   Z_raise_error)r   flag)rz   r   r   raise_errori  s
    


z7ContextFlags.test_flags_irrelevant.<locals>.raise_errorr   ii@T)r   r   r   r   r   r   z100E-425000010r   z
1.23456789z
9.87654321c             S   s   g | ]\}}|r|qS r   r   )r   kr   r   r   r   r     s    z6ContextFlags.test_flags_irrelevant.<locals>.<listcomp>)r   c             S   s   g | ]\}}|r|qS r   r   )r   r  r   r   r   r   r     s    z=operation produces different answers depending on flags set: zexpected %s, got %s.z9operation raises different flags depending on flags set: zexpected %s, got %s)r   r   r   rs   ru   rw   rp   rv   r    r-   rK   r`   r  r{  r   r   r  r  r   r   r   r   )rz   r   r   rs   ru   rw   rp   rv   r  r   Z
operationsZflagsetsfnr   r   r   extra_flagsr  Znew_ansZexpected_flagsZ	new_flagsr   )rz   r   test_flags_irrelevant^  sN    



z"ContextFlags.test_flags_irrelevantc             C   s2  | j j}| j j}| j j}| }| |j|j | |j|j |j|_| |j|j | |j|j d|j|< |j|_| |j|j | |j|j i }||j | ||j | |j| d||< | ||j | |j| |di}| ||j | |j| dg}| ||j | |j| d S )NTFr   )	r   r   rs   ru   r  r   r   r   update)rz   r   rs   ru   r   r   r   r   r   test_flag_comparisons  s4    
z"ContextFlags.test_flag_comparisonsc          	   C   s  | j j}| j j}| j j}| }| |j|  |  | |dd | |j	|  |  | |
dd | |j	|  |  |d}| |j	|  | |d | |j	|  |  |d}| |j	|  | |d | |j	|  d|j|< |  | ||d | |j	|  |  | ||j
d | |j	|  |  |d}| |j	|  |  |d}| |j	|  W d Q R X d S )Ng      @T)r   r   r4  r   r  r   r   r   r   r   r   ry  r&  r   )rz   r   r4  r   r   r   r   r   r   test_float_operation  sD    





z!ContextFlags.test_float_operationc                s"  j j j j}j jj j}dfdd	 d ddd d d	d	d

 d dtdtdd 	
fdd	}d fdd	}| }||P}|j  ||d d ||d d d|j< ||d ||d W d Q R X d S )Nc                sN   |   t| |}| kr*||| n||d |j   d S )NT)r   r   r   r  r   r   )r   r  r   r   signalr   )r4  rz   r   r   assert_attr  s    
z7ContextFlags.test_float_comparison.<locals>.assert_attrz0.25z3.0g      ?g      @z0.0z-0.0g        g       r   z	-Infinityr  z-infc                s  xdD ]}
|| | qW xdD ]}|| | q$W 
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t dd| d  d S )	N)r(  r*  )r)  r+  r,  r-  z0.1g?r   r  )r
  )r   r  r   )r   r  big_dbig_finf_dinf_f	neg_inf_d	neg_inf_f
neg_zero_d
neg_zero_fsmall_dsmall_fzero_dzero_fr   r   doit  s     

z0ContextFlags.test_float_comparison.<locals>.doitc                s   |    td dg}t|d | j  |    |r\|td dg ntd dg}| j  |    d ddgk}| j  |    d ddddik}| j  d S )	Ng      Y@z100.0r   g      ?z10.0g      $@r   r  )r   r]   r   lenr   r   r   sorted)r   r  r   r  )r   r4  rz   r   r   test_containers8  s    z;ContextFlags.test_float_comparison.<locals>.test_containers)r  T)N)N)N)r   r   r   r4  r   r
  r  r   )rz   r   r   r  r  r  r   r   )r   r4  r  r  r  r  r  r  r  r  r  rz   r  r  r  r  r   test_float_comparison  s6    	(

z"ContextFlags.test_float_comparisonc             C   s   | j j}| j j}| j j}| j j}| }| |j|  | |j|  |  d|j|< d|j|< | 	|j|  | 	|j|  d S )NT)
r   r   r   rs   r4  r  r   r   clear_trapsr   )rz   r   r   rs   r4  r   r   r   r   test_float_operation_defaultW  s    

z)ContextFlags.test_float_operation_defaultN)	r   r   r   r  r  r   r  r  r  r   r   r   r   r  \  s
   B&6[r  c               @   s   e Zd ZeZdS )CContextFlagsN)r   r   r   r_   r   r   r   r   r   r  g  s   r  c               @   s   e Zd ZeZdS )PyContextFlagsN)r   r   r   r   r   r   r   r   r   r  i  s   r  c               @   s    e Zd ZdZdd Zdd ZdS )SpecialContextszTest the context templates.c          
   C   s  | j j}| j j}| j j}| j j}| j j}| j j}| j j}| j j}| j j	}	t
| |d|||||	g |  }
|j}|j}d }zxyJd |_|_x8||fD ],}|| | }| || | |jd qW W n( tk
r } z
|j}W d d }~X Y nX W d ||_||_||
 |r|X d S )Nr   i  )r   BasicContextExtendedContextr  r$   rq   rr   rt   rw   rp   r   rS   r   r  r   	Exceptionr   )rz   r  r  r  r$   rq   rr   rt   rw   rp   savecontextZbasic_context_precZextended_context_precextemplater   r   r   r   r   test_context_templateso  s:    
z&SpecialContexts.test_context_templatesc          
   C   s&  | j j}| j j}| j j}| j j}| j j}| j j}| j j}| j j}| 	|j
d | 	|j
d t| |d|||g |  }	|j
}
d }zyR| }|j
}d|_
| }| 	|j
| || | }| || | 	|j
d W n* tk
r } z
|j}W d d }~X Y nX W d |
|_
||	 |r |X d S )Nr   r   i  )r   r  r  r  r  r$   rq   rr   rt   r   r   r   rS   r  r  r   )rz   r  r  r  r  r$   rq   rr   rt   r  Zdefault_context_precr  r   Zsaveprecr   r   r   r   test_default_context  s>    
z$SpecialContexts.test_default_contextN)r   r   r   r   r  r  r   r   r   r   r  l  s   $r  c               @   s   e Zd ZeZdS )CSpecialContextsN)r   r   r   r_   r   r   r   r   r   r    s   r  c               @   s   e Zd ZeZdS )PySpecialContextsN)r   r   r   r   r   r   r   r   r   r    s   r  c               @   s   e Zd Zdd ZdS )ContextInputValidationc          
   C   sP  | j j}| j j}| }xNdD ]F}t||d | t||d | tt||d | t	t||d qW t|dd | t|dd | tt|dd | t	t|dd | t	t|d	d | t	t|d	d
 | t	t|d	d | t	t|d	d xHdD ]@}| tt||d | tt||d | t	t||dddg qW | t
t|dd | t	t|dg  | tt|di  | tt|dddi xdD ]}| t
|j| qW | t	t|d
 | t	t|d
 | jt	|dd | jt	|dd | jt|dd | jt|dd | jt|dgd | jt|dgd | jt	|dd | jt	|dd d S )N)r   r   i?B r   r   r   ir   )r   r   r   r   r   g      ?)r  r+   r   r   r  r  r   r   rq   r   )r   r   r   r   r  r+   r   r   )r   )r+   )r  r   )r   Q)r   )r   r   )r   r   )r   r   r  rS   rF  r   r   r   r   r   r   KeyError__delattr__)rz   r   r  r   r   r   r   r   test_invalid_context  sJ    



z+ContextInputValidation.test_invalid_contextN)r   r   r   r  r   r   r   r   r    s   r  c               @   s   e Zd ZeZdS )CContextInputValidationN)r   r   r   r_   r   r   r   r   r   r    s   r  c               @   s   e Zd ZeZdS )PyContextInputValidationN)r   r   r   r   r   r   r   r   r   r    s   r  c               @   s   e Zd Zdd ZdS )ContextSubclassingc                s  | j j}j j}j}j}j}j}j}j	}j
}	G  fddd }
  }|
 }x$dD ]}| t||t|| qjW | jt|
fddi |
dd}| |jd | |	|j|dd	 | jt|
fd
di |
tdd}| |jt | ||dd | jt|
fddi |
ddd}| |jd ||d|d}| ||d x(|||||fD ]}| |j|  qrW | jt|
fddi |
ddd}| |jd | ||j|d|d | j tkrx$|||fD ]}| |j|  qW | jt|
fddi |
d	d}| |jd	 |d}| ||d | jt|
fddi |
ddd }| |jd ||d}| t|d! | jt|
fd"di |
||gd#}x"||fD ]}| |j|  qW |   x"t! D ]}| "|j|  qW | jt|
fd$di |
||gd%}x"||fD ]}| |j#|  q8W |$  x"t! D ]}| "|j#|  qdW d S )&Nc                   s   e Zd Zd fdd	ZdS )z>ContextSubclassing.test_context_subclassing.<locals>.MyContextNc	       	         s    |  |d k	r|| _|d k	r&|| _|d k	r4|| _|d k	rB|| _|d k	rP|| _|d k	r^|| _ d k	rt tr fddt	   D   | _
d k	rttrfddt	  D | _d S )Nc                s   i | ]}| k|qS r   r   )r   r   )r   r   r   
<dictcomp>&  s    z[ContextSubclassing.test_context_subclassing.<locals>.MyContext.__init__.<locals>.<dictcomp>c                s   i | ]}| k|qS r   r   )r   r   )r   r   r   r  *  s    )rv  r   r   r   r   r  r+   r  r  r   r   r   )	rz   r   r   r   r   r  r+   r   r   )r   r   )r   r   r   rv    s*    


zGContextSubclassing.test_context_subclassing.<locals>.MyContext.__init__)NNNNNNNN)r   r   r   rv  r   )r   r   r   r   	MyContext  s     r  )r   r   r   r   r  r+   r   r   r   r   r   )r   Z9e2r   r   XYZ)r   r   z9.9r   r   r   )r   r   z1e-99z2.234e-2000z0.0r   )r   r   Z1e99z
2.234e2000r  )r  Z1E222z1e+222r+   r   c   )r+   r   z!1.000000000000000000000000000E+99r   )r   r   )r   )%r   r   r   rp   rr   rs   rt   ru   rv   rw   rq   r   r   r   r   r   r  r   ri   r   ro  r   r`   r   r   r   r_   r  r   rO   r+   r   r   r   r  r   r  )rz   r   rp   rr   rs   rt   ru   rv   rw   rq   r  r   r   r   r   r  r   )r   r   r   test_context_subclassing  s|    



z+ContextSubclassing.test_context_subclassingN)r   r   r   r  r   r   r   r   r    s   r  c               @   s   e Zd ZeZdS )CContextSubclassingN)r   r   r   r_   r   r   r   r   r   r  q  s   r  c               @   s   e Zd ZeZdS )PyContextSubclassingN)r   r   r   r   r   r   r   r   r   r  s  s   r  c               @   s$   e Zd Zdd Zdd Zdd ZdS )CheckAttributesc             C   s   |  tjtj |  tjtj |  tjtj |  tjtj | tjdkpVtjdk | tjdkpptjdk |  tj	tj	 |  t
tt
t d S )NTF)r   r_   r   r   r|   r  r  r   r  __version__dir)rz   r   r   r   test_module_attributesy  s    z&CheckAttributes.test_module_attributesc             C   sJ   dd t t D }dd t t D }| t|t| t  d S )Nc             S   s"   g | ]}d |ks| ds|qS )__r#  )r   )r   r   r   r   r   r     s    z;CheckAttributes.test_context_attributes.<locals>.<listcomp>c             S   s"   g | ]}d |ks| ds|qS )r  r#  )r   )r   r   r   r   r   r     s    )r  r_   r   r   r   r]   )rz   r   r   r   r   r   test_context_attributes  s    z'CheckAttributes.test_context_attributesc             C   sN   dd t tdD }dd t tdD }| t|t| t  d S )Nc             S   s"   g | ]}d |ks| ds|qS )r  r#  )r   )r   r   r   r   r   r     s    z;CheckAttributes.test_decimal_attributes.<locals>.<listcomp>r   c             S   s"   g | ]}d |ks| ds|qS )r  r#  )r   )r   r   r   r   r   r     s    )r  r_   r   r   r]   )rz   r   r   r   r   r   test_decimal_attributes  s    z'CheckAttributes.test_decimal_attributesN)r   r   r   r  r  r  r   r   r   r   r  v  s   r  c               @   st   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	dd Z
dd Zdd Zdd Zdd Zdd ZdS )Coveragec             C   sH   | j j}| |d d | |d d | |d d d S )NZ	1234e9999i'  r  r   r  )r   r   r   r0  )rz   r   r   r   r   test_adjusted  s    zCoverage.test_adjustedc             C   sL   | j j}| j j}|d }| |d | }||d}| |d d S )Nr   )r   r   r  r2  r   )rz   r   r  r   r   r   r   r   test_canonical  s    zCoverage.test_canonicalc             C   st   | j j }d|_d|_d|_t|_d|_d|_	x&t
| j  D ]}d|j|< d|j|< q<W | }d}| || d S )Ni@Tir   r   Fz{Context(prec=425000000, rounding=ROUND_HALF_DOWN, Emin=-425000000, Emax=425000000, capitals=0, clamp=1, flags=[], traps=[]))r   r  rS   r   r   r   rk   r   r  r+   r   r   r   __repr__r   )rz   r   r  r   r   r   r   r   test_context_repr  s    
zCoverage.test_context_reprc          	   C   s  | j j}| j j}| }d|_d|_d|_| t|dd | |dd d | |dd d	 | |dd
 d | |d|ddd | 	|dd
d
 d | t|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  | |d  | |d  | |d  | |d  W d Q R X | `}d|_d d! }|| }| }| || | }| || | |d}| || W d Q R X d S )"Nr   r   z-10r   7r   rD  r   r   r  z1.2z0.01r   Tz1.01r   FZ20Z580r  r   r   z2E+1z-1E+1z+Normalz-1z1.12345r   r  r   i'  i  i  )!r   r   r   r   r   r   r   r  r	  r  r;   powr   r<   r@   r  r  r  r7   rD   rE   rH   r.   rN   r   r8   r9   r?   r>   rA   r3   r4   r5   )rz   r   r   r   r   r   r  r   r   r   r     s^    

zCoverage.test_implicit_contextc          	   C   s  | j j}| j j}| j j}| j j}| }t|dd\}}| ||d | ||d t|dd\}}| | o|  d|j	|< t|dd\}}| | o|  d|j	|< |
  t|d|d\}}| | o|  | |j|  |
  t|dd	\}}| | o2|  | |j|  |
  t|d
d
\}}| | ot|  | |j|  d|j	|< |
  t|dd
\}}| | o|  | |j| o|j|  W d Q R X d S )NZ10912837129i  Z10901935Z194r   r  Fr  r  r      )r   r   r   rq   rr   rE  r   r   r;   r   r   r   r:   )rz   r   r   rq   rr   r   r  r  r   r   r   rP    s@    



zCoverage.test_divmodc          	   C   s   | j j}| j j}| j j}| j j}| }d|_|  | |dd |d | |j	|  d|_d|_
d|_|  d|j|< | |d|d	 |d
 | |j	|  W d Q R X d S )Nr   z1.0r  z1.00r   r   Fi'  z0.5r  )r   r   r   rt   ru   r   r   r   r   r   r   r   r   )rz   r   r   rt   ru   r   r   r   r   rs  6  s     
zCoverage.test_powerc          	   C   sj   | j j}| j j}| j j}| B}d|_d|_d|_d|j|< |d|d}| 	|
  W d Q R X d S )Nr   r   Fr  Z1e1)r   r   r   rq   r   r   r   r   r  r   r;   )rz   r   r   rq   r   r   r   r   r   r(  J  s    
zCoverage.test_quantizec             C   s>   | j j}| j j}| }| |d d | | d d S )Nr   r   )r   r   r  r   r1  )rz   r   r  r   r   r   r   
test_radixW  s
    zCoverage.test_radixc             C   s4   | j j}x&dD ]}| t|d|dt qW d S )N)r1  r4  r7  r:  r'  r=  r?  rA  r   r   )r   r   r  r   r  )rz   r   r   r   r   r   rG  _  s    
zCoverage.test_ropc          	   C   s   | j j}| j j}| }d|_| t|d d | t|d d | t|ddd | t|d	d
d | t|d	dd | t|djd | t|djdd W d Q R X d S )Nr  z9.99rD  z9.99e-5r   z
1.23456789r   z1.23457z1.2345r   z1.2345000000iz0E+10z1.23r  r   )	r   r   r   r   r   r   	__round__r   r   )rz   r   r   r   r   r   r   
test_roundf  s    zCoverage.test_roundc             C   s    | j  }| t|jdg d S )Nr;  )r   r   r   r   r   )rz   r   r   r   r   test_create_decimalw  s    
zCoverage.test_create_decimalc          	   C   s`   | j j}| j j}| @}d|_|dd dd  }| t|d | | d W d Q R X d S )Ni'  i  i  r   iS  r   r   )r   r   r   r   r   r   r
  )rz   r   r   r   r   r   r   r   r!  {  s    zCoverage.test_intc             C   sl   | j j}| }d|_dd  }||}| ||  ||}| ||  ||d}| ||  d S )Ni'  i  i  r   )r   r   r   r3   r   r4   r5   )rz   r   r   r   r   r   r   r   rC    s    


zCoverage.test_copyN)r   r   r   r  r  r  r   rP  rs  r(  r  rG  r  r  r!  rC  r   r   r   r   r    s   Q)
r  c               @   s   e Zd ZeZdS )	CCoverageN)r   r   r   r_   r   r   r   r   r   r    s   r  c               @   s   e Zd ZeZdS )
PyCoverageN)r   r   r   r   r   r   r   r   r   r    s   r  c               @   s   e Zd ZdZdd ZdS )PyFunctionalityz!Extra functionality in decimal.pyc          
   C   sR   t j}t j}ddddddddd	d
g
}x(|D ] \}}}| t|||| q*W d S )N)z.0ez1.0z1e+0)z#.0ez1.0z1.e+0)z.0fz1.0r   )z#.0fz1.0z1.)rO  z1.1z1.1)z#gz1.1z1.1)z.0gr   r   )z#.0gr   z1.)z.0%z1.0z100%)z#.0%z1.0z100.%)r   r   r   r   rX  )rz   r   r   r  rZ  r   r   r   r   r   test_py_alternate_formatting  s    z,PyFunctionality.test_py_alternate_formattingN)r   r   r   r   r  r   r   r   r   r    s   r  c               @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )
PyWhiteboxz White box testing for decimal.pyc          	   C   s   t j}t j}| }d|_|d|d }| ||d |d|d }| ||d |d|d }|d|d	 }| ||d
 |d|d	 }|dd |d	 }d|_|d|d }d|_|dd |d }W d Q R X d S )Nr   i   z-0.5z
0.00390625z-0.6z0.0012885819Z256e7l   o z-0.0625z0.2Z152587890625e7r   ic
  r   Z152587890625   r   iB  )r   r   r   r   r   )rz   r   r   r   r   r   r   r   test_py_exact_power  s"    zPyWhitebox.test_py_exact_powerc                s:  t j}t j}t j}| }tdd tt  D |_|| |d|d |d|dd4 fdd	}| j	 j	 j
 j
 j j |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#d
 |d$d
 |d% |d&d
 |d'd
 |d( |d) |d*d
 |d+d
 |d,d
 |d- |d.d
 |d/d
 |d0d
 |d1 |d2 |d3 d S )5Nc             s   s   | ]}|d fV  qdS )r   Nr   )r   r   r   r   r   r     s    z=PyWhitebox.test_py_immutability_operations.<locals>.<genexpr>z-25e55z33e+33Fc                s   |rvt d|  d  j j j j j j jj jj jj n@t d|  d  j j j j j j d S )Nzd1.z(d2)z())r   r   _sign_int_exp)Z	operationZuseOther)b1b2r~  r  rz   r   r   checkSameDec  s    z@PyWhitebox.test_py_immutability_operations.<locals>.checkSameDec__abs__r0  Tr&  r,  r-  r*  r(  r+  r)  	__float__r>  r  __int__	__trunc__r<  r6  __neg____bool____pos__r@  r1  r'  r  r?  r=  r7  rA  r4  __str__r3  r9  r0  r  r  r  r  rH   r  rI   rJ   rK   rL   r
  )F)r   r   r  r$   rS   r!   r   r   r   r  r  r  )rz   r   r  r$   r   r  r   )r  r  r~  r  rz   r   test_py_immutability_operations  st    


























z*PyWhitebox.test_py_immutability_operationsc             C   s>   t j}|d}||}| t|d | t|t| d S )Nr   r   )r   r   r   r   r  r   )rz   r   r   r   r   r   r   test_py_decimal_id  s
    zPyWhitebox.test_py_decimal_idc          	   C   s@   t j}t j}| $}|ddt}| |  W d Q R X d S )Nr   r   )r   r   r   Z_rescalerm   r   r;   )rz   r   r   r   r   r   r   r   test_py_rescale'  s
    zPyWhitebox.test_py_rescalec             C   s    t j}| t|djdt d S )Nz3.1234r   )r   r   r   r   Z_roundrm   )rz   r   r   r   r   test_py__round0  s    zPyWhitebox.test_py__roundN)	r   r   r   r   r  r  r  r  r  r   r   r   r   r    s   O	r  c               @   s4   e Zd ZdZedd Zedd Zedd ZdS )	CFunctionalityzExtra functionality in _decimalc             C   s  t j}t j}t j}t j}dd }||}| |jd | |jd | |jd || | ||}| |jd | |jd | |jd || | ||}| |jd	 | |jd
 | |jd || | | 	t
|d | 	t|d | 	t|d d S )Nc             S   s.   |  |jd t| |dg  t| |dg  d S )Nr   r   r   )r   r+   r   )rz   r   r   r   r   assert_restA  s    z7CFunctionality.test_c_ieee_context.<locals>.assert_restr  `   ir  i  i"   i   il            r   i   )r_   IEEEContext	DECIMAL32	DECIMAL64
DECIMAL128r   r   r   r   r   r  r   )rz   r  r  r   r  r  r   r   r   r   test_c_ieee_context9  s.    


z"CFunctionality.test_c_ieee_contextc             C   s:   t j}|t jt jd}| |jt j | |jt j d S )N)r   r   )r_   r   r(   
DecRoundedr   _flags_traps)rz   r   r   r   r   r   test_c_context]  s    zCFunctionality.test_c_contextc             C   s  t jt jt jt jt jt jt jt jt j	t j
t jt jt jt jt jf}| t jd | t jd | t jd | t jd x$t|D ]\}}| |d|>  qW | t jt jt jB t jB t jB t jB t j	B t j
B  | t jt jt jB  | t jt jt jB t jB  d S )Nr   r     i   r   )r_   r(   DecConversionSyntaxDecDivisionByZeroDecDivisionImpossibleDecDivisionUndefinedDecFpuError
DecInexactDecInvalidContextDecInvalidOperationDecMallocErrorZDecFloatOperationDecOverflowr  DecSubnormalDecUnderflowr   r  r   r  ZIEEE_CONTEXT_MAX_BITSr   DecIEEEInvalidOperationZ	DecErrorsZDecTraps)rz   condr   r   r   r   r   test_constantse  s(    "

zCFunctionality.test_constantsN)r   r   r   r   requires_extra_functionalityr  r  r  r   r   r   r   r  6  s   $r  c               @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dd Zdd Ze
dd Zdd Zdd Zdd Zdd Zdd Ze
dd Ze
d d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,S )-	CWhiteboxzWhitebox testing for _decimalc          	   C   s   t j}t j}dd }dd }| Z}d|_xLtdD ]@}t||}tdd}|| }	|||| }
| |	|
 q4W W d Q R X d S )Nr   #   $   i@B r   i  i  )r_   r   r   r   r   r   r<  r   )rz   r   r   r  r  r   r   r   r  r   r   r   r   r   test_bignum  s    zCWhitebox.test_bignumc             C   s   |  ttjdd d S )Nr   r   )r   r   r_   r   )rz   r   r   r   test_invalid_construction  s    z#CWhitebox.test_invalid_constructionc          	   C   s@   t j}t j}t j}t j}||  | ||d W d Q R X d S )NZ1e9999999999999999999)r_   r   rq   r   r   r   )rz   r   rq   r   r   r   r   r   test_c_input_restriction  s    z"CWhitebox.test_c_input_restrictionc             C   s   t j}t j}| }d|_d|_d|_t|_d|_	d|_
x$tt  D ]}d|j|< d|j|< qBW d|j|< d|j|< | }d}| || d S )Ni@Tir   r   TaQ  Context(prec=425000000, rounding=ROUND_HALF_DOWN, Emin=-425000000, Emax=425000000, capitals=0, clamp=1, flags=[Clamped, InvalidOperation, DivisionByZero, Inexact, FloatOperation, Overflow, Rounded, Subnormal, Underflow], traps=[Clamped, InvalidOperation, DivisionByZero, Inexact, FloatOperation, Overflow, Rounded, Subnormal, Underflow]))r_   r  r4  rS   r   r   r   rk   r   r  r+   r   r   r   r  r   )rz   r  r4  r   r  r   r   r   r   r   test_c_context_repr  s"    


zCWhitebox.test_c_context_reprc          
   C   s  t j}t j}t j}t j}t j}t j}t j}t jdk}| }	| 	t
|	jjdd | 	t
|	jjdd | 	t|	jj| | 	t|	jj| | 	tt|	ddg | 	tt|	ddg | 	t
t|	dddi | 	t
t|	dddi |	j }
|
|= d	|
d
< | 	t
t|	d|
 | 	t
t|	d|
 |r dnd}|r.dnd}x dD ]}| 	tt|	|| q8W | 	tt|	d|  | j	t||d | j	t||d | j	t|| d | j	t||d d | j	t||d d | j	t|| d d | j	t||d d | j	t||d d xrdD ]j}| 	tt|	||d  | 	tt|	|| d  tjdkr| 	tt|	|| | 	tt|	|| d  qW t jdkr| 	tt|	d|d  | 	tt|	d|d  | 	tt|	d| d  t jdkrN| 	tt|	dd | 	tt|	dd | 	tt|	dd | 	tt|	dd | 	tt|	dd | 	tt|	dd xtdD ]l}| 	tt|	|d | 	tt|	|d | 	tt|	|ddd g |rT| 	tt|	|d! | 	tt|	|d" qTW | 	ttd#t  | 	ttd$t  | }| 	t|d% || d S )&Ni@Ti!  r   r   r   r   r   r   ipr  l    il     NZoi ʚ;)r   r   r   )r   )r   )r   r   )r+   )r  )r   r   r   r  r+   win32r}   r~   r   i?r   i9)r  r+   r   l        l       zwith localcontext("xyz"): passz-with localcontext(context=getcontext()): passr   )r_   r   rq   rt   r4  r   r  r$   r   r   r  r   __setitem__r   r   __delitem__r   rF  rS   r  r  platformr   execr  )rz   r   rq   rt   r4  r   r  r$   HAVE_CONFIG_64r   r   int_maxZgt_max_emaxr   Zsaved_contextr   r   r   test_c_context_errors  s    







zCWhitebox.test_c_context_errorsc             C   s   |  tjtj |  tjtj |  tjtj |  tjtj |  tjtj |  tjtj |  tj	tj	 |  tj
tj
 d S )N)r  r_   rm   r   ri   rh   rj   rl   rk   r    rn   )rz   r   r   r   test_rounding_strings_interned/  s    z(CWhitebox.test_rounding_strings_internedc          	   C   s  t j}t j}t j}t j}t j}t j}t jdk}| }|r<dnd}	| t	t
|d|	d  | t	t
|d|	 d  tjdkr| tt
|d|	 | tt
|d|	 d  xndD ]f}
| t	t
||
|	d  | t	t
||
|	 d  tjdkr| tt
||
|	 | tt
||
|	 d  qW | tt
|dd	 | tt
|dd | tt
|dddd
g |rx| tt
|dd | tt
|dd x2dD ]*}
| tt
||
d | tt
||
d q~W d S )Ni@Tl    i_allcrr   r   r  )r  r  r   r   l        l       i?B r   )r_   r   rq   rt   r   r  r$   r   r   r  rF  r  r"  r   r   )rz   r   rq   rt   r   r  r$   r$  r   r%  r   r   r   r   test_c_context_errors_extra:  s:    




z%CWhitebox.test_c_context_errors_extrac             C   s  t j}t j}t j}t j}t j}t j}| }d|_t	|_
d|_d|_d|_d|_| |jd | |j
t	 | |jd | |jd | |jd | |jd | | d | | d t jdkr|d	 |d	 |d
 | |jd	 | |jd	 | |jd
 d S )Nr  i  iHr   r   i'i  i@Tiɚ;i6e)r_   r  rp   rw   rs   ru   rv   rS   r   rl   r   r   r   r  r+   r   ZEtinyZEtopr   r}   r~   r   )rz   r  rp   rw   rs   ru   rv   r   r   r   r   test_c_valid_contexte  s8    


zCWhitebox.test_c_valid_contextc             C   s4   t j}| }| |jd d|_| |jd d S )Nr   r   )r_   r  rS   r   r(  )rz   r  r   r   r   r   test_c_valid_context_extra  s
    z$CWhitebox.test_c_valid_context_extrac          	   C   s   t j}t j}t j}t j}t j}t jdkr,dnd}| }d|j|< | ||dj	| d  | ||dj	| | ||dj	t
|d  | t j|dj	t
|d   | t|dj	| d  | t|dj	|d  W d Q R X d S )	Ni@Tl    iTz1.23r   r   r   )r_   r   rq   r   r|   r  r   r   r   r  r   r  )rz   r   rq   r   r|   r  r%  r   r   r   r   test_c_round  s(    
zCWhitebox.test_c_roundc             C   s   t j}t jdk}| t|djdg d | t|djdd | t|djg  | t|djd |rndnd}| t|djd	|  d S )
Ni@Tr   z=10.10r   z<>=10.10l    iz
1.23456789z=%d.1)r_   r   r   r   r   rY  r   )rz   r   r$  maxsizer   r   r   test_c_format  s    
zCWhitebox.test_c_formatc          	   C   sP  t j}t j}t j}|d}| | d | t|jd | t|jdd | t|jd | | d | t|jd | t|jdd | t|jd | |	 d | t|j	d | t|j	dd | t|j	d | `}|dt
}| ||d |d	t
}| ||d d|j|< | ||dj	t
 W d Q R X d S )Nr   rD  r   z99999999999999999999999999.9Z100000000000000000000000000Tz999.9)r_   r   rs   r   r   r
  r   r   rM   rN   rm   r   )rz   r   rs   r   r   r   r   r   r   test_c_integral  s.    
zCWhitebox.test_c_integralc          	   C   s>  t j}t j}t j}t j}t j}| |d d | t	t
|ddd | t	|djdd | t	|djd	dd | t	|d
j|dg  | t	|d
j|d|  | t	|d
j|dd | t	|d
j|dtd | J}|  | t	|j|ddd | t	|jd | t	|jd | t	|jdddd | t	|jdd	dd | t||dd | | d d|j|< | ||djd | ||jdd | |j|  |  d|j|< | ||djd | ||jdd | |j|  d|j|< d|_| |t
|ddd W d Q R X d S )Nz9.99e10z99.9E+9r   r   rN  r   r   r   r   z
1.23456789z	1e-100000r   i  r	  r   Z200Tr   i  )r_   r   rq   rr   r  r   r   rL   r   r   r  r.   rJ   r  rm   r  r5   r2  r8   rE  r   r1  r   r&  r   r   r   r   )rz   r   rq   rr   r  r   r   r   r   r   test_c_funcs  sT    



zCWhitebox.test_c_funcsc             C   s  t j}t j}|d}x8dD ]0}t||}| jt|dd | jt|dd d qW x8dD ]0}t||}| jt|dd | jt|dd d qTW | jt|jd g d | jt|ji g d | t|jg g  | jt|jd g d | jt|ji g d | t|jg g  | jt|jd g d | jt|ji g d | t|jg g  | jt|j	dddd | jt|j	dddd d | jt|j
dg d d | jt|j
dg d d	 | t|j
dg g  | }| jt|jdddd
 | jt|jddd d
 | jt|jddd d
 d S )NZ10001111111)r   r<   r@   r  r  r  r7   rD   rE   rH   r.   rK   rL   r   )r   )r  r/   r,   rG   r  rB   r  rC   rI   r  r  r  )r   r   r   r   )r   )mod)r_   r   r   r   r   r   r
  rM   rN   r	  r  rr  )rz   r   r   r   r   funcr   r   r   r   test_va_args_exceptions  s:    



z!CWhitebox.test_va_args_exceptionsc             C   sL   |  tjjtjtjB tjB tjB tjB  |  tj	jtjtjB tjB  d S )N)
r   r_   r  r  r  r	  r  r  r(   r  )rz   r   r   r   test_c_context_templates@  s     z"CWhitebox.test_c_context_templatesc       %         sD  t j}t j}t j}t j}t j}t j}t j}t j}t j	}	t j
}
t j}t j}t j} fdd}| } ||jk |  x|j D ]}d|j|< qW x|j D ]} | qW |  x |j D ]\}} | qW  |j|  |jdd   |jddd  t|jjddd  t|jt|j t|j}t|j}|j }|   ||_! |j|
  |  ||_" |j|  |   |j }d||< ||_|||j |  |j }d||< ||_|||j |
t j|t j#|	t j$|t j%|t j&|t j'|t j(|t ji}t j)t j*t j+t j,t jt j-t j.g}tt/t  }xxt0|D ]j}x`t0|D ]R}xHt1D ]>}t23t/t  |}t23t/t  |}t24dd}t24d	d
}t24d
d}t24d
d}t24d
d} t24d
d}!|||||| |t5|t5|d} |j6|  |j7|  |j8|  |j9|  |j:|   |j;| d
}"x|D ]}#|"||# O }"qxW  |j!|" d
}"x|D ]}#|"||# O }"qW  |j"|" qW q~W qlW x0|D ](}$|$|_! |j!|@  |||j qW x0|D ](}$|$|_" |j"|@  |||j qW d S )Nc                s8   x2|D ]*}|| kr"  ||  q ||  qW d S )N)r   r  )r  Zsignal_dictr  )rz   r   r   assertIsExclusivelySet`  s    
z<CWhitebox.test_c_signal_dict.<locals>.assertIsExclusivelySetTr   r   r  r   i'  ir   r   )r   r   r   r   r  r+   r   r   )<r_   r   r  rq   rr   rt   rv   rw   ru   rs   rp   r(   r  r  rS   r   r   r  rB  valuesr  r  r   r   r  r   r   r   r  r  	getsizeofr  r   r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r   r   r;  r   Zsampler<  r  r   r   r   r   r  r+   )%rz   r   r  rq   rr   rt   rv   rw   ru   rs   rp   r(   r  r  r5  r   r  r   r   r   Z
IntSignalsZIntCondZlimr  r   r  r   r   r   r  r  r+   r@  Zcrr   r   r  r   )rz   r   test_c_signal_dictL  s    







 

zCWhitebox.test_c_signal_dictc                s   t j yddlm} W n tk
r4   | d Y nX dd }d fdd	}d	|d
d
dgd	d}d|dddgd	d}d|dddgdd}|dkr| t|d|d | t|d|d | t|d|d d S )Nr   )r\  zlocale.CHAR_MAX not availablec             S   s   d dd | D S )Nr   c             S   s   g | ]}t |qS r   )r]  )r   r   r   r   r   r     s    zJCWhitebox.test_invalid_override.<locals>.make_grouping.<locals>.<listcomp>)r^  )r_  r   r   r   r`    s    z6CWhitebox.test_invalid_override.<locals>.make_groupingr   c                s    |  ||S )N)rY  )r   rb  rZ  )r   r   r   rc    s    z0CWhitebox.test_invalid_override.<locals>.get_fmtrU     )re  rf  rg  Zxxxxxr   rd  Zyyyyy   i90  rO  )Nr   )r_   r   ri  r\  rj  rk  r   r   )rz   r\  r`  rc  Zinvalid_groupingZinvalid_dotZinvalid_sepr   )r   r   test_invalid_override  s*    
zCWhitebox.test_invalid_overridec          	   C   s   t j}t j}t j}| |}d|j|< dtj }| ||| dtj d  }| ||| dtj }| ||| dtj d  }| ||| W d Q R X d S )NTz0e%dr   z1e%d)r_   r   r   rq   r   r  r-  r   )rz   r   r   rq   r   r   r   r   r   test_exact_conversion  s    


zCWhitebox.test_exact_conversionc          	   C   s  t j}t j}t j}t j}t j}| }d|j|< d|j|< d|j|< ddtjf}| 	t
||d | ||| ddtjf}| ||j| | ||| ddtj d f}| 	t
||d | ||| ddtj d f}| ||j| | ||| ddtjd f}| t|j| | t|| ddtj d f}| t|j| | t|| d}| 	t
||d	 d
}| 	t
||d	 d}| 	t
||d W d Q R X d S )NTr   r   z
-0E+999999)r   r   r   z-0E-1000007r   )r   r   r  z-sNaN)r   )r   r  )r   )r   r   r  z-sNaN1)r_   r   r   rq   rt   rw   r   r  r-  r   r   r   r   r  )rz   r   r   rq   rt   rw   r   r   r   r   r   test_from_tuple  sB    



zCWhitebox.test_from_tuplec             C   s   t j}t jdk}| |d d |rZ|dd  }|dd  }| ||d  n0|dd  }|dd  }| ||d	  d S )
Ni@Tr   r   i  i  r         r   )r_   r   r   r  
__sizeof__r   )rz   r   r$  r   r   r   r   r   test_sizeof=  s    
zCWhitebox.test_sizeofc                s~   t j}G dd dt}G dd dt}G dd dt G  fdddt}x.|||fD ] }| ||d	|d	 qVW d S )
Nc               @   s   e Zd Zdd Zdd ZdS )z<CWhitebox.test_internal_use_of_overridden_methods.<locals>.Xc             S   s   dS )Nr   r   )rz   r   r   r   r  P  s    zMCWhitebox.test_internal_use_of_overridden_methods.<locals>.X.as_integer_ratioc             S   s   | S )Nr   )rz   r   r   r   r  R  s    zDCWhitebox.test_internal_use_of_overridden_methods.<locals>.X.__abs__N)r   r   r   r  r  r   r   r   r   XO  s   rB  c               @   s   e Zd Zdd ZdS )z<CWhitebox.test_internal_use_of_overridden_methods.<locals>.Yc             S   s
   dgd S )Nr   r	  r   )rz   r   r   r   r  V  s    zDCWhitebox.test_internal_use_of_overridden_methods.<locals>.Y.__abs__N)r   r   r   r  r   r   r   r   YU  s   rC  c               @   s   e Zd Zdd ZdS )z<CWhitebox.test_internal_use_of_overridden_methods.<locals>.Ic             S   s
   dgd S )Nr   r	  r   )rz   r   r   r   
bit_lengthZ  s    zGCWhitebox.test_internal_use_of_overridden_methods.<locals>.I.bit_lengthN)r   r   r   rD  r   r   r   r   IY  s   rE  c                   s    e Zd Z fddZdd ZdS )z<CWhitebox.test_internal_use_of_overridden_methods.<locals>.Zc                s    d dfS )Nr   r   )rz   )rE  r   r   r  ^  s    zMCWhitebox.test_internal_use_of_overridden_methods.<locals>.Z.as_integer_ratioc             S   s   | S )Nr   )rz   r   r   r   r  `  s    zDCWhitebox.test_internal_use_of_overridden_methods.<locals>.Z.__abs__N)r   r   r   r  r  r   )rE  r   r   Z]  s   rF  gfffffFY@)r_   r   r
  r   r   ry  )rz   r   rB  rC  rF  r   r   )rE  r   'test_internal_use_of_overridden_methodsK  s    z1CWhitebox.test_internal_use_of_overridden_methodsN)r   r   r   r   r  r  r  r  r&  r'  r  r)  r*  r+  r,  r.  r/  r0  r3  r4  r8  r;  r<  r=  rA  rG  r   r   r   r   r    s.   e+&	;, %0r  ztest requires C versionc               @   s    e Zd ZdZdd Zdd ZdS )SignatureTestzFunction signaturesc       
      C   s   xt tD ]}|drq
tt|}tt|}|dksH|dksHt|r
t|}t|}t|j	
 }dd |j	
 D }| j||d| d dd |j	 D }d	d |j	 D }	|d
kr
| j||	d| d q
W d S )Nr#  r   r   c             S   s   g | ]}| d s|qS )r#  )r   )r   r   r   r   r   r   y  s    z5SignatureTest.test_inspect_module.<locals>.<listcomp>zparameter name mismatch in %s)msgc             S   s   g | ]
}|j qS r   )kind)r   r   r   r   r   r     s    c             S   s$   g | ]}|d   ds|d jqS )r   r#  r   )r   rJ  )r   r   r   r   r   r     s    r$   zparameter kind mismatch in %s)r  r   r   r   r_   inspect
isfunction	signaturer  
parametersrB  r   r6  r  )
rz   r   p_funcc_funcp_sigc_sigc_namesp_namesc_kindp_kindr   r   r   test_inspect_modulel  s$    





z!SignatureTest.test_inspect_modulec                s  t jj t jjttdtdtdtdtdtdtdtdtdtdddtjt dttdtdtdtdtdtdtdddtjt di fdddd	  fd
d}|d |d d S )Nr   r   g      ?)r%  r/  r   r   r  r   r  r   r   rq  numr   r   r   )r%  r/  r   r  r   r   rq  rX  r   r   r   c                st   g }i }xb|j  D ]T\}}|dkr&q|j krD||  |  q|jkr`|  | ||< qtdqW ||fS )Nrz   zunexpected parameter kind)rN  r  rJ  r   r   )moduler  r   kwargsnameZparam)POSPOS_KWDpdictr   r   mkargs  s     

z0SignatureTest.test_inspect_types.<locals>.mkargsc             S   s(   | dkrdS | dkrdS | dkr$dS | S )zwThe C Context docstrings use 'x' in order to prevent confusion
               with the article 'a' in the descriptions.r   r   r   r  r  r   r   )r   r   r   r   tr  s       z,SignatureTest.test_inspect_types.<locals>.trc                s  t t| }t t| }xt|D ]}|dr2q t ||}t ||}t|r t|}t|}t|j	
 }fdd|j	
 D }	j|	|d| d dd |j	 D }
dd |j	 D }|
d  |d   | d	krj|d
d  |
d
d  d| d njt|t|
d| d t|\}}yt |d||| W n6 tk
r } ztd|||f W d d }~X Y nX t|\}}yt |d||| W q  tk
r } ztd|||f W d d }~X Y q X q W d S )Nr#  c                s   g | ]} |qS r   r   )r   r   )r`  r   r   r     s    zBSignatureTest.test_inspect_types.<locals>.doit.<locals>.<listcomp>zparameter name mismatch in %s)rI  c             S   s   g | ]
}|j qS r   )rJ  )r   r   r   r   r   r     s    c             S   s   g | ]
}|j qS r   )rJ  )r   r   r   r   r   r     s    r   r   r   zparameter kind mismatch in %sr   zinvalid signature for %s: %s %s)r   r   r_   r  r   rK  rL  rM  r  rN  rB  r   r6  r  r  r  r   )ZtyZp_typeZc_typer   rO  rP  rQ  rR  rT  rS  rV  rU  r   kwdserr)r\  r]  r_  rz   r`  r   r   r    sB    








$z.SignatureTest.test_inspect_types.<locals>.doitr   r   )	rK  Z_ParameterKindZPOSITIONAL_ONLYZPOSITIONAL_OR_KEYWORDr_   r   rl   r  r   )rz   r  r   )r\  r]  r_  r^  rz   r`  r   test_inspect_types  s@    


/z SignatureTest.test_inspect_typesN)r   r   r   r   rW  rc  r   r   r   r   rH  g  s   rH  r   r   c          
   C   sv  t t t t | dk	r| ntda|a|dkr6t}nttg}xzt	
tD ]l}d|ksJ|drbqJ|d\}}|dk	r||krqJ|fdd}ttd| | ttd| | ~~~~qJW zht|  |dkr dd	lm}	 tjd }
trttjd< tt||	d
 ttjd< tt| |
tjd< W dtr8ttt  ttt  tsXtdt ttjd k	rptdX dS )z Execute the tests.

    Runs all arithmetic tests if arith is True or if the "decimal" resource
    is enabled in regrtest.py
    Nr   z.decTestrd  c             S   s   |  t| S )N)r   	directory)rz   r   r   r   r   r   '  r   ztest_main.<locals>.<lambda>Ztest_r   )IGNORE_EXCEPTION_DETAIL)Zoptionflagsz*C tests skipped: no module named _decimal.zGInternal error: unbalanced number of changes to sys.modules['decimal'].)r&   r_   r   r   r   r   	all_testsr   r   oslistdirrd  r   r   rF  r   Zdoctestre  r  r  r   r$   ORIGINAL_CONTEXTwarningswarnUserWarningorig_sys_decimalr   )arithverbose
todo_testsdebugZtest_classesfilenameheadtailZtesterre  r  r   r   r   	test_main  sH    




 ru  z:test_decimal.py [--debug] [{--skip | test1 [test2 [...]]}]z--debugz-d
store_truez2shows the test number and context before each test)actionhelpz--skipz-sz%skip over 90% of the arithmetic tests)rn  ro  )rn  ro  rp  rq  )NNNN)r   r  rg  r  r  rj  r  rS   r   r  ri  Ztest.supportr   r   r   r   r   r   r   r	   r
   r   rK  r  r_   r   r  rm  Z
cfractionsZ
pfractionsr   r  r  r   rB  r#   rp   ru   rs   rv   rw   rt   rr   rq   r4  r   r   rm   ri   rh   rj   rl   rk   r    rn   r;  ri  r&   ZTESTDATADIRr   argvr   __file__pathdirnamecurdirZtestdirseprd  isdirr   r   hasattrZEXTRA_FUNCTIONALITYZ
skipUnlessr  ZskipIfZskip_if_extra_functionalityZTestCaser)   r   r   r   r  r  r  rH  rI  rJ  r{  r|  r}  r  r  r  r  r  r  r  r  r  r  r  r8  r9  r:  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rH  rf  insertru  ZoptparseZOptionParserr  Z
add_option
parse_argsoptr   skiprq  r   r   r   r   <module>   sd  



0

  e  WM    )',-      /  X     m~  P>m
   U     a 	
7

