Your IP : 216.73.216.213


Current Path : /opt/alt/python34/lib64/python3.4/test/__pycache__/
Upload File :
Current File : //opt/alt/python34/lib64/python3.4/test/__pycache__/test_decimal.cpython-34.pyc

�
f f��*@sB
dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZm
Z
mZmZddlmZmZmZmZmZddlZddlZddlZyddlZWnek
rdZYnXedddg�Zedddg�ZejdZed	dd	g�Zeejd<ed	dd	g�Zeejd<iee6ee6Zeejd<ier�e ej!�j"j#��nde6e ej!�j"j#��e6Z$ierBej%ej&ej'ej(ej)ej*ej+ej,ej-g	nde6ej%ej&ej'ej(ej)ej*ej+ej,ej-g	e6Z.d
d�Z/ej0Z0ej1Z1ej2Z2ej3Z3ej4Z4ej5Z5ej6Z6ej7Z7e0e1e2e3e4e5e6e7gZ8ierej!�j�nde6ej!�j�e6Z9dd
�Z:dZ;e<dkraej=dZ>ne?Z>ej@jAe>�pejBZCeCejDe;ejDZEej@jFeE�aGdZHeIed�r�dndZJejKeJd�ZLejMeJd�ZNGdd�dejO�ZPGdd�deP�ZQGdd�deP�ZRGdd�dejO�ZSGdd�deS�ZTGdd �d eS�ZUGd!d"�d"ejO�ZVGd#d$�d$eV�ZWGd%d&�d&eV�ZXGd'd(�d(ejO�ZYGd)d*�d*eY�ZZGd+d,�d,eY�Z[Gd-d.�d.ejO�Z\Gd/d0�d0e\�Z]Gd1d2�d2e\�Z^d3d4�Z_d5d6�Z`Gd7d8�d8ejO�ZaejKed9�Gd:d;�d;ea��ZbejKed9�Gd<d=�d=ea��ZcGd>d?�d?ejO�ZdGd@dA�dAed�ZeGdBdC�dCed�ZfGdDdE�dEejO�ZgGdFdG�dGeg�ZhGdHdI�dIeg�ZiGdJdK�dKejO�ZjGdLdM�dMej�ZkGdNdO�dOej�ZlGdPdQ�dQejO�ZmGdRdS�dSem�ZnGdTdU�dUem�ZoGdVdW�dWejO�ZpGdXdY�dYep�ZqGdZd[�d[ep�ZrGd\d]�d]ejO�ZsGd^d_�d_es�ZtGd`da�daes�ZuGdbdc�dcejO�ZvGddde�deev�ZwGdfdg�dgev�ZxGdhdi�diejO�ZyGdjdk�dkey�ZzGdldm�dmey�Z{eNGdndo�doejO��Z|Gdpdq�dqejO�Z}Gdrds�dse}�Z~Gdtdu�due}�ZGdvdw�dwejO�Z�Gdxdy�dyejO�Z�Gdzd{�d{ejO�Z�Gd|d}�d}ejO�Z�eTeUeWeXeZe[e]e^ebeceeefeheiekeleneoeqereteuewexeze{e~ee�e�e�e�eQeRg"Z�erE	e�d~dd�Z�ne�j�de|�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�r�	e�d�dd�d�n>e�r(
e�d�dd�dd�e�d�e�j��ne�d�dd�d�ndS)�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)�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/python34/lib64/python3.4/test/test_decimal.py�	<genexpr>Osz!assert_signals.<locals>.<genexpr>)�getattr�
assertTrue�all)�cls�context�attrrr
)rrr�assert_signalsMsrc	CsI|s
dS|jdddtdtjt|d��}|j|�dS)N�prec�	�rounding�trapsr)�Context�ROUND_HALF_EVEN�dict�fromkeys�Signals�
setcontext)�mZDefaultTestContextr
r
r�initfs
	%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.cCsS|jj�|_|jj�|_dg|_tdddddddd	d
ddd
ddddddddddddg�|_|jtkr|jjd�|jjd�|jjd�|jjd�|jjd�|jjd�|jjd �|jjd!�ni|j	d"6|j
d#6|jd$6|jd%6|j
d&6|_i%d'd(6d)d*6d+d,6d-d.6d/d06d1d26d3d46d5d66d7d86d9d:6d;d<6d=d>6d?d@6dAdB6dCdD6dEdF6dGdH6dIdJ6dKdL6dMdN6dOdP6dQdR6dSdT6dUdV6dWdX6dYdZ6d[d\6d]d^6d_d`6dadb6dcdd6dedf6dgdh6didj6dkdl6dmdn6dodp6|_itdq6tdr6tds6tdt6tdu6tdv6tdw6tdx6|_i|jjdy6|jjdz6|jjd{6|jjd|6|jjd}6|jjd~6|jjd6|jjd�6|jjd�6|jjd�6|jjd�6|jj d�6|_!d�|_"dS)�N�#Zscbx164Zscbx165Zexpx901Zexpx902Zexpx903Zexpx905Zlnx901Zlnx902Zlnx903Zlnx905Zlogx901Zlogx902Zlogx903Zlogx905Zpowx1183Zpowx1184Zpowx4001Zpowx4002Zpowx4003Zpowx4005Zpowx4008Zpowx4010Zpowx4012Zpowx4014Zpwsx803Zpwsx805Zpowx4302Zpowx4303Zpowx4342Zpowx4343Zpwmx325Zpwmx326Z	precisionrZmaxexponentZminexponent�clamp�logical_and�and�_applyZapply�number_class�class�compare_signalZ
comparesig�
compare_totalZcomparetotal�compare_total_magZ
comparetotmag�copy_decimal�copy�copy_absZcopyabs�copy_negateZ
copynegate�	copy_sign�copysign�
divide_intZ	divideint�logical_invert�invert�is_canonicalZiscanonical�	is_finiteZisfinite�is_infiniteZ
isinfinite�is_nan�isnan�	is_normalZisnormal�is_qnanZisqnan�	is_signedZissigned�is_snanZissnan�is_subnormalZissubnormal�is_zeroZiszero�max_magZmaxmag�min_magZminmag�
next_minusZ	nextminus�	next_plusZnextplus�next_towardZ
nexttoward�
logical_or�or�	normalize�reduce�remainder_nearZ
remaindernear�same_quantumZsamequantum�sqrtZ
squareroot�
to_eng_stringZtoeng�to_integral_valueZ
tointegral�to_integral_exactZtointegralx�
to_sci_stringZtosci�logical_xor�xorZceilingZdown�floorZ	half_downZ	half_evenZhalf_upZupZ05upZclampedZconversion_syntaxZdivision_by_zeroZdivision_impossibleZdivision_undefinedZinexactZinvalid_contextZinvalid_operationZoverflowZroundedZ	subnormalZ	underflow)zis_canonicalz	is_finitezis_infinitezis_nanz	is_normalzis_qnanz	is_signedzis_snanzis_subnormalzis_zerozsame_quantum)#rrr�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�	

















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�)	rr_�MAX_EMAXr[�_unsafe_setprec�_unsafe_setemax�_unsafe_setemin�create_decimal�Decimal)rz�vrr
r
r�read_unlimiteds!zIBMTestCases.read_unlimitedcCs�trtj�nt|���}x�|D]�}|jdd�jdd�}y|j|�}Wq(|jjk
r�}z$|jd|j	j
d|�WYdd}~Xq(Xq(WWdQXdS)Nz
��
zException "z" raised on line )�
skip_expected�unittestZSkipTest�open�replace�	eval_liner�DecimalException�fail�	__class__�__name__)rz�file�f�line�t�	exceptionr
r
r�	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)rzr�ignorer
r
rr�0s;*
zIBMTestCases.eval_linecCs�dd�|jd�D�\}}|dkr>|j|}n%yt|�}Wntk
rbYnX|jj|dd��}||�dS)Ncss!|]}|j�j�VqdS)N)r��lower)r�xr
r
rrCsz.IBMTestCases.eval_directive.<locals>.<genexpr>r�rcWsdS)Nr
)�argsr
r
r�<lambda>Lsz-IBMTestCases.eval_directive.<locals>.<lambda>)r�ro�int�
ValueErrorrf�get)rzr�funct�valuer
r
rr�Bs"
zIBMTestCases.eval_directivecs trtj�dkrdS�jj�y�|jd�}|dj�j�}|d}trxtd|dd�n|dj�}|dd�}|dj�j�}|d}|dd�}Wn't	t
tfk
r��jj
�YnXd	d
�}	|�jkrdS�jj||�}
|
dkr7dSt�j|
�}g}d}d}
�fd
d�|D��x%t�jD]}d�jj|<q�Wx�D]}d�jj|<q�Wx~t|�D]p\}}|jd�ddkr�d|
}
n|
r|d|}q�n||}d}|	|�}|
dkrtrx��D]�}d�jj|<y|�jj|��WnW|k
r�Yn]t�jk
r�}z�jd|||f�WYdd}~XnX�jd||f�d�jj|<qKWn�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|<qcW�fdd�t�jD�}x�|D]�}d�jj|<y||�Wn]|k
rkYq3t�jk
r�}z%�jdt|�||f�WYdd}~Xq3X�jd||f�q3Wx!|D]}d�jj|<q�Wntrtd�j�ny@t||��}|
�jkrNttt |���}nWnZt�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�)�valr
r
r�	FixQuotescsz-IBMTestCases.eval_equation.<locals>.FixQuotesZrescaler�cs#g|]}�j|j��qSr
)rxr�)rr�)rzr
r�
<listcomp>ss	z.IBMTestCases.eval_equation.<locals>.<listcomp>r�rWrTz Raised %s in %s when %s disabledzDid not raise %s in %scs"g|]}|�kr|�qSr
r
)r�e)�theirexceptionsr
rr��s	zRaised %s in %s; expected %sz--zRaised %s in %szERROR:�keyzIncorrect answer for z -- got zIncorrect flags set in )�
to_sci_string�
to_eng_string)r�r�)%�TEST_ALL�randomr�clear_flagsr�r��DEBUG�printr��	TypeError�AttributeError�
IndexErrorrrqr^rgr�rr#r�	enumerate�count�EXTENDEDERRORTESTr�r�r��append�OrderedSignals�type�strryr��eval�
getexceptions�sort�repr�assertEqual)rzrZSides�L�idr�Zvalstemp�ans�
exceptionsr�Zfname�valsZconglomerateZquoter��ir�r��errorr�Zordered_errors�resultZmyexceptionsr
)rzr�rr�Os�







	$

	$ 

	*
)
zIBMTestCases.eval_equationcs�fdd�t�jD�S)Ncs&g|]}�jj|r|�qSr
)r�flags)rr�)rzr
rr��s	z.IBMTestCases.getexceptions.<locals>.<listcomp>)r#r)rzr
)rzrr��szIBMTestCases.getexceptionscCsD|jtkr4|jjdkr4|jj|�n||j_dS)Ni@�T)rr_�MAX_PRECrr}r)rzrr
r
rra�s!zIBMTestCases.change_precisioncCs||j_dS)N)rr)rzrr
r
rrb�sz#IBMTestCases.change_rounding_methodcCsD|jtkr4|jjdkr4|jj|�n||j_dS)Ni@�T)rr_r�rr�Emin)rz�expr
r
rrd�s!z IBMTestCases.change_min_exponentcCsD|jtkr4|jjdkr4|jj|�n||j_dS)Ni@�T)rr_r�rr~�Emax)rzr�r
r
rrc�s!z IBMTestCases.change_max_exponentcCs||j_dS)N)rr+)rzr+r
r
rre�szIBMTestCases.change_clampN)r��
__module__�__qualname__�__doc__r{r�r�r�r�r�r�rarbrdrcrer
r
r
rr)�s�
�r)c@seZdZeZdS)�
CIBMTestCasesN)r�r�r�r_rr
r
r
rr��sr�c@seZdZeZdS)�PyIBMTestCasesN)r�r�r��Prr
r
r
rr��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)rr�r�)rzr�r
r
r�test_explicit_empty�sz,ExplicitConstructionTest.test_explicit_emptycCs#|jj}|jt|d�dS)N)rr��assertRaisesr�)rzr�r
r
r�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����)rr�r�r��range)rzr�r�n�signr�r�r
r
r�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�WdQXdS)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)	rr�rq�localcontextr�r�rr�r�)rzr�rqr�Zlead�trail�cr
r
r�test_explicit_from_strings0
z2ExplicitConstructionTest.test_explicit_from_stringcCsuddl}|jj}|jj�}|jd�}|jt||��d�|jt|j|��d�dS)Nrz9.999999)�	_testcapirr�r�unicode_legacy_stringr�r�r�)rzr�r�rrr
r
r�test_from_legacy_stringsDs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�rr�)r�r�r�rr��r�r�r�rr�)r�rr��r�r�r�rr�)r�r
r��r�r�r�rr�)r�rr)r�zxyzr��r�r�r�Nr�)r�rr�����r�rr�rr�)r�rr��r�rr�rr�)r�rr��r�r�r�rr�)r�rr�)rr�r�r�r�r�)rzr�rr
r
r�test_explicit_from_tuplesNs."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��)rr�r�r�)rzr�rr
r
r�test_explicit_from_listys00z0ExplicitConstructionTest.test_explicit_from_listcCs�|jj}|jt|d��d�|jt|d��d�|j|d�|d��|j|d�|d��dS)NrFr�T)rr��assertIs�boolr�)rzr�r
r
r�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���)rr�r�r�)rzr�rr�r
r
r�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�?)rr�r�r�r�r�floatrCr?r�r��expovariate)rzr��rr�r�r
r
r�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�zxyzr))rr�rqrur5�
getcontextrr�r�r�r�r��assertIsInstancerr�
isinstancer�r�r�)rzr�rqru�ncrZprevdecr�r
r
r�$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�?)rr�rr�r�r�r�rrrCr?rr�r�r)rzr�r-rr�r�r
r
r�'test_explicit_context_create_from_floats("""	!z@ExplicitConstructionTest.test_explicit_context_create_from_floatcCsd|jj}idd6dd6dd6}x6|j�D](\}}|jt||��|�q4WdS)Nru1z	0.0000372u٠.٠٣٧٢e-٣z-NaN2400u-nan౨౪౦౦)rr��itemsr�r�)rzr��test_values�inputrr
r
r�test_unicode_digits-s
z,ExplicitConstructionTest.test_unicode_digitsN)r�r�r�r�r�r�r�r�r
r�rrrrrr r.r0r4r
r
r
rr��s1
+Vr�c@seZdZeZdS)�CExplicitConstructionTestN)r�r�r�r_rr
r
r
rr58sr5c@seZdZeZdS)�PyExplicitConstructionTestN)r�r�r�r�rr
r
r
rr6:sr6c@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)rr�r�r�r��locals)rzr�r
r
r�test_implicit_from_None@sz0ImplicitConstructionTest.test_implicit_from_NonecCsP|jj}|jt|d�d�d�|j|d�d|d��dS)Nr�r�Z50l2}r)rr�r�r�)rzr�r
r
r�test_implicit_from_intDs z/ImplicitConstructionTest.test_implicit_from_intcCs)|jj}|jttdt��dS)NzDecimal(5) + "3")rr�r�r�r�r8)rzr�r
r
r�test_implicit_from_stringLsz2ImplicitConstructionTest.test_implicit_from_stringcCs)|jj}|jttdt��dS)NzDecimal(5) + 2.2)rr�r�r�r�r8)rzr�r
r
r�test_implicit_from_floatPsz1ImplicitConstructionTest.test_implicit_from_floatcCs6|jj}|j|d�|d�|d��dS)Nr�r��2)rr�r�)rzr�r
r
r�test_implicit_from_DecimalTs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�)rz�otherr
r
r�
__divmod__]sz7ImplicitConstructionTest.test_rop.<locals>.E.__divmod__cSst|�dS)Nz rdivmod)r�)rzr?r
r
r�__rdivmod___sz8ImplicitConstructionTest.test_rop.<locals>.E.__rdivmod__cSsdt|�S)Nzlt )r�)rzr?r
r
r�__lt__asz3ImplicitConstructionTest.test_rop.<locals>.E.__lt__cSsdt|�S)Nzgt )r�)rzr?r
r
r�__gt__csz3ImplicitConstructionTest.test_rop.<locals>.E.__gt__cSsdt|�S)Nzle )r�)rzr?r
r
r�__le__esz3ImplicitConstructionTest.test_rop.<locals>.E.__le__cSsdt|�S)Nzge )r�)rzr?r
r
r�__ge__gsz3ImplicitConstructionTest.test_rop.<locals>.E.__ge__cSsdt|�S)Nzeq )r�)rzr?r
r
r�__eq__isz3ImplicitConstructionTest.test_rop.<locals>.E.__eq__cSsdt|�S)Nzne )r�)rzr?r
r
r�__ne__ksz3ImplicitConstructionTest.test_rop.<locals>.E.__ne__N)r�r�r�r@rArBrCrDrErFrGr
r
r
r�E\srHrz	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�)rzr?)�lopr
rr��sz3ImplicitConstructionTest.test_rop.<locals>.<lambda>cst|��dS)Nr�)r�)rzr?)�ropr
rr��szE()zDecimal(10)r��10)rIz__add__z__radd__)rLz__sub__z__rsub__)rOz__mul__z__rmul__)rRz__truediv__z__rtruediv__)rUz__mod__z__rmod__)rXz__floordiv__z
__rfloordiv__)r[z__pow__z__rpow__)rr�r��divmodr��setattr)rzr�rHZoplistZsymr
)r^r_r�test_ropXs0""	z!ImplicitConstructionTest.test_ropN)
r�r�r�r�r9r:r;r<r>rcr
r
r
rr7=sr7c@seZdZeZdS)�CImplicitConstructionTestN)r�r�r�r_rr
r
r
rrd�srdc@seZdZeZdS)�PyImplicitConstructionTestN)r�r�r�r�rr
r
r
rre�srec@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�.10grU�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�rgrh)r�rirj)r�rkrl)r�rmrn)r�rorp)r�rqrr)r�rsrt)r�rurv)r�rwrx)r�ryrz)r�r{r|)r�r�r})r�r~r)r�r�r�)r�r�r�)r�rgr�)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�rgr�)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�)rUr~r�)rUr�r�)rUr�r�)rUr�r�)rUr�r�)rUr�r�)r�r�r�)r�r�r�)r�r�r�)r�r�r�)r�r�r�)r�r�r�)r��NaNr>)r�r�r�)r�r�r�)r�r�zInfinity)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)rr	r
)rrr)rr
r)rz1234r)rr�r�)rrr)rrr)rr�r�)rrr)rrr)rrr)rrr)rrr)rrr)rrr)rrr)rrr)rr r!)rr r!)r"r r#)r$r r%)r&r r')r(r r')r)r*r+)rr,r,)r-r.r/)r0rr1)r2rr3)r4r5r6)r7zinfr8)r9r:r;)r<zNaN123r=)rr�r��formatr�r��
__format__)rzr�r2�fmtrr�r
r
r�test_formatting�s	#zFormatTest.test_formattingc	s��jj�yddlm}Wntk
rA�jd�YnX�fdd�}dd��fdd�}id	d
6|dddg�d6d
d6}id
d
6||g�d6dd6}id
d
6|dddg�d6dd6}idd
6|ddd|g�d6dd6}idjd�d
6|dddg�d6djd�d6}�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�r
r
rr�9s	zCFormatTest.test_n_format.<locals>.make_grouping.<locals>.<listcomp>)rr_�join)�lst)rzr
r�
make_grouping8sz/FormatTest.test_n_format.<locals>.make_groupingr�csB�jtkr%�|�j||�S�|�j|d|�SdS)NZ_localeconv)rr_r@)r��overriderA)r�rzr
r�get_fmt;sz)FormatTest.test_n_format.<locals>.get_fmt�.�
decimal_pointr��groupingr�
thousands_sepr�r��&r�r�r�rLs¿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)rr��localerC�ImportError�skipTest�decoder�)	rzrCrGrIZen_USZfr_FRZru_RUZcrazyZdotsep_wider
)r�rzr�
test_n_format0sv




zFormatTest.test_n_format�LC_ALLZps_AFcCs�ddl}|jj}|j�d}|j�d}|dkr`|jdj|d��n|dkr�|jdj|d��n|jt|d�d	�d
�dS)NrrKrMu٫z4inappropriate decimal point separator({!a} not {!a})u٬z0inappropriate thousands separator({!a} not {!a})z
100000000.123r�u100٬000٬000٫123)rOrr��
localeconvrQr?r�)rzrOr�rKrMr
r
r�&test_wide_char_separator_decimal_point�sz1FormatTest.test_wide_char_separator_decimal_pointN)r�r�r�r�rBrSr	rVr
r
r
rrf�s�Yrfc@seZdZeZdS)�CFormatTestN)r�r�r�r_rr
r
r
rrW�srWc@seZdZeZdS)�PyFormatTestN)r�r�r�r�rr
r
r
rrX�srXc@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)rr�r�r�)rzr��d1�d2r�r
r
r�
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)rr�r�r�)rzr�rZr[r�r
r
r�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)rr�r�r�)rzr�rZr[r�r
r
r�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)rr�r�r�)rzr�rZr[r�r
r
r�
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�)rr�r�r�)rzr�rZr[r�r
r
r�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)
Nrar_Z25r�r�Z625rbZ16807Z390625)rr�r�r�)rzr�rZr[r�r
r
r�
test_powering/s



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)Nrar_rr�rb)rr�r�r�)rzr�rZr[r�r
r
r�test_moduleKs



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)Nrar_rr�rb)rr�rar�r�)rzr�rZr[�p�qr
r
r�test_floor_div_modulegs$z-ArithmeticOperatorsTest.test_floor_div_modulecCsr|jj}|j|d�
|d��|j|d�|d��|jt|d��t|d���dS)Nr�r�i���i���)rr�r��abs)rzr�r
r
r�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|WWdQXdS)	Nr��sNaNr�r_TFz8expected {0!r} for operator.{1}({2!r}, {3!r}); got {4!r}r�)rr�rqr��operator�lt�le�gt�ge�eq�nerr?r�rr�)rzr�rqr�r�rr�r�Z
qnan_pairsZ
snan_pairsZ	order_opsZequality_opsr�r��opZgotr�ctxr
r
r�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)rr�r8r�r�r�)rzr�rr
r
r�test_copy_sign�sz&ArithmeticOperatorsTest.test_copy_signN)r�r�r�r�r\r]r^r`rcrdrerhrjrurvr
r
r
rrY�s7rYc@seZdZeZdS)�CArithmeticOperatorsTestN)r�r�r�r_rr
r
r
rrw�srwc@seZdZeZdS)�PyArithmeticOperatorsTestN)r�r�r�r�rr
r
r
rrx�srxcCs�|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|�~WdQX|j|
j|�~
WdQX|j||d��|j||d��|�}|j
|j|�x.||||fD]}|j|j|�q�WdS)Nr�r�rrkz0.333333333333333333333333)rr�rqrrrtrwrsr*r��finish1r]�synchro�waitrr�r��divide�compare�assertFalser�)rr�rqrrrtrwrsr*r�rZ�d3�test1�test2�c2�c3�c1�sigr
r
r�thfunc1�s@



			r�cCsE|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|�~WdQX|j|j|�|j|j|�~WdQX|jj�|jj�|j||d��|j|
|d	��|j|j|�|j
|j|�x.||||fD]}|j|j|�q#WdS)
Nr�r��Z1e425000000i�Tz1e-425000000z0.333333333333333333333333z0.333333333333333333)rr�rqrrrtrwrsr*r�rrr�r��multiplyr~rr|rzr]�finish2r�)rr�rqrrrtrwrsr*r�rZrr�Zthiscontextr�r�r�r�r
r
r�thfunc2�sH
		

		

r�c@s"eZdZdZdd�ZdS)�
ThreadingTestz0Unit tests for thread local contexts in Decimal.cCsJ|jj}|jtkr8|jjr8|jd�n|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_THREADSrQrr�r��	threadingZEventrzryr�ZThreadr�r��startr{r#r~r�)rzr�Z	save_precZ	save_emaxZ	save_eminZth1Zth2r�r
r
r�test_threading's.						



		zThreadingTest.test_threadingN)r�r�r�r�r�r
r
r
rr�!sr�zthreading requiredc@seZdZeZdS)�CThreadingTestN)r�r�r�r_rr
r
r
rr�Jsr�c@seZdZeZdS)�PyThreadingTestN)r�r�r�r�rr
r
r
rr�Ms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/)rr��
assertGreater�assertGreaterEqual�
assertLess�assertLessEqualr��assertNotEqual�object�list�mapr�r�Zshuffler�)rzr��da�db�dcr�br
r
r�test_comparison_operatorsTs0

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)rr�r�r�r�r�r�r�)rzr�r�r�r
r
r�test_decimal_float_comparisonxs 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@)	rr�r�r�rrB�NotImplementedrDrC)rzr�r�r�r
r
r�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��WdQXdS)!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����)rr�rZFractionrr�rqr_r|�MIN_EMIN�	MIN_ETINYrr�r�r�r�r�r�r�r�rCrr�rB)
rz�Dr�rr�rq�emax�eminZetinyr�r
r
r� test_decimal_fraction_comparison�s@
	))))	##))%(z.UsabilityTest.test_decimal_fraction_comparisoncCsr|jj}|d�}tj|�}|jt|�t|��tj|�}|jt|�t|��dS)Nz43.24)rr�r5r�r��deepcopy)rzr�rr�r�r
r
r�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|�|
��||
��WdQXdS)?Ncs,t|�}|j�}�j||�|S)N)�hash�__hash__r�)rrr�)rzr
r�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�r
rr��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	56531E100rkr�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�)rr�r��extendr�r�r�r�r�rrr)rzr�r�r2r�Ztest_stringsrr�rr�r�Zh1Zh2Zh3r
)r�rzr�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!)rr�r�min�max)rzr�rZr[�l1�l2r
r
r�test_min_and_max_methods&sz&UsabilityTest.test_min_and_max_methodscCs6|jj}|j|d��|j|d��dS)Nrz0.372)rr�r~r)rzr�r
r
r�test_as_nonzero:szUsabilityTest.test_as_nonzerocCsH|jj}|d�}|jt|�d�|jt|�d�dS)Nz15.32zDecimal('15.32'))rr�r�r�r�)rzr�rr
r
r�test_tostring_methodsBs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-NaNrkr$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�rz123)r�r�r�)r�r�r�)r�r�r�)r�r�r�)r�r�r�)r�r�r�)zInfr��NaN���)r�r�r�)r�r�r�)
rr�r�r�r�mathrZr�r��
OverflowErrorZceil�roundr�)
rzr�rZr[Z
test_pairsrr�Ztest_triplesr�rr
r
r�test_tonum_methodsJs�	#	#	 	z UsabilityTest.test_tonum_methodscCs�|jj}xmdD]e}t||��}|jtj|��tjd|�}|j||jd�rqdnd�qWdS)	Nr�nan1234�-nan�-nan2468g�?rL)znanr�r�r�g�)	rr�rrr�rAr9r�r�)rzr�rr�r�r
r
r�test_nan_to_float�s
zUsabilityTest.test_nan_to_floatcCs@|jj}x-dD]%}||�}|jtt|�qWdS)N�snan�-snan�snan1357�	-snan1234)r�r�r�r�)rr�r�r�r)rzr�rrr
r
r�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�rr)rr�r�r�r�)rzr�rr
r
r�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��Nrb�r)rrri����r�r�)r�rr�	r�r�r�rr�r�r�r�r����)r�rr�r)rr	r��rrr�rr�r�r�r)rr
r�r�rr�r�r�r)rrr�rrr)r�rr�r)r�r
r�r)r�rr�rrr�rr�r�r�)rrr��r�rr�r�r�)rrr��rrr)r�rr�r)rrr��r)rrr��r�r�r�r�)rrr��r)rrr��rr�rbr�)r�rr��r)r�rr�)rr�r��as_tuple)rzr�rr
r
r�
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�r
r
r
r�	MyDecimalsrr�r�z1.0r)	rr�rr�r�r5r�r�r�)rzr�rrZr[rr�r%r
r
r�test_subclassings<
	zUsabilityTest.test_subclassingcCs\|jj}|jj}|�}|jt|d�j��t|j|d����dS)Nr)rr�r*r�r�rS)rzr�r*r�r
r
r�test_implicit_context0s
	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|�WdQX||���s}d|_d|_
d2|_|d.d��@}|j|jd�|j|j
d�|j|jd3�WdQXWdQXdS)4Nrbi�Z111Z1e9999z1e-9999rz1.609487E+48FTz4.709530r�z2.045323r_rZ1111000z
9.999999E+999rkr�r�z
+Subnormalz0E-1005ZNan891287828Z
NaN1287828i  z-1r��eZ101r�r`r�Z11100z1.11E+9i'r�Z225z1.5rrz1.50001r�z1e-3z1.501z1.500z1e-10rti���r�r�i���i���):rr�rr�rqrrrtrwrvrsrurprr�r�r�r�r�r�rr�r�rrBrF�ln�log10�logbr;rJrKrOr/rS�capitalsrTr}r1r,rMrXr�rHr�rIrQ�rotate�scaleb�shift�fmar r�to_integralrirmrUrV�quantize)rzr�rr�rqrrrtrwrvrsrurpr�r�r��zr�rr
r
r�test_none_args9s�			
"

"

"

"
"
"
"
""
"
	"	
!"
"



"
"
"
"




%	$	$$
	$	$$
	$	$$
	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�)rr�r�r}r1r2r3r,rMrXr�rHr�rIrLr'rQr"rRr#r$r%)rzr�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�rrrrr)r,r
r
r
rr�Qs&$*	Tg
-/	�r�c@seZdZeZdS)�CUsabilityTestN)r�r�r�r_rr
r
r
rr-Y	sr-c@seZdZeZdS)�PyUsabilityTestN)r�r�r�r�rr
r
r
rr.[	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)
rr�r�
issubclass�numbers�Numberr~ZRealr+ZassertNotIsInstance)rzr�r
r
r�test_abc`	s
zPythonAPItests.test_abccCs^xWttjd�D]B}|jj}tjd}|jtjd<|d�}tj||�}tj|�}|j	||�t
rIt
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	|
|�n|tjd<qWdS)Nr�rz-3.141590000z-3.123e81723)r��pickle�HIGHEST_PROTOCOLrr��sys�modules�dumps�loadsr�r_r�r+rZDecimalTuple)rz�protor��savedecimalrrfr�r�r�ZsxrZsyr
r
r�test_pickleh	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���)rr�r�r�r�rr&rir�r�r�)rzr�r�rrrr
r
r�test_int�	s( zPythonAPItests.test_intcCs�|jj}x�tdd�D]v}d|d}|jt||��tt|���||�}|jt�}|j|tj	|��|�qWdS)Nr=z%0.2fgY@i���)
rr�r�r�r�rr&rir�Ztrunc)rzr�r�rrrr
r
r�
test_trunc�	s(zPythonAPItests.test_trunccCs|jj}Gdd�d|�}|jt||��|jd�}|jt|�|�|jt|�d�d}|j|j|�||��|j|jtd��j	��|j|jtd��j
��|j|jtd��j
��|jt|jtd���t|d	���|jt|jtd���t|d
���|jt|jtd���t|d���|jt|jd�xTt
d
�D]F}tjd�tj�dd}|j|t|j|���q�WdS)Nc@seZdZdS)z1PythonAPItests.test_from_float.<locals>.MyDecimalN)r�r�r�r
r
r
rr�	srg�������?z90.1000000000000000055511151231257827021181583404541015625ls\�&�5$3�|	rrz-infr�r�z	-Infinity�abcrg{�G�z�?g@g�?)rr�rr0�
from_floatr�r�r�rrCr?r�r�r�r�r)rzr�rrZbigintr�r�r
r
r�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�)rr�rrsrir��create_decimal_from_floatr�Zpirmr�r�)rzr�rrsrr
r
r�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��)rr�rrqr�r'rir�)rzr�rrqr�rr�r
r
r�
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.8182731e181273rrr��realr/�imag�	conjugate�__complex__)rr�r�rFrGrH�complexrr�r�rb)rzr�r�r
r
r�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�WdQXdS)>Nr�rrr�rr�r�rbr�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.9Zthirdz0.9z7E+1�oz
+Subnormalz0.21Z11r`Z01Z23g�������?r�r�r�r�rr�i0���r�i����r�)@rr�rr�rqrtrr�r�r�r�r�rr�r~r�rrrJrKrOr&rVrUrSr}r1r�rHr�rIrLr'rQr%r�r=r>r?r@rCrErDrGrBrF�adjustedrH�radixr r;r/rTr,rMrXr"r#r$rAr�	canonicalr6r7)rzr�rr�rqrtZxcr�r
r
r�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)rr�rq�FloatOperationrrrtrwrvrsrurprr0�ArithmeticErrorr��ZeroDivisionErrorZConversionSyntaxZDivisionImpossibleZDivisionUndefinedZInvalidContext)rzrr�rqrQrrrtrwrvrsrurpr
r
r�test_exception_hierarchy�
sB											z'PythonAPItests.test_exception_hierarchyN)
r�r�r�r3r<r>r?rBrDrErKrPrTr
r
r
rr/^	s3pr/c@seZdZeZdS)�CPythonAPItestsN)r�r�r�r_rr
r
r
rrU�
srUc@seZdZeZdS)�PyPythonAPItestsN)r�r�r�r�rr
r
r
rrV�
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�r!r+r�rr!i?Br�ri���)rrrqrrrtr�rrr r�r�r!r+r)rzrrqrrrtr�r�r�r
r
rr)�
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�rr�
RoundingModesr�rr�r�r�rb)rzr�r�Zrndrr
r
rr��
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�rr/rr�rr�r�rr!r+r�ri����)r�r4r5rrr6r7r9r8r�rr�r�rr!r+r�rr_r�r�rXr�r��	randranger+r)rzr:rr;r�r��combinationsZdumper�loaderZri�_ZfiZtirr�r��capsr+rrr
r
rr<�
sX
	-
	

!1zContextAPItests.test_picklecCs]|jj}|j|d�dd|d�dig�|j|d�dddig�dS)Nrrg�?r�r�)r�r�)r�r�)rr�ZassertInZassertNotIn)rzr�r
r
r�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)rr�rr5r�r�r�rr]�keysr�)rzr�rr�rZk1Zk2r
r
r�	test_copys	""zContextAPItests.test_copycCs/|jj}|�}|jtt|d�dS)NZ_clamp)rrr�r�r)rzrr�r
r
r�test__clamp-s	zContextAPItests.test__clampcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nr�z-1r�r�)rr�rrir�r�r�)rzr�rr�rr
r
r�test_abs8s	zContextAPItests.test_abscCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r)rr�rr`r�r�r�)rzr�rr�rr
r
r�test_addAs	""zContextAPItests.test_addcCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r)rr�rr}r�r�r�)rzr�rr�rr
r
r�test_compareMs	""zContextAPItests.test_comparecCs�|jj}|jj}|�}|j|d�|d��}|j|jdd�|�|j|j|d�d�|�|j|jd|d��|�|jt|jdd�|jt|jdd�dS)Nr�r)rr�rr1r�r�r�)rzr�rr�rr
r
r�test_compare_signalYs	""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)rr�rr2r�r�r�)rzr�rr�rr
r
r�test_compare_totales	""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)rr�rr3r�r�r�)rzr�rr�rr
r
r�test_compare_total_magqs	""z&ContextAPItests.test_compare_total_magcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nr�z-1r�r�)rr�rr6r�r�r�)rzr�rr�rr
r
r�
test_copy_abs}s	zContextAPItests.test_copy_abscCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nr�z-1r�r�)rr�rr4r�r�r�)rzr�rr�rr
r
r�test_copy_decimal�s	z!ContextAPItests.test_copy_decimalcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nr�z-1r�r�)rr�rr7r�r�r�)rzr�rr�rr
r
r�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�rz-2rrrrr)rr�rr8r�r�r�)rzr�rr�rr
r
rrv�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�rr_)rr�rr|r�r�r�)rzr�rr�rr
r
r�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�rr_)rr�rr:r�r�r�)rzr�rr�rr
r
r�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�rr_)rr�rrar�r�r�)rzr�rr�rr
r
r�test_divmod�s	""zContextAPItests.test_divmodcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rr�r�r�r�)rzr�rr�rr
r
r�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��?)rr�rr%r�r�r�)rzr�rr�rr
r
r�test_fma�s(	'%%%+zContextAPItests.test_fmacCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rr>r�r�r�)rzr�rr�rr
r
r�test_is_finite�s	zContextAPItests.test_is_finitecCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rr?r�r�r�)rzr�rr�rr
r
r�test_is_infinite�s	z ContextAPItests.test_is_infinitecCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rr@r�r�r�)rzr�rr�rr
r
r�test_is_nan�s	zContextAPItests.test_is_nancCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rrBr�r�r�)rzr�rr�rr
r
r�test_is_normals	zContextAPItests.test_is_normalcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rrCr�r�r�)rzr�rr�rr
r
r�test_is_qnans	zContextAPItests.test_is_qnancCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rrDr�r�r�)rzr�rr�rr
r
r�test_is_signeds	zContextAPItests.test_is_signedcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rrEr�r�r�)rzr�rr�rr
r
r�test_is_snan!s	zContextAPItests.test_is_snancCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rrFr�r�r�)rzr�rr�rr
r
r�test_is_subnormal*s	z!ContextAPItests.test_is_subnormalcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rrGr�r�r�)rzr�rr�rr
r
r�test_is_zero3s	zContextAPItests.test_is_zerocCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rrr�r�r�)rzr�rr�rr
r
r�test_ln<s	zContextAPItests.test_lncCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rrr�r�r�)rzr�rr�rr
r
r�
test_log10Es	zContextAPItests.test_log10cCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rr r�r�r�)rzr�rr�rr
r
r�	test_logbN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)rr�rr,r�r�r�)rzr�rr�rr
r
r�test_logical_andWs	""z ContextAPItests.test_logical_andcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Ni�Z1000)rr�rr;r�r�r�)rzr�rr�rr
r
r�test_logical_invertc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)rr�rrMr�r�r�)rzr�rr�rr
r
r�test_logical_orl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)rr�rrXr�r�r�)rzr�rr�rr
r
r�test_logical_xorx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�rr_)rr�rr�r�r�r�)rzr�rr�rr
r
r�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�rr_)rr�rrHr�r�r�)rzr�rr�rr
r
r�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�rr_)rr�rr�r�r�r�)rzr�rr�rr
r
r�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�rr_)rr�rrIr�r�r�)rzr�rr�rr
r
r�test_min_mag�s	""zContextAPItests.test_min_magcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rZminusr�r�r�)rzr�rr�rr
r
r�
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�rr_)rr�rr�r�r�r�)rzr�rr�rr
r
r�
test_multiply�s	""zContextAPItests.test_multiplycCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rrJr�r�r�)rzr�rr�rr
r
r�test_next_minus�s	zContextAPItests.test_next_minuscCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rrKr�r�r�)rzr�rr�rr
r
r�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�rr_)rr�rrLr�r�r�)rzr�rr�rr
r
r�test_next_toward�s	""z ContextAPItests.test_next_towardcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rrOr�r�r�)rzr�rr�rr
r
r�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���)rr�rr�r/)rzr�rr�r
r
r�test_number_class�s	((z!ContextAPItests.test_number_classcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�r�plusr�r�r�)rzr�rr�rr
r
r�	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�rroZmodulor�r�r�rr�)rr�r�powerr�r�r�)rzr�rr�rr
r
r�
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�rr_)rr�rr'r�r�r�)rzr�rr�rr
r
rrE
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�rr_)rr�rZ	remainderr�r�r�)rzr�rr�rr
r
r�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�rr_)rr�rrQr�r�r�)rzr�rr�rr
r
r�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�rr_)rr�rr"r�r�r�)rzr�rr�rr
r
r�test_rotate4
s	""zContextAPItests.test_rotatecCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rrSr�r�r�)rzr�rr�rr
r
r�	test_sqrt@
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�rr_)rr�rrRr�r�r�)rzr�rr�rr
r
r�test_same_quantumI
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�rr_)rr�rr#r�r�r�)rzr�rr�rr
r
r�test_scalebU
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�rr_)rr�rr$r�r�r�)rzr�rr�rr
r
r�
test_shifta
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�rr_)rr�r�subtractr�r�r�)rzr�rr�rr
r
r�
test_subtractm
s	""zContextAPItests.test_subtractcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rrTr�r�r�)rzr�rr�rr
r
r�test_to_eng_stringy
s	z"ContextAPItests.test_to_eng_stringcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rrWr�r�r�)rzr�rr�rr
r
r�test_to_sci_string�
s	z"ContextAPItests.test_to_sci_stringcCsi|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�dS)Nrr`)rr�rrVr�r�r�)rzr�rr�rr
r
r�test_to_integral_exact�
s	z&ContextAPItests.test_to_integral_exactcCs�|jj}|jj}|�}|j|d��}|j|jd�|�|jt|jd�|jt|jdd�dS)Nrr`r�)rr�rrUr�r�r�)rzr�rr�rr
r
r�test_to_integral_value�
s	z&ContextAPItests.test_to_integral_valueN)Cr�r�r�r)r
r�r<r^r`rarbrcrdrerfrgrhrirjrvrkrlrmrnrprqrrrsrtrurvrwrxryrzr{r|r}r~rr�r�r�r�r�r�r�r�r�r�r�r�r�r�rEr�r�r�r�r�r�r�r�r�r�r�r�r
r
r
rrW�
s~=																												rWc@seZdZeZdS)�CContextAPItestsN)r�r�r�r_rr
r
r
rr��
sr�c@seZdZeZdS)�PyContextAPItestsN)r�r�r�r�rr
r
r
rr��
sr�c@sXeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�ContextWithStatementc
Cs�|jj}|jj}|�}|��}|�}WdQX|�}|j||d�|j||d�|j||d�dS)Nz!did not restore context correctlyzdid not copy the contextz __enter__ returned wrong context)rr*r�r�assertIsNot)rzr*r��orig_ctx�	enter_ctx�set_ctx�	final_ctxr
r
r�test_localcontext�
s		z&ContextWithStatement.test_localcontextc	
Cs�|jj}|jj}|jj}|jj}|�}|dd�}||��}|�}WdQX|�}|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)rrr*r�rr�rr�)	rzrr*r�r��new_ctxr�r�r�r
r
r�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	|�~
WdQX|j|	j	|�~	WdQX|j|jd
�|j|j	|�|j|j	|�|j|j	|�|j|j	|�dS)Nr�i�Tiz0e-999z3.4e200r�i����i����i����)rr�rr*r�rprtr�r�r�rr�r�r�r�rr�r~)rzr�rr*r�rprtr�r�r�r�r
r
r�test_nested_with_statements�
s>	

			z0ContextWithStatement.test_nested_with_statementscCsd|jj}|��I}~|��4}~|��}~|��
}~WdQXWdQXWdQXWdQXdS)N)rr�)rzr�r�r�r��c4r
r
r�test_with_statements_gc1�
sz-ContextWithStatement.test_with_statements_gc1cCsm|jj}|��R}||��=}~||��%}~||��
}~~WdQXWdQXWdQXWdQXdS)N)rr�)rzr�r�r�r�r�r
r
r�test_with_statements_gc2�
sz-ContextWithStatement.test_with_statements_gc2c
Csy|jj}|jj}|jj}|jj}|��:}~|dd�}||�||��	}~|j|jd�~|dd�}||�~|j|�jd�|dd�}	||	�|j|�jd�||	��z}
~	|j|
jd�~
|dd�}||�~|j|�jd�|��}|j|jd�~WdQXWdQXWdQXWdQXdS)Nrr�r�r�r�)rrr�r*r$r�r)
rzrr�r*r$r�Zn1r�Zn2Zn3r�Zn4r�r
r
r�test_with_statements_gc3s<



z-ContextWithStatement.test_with_statements_gc3N)	r�r�r�r�r�r�r�r�r�r
r
r
rr��
s
#r�c@seZdZeZdS)�CContextWithStatementN)r�r�r�r_rr
r
r
rr�!sr�c@seZdZeZdS)�PyContextWithStatementN)r�r�r�r�rr
r
r
rr�#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}xB|
D]:\}}
|	j�||
�}dd�|	jj�D�}x�|D]�}|	j�x|D]}||	|�q�W||
�}t|�}x*|D]"}||kr�|j|�q�q�W|jdt�dd�|	jj�D�}|jdt��j||dd||f��j||dd||f�q�WqZWdS)NcsF�jtkr5d|j|<|j|rB|�qBn
|j|�dS)NT)rr_r�rZ_raise_error)r�flag)rzr
r�raise_error3s


z7ContextFlags.test_flags_irrelevant.<locals>.raise_errorrrr�i@�Tr�rrr�z100E-425000010r�z
1.23456789z
9.87654321cSs"g|]\}}|r|�qSr
r
)r�kr�r
r
rr�Os	z6ContextFlags.test_flags_irrelevant.<locals>.<listcomp>r�cSs"g|]\}}|r|�qSr
r
)rr�r�r
r
rr�`s	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���)rr�rrsrurwrprvr r.rSr`r�r�r�r�r1r�r�r�r�r�)rzr�rrsrurwrprvr�rZ
operationsZflagsets�fnr�r�r�Zextra_flagsr�Znew_ansZexpected_flagsZ	new_flagsr
)rzr�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|�id|6}|j||j�|j|j|�dg}|j||j�|j|j|�dS)NTFr�)	rrrsrur�r�rr��update)rzrrsrur�rr
r
r�test_flag_comparisonsjs4	


	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	|�WdQXdS)Ng@T)rr�rQr�r~rr�r�rr�r�rArCr�)rzr�rQr�r�r�r
r
r�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��WdQXdS)Ncsi|j�t||�}|�kr;�j|||�n�j||�d��j|j��dS)NT)r�rr�rrr�)rr�rr�signalr�)rQrzr
r�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)
NrBrDrCrErFrGz0.1g�������?r�r)z__lt__z__le__)z__gt__z__ge__)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>.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�did�d�6dd6k}�j|j��dS)	NgY@z100.0r�g�?z10.0g$@rr�)r�r]r��lenrr�r��sorted)r�r�rr�)r�rQrzr
r�test_containerss

"

 z;ContextFlags.test_float_comparison.<locals>.test_containersr�Tg�)rr�rrQr�rr~r)rzrr�r�r�r-r�r
)r�rQr�r�r�r�r�r�r�r�r�rzr�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)
rr�rrsrQr~r�r�clear_trapsr)rzr�rrsrQrr
r
r�test_float_operation_default!s	


z)ContextFlags.test_float_operation_defaultN)	r�r�r�r�r�rr�r�r�r
r
r
rr�&s
B&6[r�c@seZdZeZdS)�
CContextFlagsN)r�r�r�r_rr
r
r
rr�1sr�c@seZdZeZdS)�PyContextFlagsN)r�r�r�r�rr
r
r
rr�3s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||_||_||
�|
ry|
�nXdS)Nri�)r�BasicContext�ExtendedContextr*r$rqrrrtrwrprr5rr�r��	Exceptionr�)rzr�r�r*r$rqrrrtrwrp�savecontextZbasic_context_precZextended_context_prec�ex�templater�r�r
r
r�test_context_templates9s:		
	 		
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�|�nXdS)Nrri�)rr�r�r�r*r$rqrrrtr�rrr5r�r�r�)rzr�r�r�r*r$rqrrrtr�Zdefault_context_precr�r�Zsaveprecr�r
r
r�test_default_context]s>					
	 	
z$SpecialContexts.test_default_contextN)r�r�r�r�r�r�r
r
r
rr�6s$r�c@seZdZeZdS)�CSpecialContextsN)r�r�r�r_rr
r
r
rr��sr�c@seZdZeZdS)�PySpecialContextsN)r�r�r�r�rr
r
r
rr��sr�c@seZdZdd�ZdS)�ContextInputValidationc	CsP|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|didd6�x<dddd	dd
ddgD]}|jt
|j|�qJW|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�?r!r+r�r/r�rrrqr��Qr�i���i���)r�r�r�r�r�r�)rr�)r�r)
rrr�r5rbr�rr�r�r�r��KeyError�__delattr__)rzrr�r�rr
r
r�test_invalid_context�sL&z+ContextInputValidation.test_invalid_contextN)r�r�r�r�r
r
r
rr��sr�c@seZdZeZdS)�CContextInputValidationN)r�r�r�r_rr
r
r
rr��sr�c@seZdZeZdS)�PyContextInputValidationN)r�r�r�r�rr
r
r
rr��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|
idd6�|
dd�}|j|jd�|j
|	|j|d�d
�|j
t|
idd6�|
dtdd�}|j|jt�|j|j|d��d�|j
t|
idd6�|
dddd�}|j|jd�|j|d�|d��}|j||d��x1|||||fD]}|j|j|�qW|j
t|
id d6�|
dddd�}|j|jd�|j
||j|d�|d��|jtkr�x.|||fD]}|j|j|�q�Wn|j
t|
id!d6�|
dd
�}|j|jd
�|jd�}|j|j|�d�|j
t|
idd6�|
dddd�}|j|jd�|j|d��}|jt|�d�|j
t|
idd	6�|
d	||g�}x(||fD]}|j|j|�q�W|j �x&t!�D]}|j"|j|�qW|j
t|
idd
6�|
d
||g�}x(||fD]}|j|j#|�qnW|j$�x&t!�D]}|j"|j#|�q�WdS)"Ncs=eZdZdddddddd��fdd�ZdS)z>ContextSubclassing.test_context_subclassing.<locals>.MyContextNc		s7�j|�|dk	r%||_n|dk	r=||_n|dk	rU||_n|dk	rm||_n|dk	r�||_n|dk	r�||_n�dk	r�t�t�r��fdd�t	��D��n�|_
n�dk	r3t�t�r'�fdd�t	��D��n�|_ndS)Ncsi|]}|�k|�qSr
r
)rr�)r�r
r�
<dictcomp>�s	z[ContextSubclassing.test_context_subclassing.<locals>.MyContext.__init__.<locals>.<dictcomp>csi|]}|�k|�qSr
r
)rr�)rr
rr��s	)�__init__rrr�r�r!r+r,r�r�r�r)	rzrrr�r�r!r+r�r)rr)r�rrr��s*
$$zGContextSubclassing.test_context_subclassing.<locals>.MyContext.__init__)r�r�r�r�r
)rrr
r�	MyContext�s	r�rrr�r�r!r+r�rr�Z9e2r�XYZz9.9rr�z1e-99z2.234e-2000z0.0Z1e99z
2.234e2000Z1E222z1e+222r��cz!1.000000000000000000000000000E+99)zpreczroundingzEminzEmaxzcapitalszclampzflagsztrapsr�r�r�r�r�)%rr�rrprrrsrtrurvrwrqr�rr�r�rr'r�rirr�r�r`rr�r�r_r!r�rWr+r�r�r�r~rr�)rzr�rprrrsrtrurvrwrqr�r�rrr�r�r
)rrr�test_context_subclassing�s~													
&%

z+ContextSubclassing.test_context_subclassingN)r�r�r�r�r
r
r
rr��sr�c@seZdZeZdS)�CContextSubclassingN)r�r�r�r_rr
r
r
rr�;sr�c@seZdZeZdS)�PyContextSubclassingN)r�r�r�r�rr
r
r
rr�=sr�c@s4eZdZdd�Zdd�Zdd�ZdS)�CheckAttributescCs|jtjtj�|jtjtj�|jtjtj�|jtjtj�|jtjdkpytjdk�|jtjdkp�tjdk�|jtj	tj	�|jtj
tj
�tt�}dd�tt�D�}|jt|�t|�t��dS)NTFcSs2g|](}d|ks(|jd�r|�qS)�__r\)r�)rrr
r
rr�Rs	z:CheckAttributes.test_module_attributes.<locals>.<listcomp>)
r�r_r�r�r|r�r�rr��__version__Z__libmpdec_version__�dirr])rzr�r�r
r
r�test_module_attributesCs%%z&CheckAttributes.test_module_attributescCsedd�ttj��D�}dd�ttj��D�}|jt|�t|�t��dS)NcSs2g|](}d|ks(|jd�r|�qS)r�r\)r�)rrr
r
rr�Ws	z;CheckAttributes.test_context_attributes.<locals>.<listcomp>cSs2g|](}d|ks(|jd�r|�qS)r�r\)r�)rrr
r
rr�Xs	)r�r_rr�r�r])rzr�r�r
r
r�test_context_attributesUsz'CheckAttributes.test_context_attributescCskdd�ttjd��D�}dd�ttjd��D�}|jt|�t|�t��dS)NcSs2g|](}d|ks(|jd�r|�qS)r�r\)r�)rrr
r
rr�]s	z;CheckAttributes.test_decimal_attributes.<locals>.<listcomp>rcSs2g|](}d|ks(|jd�r|�qS)r�r\)r�)rrr
r
rr�^s	)r�r_r�r�r])rzr�r�r
r
r�test_decimal_attributes[s""z'CheckAttributes.test_decimal_attributesN)r�r�r�r�r�r�r
r
r
rr�@s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)rr�r�rM)rzr�r
r
r�
test_adjustedcszCoverage.test_adjustedcCsl|jj}|jj}|d�j�}|j|d�|�}|j|d��}|j|d�dS)Nr)rr�r*rOr�)rzr�r*r�r�r
r
r�test_canonicalks	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���)rr�r5rr�r�rkrr!r+r�r�r�__repr__r�)rzr�r�rr�r
r
r�test_context_reprvs						
zCoverage.test_context_reprcCs7|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��WdQX|���}d|_d#}||�}|j�}|j||�|j�}|j||�|j |d��}|j||�WdQXdS)$Nr�z-10r�7r�r`r�r�rbz1.2z0.01r�Tz1.01r�FZ20Z580r_r�rz2E+1z-1E+1z+Normalz-1z1.12345rr�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)!rr�r�rr�r�r�rir%rr@�powr�rBrFrrr r;rJrKrOr/rVrr=r>rErDrGr6r7r8)rzr�r�r�r�r�r(r
r
rr�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|�WdQXdS)NZ10912837129i�Z10901935Z194r�rbFrrrr�)
rr�r�rqrrrar�rr@rr�r�r?)rzr�r�rqrrr�rgrr
r
rrm�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	|�WdQXdS)Nr�z1.0r/z1.00r�Fi'z0.5rr�)
rr�r�rtrurr�r�rr�r�r�r)rzr�r�rtrur�r
r
rr�s 	
 			

&zCoverage.test_powerc
Cs�|jj}|jj}|jj}|��]}d|_d|_d|_d|j|<|d�j|d��}|j	|j
��WdQXdS)Nr�Fr�Z1e1r�)rr�r�rqrr�r�rr'rr@)rzr�r�rqr�r�r
r
rrEs			
zCoverage.test_quantizecCsW|jj}|jj}|�}|j|d�j�d�|j|j�d�dS)Nrr)rr�r*r�rN)rzr�r*r�r
r
r�
test_radix$s
	zCoverage.test_radixcCsF|jj}x3dD]+}|jt|d	�|�d
�t�qWdS)NrKrNrQrTrArWrZr]rr�)z__radd__z__rsub__z__rmul__z__rtruediv__z__rdivmod__z__rmod__z
__rfloordiv__z__rpow__)rr�rrr�)rzr�rr
r
rrc,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.23rar�i����)	rr�r*rr�r��	__round__r�r�)rzr�r*r�r
r
r�
test_round3s		""%%%zCoverage.test_roundcCs,|jj�}|jt|jdg�dS)NrU)rrr�r�r�)rzr�r
r
r�test_create_decimalDszCoverage.test_create_decimalc
Css|jj}|jj}|��L}d|_|d�d	}|jt|�d�|j|j�d�WdQXdS)
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-)rr�r�rr�r�r&)rzr�r�r�r�r
r
rr>Hs	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)rrrr6r�r7r8)rzrr�r�r�r
r
rr`Rs		zCoverage.test_copyN)r�r�r�r�r�r�rrmr�rEr�rcr�r�r>r`r
r
r
rr�asQ)

r�c@seZdZeZdS)�	CCoverageN)r�r�r�r_rr
r
r
rr�bsr�c@seZdZeZdS)�
PyCoverageN)r�r�r�r�rr
r
r
rr�dsr�c@s.eZdZdZdd�Zdd�ZdS)�PyFunctionalityz!Extra functionality in decimal.pycCsztj}tj}|��Y}d|_d|_d|_|d�j|d�dd�}|j||d��WdQXdS)Nr�i��Z1e3ZwatchexpFz1.00E+5r�)r�r�r�rr�r�r'r�)rzr�r�r�r�r
r
r�test_py_quantize_watchexpjs					!z)PyFunctionality.test_py_quantize_watchexpc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.%)rrr)rrr)rrr)rrr)r�r	r	)r
r	r	)rrr)rrr)r
rr)rrr)r�r�r�r�r?)rzr�r�r2rArr�r
r
r�test_py_alternate_formattingvs			z,PyFunctionality.test_py_alternate_formattingN)r�r�r�r�rrr
r
r
rr�gsr�c@sReZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�
PyWhiteboxz White box testing for decimal.pycCs5tj}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�}WdQXdS)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�)rzr�r�r�r�r
r
r�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
)rrr
r
rr�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�b2rZr[rzr
r�checkSameDec�sz@PyWhitebox.test_py_immutability_operations.<locals>.checkSameDec�__abs__rJTr@rFrGrDrBrErC�	__float__rYr��__int__�	__trunc__rVrP�__neg__�__bool__�__pos__r\rKrAr�rZrWrQr]rN�__str__rMrSrMrr}r�r�rOr'rQrRrSrTr&)r�r�r�r$r5r!r�rr�rrr)rzr�r�r$r�rr
)rrrZr[rzr�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�)rzr�rr�r
r
r�test_py_decimal_id�s
	zPyWhitebox.test_py_decimal_idc
CsStj}tj}|��2}|d�jdt�}|j|j��WdQXdS)Nr�r�)r�r�r�Z_rescalermrr@)rzr�r�r�r�r
r
r�test_py_rescales
		zPyWhitebox.test_py_rescalecCs,tj}|jt|d�jdt�dS)Nz3.1234r)r�r�r�r�Z_roundrm)rzr�r
r
r�test_py__round	s	zPyWhitebox.test_py__roundN)	r�r�r�r�rr#r$r%r&r
r
r
rr�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)rzrr
r
r�assert_restsz7CFunctionality.test_c_ieee_context.<locals>.assert_restrb�`�_r�i�i�"ii�r�r"r�ii����i����i�lr�)r_�IEEEContext�	DECIMAL32�	DECIMAL64�
DECIMAL128r�rr�r�r�r�r�)rzr,r-r.r/r(r�r
r
r�test_c_ieee_contexts.				


z"CFunctionality.test_c_ieee_contextcCsTtj}|dtjdtj�}|j|jtj�|j|jtj�dS)Nr�r)r_rr(�
DecRoundedr��_flags�_traps)rzrr�r
r
r�test_c_context6s	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�DecOverflowr1�DecSubnormal�DecUnderflowr�r-r.r/ZIEEE_CONTEXT_MAX_BITSr��DecIEEEInvalidOperationZ	DecErrorsZDecTraps)rz�condr�r�r
r
r�test_constants>s()zCFunctionality.test_constantsN)r�r�r�r��requires_extra_functionalityr0r4rDr
r
r
rr's$r'c@seZdZdZdd�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*S)+�	CWhiteboxzWhitebox testing for _decimalcCs�tj}tj}d}d	}|��{}d|_xhtd�D]Z}tj||�}tjdd�}||}	||�||�}
|j|	|
�q@WWdQXdS)
Nr�#�$i@Br�i�i�l�?<\"X�X\�	l@|\[q y�sK`)r_r�r�rr�r�rYr�)rzr�r�rrr�r�rr�r�r�r
r
r�test_bignumgs			
zCWhitebox.test_bignumcCs|jttjdd�dS)Nrr�)r�r�r_r�)rzr
r
r�test_invalid_constructionxsz#CWhitebox.test_invalid_constructioncCsQtj}tj}tj}tj}||���|j||d�WdQXdS)NZ1e9999999999999999999)r_r�rqrr�r�)rzr�rqrr�r
r
r�test_c_input_restriction{s				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�rkrr!r+r�r�rr�r�)rzr�rQr�r�rr�r
r
r�test_c_context_repr�s"								


zCWhitebox.test_c_context_reprc	Cs�tj}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|	didd6�|j	t
t|	didd6�|	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�q�Wtjdkr�|j	tt|	d�|d�|j	tt|	d�|d�|j	tt|	d�|d�ntjdkr�|j	tt|	d�d�|j	tt|	d�d�|j	tt|	d�d'�|j	tt|	d�d�|j	tt|	d�d(�|j	tt|	d�d�nx�ddgD]�}
|j	tt|	|
d)�|j	tt|	|
d�|j	tt|	|
dddg�|r�|j	tt|	|
d*�|j	tt|	|
d,�q�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}r~ri���?r�r�zwith localcontext("xyz"): passz-with localcontext(context=getcontext()): passr�ll����li���l�N�Zoiʚ;)zpreczEminzEmaxr!r+r�i9�r�lll)r_rrqrtrQr�r*r$r�r�r�r��__setitem__rr��__delitem__r�rbr5r�r6�platformr�execr8)rzrrqrtrQr�r*r$�HAVE_CONFIG_64r�r�int_maxZgt_max_emaxrZ
saved_contextr
r
r�test_c_context_errors�s�								  

%" 

	zCWhitebox.test_c_context_errorscCs�|jtjtj�|jtjtj�|jtjtj�|jtjtj�|jtjtj�|jtjtj�|jtj	tj	�|jtj
tj
�dS)N)rr_rmr�rirhrjrlrkr rn)rzr
r
r�test_rounding_strings_internedsz(CWhitebox.test_rounding_strings_internedcCsUtj}tj}tj}tj}tj}tj}tjdk}|�}|rZdnd}	|jt	t
|d|	d�|jt	t
|d|	d�tjdkr�|jt
t
|d|	�|jt
t
|d|	d�nx�dD]�}
|jt	t
||
|	d�|jt	t
||
|	d�tjdkr�|jtt
||
|	�|jtt
||
|	d�q�q�W|jt
t
|dd�|jt
t
|dd�|jtt
|dddd
g�|r|jt
t
|dd�|jt
t
|dd�nxFdd	gD]8}
|jtt
||
d�|jtt
||
d
�qWdS)Ni@�Tr�r"r�r#�_allcrrMr2r3r�r�i?Br�ll����li���)z_flagsz_trapsr�lll)r_rrqrtr�r*r$r�r�r�rbr6rPr�r�)rzrrqrtr�r*r$rRr�rSrr
r
r�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
�ndS)Nr+i�r�ri�i�i@�Ti�ɚ;iH�iH�i'�i6e�i6e�)r_r�rprwrsrurvr5rrlrr�r�r!r+r�ZEtinyZEtopr�r}r~r)rzr�rprwrsrurvr�r
r
r�test_c_valid_context>s8												


zCWhitebox.test_c_valid_contextcCsHtj}|j�}|j|jd�d|_|j|jd�dS)Nr�r)r_r�r5r�rV)rzr�r�r
r
r�test_c_valid_context_extrads
		z$CWhitebox.test_c_valid_context_extrac
Cs9tj}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�WdQXdS)
Ni@�Tr�r"r�r#Tz1.23rll����li���)r_r�rqr�r|r�r�rr�r�r�r�)rzr�rqr�r|r�rSr�r
r
r�test_c_roundms(					
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�)rzr�rR�maxsizer
r
r�
test_c_format�s	"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
�WdQXdS)Nrr`r�z99999999999999999999999999.9Z100000000000000000000000000Tz999.9)r_r�rsr�r�r&r�r�rUrVrmr)rzr�rsr�r�r�r
r
r�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�WdQXdS)Nz9.99e10z99.9E+9r�r�r�rr�r�r�z
1.23456789z	1e-100000ri�rr�Z200Tri�)r_r�rqrrr*r�r�rTr�r�r�r/rRr'rmr�r8rOr=rar�rNrr@rr�r�r)rzr�rqrrr*r�r�r
r
r�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�rBrFrrr r;rJrKrOr/rSrTrr�r}r1r,rMr�rHr�rIrQr"r#r$rr�r��mod)r_r�rrr�r�r&rUrVr%r'r�)rzr�rr�r�funcr�r
r
r�test_va_args_exceptions�sB		"	z!CWhitebox.test_va_args_exceptionscCs`|jtjjtjtjBtjBtjBtjB�|jtj	jtjtjBtjB�dS)N)
r�r_r�r3rBr7r?rAr(r�)rzr
r
r�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�itj|
6tj#|6tj$|	6tj%|6tj&|6tj'|6tj(|6tj
|6}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}"q#W�j|j"|"�q�Wq|WqiWx;|D]3}$|$|_!�j|j!|
@�|||j�qaWx;|D]3}$|$|_"�j|j"|
@�|||j�q�WdS)NcsFx?|D]7}||kr-�j||�q�j||�qWdS)N)rr~)r�Zsignal_dictr�)rzr
r�assertIsExclusivelySet9s
z<CWhitebox.test_c_signal_dict.<locals>.assertIsExclusivelySetTr�r�r(r�i'rr�rrr�r�r!r+r�ri���)<r_rr�rqrrrtrvrwrursrpr(r=rBr5rrr�r_�valuesr1r~r�r�rr�r�r�r�r6�	getsizeofr�r�r2r3r1r;r@rAr?r7r8r9r:r<r>r6r�r�rXr�ZsamplerYr�rrr�r�r!r+)%rzrr�rqrrrtrvrwrursrpr(r=rBrcr�r�r�rrZ
IntSignalsZIntCondZlimrr�r�r�rrr�r�r+r]Zcrr�r�rCr
)rzr�test_c_signal_dict%s�													

"
	
	

	

	











	
	zCWhitebox.test_c_signal_dictcs?tj�yddlm}Wntk
r>|jd�YnXdd�}dd�fdd�}id	d
6|dddg�d6d	d
6}idd
6|dddg�d6d	d
6}idd
6|dddg�d6dd
6}|dkr	|jt|d|d�n|jt|d|d�|jt|d|d�dS)Nr)rCzlocale.CHAR_MAX not availablecSsdjdd�|D��S)Nr�cSsg|]}t|��qSr
)rD)rr�r
r
rr��s	zJCWhitebox.test_invalid_override.<locals>.make_grouping.<locals>.<listcomp>)rE)rFr
r
rrG�sz6CWhitebox.test_invalid_override.<locals>.make_groupingr�cs�|�j||�S)N)r@)r�rHrA)r�r
rrI�sz0CWhitebox.test_invalid_override.<locals>.get_fmtrrK�rLrMZxxxxxr�rJZyyyyy�i90r�)r_r�rOrCrPrQr�r�)rzrCrGrIZinvalid_groupingZinvalid_dotZinvalid_sepr
)r�r�test_invalid_override�s0	




zCWhitebox.test_invalid_overridecCs�tj}tj}tj}|���}d|j|<dtj}|j|||�dtjd}|j|||�dtj}|j|||�dtjd}|j|||�WdQXdS)NTz0e%dr�z1e%d)r_r�r�rqrr6r[r�)rzr�r�rqr�r�r
r
r�test_exact_conversion�s			


zCWhitebox.test_exact_conversioncCs`tj}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	�WdQXdS)NTr�z
-0E+999999rr�z-0E-1000026rz-sNaNz-sNaN1)rr�r�)rr�r��r)r�rkr�rr�)r�rlr)r_r�r�rqrtrwrr6r[r�r�r�r�r�)rzr�r�rqrtrwr�r�r
r
r�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�)rzr�rRr�r�r
r
r�test_sizeofs	zCWhitebox.test_sizeofN)r�r�r�r�rIrJrKrLrTrUrErWrXrYrZr\r]r^rarbrfrirjrmrrr
r
r
rrFds*e+&	;,�%0rFr�r�cCstt�tt�|dk	r&|n	td�a|a|dkrMt}nttg}x�t	j
t�D]�}d|ksi|jd�r�qin|j
d�\}}|dk	r�||kr�qin|dd�}ttd||�ttd||�~~~~qiWz�t|�|dkr�dd	lm}	tjd}
trittjd<tt|d
|	�nttjd<tt|�|
tjd<nWdtr�tjtt�ntjtt�ts�tjdt�nttjdk	r�td��nXdS)
z� Execute the tests.

    Runs all arithmetic tests if arith is True or if the "decimal" resource
    is enabled in regrtest.py
    Nrz.decTestrJcSs|jt|�S)N)r��	directory)rzr�r
r
rr�Zsztest_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�listdirrsr�r�rbrZdoctestrtr6r7rr$�ORIGINAL_CONTEXT�warnings�warn�UserWarning�orig_sys_decimalr)�arith�verbose�
todo_tests�debugZtest_classes�filename�head�tailZtesterrtr;r
r
r�	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~rr�)�r�r�rvr6rlryr4r5r�r1rOZtest.supportrrrrrrrr	r
r�Ztimer�rPr_r�r7r|Z
cfractionsZ
pfractionsr�tupler*r�r_r#rprursrvrwrtrrrqrQr�rrmrirhrjrlrkr rnrXrxr&ZTESTDATADIRr��argvr��__file__�path�dirname�curdirZtestdir�seprs�isdirr�r��hasattrZEXTRA_FUNCTIONALITYZ
skipUnlessrEZskipIfZskip_if_extra_functionalityZTestCaser)r�r�r�r5r6r7rdrerfrWrXrYrwrxr�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'rFru�insertr�ZoptparseZOptionParserrfZ
add_option�
parse_argsZoptr��skipr�r
r
r
r�<module>sH"(




(I										�d�LM�
�(',)����T���~�P>m �$�U���7	%