Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/test/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/__pycache__/test_decimal.cpython-35.opt-1.pyc



��Yf�2�*@s�
dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZm
Z
mZmZmZddlmZmZmZmZmZddlZddlZddlZddlZyddlZWnek
r(dZYnXedddg�Zedddg�ZejdZed	dd	g�Zeejd<ed	dd	g�Z eejd<eeee iZ!eejd<eer�e"ej#�j$j%��ndee"ej#�j$j%��iZ&eerPej'ej(ej)ej*ej+ej,ej-ej.ej/g	ndeej'ej(ej)ej*ej+ej,ej-ej.ej/g	iZ0d
d�Z1ej2Z2ej3Z3ej4Z4ej5Z5ej6Z6ej7Z7ej8Z8ej9Z9e2e3e4e5e6e7e8e9gZ:eer"ej#�j�ndeej#�j�iZ;dd
�Z<dZ=e>dkrkej?dZ@neAZ@ejBjCe@�p�ejDZEeEejFe=ejFZGejBjHeG�aIdZJeKed�r�dndZLejMeLd�ZNejOeLd�ZPGdd�dejQ�ZRGdd�deR�ZSGdd�deR�ZTGdd�dejQ�ZUGdd�deU�ZVGdd �d eU�ZWGd!d"�d"ejQ�ZXGd#d$�d$eX�ZYGd%d&�d&eX�ZZGd'd(�d(ejQ�Z[Gd)d*�d*e[�Z\Gd+d,�d,e[�Z]Gd-d.�d.ejQ�Z^Gd/d0�d0e^�Z_Gd1d2�d2e^�Z`d3d4�Zad5d6�ZbGd7d8�d8ejQ�ZcejMed9�Gd:d;�d;ec��ZdejMed9�Gd<d=�d=ec��ZeGd>d?�d?ejQ�ZfGd@dA�dAef�ZgGdBdC�dCef�ZhGdDdE�dEejQ�ZiGdFdG�dGei�ZjGdHdI�dIei�ZkGdJdK�dKejQ�ZlGdLdM�dMel�ZmGdNdO�dOel�ZnGdPdQ�dQejQ�ZoGdRdS�dSeo�ZpGdTdU�dUeo�ZqGdVdW�dWejQ�ZrGdXdY�dYer�ZsGdZd[�d[er�ZtGd\d]�d]ejQ�ZuGd^d_�d_eu�ZvGd`da�daeu�ZwGdbdc�dcejQ�ZxGddde�deex�ZyGdfdg�dgex�ZzGdhdi�diejQ�Z{Gdjdk�dke{�Z|Gdldm�dme{�Z}ePGdndo�doejQ��Z~Gdpdq�dqejQ�ZGdrds�dse�Z�Gdtdu�due�Z�Gdvdw�dwejQ�Z�Gdxdy�dyejQ�Z�Gdzd{�d{ejQ�Z�Gd|d}�d}ejQ�Z�eejMed~�Gdd��d�ejQ���Z�eVeWeYeZe\e]e_e`edeeegehejekemenepeqeseteveweyeze|e}e�e�e�e�e�e�eSeTg"Z�er�	e�d�dd��Z�n e�j�de~�e�j�d�e��ddddd�d��Z�e>dkr�
ddl�Z�e�j�d��Z�e�j�d�d�d�d�d�d��e�j�d�d�d�d�d�d��e�j��\Z�Z�e�j�rH
e�d�dd�d�n>e�rs
e�d�dd�dd�e�d�e�j��ne�d�dd�d�dS)�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)�check_warnings�import_fresh_module�
TestFailed�run_with_locale�cpython_only�decimalZfreshZ_decimalZblocked�	fractionscs<t||��|jt��fdd��D���dS)Nc3s0|]&}|�kr�|n�|VqdS)N�)�.0�s)�d�expectedr�6/opt/alt/python35/lib64/python3.5/test/test_decimal.py�	<genexpr>Psz!assert_signals.<locals>.<genexpr>)�getattr�
assertTrue�all)�cls�context�attrrr)rrr�assert_signalsNsrc	CsI|s
dS|jdddtdtjt|d��}|j|�dS)N�prec�	�rounding�trapsr)�Context�ROUND_HALF_EVEN�dict�fromkeys�Signals�
setcontext)�mZDefaultTestContextrrr�initgs
	%r'Zdecimaltestdata�__main__F�
DecClampedTz.test requires build with -DEXTRA_FUNCTIONALITYztest requires regular buildc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)�IBMTestCasesz?Class which tests the Decimal class against the IBM test cases.cJCs|jj�|_|jj�|_dg|_tdddddddd	d
ddd
ddddddddddddg�|_|jtkr|jjd�|jjd�|jjd�|jjd�|jjd�|jjd�|jjd �|jjd!�d"|j	d#|j
d$|jd%|jd&|j
i|_d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpi%|_dqtdrtdstdttdutdvtdwtdxti|_dy|jjdz|jjd{|jjd||jjd}|jjd~|jjd|jjd�|jjd�|jjd�|jjd�|jjd�|jj i|_!d�|_"dS)�N�#Zscbx164Zscbx165Zexpx901Zexpx902Zexpx903Zexpx905Zlnx901Zlnx902Zlnx903Zlnx905Zlogx901Zlogx902Zlogx903Zlogx905Zpowx1183Zpowx1184Zpowx4001Zpowx4002Zpowx4003Zpowx4005Zpowx4008Zpowx4010Zpowx4012Zpowx4014Zpwsx803Zpwsx805Zpowx4302Zpowx4303Zpowx4342Zpowx4343Zpwmx325Zpwmx326Z	precisionrZmaxexponentZminexponent�clamp�and�logical_andZapply�_apply�class�number_classZ
comparesig�compare_signalZcomparetotal�
compare_totalZ
comparetotmag�compare_total_mag�copy�copy_decimalZcopyabs�copy_absZ
copynegate�copy_negate�copysign�	copy_signZ	divideint�
divide_int�invert�logical_invertZiscanonical�is_canonicalZisfinite�	is_finiteZ
isinfinite�is_infinite�isnan�is_nanZisnormal�	is_normalZisqnan�is_qnanZissigned�	is_signedZissnan�is_snanZissubnormal�is_subnormalZiszero�is_zeroZmaxmag�max_magZminmag�min_magZ	nextminus�
next_minusZnextplus�	next_plusZ
nexttoward�next_toward�or�
logical_or�reduce�	normalizeZ
remaindernear�remainder_nearZsamequantum�same_quantumZ
squareroot�sqrtZtoeng�
to_eng_stringZ
tointegral�to_integral_valueZtointegralx�to_integral_exactZtosci�
to_sci_string�xor�logical_xorZceilingZdown�floorZ	half_downZ	half_evenZhalf_upZupZ05upZclampedZconversion_syntaxZdivision_by_zeroZdivision_impossibleZdivision_undefinedZinexactZinvalid_contextZinvalid_operationZoverflowZroundedZ	subnormalZ	underflow)r>r?r@rBrCrDrErFrGrHrS)#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)�selfrrr�setUp�s�					zIBMTestCases.setUpcCsx|jtkra|jjdkra|jjd�|jjd�|jjd�|jj|�S|jj||�SdS)a2Work 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@�Ti���?Ni�9�)	rr`�MAX_EMAXr\�_unsafe_setprec�_unsafe_setemax�_unsafe_setemin�create_decimal�Decimal)r{�vrrrr�read_unlimiteds!zIBMTestCases.read_unlimitedcCs�trtj�t|���}x�|D]�}|jdd�jdd�}y|j|�}Wq%|jjk
r�}z$|jd|j	j
d|�WYdd}~Xq%Xq%WWdQRXdS)Nz
��
zException "z" raised on line )�
skip_expected�unittestZSkipTest�open�replace�	eval_liner�DecimalException�fail�	__class__�__name__)r{�file�f�line�t�	exceptionrrr�	eval_file"s	
zIBMTestCases.eval_filecCs�|jd�dkry|dd�dkry|jd�ry|jd�dd|jd�djd�dj�}n|jd�dj�}x*|jD]}|j|�dkr�dSq�W|s�dSd|kr�|j|�S|j|�SdS)	Nz -> r�z--z  --z->��:)�find�
startswith�split�stripr]�eval_directive�
eval_equation)r{r�ignorerrrr�1s;*
zIBMTestCases.eval_linecCs�dd�|jd�D�\}}|dkr>|j|}n%yt|�}Wntk
rbYnX|jj|dd��}||�dS)Ncss!|]}|j�j�VqdS)N)r��lower)r�xrrrrDsz.IBMTestCases.eval_directive.<locals>.<genexpr>r�rcWsdS)Nr)�argsrrr�<lambda>Msz-IBMTestCases.eval_directive.<locals>.<lambda>)r�rp�int�
ValueErrorrg�get)r{r�funct�valuerrrr�Cs"
zIBMTestCases.eval_directivecstrtj�dkrdS�jj�y�|jd�}|dj�j�}|d}trutd|dd�|dj�}|dd�}|dj�j�}|d}|dd�}Wn't	t
tfk
r��jj
�YnXd	d
�}	|�jkrdS�jj||�}
|
dkr4dSt�j|
�}g}d}d}
�fd
d�|D��x%t�jD]}d�jj|<qWx�D]}d�jj|<q�Wxxt|�D]j\}}|jd�ddkr�d|
}
|
r|d|}q�n||}d}|	|�}|
dkrtr�x��D]�}d�jj|<y|�jj|��WnW|k
r�Yn]t�jk
r�}z�jd|||f�WYdd}~XnX�jd||f�d�jj|<qEW�jj|�}n�j|�j�}|j|�q�W|	|�}tr�|
dkr�x��D]�}d�jj|<y||�WnW|k
r�Yn]t�jk
r�}z�jd|||f�WYdd}~XnX�jd||f�d�jj|<qZW�fdd�t�jD�}x�|D]�}d�jj|<y||�Wn]|k
rbYq*t�jk
r�}z%�jdt|�||f�WYdd}~Xq*X�jd||f�q*Wx|D]}d�jj|<q�Wtrtd�j�y=t||��}|
�jkr<ttt |���}WnZt�jk
r�}z�jd||f�WYdd}~Xntd|��YnX�j!�}|j"dt#��j"dt#��j$||d|d|��j$|�d|dt|��dS)Ng�������?z->rzTest �end� r�r�cSs^|jdd�jdd�}|jdd�jdd�}|jdd�jdd�}|S)Nz''ZSingleQuotez""ZDoubleQuote�'r��")r�)�valrrr�	FixQuotesdsz-IBMTestCases.eval_equation.<locals>.FixQuotesZrescaler�cs#g|]}�j|j��qSr)ryr�)rr�)r{rr�
<listcomp>ts	z.IBMTestCases.eval_equation.<locals>.<listcomp>r�rXrUz Raised %s in %s when %s disabledzDid not raise %s in %scs"g|]}|�kr|�qSrr)r�e)�theirexceptionsrrr��s	zRaised %s in %s; expected %sz--zRaised %s in %szERROR:�keyzIncorrect answer for z -- got zIncorrect flags set in )rXrU)rXrU)%�TEST_ALL�randomr�clear_flagsr�r��DEBUG�printr��	TypeError�AttributeError�
IndexErrorrrrr_rhr�rr$r�	enumerate�count�EXTENDEDERRORTESTr�r�r��append�OrderedSignals�type�strrzr��eval�
getexceptions�sort�repr�assertEqual)r{rZSides�L�idr�Zvalstemp�ans�
exceptionsr�Zfname�valsZconglomerateZquoter��ir�r��errorr�Zordered_errors�resultZmyexceptionsr)r{r�rr�Ps�







	$

	$ 

	*
)
zIBMTestCases.eval_equationcs�fdd�t�jD�S)Ncs&g|]}�jj|r|�qSr)r�flags)rr�)r{rrr��s	z.IBMTestCases.getexceptions.<locals>.<listcomp>)r$r)r{r)r{rr��szIBMTestCases.getexceptionscCsD|jtkr4|jjdkr4|jj|�n||j_dS)Ni@�T)rr`�MAX_PRECrr~r)r{rrrrrb�s!zIBMTestCases.change_precisioncCs||j_dS)N)rr)r{rrrrrc�sz#IBMTestCases.change_rounding_methodcCsD|jtkr4|jjdkr4|jj|�n||j_dS)Ni@�T)rr`r�rr��Emin)r{�exprrrre�s!z IBMTestCases.change_min_exponentcCsD|jtkr4|jjdkr4|jj|�n||j_dS)Ni@�T)rr`r�rr�Emax)r{r�rrrrd�s!z IBMTestCases.change_max_exponentcCs||j_dS)N)rr,)r{r,rrrrf�szIBMTestCases.change_clampN)r��
__module__�__qualname__�__doc__r|r�r�r�r�r�r�rbrcrerdrfrrrrr*�s�
�r*c@seZdZeZdS)�
CIBMTestCasesN)r�r�r�r`rrrrrr��sr�c@seZdZeZdS)�PyIBMTestCasesN)r�r�r��Prrrrrr��sr�c@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zed
d��Z	dd
�Z
dd�Zdd�Zdd�Z
edd��Zdd�Zdd�Zdd�ZdS)�ExplicitConstructionTestz6Unit tests for Explicit Construction cases of Decimal.cCs)|jj}|j|�|d��dS)N�0)rr�r�)r{r�rrr�test_explicit_empty�sz,ExplicitConstructionTest.test_explicit_emptycCs#|jj}|jt|d�dS)N)rr��assertRaisesr�)r{r�rrr�test_explicit_from_None�sz0ExplicitConstructionTest.test_explicit_from_NonecCs|jj}|d�}|jt|�d�|d�}|jt|�d�|d�}|jt|�d�|d�}|jt|�d�x|tdd�D]k}xbdD]Z}xQtdd
�D]@}|d||}||�}|jt|�t|��q�Wq�Wq�WdS)N�-�45i{e��	500000123z-45rr�� r��r�i������)r�r����)rr�r�r��range)r{r�r�n�signr�r�rrr�test_explicit_from_int�s
z/ExplicitConstructionTest.test_explicit_from_intc
Cs|jj}|jj}|jj}|jt|d��d�|jt|d��d�|jt|d��d�|jt|d��d�|jt|d��d�|jt|d��d	�|jt|d
��d�|jt|d��d
�x[ddddgD]G}x>ddddgD]*}|jt||d|��d�q0WqW|���}d|j|<|j||d�|jt|ddd�|j||d�|j||d�|j||d�|j||d�|j||d�WdQRXdS)Nr��NaNr�z45.34Z45e2z4.5E+3�uglyz1.3E4 
z1.3E+4z  -7.89z-7.89z  3.45679  z3.45679r�� u z	9.311E+28T�xyz�1234r��yu1 2 3u 1 2 u  z123)	rr�rr�localcontextr�r�rr�r�)r{r�rrr�Zlead�trail�crrr�test_explicit_from_strings0
z2ExplicitConstructionTest.test_explicit_from_stringcCsuddl}|jj}|jj�}|jd�}|jt||��d�|jt|j|��d�dS)Nrz9.999999)�	_testcapirr�r �unicode_legacy_stringr�r�r�)r{r�r�rrrrr�test_from_legacy_stringsEsz1ExplicitConstructionTest.test_from_legacy_stringscCs�|jj}|d�}|jt|�d�|d�}|jt|�d�|d�}|jt|�d	�|d�}|jt|�d�|dfd
f�}|jt|�d�|jt|d!�|jt|d#�|jt|d%�|jt||d�d&df�|jt|d(�|jt|d*�|jt|d,�|jt|d-�|jt|d/�|jt|d2�|jt|d4�|jt|d6�dS)7Nrr�r��r�z-45�r�z45.34r�z-4.34913534E-17�F�Infinity���wrong!�1r��
�a�r)rrr�r�r�)r�rr�r�r�r�r����)rrr�	r�r�r�rr�r�r�r�r����)r�rr�r�r�r�rr�)r�r�r�r�r�rr�)r�r	r��r�r�r�rr�)r�r
r�)r�r�r�rr��r�r�r�rr�)r�rr��r�r�r�rr�)r�rr��r�r�r�rr�)r�r
r�)r�r�r��r�r�r�Nr�)r�rr�����r�rr�rr�)r�rr��r�rr�rr�)r�rr��r�r�r�rr�)r�rr�)rr�r�r�r�r�)r{r�rrrr�test_explicit_from_tuplesOs."z2ExplicitConstructionTest.test_explicit_from_tuplescCs�|jj}|ddgdg�}|jt|�d�|ddddddddddg	d
g�}|jt|�d	�|dddg�}|jt|�d	�|ddddddddddg	d
f�}|jt|�d	�dS)Nrr�r�r�r�rr�r�z-4.34913534E-17i��)	r�r�r�rr�r�r�r�r�i��i��)rr�r�r�)r{r�rrrr�test_explicit_from_listzs00z0ExplicitConstructionTest.test_explicit_from_listcCs�|jj}|jt|d��d�|jt|d��d�|j|d�|d��|j|d�|d��dS)NrFr�T)rr��assertIs�boolr�)r{r�rrr�test_explicit_from_bool�s
z0ExplicitConstructionTest.test_explicit_from_boolcCs�|jj}|d�}||�}|jt|�d�|d�}||�}|jt|�d�|d�}||�}|jt|�d�|d�}||�}|jt|�d�dS)	Nr�r�i{e�r�z-45rr�i���)rr�r�r�)r{r�rr�rrr�test_explicit_from_Decimal�sz3ExplicitConstructionTest.test_explicit_from_DecimalcCs�|jj}|d�}|jt|�|�|jt|�d�|j|td��j��|j|td��j��|j|td��j��|jt|td���t|d���|jt|td���t|d���|jt|td���t|d���|jt|td	���t|d
���xQt	d�D]C}t
jd�t
j
�d
d}|j|t||���qfWdS)Ng�������?z90.1000000000000000055511151231257827021181583404541015625�nan�infz-infr�r�z	-Infinityz-0.0z-0��g{�G�z�?g@g�?)rr�r�r�r�r�floatrDr@r�r��expovariate)r{r��rr�r�rrr�test_explicit_from_float�s&!z1ExplicitConstructionTest.test_explicit_from_floatcCs|jj}|jj}|jj}tj|jj��}d|_|�}|jt|�d�|j	�}|jt|�d�|j
t|j	d�|j	d�}|j||�|j|j	d�|j	d��|d�}|jt|�d�|j	d�}|jt|�d�|jt|j	d��d	�|d(�}|jt|�d�|j	d+�}|jt|�d�|d�}||�}|jt|�d�|j	|�}|jt|�d�d|_d|j
|<xdd.d0d3d5dd7d8d:d;g	D]A}|j	|�}|jt||��|jt|�|�qWd|_d|j
|<|j
||j	d�d|_|jt|j	d��d�|jt|j	d��d�|jt|j	d��d�|jt|j	d ��d �|j
||j	d!�|j
t|j	d=�|j
t|j	d"d#�d|_|j
||j	d$�|j
||j	|d$��d%|j
|<|jt|j	d$��d	�|j|j|�d%|j|<|jt|j	|d$���d	�|j|j|�dS)>Nr�r�i�in�z457E+2Z456789z4.57E+5z3.14
r�r�r�rr�r�z-4.34913534E-17z	-4.35E-17i{e�r�z5.00E+8�Tr��?�ri�z0E-017z0E-17r�z-Infz	-Infinity�NaN123r�r�Z5678ZNaN12345F�	r�r�r�rr�r�r�r�r����)r�r$r%�	r�r�r�rr�r�r�r�r����)r�r&r'll����l����ll����li�l����li�li���lll����l���)r�r�r()rr�rrrvr5�
getcontextrr�r�r�r�r��assertIsInstancerr�
isinstancer�r�r�)r{r�rrrv�ncrZprevdecr�rrr�$test_explicit_context_create_decimal�sp			
	
		


%z=ExplicitConstructionTest.test_explicit_context_create_decimalcCs�|jj}|jj�}|jd�}|jt|�|�|jt|�d�|j|jtd��j	��|j|jtd��j
��|j|jtd��j
��|jt|jtd���t|jd���|jt|jtd���t|jd���|jt|jtd���t|jd���|jt|jtd	���t|jd
���d|_xTtd�D]F}t
jd
�t
j
�dd}|j|t|j|���q�WdS)Ng�������?z0.1000000000000000055511151231rrz-infr�r�z	-Infinityz-0.0z-0�drg{�G�z�?g@g�?)rr�r r�r�r�r�rrrDr@rr�r�r)r{r�r,rr�r�rrr�'test_explicit_context_create_from_floats("""	!z@ExplicitConstructionTest.test_explicit_context_create_from_floatcCsa|jj}ddddddi}x6|j�D](\}}|jt||��|�q1WdS)Nu1r�u٠.٠٣٧٢e-٣z	0.0000372u-nan౨౪౦౦z-NaN2400)rr��itemsr�r�)r{r��test_values�inputrrrr�test_unicode_digits.sz,ExplicitConstructionTest.test_unicode_digitsN)r�r�r�r�r�r�r�r�rr�rrrrrrr-r/r3rrrrr��s1
+Vr�c@seZdZeZdS)�CExplicitConstructionTestN)r�r�r�r`rrrrrr49sr4c@seZdZeZdS)�PyExplicitConstructionTestN)r�r�r�r�rrrrrr5;sr5c@s^eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�ImplicitConstructionTestz6Unit tests for Implicit Construction cases of Decimal.cCs)|jj}|jttdt��dS)NzDecimal(5) + None)rr�r�r�r��locals)r{r�rrr�test_implicit_from_NoneAsz0ImplicitConstructionTest.test_implicit_from_NonecCsP|jj}|jt|d�d�d�|j|d�d|d��dS)Nr�r�Z50l2}r)rr�r�r�)r{r�rrr�test_implicit_from_intEs z/ImplicitConstructionTest.test_implicit_from_intcCs)|jj}|jttdt��dS)NzDecimal(5) + "3")rr�r�r�r�r7)r{r�rrr�test_implicit_from_stringMsz2ImplicitConstructionTest.test_implicit_from_stringcCs)|jj}|jttdt��dS)NzDecimal(5) + 2.2)rr�r�r�r�r7)r{r�rrr�test_implicit_from_floatQsz1ImplicitConstructionTest.test_implicit_from_floatcCs6|jj}|j|d�|d�|d��dS)Nr�r��2)rr�r�)r{r�rrr�test_implicit_from_DecimalUsz3ImplicitConstructionTest.test_implicit_from_Decimalc	s�|jj}Gdd�d�}|jt|�|d��d�|jt|d�|��d�|jtd�d�|jtd�d	�|jtd
�d�|jtd�d
�|jtd�d�|jtd�d�d.d/d0d1d2d3d4g}x�|D]�\}��t|��fd'd(��t|��fd)d(��|jtd*|d+�d,�d-�|jtd+|d*�d-�d,�q	WdS)5Nc@speZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)z,ImplicitConstructionTest.test_rop.<locals>.EcSsdt|�S)Nzdivmod )r�)r{�otherrrr�
__divmod__^sz7ImplicitConstructionTest.test_rop.<locals>.E.__divmod__cSst|�dS)Nz rdivmod)r�)r{r>rrr�__rdivmod__`sz8ImplicitConstructionTest.test_rop.<locals>.E.__rdivmod__cSsdt|�S)Nzlt )r�)r{r>rrr�__lt__bsz3ImplicitConstructionTest.test_rop.<locals>.E.__lt__cSsdt|�S)Nzgt )r�)r{r>rrr�__gt__dsz3ImplicitConstructionTest.test_rop.<locals>.E.__gt__cSsdt|�S)Nzle )r�)r{r>rrr�__le__fsz3ImplicitConstructionTest.test_rop.<locals>.E.__le__cSsdt|�S)Nzge )r�)r{r>rrr�__ge__hsz3ImplicitConstructionTest.test_rop.<locals>.E.__ge__cSsdt|�S)Nzeq )r�)r{r>rrr�__eq__jsz3ImplicitConstructionTest.test_rop.<locals>.E.__eq__cSsdt|�S)Nzne )r�)r{r>rrr�__ne__lsz3ImplicitConstructionTest.test_rop.<locals>.E.__ne__N)r�r�r�r?r@rArBrCrDrErFrrrr�E]srGrz	divmod 10z
10 rdivmodzDecimal(10) < E()zgt 10zDecimal(10) > E()zlt 10zDecimal(10) <= E()zge 10zDecimal(10) >= E()zle 10zDecimal(10) == E()zeq 10zDecimal(10) != E()zne 10�+�__add__�__radd__�-�__sub__�__rsub__�*�__mul__�__rmul__�/�__truediv__�__rtruediv__�%�__mod__�__rmod__�//�__floordiv__�
__rfloordiv__�**�__pow__�__rpow__csd�t|�S)Nr�)r�)r{r>)�loprrr��sz3ImplicitConstructionTest.test_rop.<locals>.<lambda>cst|��dS)Nr�)r�)r{r>)�roprrr��szE()zDecimal(10)r��10)rHrIrJ)rKrLrM)rNrOrP)rQrRrS)rTrUrV)rWrXrY)rZr[r\)rr�r��divmodr��setattr)r{r�rGZoplistZsymr)r]r^r�test_ropYs0""	z!ImplicitConstructionTest.test_ropN)
r�r�r�r�r8r9r:r;r=rbrrrrr6>sr6c@seZdZeZdS)�CImplicitConstructionTestN)r�r�r�r`rrrrrrc�srcc@seZdZeZdS)�PyImplicitConstructionTestN)r�r�r�r�rrrrrrd�srdc@sIeZdZdZdd�Zdd�Zedd�dd	��Zd
S)�
FormatTestz#Unit tests for the format function.c�Cs�|jj}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�dddddddddd	d
ddd
ddddddddddddddddddd 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`dadbdcdddedfdgdhg�}x6|D].\}}}|jt||�|�|�q�W|jt|d��jd��dS(iNr��0E-15�0e-15�2.3E-15�2.3e-15�2.30E+2�2.30e+2�2.30000E-15�2.30000e-15�1.23456789123456789e40�1.23456789123456789e+40�1.5�1.5e+0�0.15�1.5e-1�0.015�1.5e-2�0.0000000000015�1.5e-12�15.0�1.50e+1�-15�-1.5e+1r��0e+0�0E1�0e+1�0.0�0e-1�0.00�0e-2�.6e�0.000000e-9�0.000000e+6�9.999999�9.999999e+0�	9.9999999�1.000000e+1�-1.23e5�-1.230000e+5�
1.23456789e-3�1.234568e-3r��0E-2�0.00E-8�0.0000000000�3.2E1�32�3.2E2�320�3.20E2�3.200E2�320.0�3.2E-6�	0.0000032�.6f�0.000000�.0f�
3.14159265�3�.1f�3.1�.4f�3.1416�3.141593�.7f�	3.1415926�.8f�.9f�3.141592650�g�G�0E+1�0E-5�0.00000�0E-6�0E-7�0e-7�-0E2�-0e+2�.0g�.0n�.1g�.2g�.5g�.7g�.8g�.9g�.10grT�0%�0E0�0E-1�0E-3�0.0%�0E-4�0.00%�.3%�0.000%�0E10�0E-10�2.34�234.000%�1.234567�123.457%�.0%�1.23�123%r��-NaN123�+g�NaN456�+NaN456�.3e�Infr��.16f�-Inf�	-Infinity�-sNaNr��1.00�6�123�   123�<6�123   �>6�^6� 123  �=+6�+  123�#<10�
NaN#######�-4.3�
-4.3######�#<+10�0.0130�
+0.0130###�#< 10�
 0.0130###�@>10�
@-Infinity�#>5�?^5�?123?�%^6�%123%%� ^6�-45.6�-45.6 �/=10�
-/////45.6�/=+10�45.6�
+/////45.6�/= 10�
 /////45.6�=10�-inf�
-Infinity�^16�-Infinity�>10�1.2345�
1.2345�<10�
1.2345�,�1234567�	1,234,567�123456�123,456�12345�12,345r��1,234�12r��-1234567�
-1,234,567�-123456�-123,456�7,�8,� 123,456�08,�	0,123,456�+08,�+123,456� 08,�+09,�
+0,123,456�07,�1234.56�1,234.56�09,�	01,234.56�010,�
001,234.56�011,�0,001,234.56�012,�08,.1f�1234.5�01,234.5�
1.23456789�,%�
123.456789�12,345.6789%�,e�
1.23456e+5�,E�
1.23456E+5�a=-7.0�0.12345�aaaa0.1�	<^+15.20%r�<<+Infinity%<<<�>,%�sNaN1234567�sNaN1234567%�=10.10%r#�
   NaN123%r�s-020)r�rfrg)r�rhri)r�rjrk)r�rlrm)r�rnro)r�rprq)r�rrrs)r�rtru)r�rvrw)r�rxry)r�rzr{)r�r�r|)r�r}r~)r�rr�)r�r�r�)r�rfr�)r�r�r�)r�r�r�)r�r�r�)r�r�r�)r�r�r�)r�r�r�)r�rr)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�rfr�)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�rr)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�)rTr}r�)rTr�r�)rTr�r�)rTr�r�)rTr�r�)rTr�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�)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�)rr�r)rrr)rrr)rrr	)rr
r)rrr
)rr�r)rr�r�)rrr)rr�r�)rr�r�)rrr)rrr)rr
r)rr
r)rr
r)rr
r)rr
r)rrr)rr
r)rrr )rrr )r!rr")r#rr$)r%rr&)r'rr&)r(r)r*)rr+r+)r,r-r.)r/r
r0)r1r
r2)r3r4r5)r6rr7)r8r9r:)r;r#r<)rr�r��formatr�r��
__format__)r{r�r1�fmtrr�rrr�test_formatting�s	#zFormatTest.test_formattingc	s��jj�yddlm}Wntk
rA�jd�YnX�fdd�}dd��fdd�}d	d
d|dddg�d
di}d	dd||g�d
di}d	dd|dddg�d
di}d	dd|ddd|g�d
di}d	djd�d|dddg�d
djd�i}�j|�d�|�d��j|�d�|�d��j|�d�|�d��j|�d�|�d��j|d|�d��j|d|�d��j|d|�d��j|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.|d*�d/��j|d.|d,�d/��j|d.|d0�d1��j|d.|d2�d3��j|d.|d4�d3��j|d.|d5�d6��j|d7|d,�d8��j|d7|d0�d8��j|d7|d2�d8��j|d7|d4�d9��j|d7|d5�d:��j|d7|d;�d:��j|d7|d<�d=��j|d7|d>�d?��j|�d@�|dA�dB�dS)CNr)�CHAR_MAXzlocale.CHAR_MAX not availablecs-�jtkr)djdd�|D��S|S)Nr�cSsg|]}t|��qSr)�chr)rr�rrrr�:s	zCFormatTest.test_n_format.<locals>.make_grouping.<locals>.<listcomp>)rr`�join)�lst)r{rr�
make_grouping9sz/FormatTest.test_n_format.<locals>.make_groupingr�csB�jtkr%�|�j||�S�|�j|d|�SdS)NZ_localeconv)rr`r>)r��overrider?)r�r{rr�get_fmt<sz)FormatTest.test_n_format.<locals>.get_fmt�
decimal_point�.�groupingr��
thousands_seprr�r��&r�r�r�rKs¿zutf-8s´z12.7z12,7z1-2&7i�[z123,456,789Z	123456789z123 456 789l��c}z123456-78-9012-3z.6nz
1.23457e+8z
1,23457e+8z
1&23457e+8i�Z03nr�Z04nZ05nZ01234Z06nZ001234i90z12,345Z07nz012,345Z08nz	0,012,345Z09nZ010nz
00,012,345i@�z1-2345-6z	01-2345-6z0-01-2345-6Z011nZ012nz00-01-2345-6Z013nz
000-01-2345-6z-1.5Z020nu-0´000´000´000´001¿5)rr��localerA�ImportError�skipTest�decoder�)	r{rArErGZen_USZfr_FRZru_RUZcrazyZdotsep_wider)r�r{r�
test_n_format1sl
zFormatTest.test_n_format�LC_ALLZps_AFcCs�ddl}|jj}|j�d}|j�d}|dkr]|jdj|d��|dkr�|jdj|d��|jt|d�d	�d
�dS)NrrHrKu٫z4inappropriate decimal point separator({!a} not {!a})u٬z0inappropriate thousands separator({!a} not {!a})z
100000000.123r�u100٬000٬000٫123)rMrr��
localeconvrOr=r�)r{rMr�rHrKrrr�&test_wide_char_separator_decimal_point�s

z1FormatTest.test_wide_char_separator_decimal_pointN)r�r�r�r�r@rQr
rTrrrrre�s�Yrec@seZdZeZdS)�CFormatTestN)r�r�r�r`rrrrrrU�srUc@seZdZeZdS)�PyFormatTestN)r�r�r�r�rrrrrrV�srVc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdS)�ArithmeticOperatorsTestz:Unit tests for all arithmetic operators, binary and unary.cCs|jj}|d�}|d�}|j|||d��|j|||d��|d}|j||d��|jt|�t|��d|}|j||d��|jt|�t|��||7}|j||d��|d7}|j||d��dS)Nz-11.1z22.2z11.1r�z-6.1z16.1)rr�r�r�)r{r��d1�d2r�rrr�
test_addition�s



z%ArithmeticOperatorsTest.test_additioncCs|jj}|d�}|d�}|j|||d��|j|||d��|d}|j||d��|jt|�t|��d|}|j||d��|jt|�t|��||8}|j||d��|d8}|j||d��dS)	Nz-11.1z22.2z-33.3z33.3r�z-16.1z16.1z-38.3)rr�r�r�)r{r�rXrYr�rrr�test_subtraction�s



z(ArithmeticOperatorsTest.test_subtractioncCs|jj}|d�}|d�}|j|||d��|j|||d��|d}|j||d��|jt|�t|��d|}|j||d��|jt|�t|��||9}|j||d��|d9}|j||d��dS)Nz-5r�z-15r�z-25z-75)rr�r�r�)r{r�rXrYr�rrr�test_multiplication�s



z+ArithmeticOperatorsTest.test_multiplicationcCs|jj}|d�}|d�}|j|||d��|j|||d��|d}|j||d��|jt|�t|��d|}|j||d��|jt|�t|��||}|j||d��|d}|j||d��dS)	Nz-5�2z-2.5z-0.4r�z-1.25z-0.8z-0.625)rr�r�r�)r{r�rXrYr�rrr�
test_division�s



z%ArithmeticOperatorsTest.test_divisioncCs|jj}|d�}|d�}|j|||d��|j|||d��|d}|j||d��|jt|�t|��d|}|j||d��|jt|�t|��||}|j||d��|d}|j||d��dS)N�5r]r�r�r��r�)rr�r�r�)r{r�rXrYr�rrr�test_floor_divisions



z+ArithmeticOperatorsTest.test_floor_divisioncCs|jj}|d�}|d�}|j|||d��|j|||d��|d}|j||d��|jt|�t|��d|}|j||d��|jt|�t|��||C}|j||d��|dC}|j||d	��dS)
Nr_r]Z25r�r�Z625r`Z16807Z390625)rr�r�r�)r{r�rXrYr�rrr�
test_powering0s



z%ArithmeticOperatorsTest.test_poweringcCs|jj}|d�}|d�}|j|||d��|j|||d��|d}|j||d��|jt|�t|��d|}|j||d��|jt|�t|��||;}|j||d��|d;}|j||d��dS)Nr_r]r�r�r`)rr�r�r�)r{r�rXrYr�rrr�test_moduleLs



z#ArithmeticOperatorsTest.test_modulecCs�|jj}|d�}|d�}t||�\}}|j||d��|j||d��|jt|�t|��|jt|�t|��t|d�\}}|j||d��|j||d��|jt|�t|��|jt|�t|��td|�\}}|j||d��|j||d��|jt|�t|��|jt|�t|��dS)Nr_r]r�r�r`)rr�r`r�r�)r{r�rXrY�p�qrrr�test_floor_div_modulehs$z-ArithmeticOperatorsTest.test_floor_div_modulecCsr|jj}|j|d�
|d��|j|d�|d��|jt|d��t|d���dS)Nr�r�i���i���)rr�r��abs)r{r�rrr�test_unary_operators�sz,ArithmeticOperatorsTest.test_unary_operatorscCs�|jj}|jj}|jj}|d�}|d�}|d�}|d�}||f||f||f||f||ff}||f||f||f||f||f||f||ff}	tjtjtjtjf}
tj	tj
f}x�||	D]v\}}
xg|
|D][}|||
�}|tj
krHdnd}|j||dj||j
||
|��qWqW|��-}d|j|<xz|D]r\}}
xc|D][}|||
�}|tj
kr�dnd}|j||dj||j
||
|��q�Wq�WxW|	D]O\}}
x@|D]8}|j|tj	||
�|j|tj
||
�q1WqWx?||	D]3\}}
x$|
D]}|j||||
�q�Wq|WWdQRXdS)	Nr��sNaNr�r]TFz8expected {0!r} for operator.{1}({2!r}, {3!r}); got {4!r}r�)rr�rrr��operator�lt�le�gt�ge�eq�nerr=r�rr�)r{r�rrr�r�rr�r�Z
qnan_pairsZ
snan_pairsZ	order_opsZequality_opsr�r��opZgotr�ctxrrr�test_nan_comparisons�sD3E!

!
!
z,ArithmeticOperatorsTest.test_nan_comparisonscCsf|jj}|d�j|d��}|j|d�jd�|�|jt|d�jd�dS)Nr�r�z-2rr)rr�r:r�r�r�)r{r�rrrr�test_copy_sign�sz&ArithmeticOperatorsTest.test_copy_signN)r�r�r�r�rZr[r\r^rarbrcrfrhrsrtrrrrrW�s7rWc@seZdZeZdS)�CArithmeticOperatorsTestN)r�r�r�r`rrrrrru�sruc@seZdZeZdS)�PyArithmeticOperatorsTestN)r�r�r�r�rrrrrrv�srvcCs|jj}|jj}|jj}|jj}|jj}|jj}|jj}|jj}|d�}	|d�}
|	|
}|j	j
�|jj�|	|
}|���}
|j
|
j|�|j||
j|	d�|j
|
j|�|��e}|j
|j|�|j
|j|�|j||j|	|d��|j
|j|�~WdQRX|j|
j|�~
WdQRX|j||d��|j||d��|�}|j
|j|�x.||||fD]}|j|j|�q�WdS)Nr�r�rriz0.333333333333333333333333)rr�rrrsrurxrtr)r��finish1r^�synchro�waitrr�r��divide�compare�assertFalser�)rr�rrrsrurxrtr)r�rX�d3�test1�test2�c2�c3�c1�sigrrr�thfunc1�s@





	r�cCsG|jj}|jj}|jj}|jj}|jj}|jj}|jj}|jj}|d�}	|d�}
|	|
}|�}d|_	|	|
}
|���}|j
|j|�|j||j
|d�d�|j
|j|�||��r}|j
|j|�|j|j|�d|j|<|j||j|d�d�|j
|j|�~WdQRX|j|j|�|j|j|�~WdQRX|jj�|jj�|j||d��|j|
|d	��|j|j|�|j
|j|�x.||||fD]}|j|j|�q%WdS)
Nr�r��Z1e425000000i�Tz1e-425000000z0.333333333333333333333333z0.333333333333333333)rr�rrrsrurxrtr)r�rrr�r��multiplyr|rrzrxr^�finish2r�)rr�rrrsrurxrtr)r�rXr}r~Zthiscontextrr�r�r�rrr�thfunc2�sH
		





r�c@s"eZdZdZdd�ZdS)�
ThreadingTestz0Unit tests for thread local contexts in Decimal.cCsG|jj}|jtkr5|jjr5|jd�|j}|j}|j}d|_d|_d|_tj	�|_
tj	�|_tj	�|_tj
dtd|f�}tj
dtd|f�}|j�|j�|jj�|jj�x)t|jD]}|j|j|�q
W||_||_||_dS)Nzcompiled without threading�i@�T�targetr�i���)r�DefaultContextr`�HAVE_THREADSrOrr�r��	threadingZEventrxrwr�ZThreadr�r��startryr$r|r�)r{r�Z	save_precZ	save_emaxZ	save_eminZth1Zth2r�rrr�test_threading(s.
						



		zThreadingTest.test_threadingN)r�r�r�r�r�rrrrr�"sr�zthreading requiredc@seZdZeZdS)�CThreadingTestN)r�r�r�r`rrrrrr�Ksr�c@seZdZeZdS)�PyThreadingTestN)r�r�r�r�rrrrrr�Nsr�c@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&S)'�
UsabilityTestz*Unit tests for Usability cases of Decimal.cCsy|jj}|d�}|d�}|d�}|j||�|j||�|j||�|j||�|j||�|j||�|j||�|j||�|j|d�|jd|�|j|d�|j|d�|j|d�|j|t��|j|t�t	t
|td���}|dd�}tj
|�|j�|j||�dS)Nz23.42r��r�r�g�����Y@@r.)rr��
assertGreater�assertGreaterEqual�
assertLess�assertLessEqualr��assertNotEqual�object�list�mapr�r�Zshuffler�)r{r��da�db�dcr�brrr�test_comparison_operatorsUs0

z'UsabilityTest.test_comparison_operatorscCs�|jj}|d�}|d�}|j|d�|j|d�|j|d�|j|d�|j|d�|j|d�|jd|�|jd|�|jd|�|jd|�|jd|�|jd|�|jd|d��dS)Nz0.25z3.0g@g�?g�?g�������?z0.1)rr�r�r�r�r�r�r�)r{r�r�r�rrr�test_decimal_float_comparisonys z+UsabilityTest.test_decimal_float_comparisoncCs|jj}|d�}|d�}|j|d�|jd	|�|j|d
�|jd|�|jd|�|j|d
�|j|d�|jd|�|j|jd�t�|j|jd�t�|j|jd�t�|j|jd�t�dS)Nz0.25z3.0g�?yg�?g@y�?y�?y�?y�?y�?y@y@y@�?y@�?y@y@y@y@)	rr�r�r�rrA�NotImplementedrCrB)r{r�r�r�rrr�test_decimal_complex_comparison�sz-UsabilityTest.test_decimal_complex_comparisonc

Cs}|jj}t|jj}|jj}|jj}|jj}trOtjnd}trdtj	nd}trytj
nd}|d|d|�}	||	���||	_|j|d�|dd��|j|dd�|d��|j|dd�|dt
|���|j|d	t
|��|dd��|j|dd
�|dt
|���|j|d	t
|��|dd
��|j|d�|dd��|j|dd�|d��d
|	_|j|d�d|dd��|j|dd�|d�d�|j|dd�|dt
|���|j|dt
|��|dd��|j|d�|dd��|j|d�|dd��|j|d�|dd��|j|d�|dd��|j||d�j|dd��|jt|dd�j|d���|j|d�|dd��|j|d d�|d��WdQRXdS)!Ni�ɚ;i��5wr�r�rr�l	��Z��mH;5�BZ1ez-1el��!�0QYz0.1ri,r�i�6l�c(	Z9erl�g�]�{z-infrri6e�ilʈr�l�����g�]l�����g�]i����i����i����i����)rr�r
ZFractionr r�rrr`r}�MIN_EMIN�	MIN_ETINYrr�r�r�r�r�r�r�r�rBrr�rA)
r{�Dr�r r�rr�emax�eminZetinyr�rrr� test_decimal_fraction_comparison�s@
	))))	##))%(z.UsabilityTest.test_decimal_fraction_comparisoncCsr|jj}|d�}tj|�}|jt|�t|��tj|�}|jt|�t|��dS)Nz43.24)rr�r5r�r��deepcopy)r{r�rr�r�rrr�test_copy_and_deepcopy_methods�sz,UsabilityTest.test_copy_and_deepcopy_methodscs�jj��jj}�fdd�}|�d��|�d��|�d��|�d��|�d���fdd	�d
ddd
dddddddddddgD�}|j�d��d��d��d��d��d��d��d ��d!��d"��d=��d%��d&��d'��d(��d)�g�x0|D](}�j||�|t|���qdW�j|�d��|d���jtt�d*���j	|�d+����j	|�d,���d-d,d.d/d0d1d2d3g}xB|D]:}t
|�}�|�}�j||�||��q"W|���}	�d4�}
d5|	_||
�}d6|	_||
�}d
|	_||
�}
�j||��j||
�d7|	_d>}
�j|�|
��||
��WdQRXdS)?Ncs,t|�}|j�}�j||�|S)N)�hash�__hash__r�)rrr�)r{rr�hashit�sz.UsabilityTest.test_hash_method.<locals>.hashitr�r�z	-InfinityZnan123z-NaNcsQg|]G}tdd�D]1}ddgD]}�|d||��q)qqS)rr�r�i����r�)r�)rr&r�r�)r�rrr��s	z2UsabilityTest.test_hash_method.<locals>.<listcomp>r�����r"r��!�=�>r!�@�A�Bz-1z-0z0.00z-0.000r�z-0E12z10.0z	-23.00000Z1230E100z
-4.5678E50r�r�z	1.634E100z
90.697E100z
188.83E100z
1652.9E100Z	56531E100rir�z-Infrz0.0z-.0e1z34.0z2.5z
112390.625z	-0.515625z123456789.1�ri'iLi�llll��lI@`GS�-�Nc(�,k�}�`�2�DreN)e�`�z�S\���L�Q�;�PQ0f,X�4aM)�PN\�B�U	�t�Ik3�R	�9�C�j�$�Rd=Y�o�(���)t�Sdk�%K�Y�*2^�x$^�\��8�Q_%�&UC�T��R�d[% #>�W��XEqTX�x��C��;Wr8'sk=3�N�f"`�5^p�:�b�9�=#\�4�p�HT#.*wwt�"�L,$�c0V]e�h�v$k!�^V�f�v�E�9rV�>-"�<w�>�pJ�"�dOC�f�rzk5�NA#�S�K�C�9�;0%NAR�uFS�hOmdo|*�y(B�GZ\R\;�	�^\`ni�$�W�qB�p�j�uY3�|�N�G��c���L�1\~P�S�6Q{�j�JX�h�'C�~�_eT!�r}�fc�L�V�/L,�
�$~�bJDXoT�\�#�?Fq�3��T�\�=�;iE7�%�{tegsJ#�G%,[
77L�uA?Qd(Kgp5co`�+��>:#��P�WT"K�5@a^#y
0$�)��u�"V\�&K(fB'�q�
("5�H*XxMA�+�m�K@\gQfEIV~J�h�q�}�av7q_\�;�Oa3t�dg$Ulp1�t�@7|�&MJu@%$D
=2�^m�jZ�M�&�m�@_a{NvfE�%�-sn&'�W{�7�}tQN��Q�T�@��u(}�F�k��y��K9�//�5�)jT`Q�<�|wSHZoCH�C��q�rZE�h,YS9ni�t�J�kz	�R{y��f6�YEcij>�=�Tci�
�
�u"6�c�?�mY�__T;'>�}��ih@�3�J
V�C �:c@C�T 3~3L-<�6�G]7QMHE[zz
Kl^:�Ow!�fw��B�*R|�y�e
gAreVh �(4	pC	�(�D�l��{�!:O�W�(��e�J7Y{�'�%7 6/uLuZ�|*Q�~�i">�$�j�	�.�2����H�N�:�~6X�Cm6�8Zm$K9r?#�6fnHoxSmO�&�N�3��O�_�=N*�m'l_�"�L�X'��~�N�Yv{�_�RGf�_��L�
K+,Qcl$E�I�W�$b!W�*w�5toD��>�s�u�Vg0k��- �Y\"1�]6#[�/�zwx�%V:�7�?�=_F}-�05@;8�	�b�IRX�#/&��N)0gH~A�I�r�z	WV4�h�v?lk2b&\,�
(;EA�/�f�gb��ij	[��tfZy
�Z�x�@e�}k�Jy�`agJu�"5
;Hk�>� yT�:z�4�CS-�OP?Qc2J�8�o�-cb�)rr�r��extendr�r�r�r�r�rrr)r{r�r�r1r�Ztest_stringsrr�rr�r�Zh1Zh2Zh3r)r�r{r�test_hash_method�sj"															
&"
 				zUsabilityTest.test_hash_methodcCs�|jj}|d�}|d�}d}d}|jt||�|�|jt||�|�|jt||�|�|jt||�|�|jt||�|�|jt||�|�|jt||�|�|jt||�|�dS)Nz15.32z28.5r�r )rr�r�min�max)r{r�rXrY�l1�l2rrr�test_min_and_max_methods'sz&UsabilityTest.test_min_and_max_methodscCs6|jj}|j|d��|j|d��dS)Nrz0.372)rr�r|r)r{r�rrr�test_as_nonzero;szUsabilityTest.test_as_nonzerocCsH|jj}|d�}|jt|�d�|jt|�d�dS)Nz15.32zDecimal('15.32'))rr�r�r�r�)r{r�rrrr�test_tostring_methodsCsz#UsabilityTest.test_tostring_methodsc
Cs�|jj}|d�}|d�}|jt|�d�|jt|�d�|jt|�d�|jt|�d�d5d6d7d8d:d<d=d>d?g	}x3|D]+\}}|jtj||��|�q�W|jttj|d��|jttj|d��|jttj|d��|jt	tj|d��|jt	tj|d��d@dAdBdCdEdGdHdIdJg	}x3|D]+\}}|jtj
||��|�q�W|jttj
|d��|jttj
|d��|jttj
|d��|jt	tj
|d��|jt	tj
|d��dKdLdMdNdPdRdSdTdVdXdZd[d\d]d^d_g}x0|D](\}}|jt||��|�qW|jtt|d��|jtt|d��|jtt|d��|jt	t|d��|jt	t|d��dadcdedgdhdidjdkdldmdndodqdrg}x<|D]4\}}}	|jtt||�|��|	�q_WdS)sNZ66z15.32r�r�g�p=
ף.@�123.00r��3.2r��3.54�3.899�-2.3�-11.0��0.0r�-0E3�89891211712379812736.1��{�#'s�{Mz-NaNrir#r��-Infr�r���{�#'s�{M�-3.5�-2.5�-1.5�-0.5�0.5�1.5�2.5�3.5�123.456�0E+4�0E+3�1E+2r��1.2E+2r��123.5�123.46�123.4560�123.455�123.445�123.44r�r��sNaN314�NaN314)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���)r�r�)r�r)r�r���)r�r�r)r�rr)r�r)r�r)r�r)r�r�)r�r�)r�r�r�)r�r�r�r)r�rr�r)r�rr�r�)r�r�r�)r�rr�)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�mathr[r�r��
OverflowErrorZceil�roundr�)
r{r�rXrYZ
test_pairsrr�Ztest_triplesr�rrrr�test_tonum_methodsKs�	#	#	 	z UsabilityTest.test_tonum_methodscCs�|jj}xmdD]e}t||��}|jtj|��tjd|�}|j||jd�rqdnd�qWdS)	Nr�nan1234�-nan�-nan2468g�?rK)rr�r�r�g�)	rr�rrr�rAr9r�r�)r{r�rr�r�rrr�test_nan_to_float�s
zUsabilityTest.test_nan_to_floatcCs@|jj}x-dD]%}||�}|jtt|�qWdS)N�snan�-snan�snan1357�	-snan1234)r�r�r�r�)rr�r�r�r)r{r�rrrrr�test_snan_to_float�s
z UsabilityTest.test_snan_to_floatcCs�|jj}|d
�}|j|tt|���|d�}|j|tt|���|d�}|j|tt|���|d�}|j|tt|���dS)Nrr�r�r�r�r�rr��r)rr�r�r�r�)r�r�r�r�r�r�r�r)rr�r�	r�r�r�rr�r�r�r�r����)r�r�r�)rr�r�r�r�)r{r�rrrr�test_eval_round_trip�sz"UsabilityTest.test_eval_round_tripcCs�|jj}|d�}|j|j�d�|d�}|j|j�d�|d�}|j|j�d�|d
�}|j|j�d�|d�}|j|j�d �|d"�}|j|j�d$�|dfd
f�}|j|j�d&�|d(�}|j|j�d*�|d,�}|j|j�dfdf�|dfdf�}|j|j�dfdf�|d.�}|j|j�d0�|d2�}|j|j�d4�|d6�}|j|j�d8�dS)9Nrr�r�r�r�z-4.34913534E-17r�rr�r�r�r��%r��Nr`�r)rrri����r�r�)r�rr�	r�r�r�rr�r�r�r�r����)r�rr�r)rrr��rrr�rr�r�r�r)rrr�r�rr�r�r�r)rrr�rrr)r�r	r�r)r�r
r�r)r�rr�rrr�rr�r�r�)rrr��r�rr�r�r�)rr
r��rrr)r�rr�r)rrr��r)rrr��r�r�r�r�)rrr��r)rrr��rr�r`r�)r�rr��r)r�rr�)rr�r��as_tuple)r{r�rrrr�
test_as_tuple�s6zUsabilityTest.test_as_tuplecCs�|jj}Gdd�d|�}|d�}|d�}||}|jt|�|�|j|�}|jt|�|�tj|�}|jt|�|�|j||�tj|�}|jt|�|�|j||�|d�}||�}|jt|�|�|j||�||�}|jt|�|�|j||�|j|jd�||�}|jt|�|�|j||�d|_||�}|jt|�|�|j||�|j|jd�dS)Nc@seZdZdZdS)z1UsabilityTest.test_subclassing.<locals>.MyDecimalN)r�r�r�r�rrrr�	MyDecimalsrr�r�z1.0r)	rr�rr�r�r5r�r�r�)r{r�rrXrYrr�r&rrr�test_subclassings<
	zUsabilityTest.test_subclassingcCs\|jj}|jj}|�}|jt|d�j��t|j|d����dS)Nr)rr�r)r�r�rT)r{r�r)r�rrr�test_implicit_context1s
	z#UsabilityTest.test_implicit_contextcCs�|jj}|jj}|jj}|jj}|jj}|jj}|jj}|jj}|jj	}	|jj
}
|jj}||����}d|_d|_
d/|_|d�}
|d�}|d�}|j�|jt|
jdd��d�|j|j|	�|j|j|
�|j�|j||jdd�|j|j|�|j|jdd�d�|j|jdd�d	�|j�|jt|
jdd��d
�|j|j|	�|j|j|
�|j�|j||d0�jdd�|j|j|�|j�|jt|
jdd��d�|j|j|	�|j|j|
�|j�|j||d1�jdd�|j|j|�|j�|jt|
jdd��d
�|j||d�jdd�|j|j|�|j�|jt|
jdd��d�|j||jdd�|j|j|�|j�|jt|jdd��d�|j||d�jdd�|j|j|�|j�|jt|jdd��d�|j||d�jdd�|j|j|�|j�|jt|jdd��d�|j||jdd�|j|j|�|jt|j dd��d�|j�|jt|j!dd��d�|j|j|�|j|j|	�|j|j|
�|j|j|�|j|j|�|j�|j||j!dd�|j|j|�d|_"|jt|j#dd��d�d|_"|j�t|
j$|d�dd��}|j|d�|j||
j$|d�dd�|j|j|�|j�t|
j%ddd��}|j|d�|j||
j%|d�dd�|j|j|�|j�t|
j&ddd��}|j|d�|j||
j&ddd�|j|j|�|j�t|
j'ddd��}|j|d�|j||
j'ddd�|j|j|�|j�t|
j(ddd��}|j|d�|j||
j(ddd�|j|j|�|j�t|
j)ddd��}|j|d�|j||
j)|d�dd�|j|j|�|j�t|
j*ddd��}|j|d�|j||
j*|d�dd�|j|j|�|j�t|
j+ddd��}|j|d�|j||
j+|d�dd�|j|j|�|j�t|
j,ddd��}|j|d�|j||
j,|d�dd�|j|j|�|j�t|
j-ddd��}|j|d�|j||j-ddd�|j|j|�|j�t|
j.ddd��}|j|d �|j||
j.ddd�|j|j|�|j�t|
j/ddd��}|j|d!�|j||
j/d"dd�|j|j|�|j�t|
j0ddd��}|j|d �|j||
j0d"dd�|j|j|�|j�t|
j1dd#dd��}|j|d$�|j||
j1|d�d#dd�|j|j|�t2|_3t|d%�j4d&ddd��}|j|d
�t5|_3t|d%�j4d&ddd��}|j|d'�t|d%�j4d&t6dd��}|j|d
�|j�|j||d�j4dd�|j|j|�t2|_3t|d%�j7d&ddd��}|j|d
�t5|_3t|d%�j7d&ddd��}|j|d'�t|d%�j7d&t6dd��}|j|d
�|j�|j||d�j7dd�|j|j|�t2|_3t|d%�j8d&ddd��}|j|d
�t5|_3t|d%�j8d&ddd��}|j|d'�t|d%�j8d&t6dd��}|j|d
�|j�|j||d�j8dd�|j|j|�t6|_3t|d(�j9d)|d*�d&ddd��}|j|d+�t5|_3t|d(�j9d)|d*�d&ddd��}|j|d,�t|d(�j9d)|d*�d&t6dd��}|j|d+�|j�|j||j9|d-�d&t6dd�|j|j|�WdQRX||���t}d|_d|_
d2|_|d.d��@}|j|jd�|j|j
d�|j|jd3�WdQRXWdQRXdS)4Nr`i�Z111Z1e9999z1e-9999rz1.609487E+48FTz4.709530r�z2.045323r]rZ1111000z
9.999999E+999rir�r�z
+Subnormalz0E-1005ZNan891287828Z
NaN1287828i  z-1r��eZ101r�r_r�Z11100z1.11E+9i'r�Z225z1.5rr�z1.50001r�z1e-3z1.501z1.500z1e-10rri���r�r�i���i���):rr�r r�rrrsrurxrwrtrvrqrr�r�r�r�r�r�rr�r�rrCrG�ln�log10�logbr=rKrLrQr1rT�capitalsrUr{r2r.rOrZr�rIr�rJrR�rotate�scaleb�shift�fmar!r�to_integralrjrnrVrW�quantize)r{r�r r�rrrsrurxrwrtrvrqr�r�r��zr�rrrr�test_none_args:s�			
"

"

"

"
"
"
"
""
"
	"	
!"
"



"
"
"
"




%	$	$$
	$	$$
	$	$$
	0	00
(			zUsabilityTest.test_none_argscCs�|jj}|j|d�jd�|d�j|d���|j|d�jd�|d�j|d���|j|d�jd�|d�j|d���|j|d�jd�|d�j|d���|j|d�jd�|d�j|d���|j|d�jd�|d�j|d���|j|d�j	d�|d�j	|d���|j|d�j
d�|d�j
|d���|j|d�jd�|d�j|d���|j|d�jd�|d�j|d���|j|d�j
d�|d�j
|d���|j|d�jd�|d�j|d���|j|d�jd�|d�j|d���|j|d	�jd�|d	�j|d���|j|d�jd
�|d�j|d
���|j|d�jd�|d�j|d���|j|d�jd�|d�j|d���|j|d
�jd�|d
�j|d���|j|d�j|d�d�|d�j|d�|d���|j|d�jdd�|d�j|d�|d���|j|d�jd|d��|d�j|d�|d���dS)Nr�r�iu'i�i7r�i�r.ir�i�z9.123i��r��Ci����i����r�r�i�i�i�i�i�i�)rr�r�r{r2r3r4r.rOrZr�rIr�rJrMr$rRrrSr r!r")r{r�rrr�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�rrrr&r)rrrrr�Rs&$*	Tg
-/	�r�c@seZdZeZdS)�CUsabilityTestN)r�r�r�r`rrrrrr*Z	sr*c@seZdZeZdS)�PyUsabilityTestN)r�r�r�r�rrrrrr+\	sr+c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�PythonAPItestscCst|jj}|jt|tj��|jt|tj��|j|d�tj�|j	|d�tj�dS)Nr)
rr�r�
issubclass�numbers�Numberr|ZRealr*ZassertNotIsInstance)r{r�rrr�test_abca	s
zPythonAPItests.test_abccCs[xTttjd�D]?}|jj}tjd}|jtjd<|d�}tj||�}tj|�}|j	||�t
rFt
jd�}tjd�}t
tjd<tj||�}	ttjd<tj|	�}
|j|
tj�|j	|
|�ttjd<tj||�}t
tjd<tj|�}
|j|
t
j�|j	|
|�t
jd�j
�}tjd�j
�}t
tjd<tj||�}	ttjd<tj|	�}
|j|
tj�|j	|
|�ttjd<tj||�}t
tjd<tj|�}
|j|
t
j�|j	|
|�|tjd<qWdS)Nr�rz-3.141590000z-3.123e81723)r��pickle�HIGHEST_PROTOCOLrr��sys�modules�dumps�loadsr�r`r�r*rZDecimalTuple)r{�protor��savedecimalrrdr�r�r�ZsxrZsyrrr�test_picklei	sL








zPythonAPItests.test_picklecCs�|jj}x�tdd�D]s}d|d}|jt||��tt|���||�}|jt�}|j|t|��|�qW|jt	t|d��|jt	t|d��|jt
t|d��|jt
t|d��dS)	N�z%0.2fgY@z-nanr�rz-infi���)rr�r�r�r�rr#rjr�r�r�)r{r�r�rrrrrr�test_int�	s( zPythonAPItests.test_intcCs�|jj}x�tdd�D]v}d|d}|jt||��tt|���||�}|jt�}|j|tj	|��|�qWdS)Nr:z%0.2fgY@i���)
rr�r�r�r�rr#rjr�Ztrunc)r{r�r�rrrrrr�
test_trunc�	s(zPythonAPItests.test_trunccCs|jj}Gdd�d|�}|jt||��|jd�}|jt|�|�|jt|�d�|j|jd�d}|j|j|�||��|j|jt	d��j
��|j|jt	d��j��|j|jt	d	��j��|jt|jt	d���t|d
���|jt|jt	d���t|d���|jt|jt	d	���t|d���|jt
|jd
�xTtd�D]F}tjd�tj�dd}|j|t	|j|���q�WdS)Nc@seZdZdd�ZdS)z1PythonAPItests.test_from_float.<locals>.MyDecimalcSs
d|_dS)Nr�)r�)r{�_rrr�__init__�	sz:PythonAPItests.test_from_float.<locals>.MyDecimal.__init__N)r�r�r�r>rrrrr�	srg�������?z90.1000000000000000055511151231257827021181583404541015625r�ls\�&�5$3�|	rrz-infr�r�z	-Infinity�abcrg{�G�z�?g@g�?)rr�rr-�
from_floatr�r�r�r�rrDr@r�r�r�r�r)r{r�rrZbigintr�r�rrr�test_from_float�	s."""!zPythonAPItests.test_from_floatcCs$|jj}|jj}|jj}|dddt�}|j|jtj�|d��|dddt	�}|j|jtj�|d��|ddd|g�}|j
||jtj�|jt|jd
��d�|jt|jd	��d
�|jt|jd��d�dS)Nrr�rz3.1415z3.1416rgz
Decimal('-0')g�?zDecimal('1')rz
Decimal('10')g�)rr�r rtrjr��create_decimal_from_floatr�Zpirnr�r�)r{r�r rtrrrr�test_create_decimal_from_float�	s,


z-PythonAPItests.test_create_decimal_from_floatcCs|jj}|jj}|jj}|dddd�}|j|d�j|d��|d��|j|d�j|d�dt�|d��|j||d	�j|d
�d|�|�}|d�}|jd|d
|d�dt�}|j||d��dS)Nr�i��r�z7.335z.01z7.34rz7.33Z10e99999Z1e100000rz0.871831e800r�Z1e797z	8.71E+799iay��)rr�r rrr�r$rjr�)r{r�r rrr�rr�rrr�
test_quantize�	s"

	$zPythonAPItests.test_quantizecCs�|jj}|d�}|j|j|�|j|jd�|j|j�|�|d�}|jt|�ttd���|jt	t
|dd�|jt	t
|dd�|jt	t
|dd�|jt	t
|d	d�dS)
Nz9.8182731e181273rr�r��realr.�imag�	conjugate�__complex__)rr�r�rErFrG�complexrr�r�ra)r{r�r�rrr�test_complex
s"zPythonAPItests.test_complexcCs�	|jj}|jj}|jj}|jj}|jj}|�}d|_d|_d5|_|��|	}|j	�|j
|d|�d�|j
|dd|�d�|j
|d|dd�d�|j
|d|�d�|j	�|j||dd|�|j|j
|�|j|j
|�|j	�|j
|d�jd|�d�|j||d	�jd|�|j|j
|�|j|j
|�|j	�|j
|d�jd|�|d
��|j||d6�jd|�|j|j
|�|j|j
|�|j
|d�jd|�|d��|j
|d7�jd|�d8�|j
|d9�jd|�|d��|j
|d
�jd|�|d��|j
|d�jd|�d�|j
|d�jd|�d:�|j
|d�jd|�d�|j
|d�jd|�|d��|j
|d�jd|dd�d;�|j	�|j||d�j|d�d|�|j|j
|�|j|j
|�|j
|d�j|d�d|�|d��|j
|d�j|d�d|�|d��|j
|d�j|d�d|�|d��|j
|d�j|d �d|�|d!��|j
|d�j|d �d|�|d��|j
|d�j|d"�d|�|d#��|j	�|j||d�j |d$�d|�|j|j
|�|j|j
|�|j
|d%�j!|d&�d|�|d'��|j
|d(�j"d)|d*�d|dd�|d+��|jt#|d�j$d|�|jt#|d�j%d|�|jt#|d�j&d|�|jt#|d�j'd|�|jt#|d�j(d|�|jt#|d�j)d|�|jt#|d�j*d|�|jt#|d�j+d|�|j|d�j,d|��|j|d�j-d|��|jt#|d�j.d|�|jt#|d�j/d|�|jt#|d�j0d|�|j
|d<�j1d|�d�|j
|d�j2d|�d�|j
|d�j3d|�d-�|j
|d.�j4d|�d.�|j
|d/�j5|d0�d|�d�|j
|d/�j6|d0�d|�d�|j
|d1�j7|d0�d|�d�|j
|d2�j8dd|�d�|j
|d2�j8dd|�d�|j	�|j||d2�j9dd|�|j|j
|�|j|j
|�|j
|d2�j:d=d|�d�|jt#|j;d3d|�|jt#|d�j<d|�|j
|d�j=�d�|jt#|d"�j>d|�|jt#|d"�j?d|�|jt#|d�j=dd4�|jt#|d�j=dd4�WdQRXdS)>Nr�rrr�rr�r�r`r�z0.7z-infz-0.9z9.73z1E+1Z9999i'z-2000i�r�r�z0.0625z0.2r>r�r�rz0.01z0.0101z0.0z-0.3z0.02z-0.03z-0.0z-1z0.1Z1e10z9.99z1.5z-0.5z9.9�thirdz0.9z7E+1�oz
+Subnormalz0.21Z11r_Z01Z23g�������?r�r�r�r�rr�i0���r�i����r�)@rr�r r�rrrurr�r�r�r�r�rr�r|r�rrrKrLrQr#rWrVrTr{r2r�rIr�rJrMr$rRr"r�r>r?r@rBrDrFrErHrCrG�adjustedrG�radixrr=r1rUr.rOrZrr r!r@r�	canonicalr7r8)r{r�r r�rrruZxcr�rrr�test_named_parameters
s�				


"
(("(("""((
	11$
1$
1
	$
-
""""+++%%
	%z$PythonAPItests.test_named_parameterscCsZ|j}|j}|j}|j}|j}|j}|j}|j}|j}	|j	}
|j
}|jt|t
��|jt||��|jt||��|jt|t��|jt||��|jt|t��|jt||
��|jt||	��|jt||��|jt||	��|jt||
��|jt||��|jt||��|jt||��|jt|	|��|jt|
|��|jt||��|jt|j|��|jt|j|��|jt|j|��|jt|jt��|jt|j|��dS)N)rr�rr�FloatOperationrsrurxrwrtrvrqrr-�ArithmeticErrorr��ZeroDivisionErrorZConversionSyntaxZDivisionImpossibleZDivisionUndefinedZInvalidContext)r{rr�rrrQrsrurxrwrtrvrqrrr�test_exception_hierarchy�
sB											z'PythonAPItests.test_exception_hierarchyN)
r�r�r�r0r9r;r<rArCrDrJrPrTrrrrr,_	s3 pr,c@seZdZeZdS)�CPythonAPItestsN)r�r�r�r`rrrrrrU�
srUc@seZdZeZdS)�PyPythonAPItestsN)r�r�r�r�rrrrrrV�
srVc@s
eZdZdd�Zedd��Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�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~�ZBdS)��ContextAPItestscCs.|jj}|jj}|jj}|jj}|�}|dddddddddddddddd�}x�||gD]�}|j|jd	�|j|jt�|j|j	d
�|j|j
d
�|j|jd�|j|jd�t
||dg�t
||d|||g�qWdS)Nrrr�r�rr,r�rr i?Br�ri���)rr rrrsrur�rrr!r�r�rr,r)r{r rrrsrur�r�r�rrrr&�
s"	zContextAPItests.test_none_argscCs�ddl}|jj�}x3tD]+}|j|�|_|j|j|�q"W|jd�}|jtt	|d|�|jd�}|jtt	|d|�dS)Nrr�rz	ROUND_UP)
r�rr �
RoundingModesr�rr�r�r�ra)r{r�r�Zrndrrrrr��
s
z(ContextAPItests.test_from_legacy_stringscCs�x~ttjd�D]i}|jj}tjd}|jtjd<|�}tjtj||��}|j	|j
|j
�|j	|j|j�|j	|j|j�|j	|j
|j
�|j	|j|j�|j	|j|j�|j	|j|j�|j	|j|j�tr5ttfttfgnttfg}x)|D]!\}}xtt�D]\}	}
x�tt|�D]�\}}
x�tt|�D]�\}}
tjdd�}
tjdd�}tjdd�}tjd�}tjd�}|tjd<|jd|
d|d|d	t|	d
|d|dt|d|�d
t|d|��}tj||�}|tjd<tj|�}|j||j�|j	|j
|
�|j	|j|�|j	|j|�|j	|j
t|	�|j	|j|�|j	|j|�t||dt|d|��t||d
t|d|��q�Wq�WqdWqKW|tjd<qWdS)Nr�rr.rr�rr�r�rrr,r�ri����)r�r1r2rr r3r4r6r5r�rr�r�rrr,r�rr`r�r�rXr�r��	randranger*r)r{r7r r8r�r��combinationsZdumper�loaderZrir=ZfiZtirr�r��capsr,rrrrrr9�
sX
	-
	

!1zContextAPItests.test_picklecCs]|jj}|j|d�dd|d�dig�|j|d�dddig�dS)Nrrg�?r�r�)r�r�)r�r�)rr�ZassertInZassertNotIn)r{r�rrr�test_equality_with_other_typess+z.ContextAPItests.test_equality_with_other_typescCs�|jj}|jj}|�}|j�}|jt|�t|��|jt|j�t|j��|jt|j�t|j��t|jj	��}t|jj	��}|j
||�|j
|j|j�dS)N)rr�r r5r�r�r�rr^�keysr�)r{r�r r�rZk1Zk2rrr�	test_copy"s	""zContextAPItests.test_copycCs/|jj}|�}|jtt|d�dS)NZ_clamp)rr r�r�r)r{r r�rrr�test__clamp1s	zContextAPItests.test__clampcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nr�z-1r�r�)rr�r rgr�r�r�)r{r�r r�rrrr�test_abs<s	zContextAPItests.test_abscCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�)rr�r rar�r�r�)r{r�r r�rrrr�test_addEs	""zContextAPItests.test_addcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�)rr�r r{r�r�r�)r{r�r r�rrrr�test_compareQs	""zContextAPItests.test_comparecCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�)rr�r r2r�r�r�)r{r�r r�rrrr�test_compare_signal]s	""z#ContextAPItests.test_compare_signalcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�)rr�r r3r�r�r�)r{r�r r�rrrr�test_compare_totalis	""z"ContextAPItests.test_compare_totalcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�)rr�r r4r�r�r�)r{r�r r�rrrr�test_compare_total_magus	""z&ContextAPItests.test_compare_total_magcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nr�z-1r�r�)rr�r r7r�r�r�)r{r�r r�rrrr�
test_copy_abs�s	zContextAPItests.test_copy_abscCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nr�z-1r�r�)rr�r r6r�r�r�)r{r�r r�rrrr�test_copy_decimal�s	z!ContextAPItests.test_copy_decimalcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nr�z-1r�r�)rr�r r8r�r�r�)r{r�r r�rrrr�test_copy_negate�s	z ContextAPItests.test_copy_negatecCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd	�|jt|jdd�dS)
Nr�r�r�z-2rrrrr)rr�r r:r�r�r�)r{r�r r�rrrrrt�s	""zContextAPItests.test_copy_signcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r rzr�r�r�)r{r�r r�rrrr�test_divide�s	""zContextAPItests.test_dividecCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r r;r�r�r�)r{r�r r�rrrr�test_divide_int�s	""zContextAPItests.test_divide_intcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r r`r�r�r�)r{r�r r�rrrr�test_divmod�s	""zContextAPItests.test_divmodcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r r�r�r�r�)r{r�r r�rrrr�test_exp�s	zContextAPItests.test_expcCs�|jj}|jj}|�}|j|d�|d�|d��}|j|jddd�|�|j|j|d�dd�|�|j|jd|d�d�|�|j|jdd|d��|�|j|j|d�|d�d�|�|jt|jddd�|jt|jddd�|jt|jddd�|jt|j|d�|d�d	�|jt|j|d
�|d�d�|jt|d�j|d�d	�|jt|d
�j|d�d�dS)
Nr�r�r�r]r��4r�rz
not a decimalr�r�gZd;�O��?)rr�r r"r�r�r�)r{r�r r�rrrr�test_fma�s(	'%%%+zContextAPItests.test_fmacCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r r?r�r�r�)r{r�r r�rrrr�test_is_finite�s	zContextAPItests.test_is_finitecCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r r@r�r�r�)r{r�r r�rrrr�test_is_infinite�s	z ContextAPItests.test_is_infinitecCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rBr�r�r�)r{r�r r�rrrr�test_is_nans	zContextAPItests.test_is_nancCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rCr�r�r�)r{r�r r�rrrr�test_is_normal
s	zContextAPItests.test_is_normalcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rDr�r�r�)r{r�r r�rrrr�test_is_qnans	zContextAPItests.test_is_qnancCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rEr�r�r�)r{r�r r�rrrr�test_is_signeds	zContextAPItests.test_is_signedcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rFr�r�r�)r{r�r r�rrrr�test_is_snan%s	zContextAPItests.test_is_snancCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rGr�r�r�)r{r�r r�rrrr�test_is_subnormal.s	z!ContextAPItests.test_is_subnormalcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rHr�r�r�)r{r�r r�rrrr�test_is_zero7s	zContextAPItests.test_is_zerocCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rr�r�r�)r{r�r r�rrrr�test_ln@s	zContextAPItests.test_lncCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rr�r�r�)r{r�r r�rrrr�
test_log10Is	zContextAPItests.test_log10cCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rr�r�r�)r{r�r r�rrrr�	test_logbRs	zContextAPItests.test_logbcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�)rr�r r.r�r�r�)r{r�r r�rrrr�test_logical_and[s	""z ContextAPItests.test_logical_andcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Ni�Z1000)rr�r r=r�r�r�)r{r�r r�rrrr�test_logical_invertgs	z#ContextAPItests.test_logical_invertcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�)rr�r rOr�r�r�)r{r�r r�rrrr�test_logical_orps	""zContextAPItests.test_logical_orcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�)rr�r rZr�r�r�)r{r�r r�rrrr�test_logical_xor|s	""z ContextAPItests.test_logical_xorcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r r�r�r�r�)r{r�r r�rrrr�test_max�s	""zContextAPItests.test_maxcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r rIr�r�r�)r{r�r r�rrrr�test_max_mag�s	""zContextAPItests.test_max_magcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r r�r�r�r�)r{r�r r�rrrr�test_min�s	""zContextAPItests.test_mincCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r rJr�r�r�)r{r�r r�rrrr�test_min_mag�s	""zContextAPItests.test_min_magcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r Zminusr�r�r�)r{r�r r�rrrr�
test_minus�s	zContextAPItests.test_minuscCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r r�r�r�r�)r{r�r r�rrrr�
test_multiply�s	""zContextAPItests.test_multiplycCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rKr�r�r�)r{r�r r�rrrr�test_next_minus�s	zContextAPItests.test_next_minuscCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rLr�r�r�)r{r�r r�rrrr�test_next_plus�s	zContextAPItests.test_next_pluscCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r rMr�r�r�)r{r�r r�rrrr�test_next_toward�s	""z ContextAPItests.test_next_towardcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rQr�r�r�)r{r�r r�rrrr�test_normalize�s	zContextAPItests.test_normalizecCs�|jj}|jj}|�}|j|jd�|j|d���|j|jd�|j|d���|j|jd�|j|d���dS)Nr�rr�i���i���)rr�r r�r1)r{r�r r�rrr�test_number_class�s	((z!ContextAPItests.test_number_classcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r �plusr�r�r�)r{r�r r�rrrr�	test_plus�s	zContextAPItests.test_pluscCs%|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|j|j|d�|d��|�|jt|jdd�|jt|jdd�|j|jddddd	d
�d�dS)Nr�r�r�rn�modulor�r�r�rr�)rr�r �powerr�r�r�)r{r�r r�rrrr�
test_power
s	""(zContextAPItests.test_powercCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r r$r�r�r�)r{r�r r�rrrrrD
s	""zContextAPItests.test_quantizecCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r Z	remainderr�r�r�)r{r�r r�rrrr�test_remainder 
s	""zContextAPItests.test_remaindercCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r rRr�r�r�)r{r�r r�rrrr�test_remainder_near,
s	""z#ContextAPItests.test_remainder_nearcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r rr�r�r�)r{r�r r�rrrr�test_rotate8
s	""zContextAPItests.test_rotatecCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rTr�r�r�)r{r�r r�rrrr�	test_sqrtD
s	zContextAPItests.test_sqrtcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r rSr�r�r�)r{r�r r�rrrr�test_same_quantumM
s	""z!ContextAPItests.test_same_quantumcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r r r�r�r�)r{r�r r�rrrr�test_scalebY
s	""zContextAPItests.test_scalebcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r r!r�r�r�)r{r�r r�rrrr�
test_shifte
s	""zContextAPItests.test_shiftcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r�r�r])rr�r �subtractr�r�r�)r{r�r r�rrrr�
test_subtractq
s	""zContextAPItests.test_subtractcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rUr�r�r�)r{r�r r�rrrr�test_to_eng_string}
s	z"ContextAPItests.test_to_eng_stringcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rXr�r�r�)r{r�r r�rrrr�test_to_sci_string�
s	z"ContextAPItests.test_to_sci_stringcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr_)rr�r rWr�r�r�)r{r�r r�rrrr�test_to_integral_exact�
s	z&ContextAPItests.test_to_integral_exactcCs�|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�|jt|jdd�dS)Nrr_r�)rr�r rVr�r�r�)r{r�r r�rrrr�test_to_integral_value�
s	z&ContextAPItests.test_to_integral_valueN)Cr�r�r�r&rr�r9r]r_r`rarbrcrdrerfrgrhrirtrjrkrlrmrorprqrrrsrtrurvrwrxryrzr{r|r}r~rr�r�r�r�r�r�r�r�r�r�r�r�r�rDr�r�r�r�r�r�r�r�r�r�r�r�rrrrrW�
s~=																												rWc@seZdZeZdS)�CContextAPItestsN)r�r�r�r`rrrrrr��
sr�c@seZdZeZdS)�PyContextAPItestsN)r�r�r�r�rrrrrr��
sr�c@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�ContextWithStatementcCs�|jj}|jj}|�}|��}|�}WdQRX|�}|j||d�|j||d�|j||d�dS)Nz!did not restore context correctlyzdid not copy the contextz __enter__ returned wrong context)rr)r�r�assertIsNot)r{r)r��orig_ctx�	enter_ctx�set_ctx�	final_ctxrrr�test_localcontext�
s		z&ContextWithStatement.test_localcontextc	Cs�|jj}|jj}|jj}|jj}|�}|dd�}||��}|�}WdQRX|�}|j||d�|j|j|jd�|j||d�|j||d�dS)Nr�*z!did not restore context correctlyzdid not set correct contextzdid not copy the contextz __enter__ returned wrong context)rr r)r�rr�rr�)	r{r r)r�r��new_ctxr�r�r�rrr�test_localcontextarg�
s		z)ContextWithStatement.test_localcontextargcCs|jj}|jj}|jj}|jj}|jj}|jj}|�}|j�|dd�}|��)}	|j|	j	|j	�|j|	j
|j
�d|	j
|<d|	_|j|jd	�|j
||	jd�|j|	j	|�||��}}
|j|
j	|j	�|j|
j
|j
�|j
||
j|d�d�|j|
j	|�|j|
j	|�~
WdQRX|j|	j	|�~	WdQRX|j|jd
�|j|j	|�|j|j	|�|j|j	|�|j|j	|�dS)Nr�i�Tiz0e-999z3.4e200r�i����i����i����)rr�r r)r�rqrur�r�r�rr�r�r�r�rr�r|)r{r�r r)r�rqrur�r�r�r�rrr�test_nested_with_statements�
s>	

	

z0ContextWithStatement.test_nested_with_statementscCsh|jj}|��L}~|��6}~|�� }~|��
}~WdQRXWdQRXWdQRXWdQRXdS)N)rr�)r{r�r�r�r��c4rrr�test_with_statements_gc1�
sz-ContextWithStatement.test_with_statements_gc1cCsq|jj}|��U}||��?}~||��&}~||��
}~~WdQRXWdQRXWdQRXWdQRXdS)N)rr�)r{r�r�r�r�r�rrr�test_with_statements_gc2�
sz-ContextWithStatement.test_with_statements_gc2c
Cs}|jj}|jj}|jj}|jj}|��=}~|dd�}||�||��}~|j|jd�~|dd�}||�~|j|�jd�|dd�}	||	�|j|�jd�||	��{}
~	|j|
jd�~
|dd�}||�~|j|�jd�|��}|j|jd�~WdQRXWdQRXWdQRXWdQRXdS)Nrr�r�r�r�)rr r�r)r%r�r)
r{r r�r)r%r�Zn1r�Zn2Zn3r�Zn4r�rrr�test_with_statements_gc3s<



z-ContextWithStatement.test_with_statements_gc3N)	r�r�r�r�r�r�r�r�r�rrrrr��
s
#r�c@seZdZeZdS)�CContextWithStatementN)r�r�r�r`rrrrrr�%sr�c@seZdZeZdS)�PyContextWithStatementN)r�r�r�r�rrrrrr�'sr�c@sReZdZdd�Zdd�Zedd��Zdd�Zd	d
�ZdS)�ContextFlagsc
s��jj}�jj}�jj}�jj}�jj}�jj}�jj}�fdd�}|dddddddtd	gd
g�}	|	j	|d�gf|	j
|d�gf|	j|d
�|d�gf|	j|d
�|d�gf|	j
|d
�|d�gfg}
|g|g|g|g|g|||||gg}x?|
D]7\}}
|	j�||
�}dd�|	jj�D�}x�|D]�}|	j�x|D]}||	|�q�W||
�}t|�}x'|D]}||kr�|j|�q�W|jdt�dd�|	jj�D�}|jdt��j||dd||f��j||dd||f�q�WqZWdS)NcsC�jtkr2d|j|<|j|r?|�n
|j|�dS)NT)rr`r�rZ_raise_error)r�flag)r{rr�raise_error7s


	z7ContextFlags.test_flags_irrelevant.<locals>.raise_errorrrr�i@�Tr�rrr�z100E-425000010r�z
1.23456789z
9.87654321cSs"g|]\}}|r|�qSrr)r�kr�rrrr�Ss	z6ContextFlags.test_flags_irrelevant.<locals>.<listcomp>r�cSs"g|]\}}|r|�qSrr)rr�r�rrrr�ds	z=operation produces different answers depending on flags set: zexpected %s, got %s.z9operation raises different flags depending on flags set: zexpected %s, got %si���)rr�r rtrvrxrqrwr!r/rTrar�r�r�r�r0r�r�r�r�r�)r{r�r rtrvrxrqrwr�rZ
operationsZflagsets�fnr�r�r�Zextra_flagsr�Znew_ansZexpected_flagsZ	new_flagsr)r{r�test_flags_irrelevant,sN$




z"ContextFlags.test_flags_irrelevantcCs�|jj}|jj}|jj}|�}|j|j|j�|j|j|j�|j|_|j|j|j�|j|j|j�d|j|<|j|_|j|j|j�|j|j|j�i}|j|j�|j||j�|j|j|�d||<|j||j�|j|j|�|di}|j||j�|j|j|�dg}|j||j�|j|j|�dS)NTFr�)	rr rtrvr�r�rr��update)r{r rtrvr�rrrr�test_flag_comparisonsns4	

	z"ContextFlags.test_flag_comparisonscCs(|jj}|jj}|jj}|���}|j|j|�|j�|j|d�d�|j|j	|�|j�|j|j
d�d�|j|j	|�|j�|jd�}|j|j	|�|j|d�|j|j	|�|j�|jd�}|j|j	|�|j|d�|j|j	|�d|j|<|j�|j
||d�|j|j	|�|j�|j
||j
d�|j|j	|�|j�|jd�}|j|j	|�|j�|jd�}|j|j	|�WdQRXdS)Ng@T)rr�rQr�r|rr�r�rr�r�r@rBr�)r{r�rQr�r�r�rrr�test_float_operation�sD








z!ContextFlags.test_float_operationcs��jj��jj}�jj��jj}d��fdd���d���d��d�
d��d���d��	d	�d�
�d
���d��td��td
��d���������	�
��
��fdd�}d���fdd�}|�}||��h}�j|j��||dd�||dd�d|j�<||d��||d��WdQRXdS)Ncsi|j�t||�}|�kr;�j|||�n�j||�d��j|j��dS)NT)r�rr�rrr�)rr�rr�signalr�)rQr{rr�assert_attr�s
z7ContextFlags.test_float_comparison.<locals>.assert_attrz0.25z3.0g�?g@z0.0z-0.0gr�z	-Infinityrz-infcslx$dD]}��
�|||�qWx$dD]}���|||�q.W��
�d|d����	d|d����
d|d����	d|d����
d|d����d|d����d|d���
�d|d���d�dd|d����d|d����d|d���d	�td
�d|d�dS)
NrArCrBrDrErFz0.1g�������?r�r)rArC)rBrD)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_frr�doit�s 

z0ContextFlags.test_float_comparison.<locals>.doitcs |j�td�d�g�}�jt|�d��j|j��|j�|r~�j|td�d�g�ntd�d�g�}�j|j��|j�d�d�dgk}�j|j��|j�d�d�dddik}�j|j��dS)	NgY@z100.0r�g�?z10.0g$@rr�)r�r^r��lenrr�r��sorted)r�r�rr�)r�rQr{rr�test_containerss

"

z;ContextFlags.test_float_comparison.<locals>.test_containersr�Tg�)rr�r rQr�rr|r)r{r r�r�r�r,r�r)r�rQr�r�r�r�r�r�r�r�r�r{r�r�r�r�r�test_float_comparison�s6	<	
z"ContextFlags.test_float_comparisoncCs�|jj}|jj}|jj}|jj}|�}|j|j|�|j|j|�|j�d|j|<d|j|<|j	|j|�|j	|j|�dS)NT)
rr�r rtrQr|r�r�clear_trapsr)r{r�r rtrQrrrr�test_float_operation_default%s	


z)ContextFlags.test_float_operation_defaultN)	r�r�r�r�r�rr�r�r�rrrrr�*s
B&6[r�c@seZdZeZdS)�
CContextFlagsN)r�r�r�r`rrrrrr�5sr�c@seZdZeZdS)�PyContextFlagsN)r�r�r�r�rrrrrr�7sr�c@s.eZdZdZdd�Zdd�ZdS)�SpecialContextszTest the context templates.cCs{|jj}|jj}|jj}|jj}|jj}|jj}|jj}|jj}|jj	}	t
||d|||||	g�|�j�}
|j}|j}d}
z�yad|_|_xJ||fD]<}||�|�}|j
||�|j|jd�q�WWn.tk
rI}z|j}
WYdd}~XnXWd||_||_||
�|
rv|
�XdS)Nri�)r�BasicContext�ExtendedContextr)r%rrrsrurxrqrr5rr�r��	Exceptionr�)r{r�r�r)r%rrrsrurxrq�savecontextZbasic_context_precZextended_context_prec�ex�templater�r�rrr�test_context_templates=s:		
	 		
z&SpecialContexts.test_context_templatescCs�|jj}|jj}|jj}|jj}|jj}|jj}|jj}|jj}|j	|j
d�|j	|j
d�t||d|||g�|�j�}	|j
}
d}z�yq|�}|j
}
d|_
|�}|j	|j
|
�||�|�}|j
||�|j	|j
d�Wn.tk
rd}z|j}WYdd}~XnXWd|
|_
||	�|r�|�XdS)Nrri�)rr�r�r�r)r%rrrsrur�rrr5r�r�r�)r{r�r�r�r)r%rrrsrur�Zdefault_context_precr�r�Zsaveprecr�rrr�test_default_contextas>					
	 	
z$SpecialContexts.test_default_contextN)r�r�r�r�r�r�rrrrr�:s$r�c@seZdZeZdS)�CSpecialContextsN)r�r�r�r`rrrrrr��sr�c@seZdZeZdS)�PySpecialContextsN)r�r�r�r�rrrrrr��sr�c@seZdZdd�ZdS)�ContextInputValidationc	CsO|jj}|jj}|j�}xoddgD]a}t||d�|jt||�d�|jtt||d�|jt	t||d�q1Wt|dd�|jt|d�d�|jtt|dd�|jt	t|dd�|jt	t|d	d�|jt	t|d	d
�|jt	t|d	d�|jt	t|d	d�xhdd
gD]Z}|jtt||d�|jtt||d�|jt	t||dddg�qbW|jt
t|dd�|jt	t|dg�|jtt|di�|jtt|dddi�x<dddd	dd
ddgD]}|jt
|j|�qIW|jt	t|d
�|jt	t|d
�|jt	|d	d�|jt	|d	d�|jt|d
d�|jt|dd�|jt|ddg�|jt|ddg�|jt	|dd�|jt	|dd�dS)Nrr�i?Br�r�r�r�r�rrg�?rr,r�r.r�rrrrr��Qr�i���i���)r�r�r�r�r�r�)rr�)r�r)
rr r�r5rar�rr�r�r�r��KeyError�__delattr__)r{r r�r�rrrr�test_invalid_context�sL&
z+ContextInputValidation.test_invalid_contextN)r�r�r�r�rrrrr��sr�c@seZdZeZdS)�CContextInputValidationN)r�r�r�r`rrrrrr��sr�c@seZdZeZdS)�PyContextInputValidationN)r�r�r�r�rrrrrr��sr�c@seZdZdd�ZdS)�ContextSubclassingcs�|j��j}�j��j}�j}�j}�j}�j}�j}�j	}�j
}	G��fdd�d��}
��}|
�}x0dD](}
|jt||
�t||
��q�W|j
t|
ddi�|
dd�}|j|jd�|j
|	|j|d�d
�|j
t|
ddi�|
dtdd�}|j|jt�|j|j|d��d�|j
t|
ddi�|
dddd�}|j|jd�|j|d�|d��}|j||d��x1|||||fD]}|j|j|�qW|j
t|
dd i�|
dddd�}|j|jd�|j
||j|d�|d��|jtkr�x+|||fD]}|j|j|�q�W|j
t|
dd!i�|
dd
�}|j|jd
�|jd�}|j|j|�d�|j
t|
ddi�|
dddd�}|j|jd�|j|d��}|jt|�d�|j
t|
d	di�|
d	||g�}x(||fD]}|j|j|�q�W|j �x&t!�D]}|j"|j|�q
W|j
t|
d
di�|
d
||g�}x(||fD]}|j|j#|�qcW|j$�x&t!�D]}|j"|j#|�q�WdS)"Ncs=eZdZdddddddd��fdd�ZdS)z>ContextSubclassing.test_context_subclassing.<locals>.MyContextNc		s�j|�|dk	r"||_|dk	r7||_|dk	rL||_|dk	ra||_|dk	rv||_|dk	r�||_�dk	r�t�t�r��fdd�t	��D���|_
�dk	rt�t�r�fdd�t	��D���|_dS)Ncsi|]}|�k|�qSrr)rr�)r�rr�
<dictcomp>�s	z[ContextSubclassing.test_context_subclassing.<locals>.MyContext.__init__.<locals>.<dictcomp>csi|]}|�k|�qSrr)rr�)rrrr��s	)r>rrr�r�rr,r+r�r�r�r)	r{rrr�r�rr,r�r)r r)r�rrr>�s*
						!	!zGContextSubclassing.test_context_subclassing.<locals>.MyContext.__init__)r�r�r�r>r)r rrr�	MyContext�s	r�rrr�r�rr,r�rr�Z9e2r�XYZz9.9rr�z1e-99z2.234e-2000z0.0Z1e99z
2.234e2000Z1E222z1e+222r��cz!1.000000000000000000000000000E+99)rrr�r�rr,r�rr�r�r�r�r�)%rr�r rqrsrtrurvrwrxrrr�rr�r�rr$r�rjrr�r�rarr�r�r`rr�rXr,r�r�r�r|rr�)r{r�rqrsrtrurvrwrxrrr�r�rrr�r�r)r rr�test_context_subclassing�s~													
&%

z+ContextSubclassing.test_context_subclassingN)r�r�r�r�rrrrr��sr�c@seZdZeZdS)�CContextSubclassingN)r�r�r�r`rrrrrr�?sr�c@seZdZeZdS)�PyContextSubclassingN)r�r�r�r�rrrrrr�Asr�c@s4eZdZdd�Zdd�Zdd�ZdS)�CheckAttributescCs�|jtjtj�|jtjtj�|jtjtj�|jtjtj�|jtjdkpytjdk�|jtjdkp�tjdk�|jtj	tj	�|jt
t�t
t��dS)NTF)r�r`r�r�r}r�r�rr��__version__�dir)r{rrr�test_module_attributesGs%%z&CheckAttributes.test_module_attributescCsedd�ttj��D�}dd�ttj��D�}|jt|�t|�t��dS)NcSs2g|](}d|ks(|jd�r|�qS)�__r=)r�)rrrrrr�Xs	z;CheckAttributes.test_context_attributes.<locals>.<listcomp>cSs2g|](}d|ks(|jd�r|�qS)r�r=)r�)rrrrrr�Ys	)r�r`r r�r�r^)r{r�r�rrr�test_context_attributesVsz'CheckAttributes.test_context_attributescCskdd�ttjd��D�}dd�ttjd��D�}|jt|�t|�t��dS)NcSs2g|](}d|ks(|jd�r|�qS)r�r=)r�)rrrrrr�^s	z;CheckAttributes.test_decimal_attributes.<locals>.<listcomp>rcSs2g|](}d|ks(|jd�r|�qS)r�r=)r�)rrrrrr�_s	)r�r`r�r�r^)r{r�r�rrr�test_decimal_attributes\s""z'CheckAttributes.test_decimal_attributesN)r�r�r�r�r�r�rrrrr�Dsr�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)�CoveragecCsd|jj}|j|d�j�d�|j|d�j�d�|j|d�j�d�dS)NZ	1234e9999i'rrr)rr�r�rM)r{r�rrr�
test_adjusteddszCoverage.test_adjustedcCsl|jj}|jj}|d�j�}|j|d�|�}|j|d��}|j|d�dS)Nr)rr�r)rOr�)r{r�r)r�r�rrr�test_canonicalls	zCoverage.test_canonicalcCs�|jjj�}d|_d|_d|_t|_d|_d|_	x/t
|jD] }d|j|<d|j|<qVW|j
�}d}|j||�dS)Ni@�Trr�Fz{Context(prec=425000000, rounding=ROUND_HALF_DOWN, Emin=-425000000, Emax=425000000, capitals=0, clamp=1, flags=[], traps=[])i���)rr�r5rr�r�rlrrr,r�r�r�__repr__r�)r{r�r�rr�rrr�test_context_reprws						
zCoverage.test_context_reprcCs9|jj}|jj}|���}d|_d|_d!|_|jt|d��d�|j|d�dd�|j|d�dd�|j|d�d	d�|j|d
�j|d�d�d�|j	|d�jd	d�j
�d
�|jt|d�dd	�d�|j|d�j�d�|j	|d�j
�d�|j	|d�j�d
�|j|d�j�d�|j|d�j�d�|j|d�j�d�|j|d�j�d�|j|d�d�|j|d�dd�|j|d�j�d�|j|d�j�|d��|j|d�j�|d��|j|d�j�d�|j|d�
d"�|j|d�d	d�|j|d�d	d�|j|d�j�d�|j|d�j��|j|d�j��|j|d�j��|j|d�j��|j|d�j��|j|d�j��|j|d�j��WdQRX|���}d|_d#}||�}|j�}|j||�|j�}|j||�|j |d��}|j||�WdQRXdS)$Nr�z-10r�7r�r_r�r�r`z1.2z0.01r�Tz1.01r�FZ20Z580r]r�rz2E+1z-1E+1z+Normalz-1z1.12345r�r�r�i'i�i�r�r�l�\�N�,03�Z��4�f�%3L�n�F6O���Y�A�y�(%�Y�|g@�%sf�ndH�)A-�M^|T�F�5�_"m%�&�B��T@f��D
j""J'�j2y6 !&�h�n!b'tXUE�:=�L�"#NX~�v/��$��q�E�l��l-S�^q�+WV1�P�c�$3OlI �=�1Nf�w
@�`�W�e�@
jWLbw*�5�m }M{�b!�Mk=��!�K>@�
�Vm��@�A�
#>�:%bv{ NH�6(E���	��<�@Fi	C
[V�(�o@�"J�lU hBg\�p�i�{�fA ^c6�/�-E3?#` d�>/Yn�=�a�
�.Z5�K�)�W�-06d.�qHN!a5;&�Y�Ut�/J~�O��#�u	e|�M�*s�A�M17st,�|?Y�4hw/�&�V�$bI�!8"/N?W~�FX]�d�%3@	Op<K~Q=4z��t�7z�dAN�C_4l�%�Woy�8��q�q�VD	-Q;5aOt�J�Qa�~8�j�KXKR�7�uq0
�r7C�>iHZ�pU|$",:5e�g!"J�M��y?R�vTm
��r6Psg�<I�EV1�?;h��
�O�=b�#1�q�&��B6&k:�R1�;�C�y�S�cz0�z;>5�r�gC�!�p�Q�q
G��"�1�cE�=dY�3�$�{�|�s�T`8�'D�8}
yJ�W�$��b�$�,�]zk�R<q��6�JV=�:�g*K�rH�|wu`�q["i!+gC�1-"��XH]l�1��Mt!sW�ZywiQ�MT	&�PQ�QN�!�(1qs�5QsNna@>V5�"�&�h0^��J�priZegI��
bY (wP|	�l?e�'/�2j�xCg�lI13&G�x�*�a+m�J�{�L:,�G1W��&i�OY>wf�T�H]k
�l�Sg`QWj�wxV�d_D#]�K�b��3�LX��#�+�I�'S�S�NO�H�*&�A�r�s�!2�d
^ol1>�+�4�V$�d4�o&�}8�K�D�6Y/�L.�i:qM�a�&�a20�,�oz$h}j{R�I�a�l�j9R=dkv�C��zg{PD�`b'ys�I�?��Jc[�C`vq{ ;@kF�Uh7	�)�vW5#E7{}�yX�'Dwq%�~�@�-�Y�h�I�7�U�pm�=�]�%jXH�VG.	vJMs{K�d�<�K�/��4i6_NVE��E�2�"t�3�'#@P�Im�H�J�U]M�h�`[�}I�K�T�z�|�A�U�B�%Ikb,{zr�5�5�g��1+Z�-�e�U�V$rZ%9�g�6[?f�2x[|�H�r�fQR$��E�{�yH�oP�:9:�/��#��[�9G kK
skZ2Dchr�pdVf*4?c��t�Tsh"?�9�Xx;�J�f��E�OeW�F�]!�$�3`7�X��{��<�Xl7z�?e%d��
/`P�y�/�zW'>/PE�O��dB8~ �R�E
�* t�
W
b<�D'�U�qr�>�$�V�e�174!�0�|H1�>�I5��p�]_(t�P_A�?[J\#$9�a1[��\.cAB+~o*8,�]�mX�
nb�YH)!rr�r�rr�r�r�rgr"rrB�powr�rCrGrrrr=rKrLrQr1rWrr>r?rFrErHr7r8r:)r{r�r�r�r�r�r%rrrr�s^			((""" 	
zCoverage.test_implicit_contextcCs�|jj}|jj}|jj}|jj}|��\}t|d�d�\}}|j||d��|j||d��t|d�d�\}}|j|j�o�|j��d|j	|<t|d�d�\}}|j|j�o|j��d|j	|<|j
�t|d�|d��\}}|j|j�oW|j��|j|j|�|j
�t|d�d	�\}}|j|j�o�|j��|j|j|�|j
�t|d
�d
�\}}|j|j�o|j��|j|j|�d|j	|<|j
�t|d�d
�\}}|j|j�ol|j��|j|j|o�|j|�WdQRXdS)NZ10912837129i�Z10901935Z194r�r`Frrrr�)
rr�r�rrrsr`r�rrBrr�r�r@)r{r�r�rrrsr�rerrrrrl�s@


!



zCoverage.test_divmodcCs�|jj}|jj}|jj}|jj}|���}d|_|j�|j|d�d|d��|j|j	|�d|_d|_
d
|_|j�d|j|<|j|d�|d�|d	��|j|j	|�WdQRXdS)Nr�z1.0r.z1.00r�Fi'z0.5rr�)
rr�r�rurvrr�r�rr�r�r�r)r{r�r�rurvr�rrrr�s 	
 			

&zCoverage.test_powerc
Cs�|jj}|jj}|jj}|��]}d|_d|_d|_d|j|<|d�j|d��}|j	|j
��WdQRXdS)Nr�Fr�Z1e1r�)rr�r�rrrr�r�rr$rrB)r{r�r�rrr�r�rrrrDs			
zCoverage.test_quantizecCsW|jj}|jj}|�}|j|d�j�d�|j|j�d�dS)Nr�r)rr�r)r�rN)r{r�r)r�rrr�
test_radix%s
	zCoverage.test_radixcCsF|jj}x3dD]+}|jt|d	�|�d
�t�qWdS)NrJrMrPrSr@rVrYr\r�r�)rJrMrPrSr@rVrYr\)rr�rrr�)r{r�rrrrrb-s
zCoverage.test_ropcCs|jj}|jj}|�}d|_|jt|d�j��d�|jt|d�j��d�|jt|d�jd��d�|jt|d	�jd
��d�|jt|d	�jd��d�|jt|d
�jd�|jt|d
�jdd�dS)Nr z9.99r_z9.99e-5r�z
1.23456789r�z1.23457z1.2345rz1.2345000000z0E+10z1.23r_r�i����)	rr�r)rr�r��	__round__r�r�)r{r�r)r�rrr�
test_round4s		""%%%zCoverage.test_roundcCs,|jj�}|jt|jdg�dS)NrT)rr r�r�r�)r{r�rrr�test_create_decimalEszCoverage.test_create_decimalc
Cst|jj}|jj}|��L}d|_|d�d	}|jt|�d�|j|j�d�WdQRXdS)
Ni'i�i�riSr�r�le�wfi�'_8�5�B�J�s�m�b��Z�p]	�A	D�7�l�&��JBI4\@N�"	-�*�<~��L��D}�{U�$(3�u�y�2	y�h~y�W���U_?�x�C�P�|�BQ�o�-��&�.�,� �U�&e=�\�'�>�~/bk1�qFs W�\�#�#PJ�y]LXj�9�U7
8�OGxl!�0R$'�s�)�UT�C&Q�^<Q�Z>�a�")��QQF�\�3�	}jRe�)�#Qy+�-�S�:r�Cb
,	����)>G*�P�;�b�5i*�x�Ii3~9oT}�nr#@G��q
�;so�C�	"�)=G���I�W�!N��l�d�P$�b�ywkjF>z�	�z�n;,l/`�C��1O	�!%W`\�T�"�iM
}_�u$,=p9,(�MXj�75�p�pN�w�W�0�
�rXK�M)7%r$xV>U�A�l(VG#bq*}�!�6kO��|�poJOJ|�!X�X"$Y^�n�6]/NxjV+�@�D{E�OTFV5�=�]Cb
�u�q�^h{<%V�3&875jdc�7�(
6
T]!J@�5wFfG��b�N2pa+�Z�lQjJa�~%g��D��2B�P�$�xf4�kk0�6� p6h:M�"�o�;�A7�C�ox_|#A
&�:u�0�6 J |��LRu�V�NZHqWhS63H��UKbv j�e�Q|J�~�2\,�[B
�
?<.V_�/�f�b�1�rsrv�F�L�'Q8�dqS�6h*`1c|*^ay�;�y�W��b"E�H3^GxN(
�o�eQI	G�=�gv�~4C$KE�2KJ2x3�#9�{zPOs+0xJ�n�	Z)HZ�#�T��7�
63��<TC�B��yx_�+�v/��>���Hy�2f^[tVC.�\��^-f~_	�G�T?6��V(�vfm�e�DNF/CW�<]TAw�!uY�L�uI
�iB�sU7X9Y,�R�R�_0nH��A�6H�6��U�_?�GmE�Mn.2\�o�TQq&�?�v^<�h�~*".e�A.�963�Nz!a�W�1�z��t�)�/C5j�M�m�W�\5:.�%L1N��fIROVd@�%�	fAOY�m
k�W�;@.0
/�Z�&Q�[GA\Iq/!b_,Q_J+�E�vVCN+"775B${mg%O���
�OLj�0�V�N�ce$�JC8D	U]�<&�f="$
t��)�n
EcR{5�s%vU{�-�T�]R�9�^ r�[/�'�b_s���xUpk�"�Nt01aG4"!� wN�-��a�mNj�b�n�ya�a;&�Y4i�e	Dl[��w(�_�Z_N{!I~
qp^-��v�I�`/�%$�]�X�a�l�q�W\\�'�Q^��Eg��t�t��M�$�^W�~�!�RfNPis}
�@S/'"@�dY�)�^"4�z�FEb�S�`lt`s1`��cCW'�.
�#i%$K=!d"4.� |$i>�T�%�bB�p%�.�ca0�`~#�j�0�%r�GI7�NBuDccU_�9�xK>T-;
��O�W�O9A��IlArW�B�@h;�myW�q!XlX]"��6��<�}A�j�9�#el%5�u�v�&@|tnNx�5�n7`�v�]�!�fbc3C��	�
��f�(�k|[v�'h:.k^n(	Xm�w"
>qB�4*L�le=P|�v�%cQ%H*xCX�q�[�l���S2
T�a?Y0Zy�j�JW-]O�
�@�T�'�F�m{?q`�6c{?�ZT�eZd�&1
H #w�	�d�Yb.��k�J5,��=�K��q<�j|�84^�HLXC5���'�Y}W�x��48m�t�T��&�>VI)f��Q�/9J%9]'�T5l�8!C�E�+%��z�W�(��Zq8uueQ2�!4!�F{D�l�YS�1�krAY?i#e �K�HxEo�[�=;F\E&	�,]V�|g\�'
-_H�y�Qc�Hv3�
�fA
�P�#�e^sAh�D� ��
�b�V;#w4aF
\01�s�"�|Q�aXyl/�ibc!KX^�H�7�nnzLOH��\�f#G�|M�w��8p-�2e� �-�Vgu>�7�>y�+�Q>N8QJ�
�6�6_�$VU�3c�n9RpPK��%��Hk5$g�&!>Wn=8.�(�\]L�+�k�$��P�.ic�n�.p��Z)<16�:b�BTx�P�E�NlaW�V3�6r}�Z��[>�M~�m�f�>�^rg�]�Y)alJwTN]s�q�$-�+�g�vt�r��,L�O&3�k%!�?nNH}�">)�X�|�["u�`Re*�
��]�d EY�\�\�U�3�	b�V�*�cfmY7�L�Q�3�UOL�U,@�^3 ZzrEb,z$�'6�Q�Y!cO[�yOgfE�i2B:3�Sf\P�E7'dj�o�J6`*�I=9r�"���t�&o1l+EK&k�4�P�r�T
[(g9�R�N$TWe�}��E��8uG�j�):�{�mt+R4h�M%jN:�
�rD�Pb<QWM��}"R;S�P�7�)�z���JY&B�jCS�\kR$"�
8Li�P��Kje9z�(�K���e6T�n�-PV�.<j�~f�H�n�7�	��?Uk�C�KGK.tFB@$�R�!k�$�`*@�LIRip�o�D�_-�D�[�0�8���;�<��n6�+�#V�I��)E&�r@Z��|�o/%,/M�Vm�l�N�9�A�d�s�;�_�JGr��T�4�<A"�~�|r�s�:Zk,c
>s0nh.8z�:�;K(�XDE>x�vV\�8[�$0O��)IE�X�H�}�Eoh�{F'1_�(�J-)rr�r�rr�r�r#)r{r�r�r�r�rrrr;Is	zCoverage.test_intcCs�|jj}|�}d|_d}|j|�}|j||�|j|�}|j||�|j|d�}|j||�dS)Ni'i�i�r�l�4Rm=�S2�Y
�<09@
�OmG+��K7x"
�d�TPm�[z�M��M�?�Ito$Gm}1�b�_c%q'j0C(W1�/(�nj!D�?f0"�?�"��XMB[m�r�k�f�+_�pLL�;�m��s{�|q*�w��7�fq(=5yF�E�H�J�_1�#'�Ths�K0
d�' �QSj|!_�% �[yG�4$�I=�VB�kId<Wz�r{YET:6L#-dq��@�*;�jM	TS�K�z,Z&M�?�7a�	]LT�3;Ha�9l�[oBpy�)2Op~7�6��u]\z�
C\�=B�2lK�X�/]E([[~z�{6�tc
�N$v%1+�U�Tm<<c�%d2O_/�P�'/(}~h�gW�/y�Y2i1J=�H�i�s��t�uW�
}�w0�#=
`&,(�^�_�K��p�9I\�Q�e�Ku([@D��[}r5�D@AU`�W�w�@
�t%�nJ:F5�'�rTQ-(�g��p<#��& ~VT��rP>zU�_�l�cJ6�{hY&I.K�
�w�:�Et�R3�!�)F�Y�KYK)�1RlPrx�m�sza�B�7�P�[�{�:Y�KZ(YD�%'#�N(�egY�JHG�U�jbz~�1�2�Bx008�
��wsUK�-u|G�rTG�E]Lbv�C�SR�: @�W�
�r<
tWn�(�v�/#�@0>W'~�_Ko?�3NY�s1��~Fo�o!�lN�U@l<8e�LP�n�Gq;k�	�4p+�=vgL6$N4f�IzmS�3�-�O�S	~u.|�wg_�M�D�~nM�MJI�d�r�D�h�{G E`@1��$�Qr.�*�-B"��EB	�-+|7)@�:�~�I�3b9�%;�'=CHr�$�y%[��,KX�=~d�!SC�%Vg
~L8��dV5GO�*N5Usd�WCdc�5�7X<C�`%m�7�L2&X�+��MB�y^2� aK�"�je[�9Z6�C�0S�\�V3 !�/}���k�]P<)�Pr�|q�
�)@0DF3�U�J�SN{�BB;�\tPcg%"Jh�7fAjd�Ndws�s1b�?�)5ErAr�B"�X�7+NS/W&,R���b�wy�\�c{+!~�8;Qs\hzsR�]�?�+YKvd&�w�K�,�'2�=�{x"���FfB7[F)Xo"�`+x�7�%E^O�M��/$z\5�+8�OaP�9��.��)�6�:>=wkZ�wJX'fF�5fn�P�u�@�/�}`�>xHR\U�o�	*>Z89��P.pDEm�S�Za�u)�#�c�GqK�F�_�^zOz#9yi�C�iA@bA�,�'�RKE{(�Cc�'�	��~�emx.q�sWV�E�J)<Wx�r�Z�5�7G�_�eP�B�I�:��l�/�n80u:(I�r�85sl�R�|�ta9#y�1G��L\vK;v�2�+&�.)n�{P@o3�?`cr�n�oIg�a�~�6QROF^�XbM��4_O�j�HE%.xZ�N9W�(�azu�?�
]�ld$��&�M��wFv�=H-�Ab=�B�U�#?Uj�N��CRK�'W|s!(}<+4Kj�rh@�FSD�cw&�ZJL"}�}�_�|\u�A�j	"`WD
p/�tu�U�a�+�'�`�rA"}a�V�'�p~$�=pc3�uW6bh]��tA}�Mx'Y��#s<��_�z8�Cgvi�ry,�g�f,��$�)Lu�l�m9!VHX:R�;�6;@Q1.q�=i:-*��g�E�P�"d8].�clQ�&�x�#U.�CB�d�fkO@j�2Wlt���4Rm=�S2�Y
�<09@
�OmG+��K7x"
�d�TPm�[z�M��M�?�Ito$Gm}1�b�_c%q'j0C(W1�/(�nj!D�?f0"�?�"��XMB[m�r�k�f�+_�pLL�;�m��s{�|q*�w��7�fq(=5yF�E�H�J�_1�#'�Ths�K0
d�' �QSj|!_�% �[yG�4$�I=�VB�kId<Wz�r{YET:6L#-dq��@�*;�jM	TS�K�z,Z&M�?�7a�	]LT�3;Ha�9l�[oBpy�)2Op~7�6��u]\z�
C\�=B�2lK�X�/]E([[~z�{6�tc
�N$v%1+�U�Tm<<c�%d2O_/�P�'/(}~h�gW�/y�Y2i1J=�H�i�s��t�uW�
}�w0�#=
`&,(�^�_�K��p�9I\�Q�e�Ku([@D��[}r5�D@AU`�W�w�@
�t%�nJ:F5�'�rTQ-(�g��p<#��& ~VT��rP>zU�_�l�cJ6�{hY&I.K�
�w�:�Et�R3�!�)F�Y�KYK)�1RlPrx�m�sza�B�7�P�[�{�:Y�KZ(YD�%'#�N(�egY�JHG�U�jbz~�1�2�Bx008�
��wsUK�-u|G�rTG�E]Lbv�C�SR�: @�W�
�r<
tWn�(�v�/#�@0>W'~�_Ko?�3NY�s1��~Fo�o!�lN�U@l<8e�LP�n�Gq;k�	�4p+�=vgL6$N4f�IzmS�3�-�O�S	~u.|�wg_�M�D�~nM�MJI�d�r�D�h�{G E`@1��$�Qr.�*�-B"��EB	�-+|7)@�:�~�I�3b9�%;�'=CHr�$�y%[��,KX�=~d�!SC�%Vg
~L8��dV5GO�*N5Usd�WCdc�5�7X<C�`%m�7�L2&X�+��MB�y^2� aK�"�je[�9Z6�C�0S�\�V3 !�/}���k�]P<)�Pr�|q�
�)@0DF3�U�J�SN{�BB;�\tPcg%"Jh�7fAjd�Ndws�s1b�?�)5ErAr�B"�X�7+NS/W&,R���b�wy�\�c{+!~�8;Qs\hzsR�]�?�+YKvd&�w�K�,�'2�=�{x"���FfB7[F)Xo"�`+x�7�%E^O�M��/$z\5�+8�OaP�9��.��)�6�:>=wkZ�wJX'fF�5fn�P�u�@�/�}`�>xHR\U�o�	*>Z89��P.pDEm�S�Za�u)�#�c�GqK�F�_�^zOz#9yi�C�iA@bA�,�'�RKE{(�Cc�'�	��~�emx.q�sWV�E�J)<Wx�r�Z�5�7G�_�eP�B�I�:��l�/�n80u:(I�r�85sl�R�|�ta9#y�1G��L\vK;v�2�+&�.)n�{P@o3�?`cr�n�oIg�a�~�6QROF^�XbM��4_O�j�HE%.xZ�N9W�(�azu�?�
]�ld$��&�M��wFv�=H-�Ab=�B�U�#?Uj�N��CRK�'W|s!(}<+4Kj�rh@�FSD�cw&�ZJL"}�}�_�|\u�A�j	"`WD
p/�tu�U�a�+�'�`�rA"}a�V�'�p~$�=pc3�uW6bh]��tA}�Mx'Y��#s<��_�z8�Cgvi�ry,�g�f,��$�)Lu�l�m9!VHX:R�;�6;@Q1.q�=i:-*��g�E�P�"d8].�clQ�&�x�#U.�CB�d�fkO@j�2W)rr rr7r�r8r:)r{r r�r�r�rrrr_Ss		zCoverage.test_copyN)r�r�r�r�r�r�rrlr�rDr�rbr�r�r;r_rrrrr�bsQ)

r�c@seZdZeZdS)�	CCoverageN)r�r�r�r`rrrrrr�csr�c@seZdZeZdS)�
PyCoverageN)r�r�r�r�rrrrrr�esr�c@s"eZdZdZdd�ZdS)�PyFunctionalityz!Extra functionality in decimal.pycCsstj}tj}ddddddddddg
}x6|D].\}}}|jt||�|�|�q=WdS)N�.0e�1.0�1e+0�#.0e�1.e+0�.0fr��#.0f�1.r��1.1�#g�.0g�#.0g�.0%�100%�#.0%�100.%)r�rr)rrr)rrr�)rrr)r�rr)rrr)r	r�r�)r
r�r)rrr)r
rr)r�r�r�r�r=)r{r�r�r1r?rr�rrr�test_py_alternate_formattingks			z,PyFunctionality.test_py_alternate_formattingN)r�r�r�r�rrrrrr�hsr�c@sReZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�
PyWhiteboxz White box testing for decimal.pycCs6tj}tj}|��}d|_|d�|d�}|j||d��|d�|d�}|j||d��|d�|d�}|d	�|d
�}|j||d��|d�|d
�}|d�|d
�}d|_|d�|d�}d|_|d�|d�}WdQRXdS)Nr�r�r�z-0.5z
0.00390625z-0.6z0.0012885819Z256e7l�o�
�z-0.0625z0.2Z152587890625e7r�ic
r�Z152587890625��iBiil���(�	�ng}p&��V�&2#x�e�&�[�G�}��I�Id�G~P�+|6{�E�Lx"�Z�{9f08g*x|-�N�6zM�h� X)]�|�C|�}�ii5�LL�3�`�|w;,�?34L�7T)qX`�sO~�$��"�s*&�M>e�2�b
N&HR@I9ls5%fZ�s�K�V)=�1N\c3x��B$;Q�0�[NW�~!eXT�A�+
#�s�}�6CI�W43|[^]3MD��ttp�Vs�J^8�U~;gA@Yo��d	�	�6LT[S�=^V�9�C��9s8 $	g��Q"Ej�("9��g:_;j$�,�0J=!pn@o�J.N	b�8�x�lVL�	� bB�\Z�{8	T(�Y�Wo36�.m��4R-o�K�J�-&="�ZF�x%{�bd1(�[G=q9'u�V$�~�THl�-n0y,1x��qXMWRZ�q��~�.%2|�sIy�
�"WCo:��d�@�o�F� }T;�^�qz"3��a3'�|�M^,l�.%�$l=�u��zh".-��*M=�7F&�gw!q~F�'12�JHbY/�b�E
��	�V�XRDX%<b5w*3k-#�9'�ov�O�|^bd�r$:z#�-��RwL�$�5m�[*8:�>Dq0z�+�[o��C9G�8�@"j^
�A�%�D%(�FM>z
o]#xUNF�iw^2p�y�$� �
7cc� �`�
C){�R�O�<u%V�`�6\��&�}S�.�?ym\�EYs�0�3�	9�MN|
t�r*JvnK
%>)[5�T$4c/I}<CT*A�7$v^?Z�5l')r�r�r�rr�)r{r�r�r�r�rrr�test_py_exact_power�s"					zPyWhitebox.test_py_exact_powercs�tj}tj}tj}|j�}tdd�ttD��|_||�|d��|d��|d��|d��d�����fdd�}|���j�j	�j	��j�j
�j
��j�j�j�|d�|d	d
�|dd
�|dd
�|d
d
�|dd
�|dd
�|dd
�|dd
�|d�|dd
�|d�|d�|d�|dd
�|dd
�|d�|d�|d�|dd
�|dd
�|dd
�|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�dS)4Ncss|]}|dfVqdS)rNr)rrrrrr�sz=PyWhitebox.test_py_immutability_operations.<locals>.<genexpr>z-25e55z33e+33Fcs�|r�td|d��j�j�j��j�j�j��j�j�j��j�j�j��j�j�j��j�j�j�nTtd|d��j�j�j��j�j�j��j�j�j�dS)Nzd1.z(d2)z())r�r��_sign�_int�_exp)Z	operationZuseOther)�b1�b2rXrYr{rr�checkSameDec�sz@PyWhitebox.test_py_immutability_operations.<locals>.checkSameDec�__abs__rITr?rErFrCrArDrB�	__float__rXr��__int__�	__trunc__rUrO�__neg__�__bool__�__pos__r[rJr@r�rYrVrPr\rM�__str__rLrRrMrr{r�r�rQr$rRrSrTrUr#)r�r�r�r%r5r"r�rr�rrr)r{r�r�r%r�rr)rrrXrYr{r�test_py_immutability_operations�st			 
!










































z*PyWhitebox.test_py_immutability_operationscCsWtj}|d�}||�}|jt|�d�|jt|�t|��dS)Nr�r�)r�r�r�r�r�r�)r{r�rr�rrr�test_py_decimal_id�s
	zPyWhitebox.test_py_decimal_idc
CsTtj}tj}|��2}|d�jdt�}|j|j��WdQRXdS)Nr�r�)r�r�r�Z_rescalernrrB)r{r�r�r�r�rrr�test_py_rescale�s
		zPyWhitebox.test_py_rescalecCs,tj}|jt|d�jdt�dS)Nz3.1234r)r�r�r�r�Z_roundrn)r{r�rrr�test_py__round�s	zPyWhitebox.test_py__roundN)	r�r�r�r�rr!r"r#r$rrrrr�sO	rc@sLeZdZdZedd��Zedd��Zedd��ZdS)	�CFunctionalityzExtra functionality in _decimalcCsctj}tj}tj}tj}dd�}||�}|j|jd�|j|jd�|j|jd�|||�||�}|j|jd�|j|jd�|j|jd�|||�||�}|j|jd	�|j|jd
�|j|jd�|||�|j	t
|d�|j	t|d�|j	t|d�dS)NcSs=|j|jd�t||dg�t||dg�dS)Nr�rr�)r�r,r)r{rrrr�assert_restsz7CFunctionality.test_c_ieee_context.<locals>.assert_restr`�`�_r�i�i�"ii�r�r!r�ii����i����i�lr�)r`�IEEEContext�	DECIMAL32�	DECIMAL64�
DECIMAL128r�rr�r�r�r�r�)r{r*r+r,r-r&r�rrr�test_c_ieee_contexts.				


z"CFunctionality.test_c_ieee_contextcCsTtj}|dtjdtj�}|j|jtj�|j|jtj�dS)Nr�r)r`r r)�
DecRoundedr��_flags�_traps)r{r r�rrr�test_c_context+s	zCFunctionality.test_c_contextcCsbtjtjtjtjtjtjtjtjtj	tj
tjtjtj
tjtjf}|jtjd�|jtjd�|jtjd�|jtjd�x.t|�D] \}}|j|d|>�q�W|jtjtjtjBtjBtjBtjBtj	Btj
B�|jtjtjtjB�|jtjtjtjBtjB�dS)Nr�r��ir�)r`r)�DecConversionSyntax�DecDivisionByZero�DecDivisionImpossible�DecDivisionUndefined�DecFpuError�
DecInexact�DecInvalidContext�DecInvalidOperation�DecMallocErrorZDecFloatOperation�DecOverflowr/�DecSubnormal�DecUnderflowr�r+r,r-ZIEEE_CONTEXT_MAX_BITSr��DecIEEEInvalidOperationZ	DecErrorsZDecTraps)r{�condr�r�rrr�test_constants3s()zCFunctionality.test_constantsN)r�r�r�r��requires_extra_functionalityr.r2rBrrrrr%s$r%c@s*eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	e
dd��Zdd�Ze
dd��Z
dd�Zdd�Zdd�Zdd�Zdd�Ze
dd��Ze
d d!��Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,S)-�	CWhiteboxzWhitebox testing for _decimalcCs�tj}tj}d}d	}|��{}d|_xhtd�D]Z}tj||�}tjdd�}||}	||�||�}
|j|	|
�q@WWdQRXdS)
Nr�#�$i@Br�i�i�l�?<\"X�X\�	l@|\[q y�sK`)r`r�r�rr�r�rYr�)r{r�r�rrr�r�rr�r�r�rrr�test_bignum\s			
zCWhitebox.test_bignumcCs|jttjdd�dS)Nrr�)r�r�r`r�)r{rrr�test_invalid_constructionmsz#CWhitebox.test_invalid_constructioncCsRtj}tj}tj}tj}||���|j||d�WdQRXdS)NZ1e9999999999999999999)r`r�rrr r�r�)r{r�rrr r�rrr�test_c_input_restrictionps				z"CWhitebox.test_c_input_restrictioncCs�tj}tj}|j�}d|_d|_d|_t|_d|_	d|_
x,ttD] }d|j|<d|j
|<q_Wd|j|<d|j
|<|j�}d}|j||�dS)Ni@�Trr�TaQContext(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])i���)r`r�rQr5rr�r�rlrrr,r�r�rr�r�)r{r�rQr�r�rr�rrr�test_c_context_repr{s"								


zCWhitebox.test_c_context_reprc	Csutj}tj}tj}tj}tj}tj}tj}tjdk}|�}	|j	t
|	jjdd�|j	t
|	j
jdd�|j	t|	jj|�|j	t|	j
j|�|j	tt|	ddg�|j	tt|	ddg�|j	t
t|	dddi�|j	t
t|	dddi�|	jj�}
|
|=d	|
d
<|j	t
t|	d|
�|j	t
t|	d|
�|r�d!nd#}|r�d$nd%}x-ddgD]}
|j	tt|	|
|�q�W|j	tt|	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�x�d&D]�}
|j	tt|	|
|d�|j	tt|	|
|d�tjdkr�|j	tt|	|
|�|j	tt|	|
|d�q�Wtjdkr�|j	tt|	d�|d�|j	tt|	d�|d�|j	tt|	d�|d�tjdkrv|j	tt|	d�d�|j	tt|	d�d�|j	tt|	d�d'�|j	tt|	d�d�|j	tt|	d�d(�|j	tt|	d�d�x�ddgD]�}
|j	tt|	|
d)�|j	tt|	|
d�|j	tt|	|
dddg�|r�|j	tt|	|
d*�|j	tt|	|
d,�q�W|j	ttdt��|j	ttdt��|�}|j	t|d�||�dS)-Ni@�Ti!rr�r�rr�r�i�pr�r�r!r"rr�rrr�r�r,r�win32r~rr�i���?r�r�zwith localcontext("xyz"): passz-with localcontext(context=getcontext()): passr�ll����li���l�N�Zoiʚ;)rr�r�rr,r�i9�r�lll)r`r rrrurQr�r)r%r�r�r�r��__setitem__rr��__delitem__r�rar5r�r3�platformr�execr7)r{r rrrurQr�r)r%�HAVE_CONFIG_64r�r�int_maxZgt_max_emaxrZ
saved_contextrrr�test_c_context_errors�s�								

""

	zCWhitebox.test_c_context_errorscCs�|jtjtj�|jtjtj�|jtjtj�|jtjtj�|jtjtj�|jtjtj�|jtj	tj	�|jtj
tj
�dS)N)rr`rnr�rjrirkrmrlr!ro)r{rrr�test_rounding_strings_interned�sz(CWhitebox.test_rounding_strings_internedcCsLtj}tj}tj}tj}tj}tj}tjdk}|�}|rZdnd}	|jt	t
|d|	d�|jt	t
|d|	d�tjdkr�|jt
t
|d|	�|jt
t
|d|	d�x�dD]�}
|jt	t
||
|	d�|jt	t
||
|	d�tjdkr�|jtt
||
|	�|jtt
||
|	d�q�W|jt
t
|dd�|jt
t
|dd�|jtt
|dddd
g�|r�|jt
t
|dd�|jt
t
|dd�xFdd	gD]8}
|jtt
||
d�|jtt
||
d
�qWdS)Ni@�Tr�r!r�r"�_allcrrKr0r1r�r�i?Br�ll����li���)r0r1r�lll)r`r rrrur�r)r%r�r�r�rar3rNr�r�)r{r rrrur�r)r%rPr�rQrrrr�test_c_context_errors_extras:							
""z%CWhitebox.test_c_context_errors_extracCs�tj}tj}tj}tj}tj}tj}|j�}d|_t	|_
d|_d	|_d|_
d|_|j|jd�|j|j
t	�|j|jd
�|j|jd�|j|j
d�|j|jd�|j|j�d�|j|j�d�tjdkr�|jd�|jd�|jd�|j|jd�|j|jd�|j|jd
�dS)Nr)i�r�ri�i�i@�Ti�ɚ;iH�iH�i'�i6e�i6e�)r`r�rqrxrtrvrwr5rrmrr�r�rr,r�ZEtinyZEtopr�r~rr�)r{r�rqrxrtrvrwr�rrr�test_c_valid_context3s8												


zCWhitebox.test_c_valid_contextcCsHtj}|j�}|j|jd�d|_|j|jd�dS)Nr�r)r`r�r5r�rT)r{r�r�rrr�test_c_valid_context_extraYs
		z$CWhitebox.test_c_valid_context_extrac
Cs:tj}tj}tj}tj}tj}tjdkrBd
nd}|���}d|j|<|j||d�j	|d�|j||d�j	|�|j||d�j	t
|d��|jtj|d�j	t
|d��|jt|d�j	|d�|jt|d�j	|d�WdQRXdS)
Ni@�Tr�r!r�r"Tz1.23r�ll����li���)r`r�rrr�r}r�r�rr�r�r�r�)r{r�rrr�r}r�rQr�rrr�test_c_roundbs(					
zCWhitebox.test_c_roundcCs�tj}tjdk}|jt|d�jdgd�|jt|d�jdd�|jt|d�jg�|jt|d�jd�|r�dnd}|jt|d	�jd
|�dS)Ni@�Tr�z=10.10rz<>=10.10r�r!r"z
1.23456789z=%d.1ll����li���)r`r�r�r�r�r>r�)r{r�rP�maxsizerrr�
test_c_formatzs	"zCWhitebox.test_c_formatcCs�tj}tj}tj}|d�}|j|j�d�|jt|jd�|jt|jdd�|jt|jd�|j|j�d�|jt|jd�|jt|jdd�|jt|jd�|j|j	�d�|jt|j	d�|jt|j	dd�|jt|j	d�|���}|d�jt
�}|j||d��|d�j	t
�}|j||d��d|j|<|j||d�j	t
�WdQRXdS)Nrr_r�z99999999999999999999999999.9Z100000000000000000000000000Tz999.9)r`r�rtr�r�r#r�r�rVrWrnr)r{r�rtr�r�r�rrr�test_c_integral�s.			
zCWhitebox.test_c_integralcCstj}tj}tj}tj}tj}|j|d�j�d�|jt	t
|d�dd�|jt	|d�jdd�|jt	|d�jd	dd�|jt	|d
�j
|d�g�|jt	|d
�j
|d�|��|jt	|d
�j
|d�d�|jt	|d
�j
|d�td
�|���}|j�|jt	|j|d�dd�|jt	|jd�|jt	|jd�|jt	|jdddd�|jt	|jdd	dd�|jt|j|d���d�|j|j�d�d|j|<|j||d�jd�|j||jdd�|j|j|�|j�d|j|<|j||d�jd�|j||jdd�|j|j|�d|j|<d|_|j|t
|d
�dd�WdQRXdS)Nz9.99e10z99.9E+9r�r�r�rr�r�r�z
1.23456789z	1e-100000ri�rr�Z200Tri�)r`r�rrrsr)r�r�rUr�r�r�r1rSr$rnr�r:rOr>r`r�rNrr?rr�r�r)r{r�rrrsr)r�r�rrr�test_c_funcs�sT					"
"%



	zCWhitebox.test_c_funcsc
Cstj}tj}|d�}xsdddddddd	d
ddd
dg
D]D}t||�}|jt|dd�|jt|ddd�qLWxpddddddddddddgD]D}t||�}|jt|dd�|jt|ddd�q�W|jt|jdddg�|jt|jdidg�|jt|jgg�|jt|jdddg�|jt|jdidg�|jt|jgg�|jt|jdddg�|jt|jdidg�|jt|jgg�|jt|j	dddd�|jt|j	ddddd�|jt|j
dgdd�|jt|j
dgdd�|jt|j
dgg�|�}|jt|jddd d�|jt|jddd d�|jt|jddd d�dS)!NZ10001111111r�rCrGrrrr=rKrLrQr1rTrUrr�r{r2r.rOr�rIr�rJrRrr r!rr�r��mod)r`r�r rr�r�r#rVrWr"r$r�)r{r�r r�r�funcr�rrr�test_va_args_exceptions�sB		"	z!CWhitebox.test_va_args_exceptionscCs`|jtjjtjtjBtjBtjBtjB�|jtj	jtjtjBtjB�dS)N)
r�r`r�r1r@r5r=r?r)r�)r{rrr�test_c_context_templatess	&	z"CWhitebox.test_c_context_templatesc%s�tj}tj}tj}tj}tj}tj}tj}tj}tj	}	tj
}
tj}tj}tj
}
�fdd�}|j�}�j||jk�|j�x$|jj�D]}d|j|<q�Wx$|jj�D]}�j|�q�W|j�x*|jj�D]\}}�j|�qW�j|jj|���j|jjd�d��j|jjdd�d��jt|jjddd��jt|j�t|j��tj|j�}tj|j�}|jj�}|j �||_!�j|j|
�|j�||_"�j|j|�|j �|jj�}d||<||_|||j�|j�|jj�}d||<||_|||j�|
tj|tj#|	tj$|tj%|tj&|tj'|tj(|tj
i}tj)tj*tj+tj,tjtj-tj.g}tt/t�}x�t0|�D]�}x�t0|�D]�}x�t1D]�}t2j3t/t|�}t2j3t/t|�}t2j4dd�}t2j4dd	�}t2j4d	d�}t2j4d	d
�}t2j4d	d
�} t2j4d	d
�}!|d|d|d
|d|d| d|dt5|�dt5|��}�j|j6|��j|j7|��j|j8|��j|j9|��j|j:| ��j|j;|�d	}"x|D]}#|"||#O}"q�W�j|j!|"�d	}"x|D]}#|"||#O}"qW�j|j"|"�q�WqtWqaWx;|D]3}$|$|_!�j|j!|
@�|||j�qYWx;|D]3}$|$|_"�j|j"|
@�|||j�q�WdS)NcsFx?|D]7}||kr-�j||�q�j||�qWdS)N)rr|)r�Zsignal_dictr�)r{rr�assertIsExclusivelySet.s
z<CWhitebox.test_c_signal_dict.<locals>.assertIsExclusivelySetTr�r�r%r�i'rr�rrr�r�rr,r�ri���)<r`r r�rrrsrurwrxrvrtrqr)r;r@r5rrr�r^�valuesr0r|r�r�rr�r�r�r�r3�	getsizeofr�r�r0r1r/r9r>r?r=r5r6r7r8r:r<r4r�r�rXr�ZsamplerYr�rrr�r�rr,)%r{r r�rrrsrurwrxrvrtrqr)r;r@rar�r�r�rrZ
IntSignalsZIntCondZlimrr�r�r�rrr�r�r,r\Zcrr�r�rAr)r{r�test_c_signal_dicts�													

"
	
	

	

								



	
	zCWhitebox.test_c_signal_dictcs3tj�yddlm}Wntk
r>|jd�YnXdd�}dd�fdd�}d	d
d|dddg�d
d
i}d	dd|dddg�d
d
i}d	dd|dddg�d
di}|dkr�|jt|d|d�|jt|d|d�|jt|d|d�dS)Nr)rAzlocale.CHAR_MAX not availablecSsdjdd�|D��S)Nr�cSsg|]}t|��qSr)rB)rr�rrrr��s	zJCWhitebox.test_invalid_override.<locals>.make_grouping.<locals>.<listcomp>)rC)rDrrrrE�sz6CWhitebox.test_invalid_override.<locals>.make_groupingr�cs�|�j||�S)N)r>)r�rFr?)r�rrrG�sz0CWhitebox.test_invalid_override.<locals>.get_fmtrHrrJ�rKZxxxxxr�rIZyyyyy�i90r�)r`r�rMrArNrOr�r�)r{rArErGZinvalid_groupingZinvalid_dotZinvalid_sepr)r�r�test_invalid_override�s*	

zCWhitebox.test_invalid_overridecCs�tj}tj}tj}|���}d|j|<dtj}|j|||�dtjd}|j|||�dtj}|j|||�dtjd}|j|||�WdQRXdS)NTz0e%dr�z1e%d)r`r�r�rrrr3rYr�)r{r�r�rrr�r�rrr�test_exact_conversion�s			


zCWhitebox.test_exact_conversioncCsatj}tj}tj}tj}tj}|��$}d|j|<d|j|<d|j|<dftjf}|j	t
|j|��d�|j|||�dd
tjf}|j||j|�|j|||�dftjdf}|j	t
|j|��d�|j|||�ddtjdf}|j||j|�|j|||�dftjdf}|jt
|j|�|jt
||�dftjdf}|jt
|j|�|jt
||�dfdf}|j	t
||��d�d
}|j	t
||��d�d}|j	t
||��d	�WdQRXdS)NTr�z
-0E+999999rr�z-0E-1000026rz-sNaNz-sNaN1)rr�r�)rr�r��r)r�rir�rr�)r�rjr)r`r�r�rrrurxrr3rYr�r�r�r�r�)r{r�r�rrrurxr�r�rrr�test_from_tuple�sB					


zCWhitebox.test_from_tuplecCs�tj}tjdk}|j|d�j�d�|ru|d�j�}|d
�j�}|j||d�n8|d�j�}|d�j�}|j||d	�dS)Ni@�Trr�r�r�r�rr�i�le@8Wf�mt	~ge�
Xzx[I<mMM�iK1'[
�2�S	V� �9�,m��br�@4�,�A�}p�3~N�
7?.d�`�Gq��R�%�=�T�OB]6�S�o�b��'*n�G!V�O!�U+OHR�q}N^oi�ljt�s!�[y=�F�U,`�D	�q�l�N;(|�	�m�$�=_/joC�vn�y��e�:�fo�Iy�f�&�}`lNzs`�t�#e�p�[�|Z< �fu}�s`�xy!*S$+�w
Y�lYy�n|2�k�"G�E��l0@(� +'�'�Q6n7.}%�
6B�p�\�U�X�%�F�m�m*�d�k�QR�E�>�B�8�1�t4��l2�~�|\�q']�E��D�W'-W)e�'2f�&�n
�3�XovMb7O�9O1u!U�&�l�v�/�~�s�)r`r�r�r��
__sizeof__r�)r{r�rPr�r�rrr�test_sizeofs	zCWhitebox.test_sizeofcs�tj}Gdd�dt�}Gdd�dt�}Gdd�dt��G�fdd�dt�}x?|||fD].}|j|j|d	��|jd	��qwWdS)
Nc@s(eZdZdd�Zdd�ZdS)z<CWhitebox.test_internal_use_of_overridden_methods.<locals>.XcSsdS)Nr�r)r{rrr�as_integer_ratioszMCWhitebox.test_internal_use_of_overridden_methods.<locals>.X.as_integer_ratiocSs|S)Nr)r{rrrr szDCWhitebox.test_internal_use_of_overridden_methods.<locals>.X.__abs__N)r�r�r�rqrrrrr�Xsrrc@seZdZdd�ZdS)z<CWhitebox.test_internal_use_of_overridden_methods.<locals>.YcSsdgdS)Nr�rr)r{rrrr$szDCWhitebox.test_internal_use_of_overridden_methods.<locals>.Y.__abs__N)r�r�r�rrrrr�Y#srsc@seZdZdd�ZdS)z<CWhitebox.test_internal_use_of_overridden_methods.<locals>.IcSsdgdS)Nr�rr)r{rrr�
bit_length(szGCWhitebox.test_internal_use_of_overridden_methods.<locals>.I.bit_lengthN)r�r�r�rtrrrr�I'srucs.eZdZ�fdd�Zdd�ZdS)z<CWhitebox.test_internal_use_of_overridden_methods.<locals>.Zcs�d��d�fS)Nr�r)r{)rurrrq,szMCWhitebox.test_internal_use_of_overridden_methods.<locals>.Z.as_integer_ratiocSs|S)Nr)r{rrrr.szDCWhitebox.test_internal_use_of_overridden_methods.<locals>.Z.__abs__N)r�r�r�rqrr)rurr�Z+srvgfffffFY@)r`r�rr�r�r@)r{r�rrrsrvrr)rur�'test_internal_use_of_overridden_methodss	z1CWhitebox.test_internal_use_of_overridden_methodsN)r�r�r�r�rGrHrIrJrRrSrCrUrVrWrXrZr[r\r_r`rdrgrhrkrprwrrrrrDYs,e+&	;,�%0rDztest requires C versionc@s.eZdZdZdd�Zdd�ZdS)�
SignatureTestzFunction signaturesc
Cs9x2tt�D]$}|jd�r%q
tt|�}tt|�}|dksj|dksjtj|�r
tj|�}tj|�}t|j	j
��}dd�|j	j
�D�}|j||dd|�dd�|j	j�D�}d	d�|j	j
�D�}	|d
kr
|j||	dd|�q
WdS)Nr=r�r cSs%g|]}|jd�s|�qS)r=)r�)rr�rrrr�Gs	z5SignatureTest.test_inspect_module.<locals>.<listcomp>�msgzparameter name mismatch in %scSsg|]}|j�qSr)�kind)rr�rrrr�Ms	cSs0g|]&}|djd�s|dj�qS)rr=r�)r�rz)rr�rrrr�Ns	r%zparameter kind mismatch in %s)r�r�r�rr`�inspect�
isfunction�	signaturer��
parametersr^r�rbr0)
r{r�p_func�c_func�p_sig�c_sig�c_names�p_names�c_kind�p_kindrrr�test_inspect_module:s$z!SignatureTest.test_inspect_modulecs�tjj�tjj�tdtjd�dtjd�dtjd�dtjd�dtjd�dtjd�dtjd�d	tjd�d
tjd�dtjd�dd
dddtjdtj�itdtjd�dtjd�dtjd�dtjd�d	tjd�d
tjd�dtjd�dd
dddtjdtj�ii����fdd��dd�������fdd�}|d�|d�dS)Nr>r�rKr�r�r%rr�r�r�r�Znumr�r�g�?rrcs�g}i}x�|jj�D]r\}}|dkr7q|j�kr^|j�||�q|j�kr��||||<qtd��qW||fS)Nr{zunexpected parameter kind)r~r0rzr�r	)�moduler�r��kwargs�nameZparam)�POS�POS_KWD�pdictrr�mkargsvsz0SignatureTest.test_inspect_types.<locals>.mkargscSs4|dkrdS|dkr dS|dkr0dS|S)zwThe C Context docstrings use 'x' in order to prevent confusion
               with the article 'a' in the descriptions.r�rr�r�r%r�r)rrrr�tr�sz,SignatureTest.test_inspect_types.<locals>.trc s�tt|�}tt|�}xqt|�D]c}|jd�rCq+t||�}t||�}tj|�r+tj|�}tj|�}t|j	j
��}�fdd�|j	j
�D�}	�j|	|dd|�dd�|j	j�D�}
dd�|j	j�D�}�j
|
d���j
|d��|d	kr|�j|d
d�|
d
d�dd|�n&�jt|�t|
�dd|��t|�\}}
y t|d�|�||
�Wn>tk
r}ztd
|||
f��WYdd}~XnX�t|�\}}
y t|d�|�||
�Wq+tk
r�}ztd
|||
f��WYdd}~Xq+Xq+WdS)Nr=csg|]}�|��qSrr)rr�)r�rrr��s	zBSignatureTest.test_inspect_types.<locals>.doit.<locals>.<listcomp>ryzparameter name mismatch in %scSsg|]}|j�qSr)rz)rr�rrrr��s	cSsg|]}|j�qSr)rz)rr�rrrr��s	rr�r�zparameter kind mismatch in %srzinvalid signature for %s: %s %s)rr�r`r�r�r{r|r}r�r~r^r�rbrr�r�r	)ZtyZp_typeZc_typerrr�r�r�r�r�r�r�r��kwds�err)r�r�r�r{r�rrr��sB"# , z.SignatureTest.test_inspect_types.<locals>.doitr�r )	r{Z_ParameterKindZPOSITIONAL_ONLYZPOSITIONAL_OR_KEYWORDr`r�rmr)r�)r{r�r)r�r�r�r�r{r�r�test_inspect_typesVs@		
/
z SignatureTest.test_inspect_typesN)r�r�r�r�r�r�rrrrrx5srxr�r�cCs�tt�tt�|dk	r&|n	td�a|a|dkrMt}nttg}x�t	j
t�D]�}d|ksi|jd�r�qi|j
d�\}}|dk	r�||kr�qi|dd�}ttd||�ttd||�~~~~qiWz�t|�|dkr�dd	lm}	tjd}
tr`ttjd<tt|d
|	�ttjd<tt|�|
tjd<Wdtr�tjtt�tjtt�ts�tjdt�ttjdk	r�td��XdS)
z� Execute the tests.

    Runs all arithmetic tests if arith is True or if the "decimal" resource
    is enabled in regrtest.py
    Nrz.decTestrIcSs|jt|�S)N)r��	directory)r{r�rrrr��sztest_main.<locals>.<lambda>Ztest_r)�IGNORE_EXCEPTION_DETAILZoptionflagsz*C tests skipped: no module named _decimal.zGInternal error: unbalanced number of changes to sys.modules['decimal'].)r'r`r�rr�r��	all_testsr�r��os�listdirr�r�r�rarZdoctestr�r3r4rr%�ORIGINAL_CONTEXT�warnings�warn�UserWarning�orig_sys_decimalr	)�arith�verbose�
todo_tests�debugZtest_classes�filename�head�tailZtesterr�r8rrr�	test_main�sH

	




	r�z:test_decimal.py [--debug] [{--skip | test1 [test2 [...]]}]z--debugz-d�action�
store_true�helpz2shows the test number and context before each testz--skipz-sz%skip over 90% of the arithmetic testsr�r�r�r�)�r�r�r�r3rjr�r1r5r�r.rMZtest.supportrrrrrrrr	r
rr�Ztimer{r�rNr`r�r4r�Z
cfractionsZ
pfractionsr
�tupler)r�r^r$rqrvrtrwrxrursrrrQr�rrnrjrirkrmrlr!rorXr�r'ZTESTDATADIRr��argvr��__file__�path�dirname�curdirZtestdir�sepr��isdirr�r��hasattrZEXTRA_FUNCTIONALITYZ
skipUnlessrCZskipIfZskip_if_extra_functionalityZTestCaser*r�r�r�r4r5r6rcrdrerUrVrWrurvr�r�r�r�r�r�r*r+r,rUrVrWr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr%rDrxr��insertr�ZoptparseZOptionParserrdZ
add_option�
parse_argsZoptr��skipr�rrrr�<module>sN((




'!E!										�d�LM�
�(',)����W���~�P>m��U����7	%