HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.7/test/__pycache__/test_decimal.cpython-37.pyc
B

��g�:�"@s$dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZm
Z
mZmZmZddlmZmZmZmZddlZddlZddlZeddgd�Zeddgd�ZejdZed	d	gd�Zeejd<ed	d	gd�Zeejd<eeeeiZeejd<ee�r&ee� �j!�"��ndeee� �j!�"��iZ#ee�rnej$ej%ej&ej'ej(ej)ej*ej+ej,g	ndeej$ej%ej&ej'ej(ej)ej*ej+ej,g	iZ-d
d�Z.ej/Z/ej0Z0ej1Z1ej2Z2ej3Z3ej4Z4ej5Z5ej6Z6e/e0e1e2e3e4e5e6gZ7ee�r�e� ���ndee� ���iZ8dd
�Z9dZ:e;dk�r0ej<dZ=ne>Z=ej?�@e=��pFejAZBeBejCe:ejCZDej?�EeD�aFdZGeHed��r~dndZIe�JeId�ZKe�LeId�ZMGdd�dejN�ZOGdd�deO�ZPGdd�deO�ZQGdd�dejN�ZRGdd�deR�ZSGdd �d eR�ZTGd!d"�d"ejN�ZUGd#d$�d$eU�ZVGd%d&�d&eU�ZWGd'd(�d(ejN�ZXGd)d*�d*eX�ZYGd+d,�d,eX�ZZGd-d.�d.ejN�Z[Gd/d0�d0e[�Z\Gd1d2�d2e[�Z]d3d4�Z^d5d6�Z_Gd7d8�d8ejN�Z`Gd9d:�d:e`�ZaGd;d<�d<e`�ZbGd=d>�d>ejN�ZcGd?d@�d@ec�ZdGdAdB�dBec�ZeGdCdD�dDejN�ZfGdEdF�dFef�ZgGdGdH�dHef�ZhGdIdJ�dJejN�ZiGdKdL�dLei�ZjGdMdN�dNei�ZkGdOdP�dPejN�ZlGdQdR�dRel�ZmGdSdT�dTel�ZnGdUdV�dVejN�ZoGdWdX�dXeo�ZpGdYdZ�dZeo�ZqGd[d\�d\ejN�ZrGd]d^�d^er�ZsGd_d`�d`er�ZtGdadb�dbejN�ZuGdcdd�ddeu�ZvGdedf�dfeu�ZwGdgdh�dhejN�ZxGdidj�djex�ZyGdkdl�dlex�ZzeMGdmdn�dnejN��Z{Gdodp�dpejN�Z|Gdqdr�dre|�Z}Gdsdt�dte|�Z~Gdudv�dvejN�ZGdwdx�dxejN�Z�Gdydz�dzejN�Z�Gd{d|�d|ejN�Z�ee�Jed}�Gd~d�dejN���Z�eSeTeVeWeYeZe\e]eaebedeeegehejekemenepeqeseteveweyeze}e~e�ee�e�ePeQg"Z�e�sve�d�dd��Z�ne���de{�e���d�e��d�d�d��Z�e;dk�r ddl�Z�e���d��Z�e�j�d�d�d�d�d��e�j�d�d�d�d�d��e����\Z�Z�e�j��r�e�ddd��n&e��re�dde�e�j�d��ne�ddd��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)�import_fresh_module�
TestFailed�run_with_locale�cpython_only�decimalZ_decimal)Zfresh)Zblocked�	fractionscs,t||��|�t��fdd��D���dS)Nc3s(|] }|�kr�|n�|VqdS)N�)�.0�s)�d�expectedr
�-/usr/local/lib/python3.7/test/test_decimal.py�	<genexpr>Ksz!assert_signals.<locals>.<genexpr>)�getattr�
assertTrue�all)�cls�context�attrrr
)rrr�assert_signalsIs
rcCs2|sdS|jdtt�t|d�d�}|�|�dS)N�	r)�prec�rounding�traps)�Context�ROUND_HALF_EVEN�dict�fromkeys�Signals�
setcontext)�mZDefaultTestContextr
r
r�initbs
r&Zdecimaltestdata�__main__F�
DecClampedTz.test requires build with -DEXTRA_FUNCTIONALITYztest requires regular buildc@speZdZdZdd�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.c&Cs�|j��|_|j��|_dg|_tdddddddd	d
ddd
ddddddddddddg�|_|jtkr�|j�d�|j�d�|j�d�|j�d�|j�d�|j�d�|j�d �|j�d!�|j	|j
|j|j|j
d"�|_d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdH�%|_ttttttttdI�|_|jj|jj|jj|jj|jj|jj|jj|jj|jj|jj|jj|jj dJ�|_!dK|_"dS)LN�#Zscbx164Zscbx165Zexpx901Zexpx902Zexpx903Zexpx905Zlnx901Zlnx902Zlnx903Zlnx905Zlogx901Zlogx902Zlogx903Zlogx905Zpowx1183Zpowx1184Zpowx4001Zpowx4002Zpowx4003Zpowx4005Zpowx4008Zpowx4010Zpowx4012Zpowx4014Zpwsx803Zpwsx805Zpowx4302Zpowx4303Zpowx4342Zpowx4343Zpwmx325Zpwmx326)Z	precisionrZmaxexponentZminexponent�clamp�logical_and�_apply�number_class�compare_signal�
compare_total�compare_total_mag�copy_decimal�copy_abs�copy_negate�	copy_sign�
divide_int�logical_invert�is_canonical�	is_finite�is_infinite�is_nan�	is_normal�is_qnan�	is_signed�is_snan�is_subnormal�is_zero�max_mag�min_mag�
next_minus�	next_plus�next_toward�
logical_or�	normalize�remainder_near�same_quantum�sqrt�
to_eng_string�to_integral_value�to_integral_exact�
to_sci_string�logical_xor)%�andZapply�classZ
comparesigZcomparetotalZ
comparetotmag�copyZcopyabsZ
copynegate�copysignZ	divideint�invertZiscanonicalZisfiniteZ
isinfinite�isnanZisnormalZisqnanZissignedZissnanZissubnormalZiszeroZmaxmagZminmagZ	nextminusZnextplusZ
nexttoward�or�reduceZ
remaindernearZsamequantumZ
squarerootZtoengZ
tointegralZtointegralxZtosci�xor)ZceilingZdown�floorZ	half_downZ	half_evenZhalf_upZupZ05up)ZclampedZconversion_syntaxZdivision_by_zeroZdivision_impossibleZdivision_undefinedZinexactZinvalid_contextZinvalid_operationZoverflowZroundedZ	subnormalZ	underflow)r8r9r:r;r<r=r>r?r@rArJ)#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|jtkrF|jjdkrF|j�d�|j�d�|j�d�|j�|�S|j�||�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���?i�9�N)	rr_�MAX_EMAXr[�_unsafe_setprec�_unsafe_setemax�_unsafe_setemin�create_decimal�Decimal)rz�vrr
r
r�read_unlimitedszIBMTestCases.read_unlimitedcCs�tr
tj�t|��x}xp|D]h}|�dd��dd�}y|�|�}Wq|jjk
r�}z|�d|j	j
d|�Wdd}~XYqXqWWdQRXdS)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_files

zIBMTestCases.eval_filecCs�|�d�dkrX|dd�dkrX|�d�sX|�d�dd|�d�d�d�d��}n|�d�d��}x |jD]}|�|�dkrrdSqrW|s�dSd|kr�|�|�S|�|�SdS)	Nz -> r�z--z  --z->��:)�find�
startswith�split�stripr\�eval_directive�
eval_equation)rzr�ignorer
r
rr�,s( 
zIBMTestCases.eval_linecCsldd�|�d�D�\}}|dkr,|j|}n"yt|�}Wntk
rLYnX|j�|dd��}||�dS)Ncss|]}|����VqdS)N)r��lower)r�xr
r
rr?sz.IBMTestCases.eval_directive.<locals>.<genexpr>r�rcWsdS)Nr
)�argsr
r
r�<lambda>H�z-IBMTestCases.eval_directive.<locals>.<lambda>)r�ro�int�
ValueErrorrf�get)rzr�funct�valuer
r
rr�>szIBMTestCases.eval_directivecs�tst��dkrdS�j��yt|�d�}|d����}|d}trTtd|dd�|d��}|dd�}|d����}|d}|dd�}Wn"t	t
tfk
r��jj
�YnXd	d
�}	|�jkr�dS�j�||�}
|
dkr�dSt�j|
�}g}d}d}
�fd
d�|D��x t�jD]}d�jj|<�qWx�D]}d�jj|<�q8W�x8t|�D�]*\}}|�d�ddk�r�d|
}
|
�r�|d|}�qZn||}d}|	|�}|
dk�rlt�r^x��D]�}d�jj|<y|�j�|��WnR|k
�r�YnPt�jk
�r8}z��d|||f�Wdd}~XYnX��d||f�d�jj|<�q�W�j�|�}n��|�j�}|�|��qZW|	|�}t�r|
dk�rx��D]�}d�jj|<y||�WnR|k
�r�YnPt�jk
�r}z��d|||f�Wdd}~XYnX��d||f�d�jj|<�q�W�fdd�t�jD�}x�|D]�}d�jj|<y||�WnV|k
�r�YnTt�jk
�r�}z��dt|�||f�Wdd}~XYnX��d||f��qZWx|D]}d�jj|<�q�Wt�rtd�j�y,t||��}|
�jk�r>ttt |���}WnRt�jk
�r|}z��d||f�Wdd}~XYntd|��YnX��!�}|j"t#d��j"t#d���$||d|d|���$|�d|dt|��dS)Ng�������?z->rzTest � )�endr�r�cSs@|�dd��dd�}|�dd��dd�}|�dd��dd�}|S)Nz''ZSingleQuotez""ZDoubleQuote�'r��")r�)�valr
r
r�	FixQuotes_sz-IBMTestCases.eval_equation.<locals>.FixQuotesZrescaler�csg|]}�j|���qSr
)rxr�)rr�)rzr
r�
<listcomp>osz.IBMTestCases.eval_equation.<locals>.<listcomp>r�)rOrLz Raised %s in %s when %s disabledzDid not raise %s in %scsg|]}|�kr|�qSr
r
)r�e)�theirexceptionsr
rr��szRaised %s in %s; expected %sz--zRaised %s in %szERROR:)�keyzIncorrect answer for z -- got zIncorrect flags set in )%�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�ZfnameZvalsZconglomerateZquoter��ir�r��errorr�Zordered_errors�resultZmyexceptionsr
)rzr�rr�Ks�





 
 
$
"
zIBMTestCases.eval_equationcs�fdd�t�jD�S)Ncsg|]}�jj|r|�qSr
)r�flags)rr�)rzr
rr��sz.IBMTestCases.getexceptions.<locals>.<listcomp>)r#r)rzr
)rzrr��szIBMTestCases.getexceptionscCs0|jtkr$|jjdkr$|j�|�n||j_dS)Ni@�T)rr_�MAX_PRECrr}r)rzrr
r
rra�szIBMTestCases.change_precisioncCs||j_dS)N)rr)rzrr
r
rrb�sz#IBMTestCases.change_rounding_methodcCs0|jtkr$|jjdkr$|j�|�n||j_dS)Ni@�T)rr_r�rr�Emin)rz�expr
r
rrd�sz IBMTestCases.change_min_exponentcCs0|jtkr$|jjdkr$|j�|�n||j_dS)Ni@�T)rr_r�rr~�Emax)rzr�r
r
rrc�sz 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��sr�c@seZdZeZdS)�PyIBMTestCasesN)r�r�r��Prr
r
r
rr��sr�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}|�|�|d��dS)N�0)rr�r�)rzr�r
r
r�test_explicit_empty�sz,ExplicitConstructionTest.test_explicit_emptycCs|jj}|�t|d�dS)N)rr��assertRaisesr�)rzr�r
r
r�test_explicit_from_None�sz0ExplicitConstructionTest.test_explicit_from_NonecCs�|jj}|d�}|�t|�d�|d�}|�t|�d�|d�}|�t|�d�|d�}|�t|�d�x`tdd	�D]R}xLd
D]D}x>tdd�D]0}|d
||}||�}|�t|�t|��q�Wq~WqtWdS)N�-�45i{e��	500000123i���z-45rr�� )���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}|�t|d��d�|�t|d��d�|�t|d��d�|�t|d��d�|�t|d��d�|�t|d��d	�|�t|d
��d�|�t|d��d
�|�t|d��d�|�t|d��d�x6dD].}x(dD] }|�t||d|��d�q�Wq�W|���}d|j|<|�||d�|�t|ddd�|�||d�|�||d�|�||d�|�||d�|�||d�|�||d�WdQRXdS)Nr��NaNr�z45.34Z45e2z4.5E+3�uglyz1.3E4 
z1.3E+4z  -7.89z-7.89z  3.45679  z3.45679z	1_3.3e4_0z1.33E+41Z1_0_0_0�1000)r�r�� u z	9.311E+28T�xyz�1234r��yu1 2 3u 1 2 r�u  z123z1_2_3)	rr�rq�localcontextr�r�rr�r�)rzr�rqr�Zlead�trail�cr
r
r�test_explicit_from_strings6


z2ExplicitConstructionTest.test_explicit_from_stringcCsRddl}|jj}|j��}|�d�}|�t||��d�|�t|�|��d�dS)Nrz9.999999)�	_testcapirr�r�unicode_legacy_stringr�r�r�)rzr�r�rrr
r
r�test_from_legacy_stringsGs

z1ExplicitConstructionTest.test_from_legacy_stringscCs6|jj}|d�}|�t|�d�|d�}|�t|�d�|d�}|�t|�d�|d�}|�t|�d�|d	�}|�t|�d
�|�t|d�|�t|d�|�t|d
�|�t||d�ddf�|�t|d�|�t|d�|�t|d�|�t|d�|�t|d�|�t|d�|�t|d�|�t|d�dS)N)r)rrr�)r�)�r�rz-45)r)r�r��r����z45.34)r�)	r�r�r�rr�r�r�r�r�i��z-4.34913534E-17)rr
�F�Infinity)r�)r�r�r�rr�)�)r�r�r�rr�r�)g)r�r�r�rr�r�r�)r�r�r�rr�r�)r�)r�r�r�rr�zwrong!)r�)r�r�r�rr�g)r�)r�r�r�rr��1)r�r�r�)r�)r�r�r�Nr�r�)r�)r����r�rr�r�)r�)r��
r�rr�r�)r�)r�r�r��ar�r�)rr�r�r�r�r�)rzr�rr
r
r�test_explicit_from_tuplesQs.z2ExplicitConstructionTest.test_explicit_from_tuplescCs�|jj}|ddgdg�}|�t|�d�|ddddddddddg	dg�}|�t|�d	�|dd
dg�}|�t|�d	�|ddddddddddg	df�}|�t|�d	�dS)Nrr�r�r�r�rr�i��z-4.34913534E-17)	r�r�r�rr�r�r�r�r�)rr�r�r�)rzr�rr
r
r�test_explicit_from_list|s  z0ExplicitConstructionTest.test_explicit_from_listcCs\|jj}|�t|d��d�|�t|d��d�|�|d�|d��|�|d�|d��dS)NrFr�T)rr��assertIs�boolr�)rzr�r
r
r�test_explicit_from_bool�s
z0ExplicitConstructionTest.test_explicit_from_boolcCs�|jj}|d�}||�}|�t|�d�|d�}||�}|�t|�d�|d�}||�}|�t|�d�|d�}||�}|�t|�d�dS)	Nr�r�i{e�r�i���z-45rr�)rr�r�r�)rzr�rr�r
r
r�test_explicit_from_Decimal�sz3ExplicitConstructionTest.test_explicit_from_DecimalcCs6|jj}|d�}|�t|�|�|�t|�d�|�|td�����|�|td�����|�|td�����|�t|td���t|d���|�t|td���t|d���|�t|td���t|d���|�t|td	���t|d
���x>t	d�D]2}t
�d�t
�
�d
d}|�|t||���q�WdS)Ng�������?z90.1000000000000000055511151231257827021181583404541015625�nan�infz-infr�r�z	-Infinityz-0.0z-0��g{�G�z�?g@g�?)rr�r�r�r�r�floatr=r:r�r��expovariate)rzr��rr�r�r
r
r�test_explicit_from_float�s&
z1ExplicitConstructionTest.test_explicit_from_floatcCs�|jj}|jj}|jj}t�|j���}d|_|�}|�t|�d�|�	�}|�t|�d�|�
t|j	d�|�	d�}|�||�|�|�	d�|�	d��|d�}|�t|�d�|�	d�}|�t|�d�|�t|�	d��d	�|d
�}|�t|�d�|�	d
�}|�t|�d�|d
�}||�}|�t|�d�|�	|�}|�t|�d�d|_d|j
|<x8dD]0}|�	|�}|�t||��|�t|�|��qdWd|_d|j
|<|�
||j	d�d|_|�t|�	d��d�|�t|�	d��d�|�t|�	d��d�|�t|�	d��d�|�
||j	d�|�
t|j	d�|�
t|j	dd�|�
||j	d�|�
||j	d�d|_|�
||j	d �|�
||j	|d ��d!|j
|<|�t|�	d ��d	�|�|j|�d!|j|<|�t|�	|d ���d	�|�|j|�dS)"Nr�r�i�in�z457E+2Z456789z4.57E+5z3.14
r�)r�)	r�r�r�rr�r�r�r�r�i��z-4.34913534E-17z	-4.35E-17i{e�r�z5.00E+8�T)	l����l����l����i�ri���ll����li�z0E-017z0E-17r�z-Infz	-Infinity�NaN123r�)r�r�i��r�Z5678z 1234Z12_34ZNaN12345F)rr�rqrurS�
getcontextrr�r�r�r�r��assertIsInstancerr�
isinstancer�r�r�)rzr�rqru�ncrZprevdecr�r
r
r�$test_explicit_context_create_decimal�sr











z=ExplicitConstructionTest.test_explicit_context_create_decimalcCsb|jj}|j��}|�d�}|�t|�|�|�t|�d�|�|�td���	��|�|�td���
��|�|�td���
��|�t|�td���t|�d���|�t|�td���t|�d���|�t|�td���t|�d���|�t|�td	���t|�d
���d|_xBtd�D]6}t
�d
�t
�
�dd}|�|t|�|����q$WdS)Ng�������?z0.1000000000000000055511151231rrz-infr�r�z	-Infinityz-0.0z-0�dr	g{�G�z�?g@g�?)rr�rr�r�r�r�rr
r=r:rr�r�r)rzr�rrr�r�r
r
r�'test_explicit_context_create_from_floats(

z@ExplicitConstructionTest.test_explicit_context_create_from_floatcCsB|jj}dddd�}x(|��D]\}}|�t||��|�qWdS)Nr�z	0.0000372z-NaN2400)u1u٠.٠٣٧٢e-٣u-nan౨౪౦౦)rr��itemsr�r�)rzr��test_values�inputrr
r
r�test_unicode_digits3sz,ExplicitConstructionTest.test_unicode_digitsN)r�r�r�r�r�r�r�r�r
r�rrrrrr
rrrr
r
r
rr��s8
+Yr�c@seZdZeZdS)�CExplicitConstructionTestN)r�r�r�r_rr
r
r
rr>src@seZdZeZdS)�PyExplicitConstructionTestN)r�r�r�r�rr
r
r
rr@src@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dS)�ImplicitConstructionTestz6Unit tests for Implicit Construction cases of Decimal.cCs|jj}|�ttdt��dS)NzDecimal(5) + None)rr�r�r�r��locals)rzr�r
r
r�test_implicit_from_NoneFsz0ImplicitConstructionTest.test_implicit_from_NonecCs<|jj}|�t|d�d�d�|�|d�d|d��dS)Nr�r�Z50l2}r)rr�r�r�)rzr�r
r
r�test_implicit_from_intJsz/ImplicitConstructionTest.test_implicit_from_intcCs|jj}|�ttdt��dS)NzDecimal(5) + "3")rr�r�r�r�r)rzr�r
r
r�test_implicit_from_stringRsz2ImplicitConstructionTest.test_implicit_from_stringcCs|jj}|�ttdt��dS)NzDecimal(5) + 2.2)rr�r�r�r�r)rzr�r
r
r�test_implicit_from_floatVsz1ImplicitConstructionTest.test_implicit_from_floatcCs(|jj}|�|d�|d�|d��dS)Nr�r��2)rr�r�)rzr�r
r
r�test_implicit_from_DecimalZsz3ImplicitConstructionTest.test_implicit_from_Decimalcs8|jj}Gdd�d�}|�t|�|d��d�|�t|d�|��d�|�td�d�|�td�d	�|�td
�d�|�td�d
�|�td�d�|�td�d�dddddddg}xz|D]r\}��t|��fdd��t|��fdd��|�td|d�d�d�|�td|d�d�d�q�WdS) Nc@sLeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dS)z,ImplicitConstructionTest.test_rop.<locals>.EcSsdt|�S)Nzdivmod )r�)rz�otherr
r
r�
__divmod__csz7ImplicitConstructionTest.test_rop.<locals>.E.__divmod__cSst|�dS)Nz rdivmod)r�)rzr%r
r
r�__rdivmod__esz8ImplicitConstructionTest.test_rop.<locals>.E.__rdivmod__cSsdt|�S)Nzlt )r�)rzr%r
r
r�__lt__gsz3ImplicitConstructionTest.test_rop.<locals>.E.__lt__cSsdt|�S)Nzgt )r�)rzr%r
r
r�__gt__isz3ImplicitConstructionTest.test_rop.<locals>.E.__gt__cSsdt|�S)Nzle )r�)rzr%r
r
r�__le__ksz3ImplicitConstructionTest.test_rop.<locals>.E.__le__cSsdt|�S)Nzge )r�)rzr%r
r
r�__ge__msz3ImplicitConstructionTest.test_rop.<locals>.E.__ge__cSsdt|�S)Nzeq )r�)rzr%r
r
r�__eq__osz3ImplicitConstructionTest.test_rop.<locals>.E.__eq__cSsdt|�S)Nzne )r�)rzr%r
r
r�__ne__qsz3ImplicitConstructionTest.test_rop.<locals>.E.__ne__N)r�r�r�r&r'r(r)r*r+r,r-r
r
r
r�Ebsr.r�z	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__)z//�__floordiv__�
__rfloordiv__)z**�__pow__�__rpow__csd�t|�S)Nr�)r�)rzr%)�lopr
rr��r�z3ImplicitConstructionTest.test_rop.<locals>.<lambda>cst|��dS)Nr�)r�)rzr%)�ropr
rr��r�zE()zDecimal(10)r��10)rr�r��divmodr��setattr)rzr�r.ZoplistZsymr
)rBrCr�test_rop^s0z!ImplicitConstructionTest.test_ropN)
r�r�r�r�rr r!r"r$rGr
r
r
rrCsrc@seZdZeZdS)�CImplicitConstructionTestN)r�r�r�r_rr
r
r
rrH�srHc@seZdZeZdS)�PyImplicitConstructionTestN)r�r�r�r�rr
r
r
rrI�srIc@s:eZdZdZdd�Zdd�Zedd�dd	��Zd
d�ZdS)
�
FormatTestz#Unit tests for the format function.c�CsX|jj}ddddddddd	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`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~dd�d�d�d�d�g�}x*|D]"\}}}|�t||�|�|��qW|�t|d��jd��dS)�N)r�z0E-15z0e-15)r�z2.3E-15z2.3e-15)r�z2.30E+2z2.30e+2)r�z2.30000E-15z2.30000e-15)r�z1.23456789123456789e40z1.23456789123456789e+40)r�z1.5z1.5e+0)r�z0.15z1.5e-1)r�z0.015z1.5e-2)r�z0.0000000000015z1.5e-12)r�z15.0z1.50e+1)r�z-15z-1.5e+1)r�r�z0e+0)r��0E1z0e+1)r�z0.0z0e-1)r�z0.00z0e-2)z.6ez0E-15z0.000000e-9)z.6er�z0.000000e+6)z.6ez9.999999z9.999999e+0)z.6ez	9.9999999z1.000000e+1)z.6ez-1.23e5z-1.230000e+5)z.6ez
1.23456789e-3z1.234568e-3)r�r�r�)r�z0.0z0.0)r�z0E-2z0.00)r�z0.00E-8z0.0000000000)r�rKr�)r�z3.2E1�32)r�z3.2E2�320)r�z3.20E2rM)r�z3.200E2z320.0)r�z3.2E-6z	0.0000032)z.6fz0E-15z0.000000)z.6frKz0.000000)z.6fr�z0.000000)z.0fr�r�)z.0fz0e-2r�)z.0fz
3.14159265�3)z.1fz
3.14159265z3.1)z.4fz
3.14159265z3.1416)z.6fz
3.14159265z3.141593)z.7fz
3.14159265z	3.1415926)z.8fz
3.14159265z
3.14159265)z.9fz
3.14159265z3.141592650)�gr�r�)rOz0.0z0.0)rOrKz0e+1)�GrKz0E+1)rOz0E-5z0.00000)rOz0E-6z0.000000)rOz0E-7z0e-7)rOz-0E2z-0e+2)z.0gz
3.14159265rN)z.0nz
3.14159265rN)z.1gz
3.14159265rN)z.2gz
3.14159265z3.1)z.5gz
3.14159265z3.1416)z.7gz
3.14159265z3.141593)z.8gz
3.14159265z	3.1415926)z.9gz
3.14159265z
3.14159265)z.10gz
3.14159265z
3.14159265)r;rKz0%)r;Z0E0z0%)r;z0E-1z0%)r;z0E-2z0%)r;z0E-3z0.0%)r;z0E-4z0.00%)z.3%r�z0.000%)z.3%�0E10z0.000%)z.3%z0E-10z0.000%)z.3%z2.34z234.000%)z.3%z1.234567z123.457%)z.0%z1.23z123%)r�r�r�)r�z-NaN123z-NaN123)z+gZNaN456z+NaN456)z.3e�Infr�)z.16fz-Infz	-Infinity)z.0gz-sNaNz-sNaN)r�z1.00z1.00)�6�123z   123)z<6rTz123   )z>6rTz   123)z^6rTz 123  )z=+6rTz+  123)z#<10r�z
NaN#######)z#<10z-4.3z
-4.3######)z#<+10z0.0130z
+0.0130###)z#< 10z0.0130z
 0.0130###)z@>10z-Infz
@-Infinity)z#>5z-Infz	-Infinity)z?^5rTz?123?)z%^6rTz%123%%)z ^6z-45.6z-45.6 )z/=10z-45.6z
-/////45.6)z/=+10z45.6z
+/////45.6)z/= 10z45.6z
 /////45.6)z=10z-infz
-Infinity)z^16z-infz-Infinity)z>10z1.2345z
1.2345)z<10z1.2345z
1.2345)�,Z1234567z	1,234,567)rU�123456z123,456)rUZ12345z12,345)rUr�z1,234)rUrTrT)rU�12rW)rUr�r�)rUr�r�)rUz-1234567z
-1,234,567)rUz-123456z-123,456)z7,rVz123,456)z8,rVz 123,456)z08,rVz	0,123,456)z+08,rVz+123,456)z 08,rVz 123,456)z08,z-123456z-123,456)z+09,rVz
+0,123,456)z07,z1234.56z1,234.56)z08,z1234.56z1,234.56)z09,z1234.56z	01,234.56)z010,z1234.56z
001,234.56)z011,z1234.56z0,001,234.56)z012,z1234.56z0,001,234.56)z08,.1fz1234.5z01,234.5)rUz
1.23456789z
1.23456789)z,%z
123.456789z12,345.6789%)z,erVz
1.23456e+5)z,ErVz
1.23456E+5)za=-7.0z0.12345zaaaa0.1)z	<^+15.20%rz<<+Infinity%<<<)z>,%ZsNaN1234567zsNaN1234567%)z=10.10%rz
   NaN123%r�s-020)rr�r��formatr�r��
__format__)rzr�r�fmtrr�r
r
r�test_formatting�szFormatTest.test_formattingc	s@�jj�yddlm}Wntk
r6��d�YnX�fdd�}dA��fdd�	}d	|d
d
dg�dd�}d||g�d
d�}d|d
d
dg�dd�}d|ddd|g�dd�}d�d�|d
d
dg�d�d�d�}��|�d�|�d���|�d�|�d���|�d�|�d���|�d�|�d���|d|�d���|d|�d���|d|�d���|d|�d���|d|d �d!���|d|d �d"���|d|d �d"���|d|d �d#���|d$|d%�d&���|d$|d'�d&���|d$|d(�d)���|d$|d*�d+���|d,|d(�d-���|d,|d*�d-���|d,|d.�d/���|d,|d0�d1���|d,|d2�d1���|d,|d3�d4���|d5|d*�d6���|d5|d.�d6���|d5|d0�d6���|d5|d2�d7���|d5|d3�d8���|d5|d9�d8���|d5|d:�d;���|d5|d<�d=���|�d>�|d?�d@�dS)BNr)�CHAR_MAXzlocale.CHAR_MAX not availablecs"�jtkrd�dd�|D��S|S)Nr�cSsg|]}t|��qSr
)�chr)rr�r
r
rr�?szCFormatTest.test_n_format.<locals>.make_grouping.<locals>.<listcomp>)rr_�join)�lst)rzr
r�
make_grouping>sz/FormatTest.test_n_format.<locals>.make_groupingr�cs0�jtkr�|��||�S�|�j||d�SdS)N)�_localeconv)rr_rY)r��overriderZ)r�rzr
r�get_fmtAs
z)FormatTest.test_n_format.<locals>.get_fmt�.r�rU)�
decimal_point�grouping�
thousands_sepr�r��&r�r�r�r2s¿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)Nr�)rr��localer\�ImportError�skipTest�decoder�)	rzr\r`rc�en_US�fr_FR�ru_RUZcrazyZdotsep_wider
)r�rzr�
test_n_format6slzFormatTest.test_n_format�LC_ALL�ps_AFcCsn|jj}t��d}t��d}|dkr:|�d�|d��|dkrT|�d�|d��|�t|d�d�d	�dS)
Nrergu٫z5inappropriate decimal point separator ({!a} not {!a})u٬z1inappropriate thousands separator ({!a} not {!a})z
100000000.123r�u100٬000٬000٫123)rr�ri�
localeconvrkrXr�)rzr�rergr
r
r�&test_wide_char_separator_decimal_point�s

z1FormatTest.test_wide_char_separator_decimal_pointcCsPGdd�d|jj�}|�d�}|�|jj|j�|�d�}|�|jj|j�dS)Nc@seZdZdd�ZdS)z;FormatTest.test_decimal_from_float_argument_type.<locals>.AcSst|�|_dS)N)r��a_type)rzrr
r
r�__init__�szDFormatTest.test_decimal_from_float_argument_type.<locals>.A.__init__N)r�r�r�rvr
r
r
r�A�srwg@E@�*)rr��
from_floatr�ru)rzrwrr
r
r�%test_decimal_from_float_argument_type�s


z0FormatTest.test_decimal_from_float_argument_typeN)	r�r�r�r�r[rpr	rtrzr
r
r
rrJ�s YrJc@seZdZeZdS)�CFormatTestN)r�r�r�r_rr
r
r
rr{�sr{c@seZdZeZdS)�PyFormatTestN)r�r�r�r�rr
r
r
rr|�sr|c@sheZdZdZdd�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�}|�|||d��|�|||d��|d}|�||d��|�t|�t|��d|}|�||d��|�t|�t|��||7}|�||d��|d7}|�||d��dS)Nz-11.1z22.2z11.1r�z-6.1z16.1)rr�r�r�)rzr��d1�d2r�r
r
r�
test_addition�sz%ArithmeticOperatorsTest.test_additioncCs�|jj}|d�}|d�}|�|||d��|�|||d��|d}|�||d��|�t|�t|��d|}|�||d��|�t|�t|��||8}|�||d��|d8}|�||d��dS)	Nz-11.1z22.2z-33.3z33.3r�z-16.1z16.1z-38.3)rr�r�r�)rzr�r~rr�r
r
r�test_subtraction�sz(ArithmeticOperatorsTest.test_subtractioncCs�|jj}|d�}|d�}|�|||d��|�|||d��|d}|�||d��|�t|�t|��d|}|�||d��|�t|�t|��||9}|�||d��|d9}|�||d��dS)Nz-5rNz-15r�z-25z-75)rr�r�r�)rzr�r~rr�r
r
r�test_multiplication�sz+ArithmeticOperatorsTest.test_multiplicationcCs�|jj}|d�}|d�}|�|||d��|�|||d��|d}|�||d��|�t|�t|��d|}|�||d��|�t|�t|��||}|�||d��|d}|�||d��dS)	Nz-5�2z-2.5z-0.4r�z-1.25z-0.8z-0.625)rr�r�r�)rzr�r~rr�r
r
r�
test_divisionsz%ArithmeticOperatorsTest.test_divisioncCs�|jj}|d�}|d�}|�|||d��|�|||d��|d}|�||d��|�t|�t|��d|}|�||d��|�t|�t|��||}|�||d��|d}|�||d��dS)N�5r�r�r�r��r�)rr�r�r�)rzr�r~rr�r
r
r�test_floor_division"sz+ArithmeticOperatorsTest.test_floor_divisioncCs�|jj}|d�}|d�}|�|||d��|�|||d��|d}|�||d��|�t|�t|��d|}|�||d��|�t|�t|��||C}|�||d��|dC}|�||d	��dS)
Nr�r�Z25rLr�Z625r�Z16807Z390625)rr�r�r�)rzr�r~rr�r
r
r�
test_powering>sz%ArithmeticOperatorsTest.test_poweringcCs�|jj}|d�}|d�}|�|||d��|�|||d��|d}|�||d��|�t|�t|��d|}|�||d��|�t|�t|��||;}|�||d��|d;}|�||d��dS)Nr�r�r�r�r�)rr�r�r�)rzr�r~rr�r
r
r�test_moduleZsz#ArithmeticOperatorsTest.test_modulecCs|jj}|d�}|d�}t||�\}}|�||d��|�||d��|�t|�t|��|�t|�t|��t|d�\}}|�||d��|�||d��|�t|�t|��|�t|�t|��td|�\}}|�||d��|�||d��|�t|�t|��|�t|�t|��dS)Nr�r�r�r�r�)rr�rEr�r�)rzr�r~r�p�qr
r
r�test_floor_div_modulevs$z-ArithmeticOperatorsTest.test_floor_div_modulecCsT|jj}|�|d�
|d��|�|d�|d��|�t|d��t|d���dS)Nr�i���)rr�r��abs)rzr�r
r
r�test_unary_operators�sz,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]T\}}
xJ|
|D]>}|||
�}|tj
kr�dnd}|�||d�||j
||
|��q�Wq�W|���}d|j|<x^|D]V\}}
xJ|D]B}|||
�}|tj
k�rNdnd}|�||d�||j
||
|���q0W�q"WxF|	D]>\}}
x2|D]*}|�|tj	||
�|�|tj
||
��q�W�q�Wx6||	D]*\}}
x|
D]}|�||||
��q�W�q�WWdQRXdS)	Nr��sNaNrRr�TFz8expected {0!r} for operator.{1}({2!r}, {3!r}); got {4!r}r�)rr�rqr��operator�lt�le�gt�ge�eq�nerrXr�rr�)rzr�rqr�r�rr�r�Z
qnan_pairsZ
snan_pairsZ	order_opsZequality_opsr�r��opZgotr�ctxr
r
r�test_nan_comparisons�sD".





z,ArithmeticOperatorsTest.test_nan_comparisonscCsH|jj}|d��|d��}|�|d��d�|�|�t|d�jd�dS)Nr�r�z-2)rr�r5r�r�r�)rzr�rr
r
r�test_copy_sign�sz&ArithmeticOperatorsTest.test_copy_signN)r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r
r
r
rr}�s7r}c@seZdZeZdS)�CArithmeticOperatorsTestN)r�r�r�r_rr
r
r
rr��sr�c@seZdZeZdS)�PyArithmeticOperatorsTestN)r�r�r�r�rr
r
r
rr��sr�c
Cs�|jj}|jj}|jj}|jj}|jj}|jj}|jj}|jj}|d�}	|d�}
|	|
}|j	�
�|j��|	|
}|���}
|�
|
j|�|�||
j|	d�|�
|
j|�|��N}|�
|j|�|�
|j|�|�||j|	|d��|�
|j|�~WdQRX|�|
j|�~
WdQRX|�||d��|�||d��|�}|�
|j|�x&||||fD]}|�|j|��qhWdS)Nr�r�rr�z0.333333333333333333333333)rr�rqrrrtrwrsrr��finish1r]�synchro�waitrr�r��divide�compare�assertFalser�)rr�rqrrrtrwrsrr�r~�d3�test1�test2�c2�c3�c1�sigr
r
r�thfunc1�s@

r�c
Cs�|jj}|jj}|jj}|jj}|jj}|jj}|jj}|jj}|d�}	|d�}
|	|
}|�}d|_	|	|
}
|���}|�
|j|�|�||j
|d�d�|�
|j|�||��X}|�
|j|�|�|j|�d|j|<|�||j|d�d�|�
|j|�~WdQRX|�|j|�|�|j|�~WdQRX|j��|j��|�||d��|�|
|d	��|�|j|�|�
|j|�x&||||fD]}|�|j|��q�WdS)
Nr�r��Z1e425000000i�Tz1e-425000000z0.333333333333333333333333z0.333333333333333333)rr�rqrrrtrwrsrr�rrr�r��multiplyr�rr�r�r]�finish2r�)rr�rqrrrtrwrsrr�r~r�r�Zthiscontextr�r�r�r�r
r
r�thfunc2sH



r�c@seZdZdZdd�ZdS)�
ThreadingTestz0Unit tests for thread local contexts in Decimal.cCs�|jj}|jtkr$|jjs$|�d�|j}|j}|j}d|_d|_d|_t�	�|_
t�	�|_t�	�|_tj
t|fd�}tj
t|fd�}|��|��|j��|j��x"t|jD]}|�|j|�q�W|��|��||_||_||_dS)Nzcompiled without threading�i@�Ti���)�targetr�)r�DefaultContextr_�HAVE_THREADSrkrr�r��	threadingZEventr�r�r�ZThreadr�r��startr�r#r�r�r^)rzr�Z	save_precZ	save_emaxZ	save_eminZth1Zth2r�r
r
r�test_threading6s2





zThreadingTest.test_threadingN)r�r�r�r�r�r
r
r
rr�0sr�c@seZdZeZdS)�CThreadingTestN)r�r�r�r_rr
r
r
rr�]sr�c@seZdZeZdS)�PyThreadingTestN)r�r�r�r�rr
r
r
rr�`sr�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&d'�Zd(S))�
UsabilityTestz*Unit tests for Usability cases of Decimal.cCs|jj}|d�}|d�}|d�}|�||�|�||�|�||�|�||�|�||�|�||�|�||�|�||�|�|d�|�d|�|�|d�|�|d�|�|d�|�|t��|�|t�t	t
|td���}|dd�}t�
|�|��|�||�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_operatorsfs0
z'UsabilityTest.test_comparison_operatorscCs�|jj}|d�}|d�}|�|d�|�|d�|�|d�|�|d�|�|d�|�|d�|�d|�|�d|�|�d|�|�d|�|�d|�|�d|�|�d|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_comparison�s z+UsabilityTest.test_decimal_float_comparisoncCs�|jj}|d�}|d�}|�|d�|�d|�|�|d�|�d|�|�d|�|�|d�|�|d�|�d|�|�|�d�t�|�|�d�t�|�|�d�t�|�|�d�t�dS)Nz0.25z3.0y�?y�?y@y@�?)	rr�r�r�rr(�NotImplementedr*r))rzr�r�r�r
r
r�test_decimal_complex_comparison�sz-UsabilityTest.test_decimal_complex_comparisonc
	Cs�|jj}t|jj}|jj}|jj}|jj}tr6tjnd}trDtj	nd}trRtj
nd}|||d�}	||	���||	_|�|d�|dd��|�|dd�|d��|�|dd�|d	t
|���|�|d
t
|��|dd��|�|dd�|d	t
|���|�|d
t
|��|dd��|�|d�|dd
��|�|dd
�|d��d|	_|�|d�d|dd��|�|dd�|d�d�|�|dd�|dt
|���|�|dt
|��|dd��|�|d�|dd��|�|d�|dd��|�|d�|dd��|�|d�|dd��|�||d�j|dd��|�t|dd��|d���|�|d�|dd��|�|dd�|d��WdQRXdS)Ni�ɚ;i6e�ilʈ)r�r�rr�l	��Z��mH;5�Br�Z1ez-1el��!�0QYz0.1r�i,r�i�6l�c(	Z9erl�g�]�{l�����g�]z-infri����)rr�rZFractionrr�rqr_r|�MIN_EMIN�	MIN_ETINYrr�r�r�r�r�r�r�r�r)rr�r()
rz�Dr�rr�rq�emax�eminZetinyr�r
r
r� test_decimal_fraction_comparison�s@z.UsabilityTest.test_decimal_fraction_comparisoncCsP|jj}|d�}t�|�}|�t|�t|��t�|�}|�t|�t|��dS)Nz43.24)rr�rSr�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
D�}|��d��d��d
��d��d��d��d��d��d��d��d��d��d��d��d��d�g�x$|D]}��||�|t|���q�W��|�d��|d����tt�d����	|�d�����	|�d���dddd d!d"d#d$g}x2|D]*}t
|�}�|�}��||�||���qbW|��v}	�d%�}
d&|	_||
�}d'|	_||
�}d(|	_||
�}
��||���||
�d)|	_d*d+}
��|�|
��||
��WdQRXdS),Ncs t|�}|��}��||�|S)N)�hash�__hash__r�)rrr�)rzr
r�hashit�sz.UsabilityTest.test_hash_method.<locals>.hashitr�r�z	-InfinityZnan123z-NaNcs:g|]2}tdd�D]"}dD]}�|d||��qqqS)i����r�)r�r�r�)r�)rr%r�r�)r�r
rr��sz2UsabilityTest.test_hash_method.<locals>.<listcomp>)r������r��!�=�>�?�@�A�Bz-1z-0z0.00z-0.000rQz-0E12z10.0z	-23.00000Z1230E100z
-4.5678E50l��z	1.634E100z
90.697E100z
188.83E100z
1652.9E100Z	56531E100r�rRz-Infrz0.0z-.0e1z34.0z2.5z
112390.625z	-0.515625z123456789.1�r�r�i'iLi�)rr�r��extendr�r�r�r�r�rr
r)rzr�r�rr�Ztest_stringsrr�rr�r�Zh1Zh2Zh3r
)r�rzr�test_hash_method�sh


zUsabilityTest.test_hash_methodcCs�|jj}|d�}|d�}d}d}|�t||�|�|�t||�|�|�t||�|�|�t||�|�|�t||�|�|�t||�|�|�t||�|�|�t||�|�dS)Nz15.32z28.5r�r)rr�r�min�max)rzr�r~r�l1�l2r
r
r�test_min_and_max_methods8sz&UsabilityTest.test_min_and_max_methodscCs(|jj}|�|d��|�|d��dS)Nrz0.372)rr�r�r)rzr�r
r
r�test_as_nonzeroLszUsabilityTest.test_as_nonzerocCs4|jj}|d�}|�t|�d�|�t|�d�dS)Nz15.32zDecimal('15.32'))rr�r�r�r�)rzr�rr
r
r�test_tostring_methodsTsz#UsabilityTest.test_tostring_methodsc
Cs�|jj}|d�}|d�}|�t|�d�|�t|�d�|�t|�d�|�t|�d�dddd	d
ddd
dg	}x&|D]\}}|�t�||��|�qtW|�ttj|d��|�ttj|d��|�ttj|d��|�t	tj|d��|�t	tj|d��dddddddd
dg	}x(|D] \}}|�t�
||��|��qW|�ttj
|d��|�ttj
|d��|�ttj
|d��|�t	tj
|d��|�t	tj
|d��dddddddd
dddddddd g}x&|D]\}}|�t||��|��q�W|�tt|d��|�tt|d��|�tt|d��|�t	t|d��|�t	t|d��d!d"d#d$d%d&d'd(d)d*d+d,d-d.g}x.|D]&\}}}	|�tt||�|��|	��qjWdS)/NZ66z15.32r�r�g�p=
ף.@)z123.00r�)z3.2r�)z3.54r�)z3.899r�)z-2.3r�)z-11.0i����)z0.0r)z-0E3r)z89891211712379812736.1l�{�#'s�{Mz-NaNr�rrRz-Inf)z3.2r�)z3.54r�)z3.899r�)z-2.3r�)z89891211712379812736.1l�{�#'s�{M)z-3.5���)z-2.5r�)z-1.5r�)z-0.5r)z0.5r)z1.5r�)z2.5r�)z3.5r�)z123.456r�z0E+4)z123.456r�z0E+3)z123.456r�z1E+2)z123.456r�z1.2E+2)z123.456rrT)z123.456r�z123.5)z123.456r�z123.46)z123.456r�z123.456)z123.456r�z123.4560)z123.455r�z123.46)z123.445r�z123.44)rRr�r�)z-Infi��r�)ZsNaN314r�ZNaN314)
rr�r�r�r
�mathrZr�r��
OverflowErrorZceil�roundr�)
rzr�r~rZ
test_pairsrr�Ztest_triplesr�rr
r
r�test_tonum_methods\s�z UsabilityTest.test_tonum_methodscCs\|jj}xNdD]F}t||��}|�t�|��t�d|�}|�||�d�rNdnd�qWdS)N)rZnan1234z-nanz-nan2468g�?r2g�)	rr�r
rr�rVrTr�r�)rzr�rr�r�r
r
r�test_nan_to_float�s
zUsabilityTest.test_nan_to_floatcCs0|jj}x"dD]}||�}|�tt|�qWdS)N)�snanz-snanZsnan1357z	-snan1234)rr�r�r�r
)rzr�rrr
r
r�test_snan_to_float�s
z UsabilityTest.test_snan_to_floatcCs||jj}|d�}|�|tt|���|d�}|�|tt|���|d�}|�|tt|���|d�}|�|tt|���dS)N)r)rr)r�)r�r�r)r)r�r�r�r�r�)r�)	r�r�r�rr�r�r�r�r�i��)rr�r�r�r�)rzr�rr
r
r�test_eval_round_trip�sz"UsabilityTest.test_eval_round_tripcCsD|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�dS)Nr)r)rri���)r�)r�r�rz-4.34913534E-17)r�)	r�r�r�rr�r�r�r�r�i��r�)r)rr�)r)rrr�rr�r�r�r�)r)r�rr�r�r�r�)r�)rrr�%)r�)rr�)r�r
r�)r)rrr�rr�r�r�r�)r)r�rr�r�r�r�)r�)rrr�N)r�r
r�)r�r
r�)r)r�r�r�r�r�)r�)rr�r�r�r�)r�)rr�)rr�r��as_tuple)rzr�rr
r
r�
test_as_tuple�s6zUsabilityTest.test_as_tuplec		Cs|jj}|�t|j|d��|�t|j|d��|�t|j|d��|�t|j|d��x�tdd�D]�}x�td�D]�}x�dD]�}|d	|||f�}|��}|\}}|�|t�|�|t	�|�|t	�|�
|d
�|�t�
||�d�|�||�||�|�q|WqrWqdWdS)Nrz-infz-nanZsnan123r�r�i�)r/r2z%s%dE%drr�)rr�r�r��as_integer_ratior�r�r�tupler�r�r�r�Zgcd)	rzr�r�Zcoeffr�rZpqr�r�r
r
r�test_as_integer_ratios*
z#UsabilityTest.test_as_integer_ratiocCsd|jj}Gdd�d|�}|d�}|d�}||}|�t|�|�|�|�}|�t|�|�t�|�}|�t|�|�|�||�t�|�}|�t|�|�|�||�|d�}||�}|�t|�|�|�||�||�}|�t|�|�|�||�|�|jd�||�}|�t|�|�|�||�d|_||�}|�t|�|�|�||�|�|jd�dS)Nc@seZdZdZdS)z1UsabilityTest.test_subclassing.<locals>.MyDecimalN)r�r�r�r�r
r
r
r�	MyDecimal8sr�r�r�z1.0r)	rr�rr�r�rSr�r�r�)rzr�r�r~rrr�r%r
r
r�test_subclassing4s<


zUsabilityTest.test_subclassingcCs@|jj}|jj}|�}|�t|d����t|�|d����dS)Nr)rr�rr�r�rK)rzr�rr�r
r
r�test_implicit_contextcs
z#UsabilityTest.test_implicit_contextc
Csf|jj}|jj}|jj}|jj}|jj}|jj}|jj}|jj}|jj	}	|jj
}
|jj}||���
��}d|_d|_
d|_|d�}
|d�}|d�}|��|�t|
jdd��d�|�|j|	�|�|j|
�|��|j||jdd�|�|j|�|�|jdd�d	�|�|jdd�d
�|��|�t|
jdd��d�|�|j|	�|�|j|
�|��|j||d�jdd�|�|j|�|��|�t|
jdd��d
�|�|j|	�|�|j|
�|��|j||d�jdd�|�|j|�|��|�t|
jdd��d�|j||d�jdd�|�|j|�|��|�t|
jdd��d�|j||jdd�|�|j|�|��|�t|jdd��d�|j||d�jdd�|�|j|�|��|�t|jdd��d�|j||d�jdd�|�|j|�|��|�t|jdd��d�|j||jdd�|�|j|�|�t|j dd��d�|��|�t|j!dd��d�|�|j|�|�|j|	�|�|j|
�|�|j|�|�|j|�|��|j||j!dd�|�|j|�d|_"|�t|j#dd��d�d|_"|��t|
j$|d�dd��}|�|d�|j||
j$|d�dd�|�|j|�|��t|
j%ddd��}|�|d�|j||
j%|d�dd�|�|j|�|��t|
j&ddd��}|�|d�|j||
j&ddd�|�|j|�|��t|
j'ddd��}|�|d�|j||
j'ddd�|�|j|�|��t|
j(ddd��}|�|d �|j||
j(ddd�|�|j|�|��t|
j)ddd��}|�|d�|j||
j)|d�dd�|�|j|�|��t|
j*ddd��}|�|d�|j||
j*|d�dd�|�|j|�|��t|
j+ddd��}|�|d�|j||
j+|d�dd�|�|j|�|��t|
j,ddd��}|�|d�|j||
j,|d�dd�|�|j|�|��t|
j-ddd��}|�|d �|j||j-ddd�|�|j|�|��t|
j.d!dd��}|�|d"�|j||
j.ddd�|�|j|�|��t|
j/ddd��}|�|d#�|j||
j/d$dd�|�|j|�|��t|
j0d!dd��}|�|d"�|j||
j0d$dd�|�|j|�|��t|
j1d!d%dd��}|�|d&�|j||
j1|d�d%dd�|�|j|�t2|_3t|d'�j4ddd(��}|�|d�t5|_3t|d'�j4ddd(��}|�|d)�t|d'�j4t6dd(��}|�|d�|��|j||d�j4dd�|�|j|�t2|_3t|d'�j7ddd(��}|�|d�t5|_3t|d'�j7ddd(��}|�|d)�t|d'�j7t6dd(��}|�|d�|��|j||d�j7dd�|�|j|�t2|_3t|d'�j8ddd(��}|�|d�t5|_3t|d'�j8ddd(��}|�|d)�t|d'�j8t6dd(��}|�|d�|��|j||d�j8dd�|�|j|�t6|_3t|d*�j9|d+�ddd,��}|�|d-�t5|_3t|d*�j9|d+�ddd,��}|�|d.�t|d*�j9|d+�t6dd,��}|�|d-�|��|j||j9|d/�t6dd(�|�|j|�WdQRX||���X}d|_d|_
d|_|dd0��0}|�|jd�|�|j
d�|�|jd�WdQRXWdQRXdS)1Nr�i�i���Z111Z1e9999z1e-9999)rz1.609487E+48FTz4.709530r�z2.045323r�rZ1111000z
9.999999E+999r�r�r�z
+Subnormalz0E-1005r�ZNan891287828Z
NaN1287828i  z-1r��eZ101r�rDr�Z11100z1.11E+9i'r�Z225z1.5)rrr�z1.50001z1e-3)r�rrz1.501z1.500z1e-10)r�):rr�rr�rqrrrtrwrvrsrurprr�r�r�r�r�r�rr�r�rr<r@�ln�log10�logbr7rDrErHr.rK�capitalsrLr�r/r,rGrPr�rBr�rCrI�rotate�scaleb�shift�fmar r�to_integralrirmrMrN�quantize)rzr�rr�rqrrrtrwrvrsrurpr�r�r��zr�rr
r
r�test_none_argsls�zUsabilityTest.test_none_argscCs |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��	|d���|�|d��
d�|d��
|d���|�|d��d�|d��|d���|�|d��d�|d��|d���|�|d��
d�|d��
|d���|�|d��d�|d��|d���|�|d��d�|d��|d���|�|d	��d�|d	��|d���|�|d��d
�|d��|d
���|�|d��d�|d��|d���|�|d��d
�|d��|d
���|�|d��d�|d��|d���|�|d��|d�d�|d��|d�|d���|�|d��dd�|d��|d�|d���|�|d��d|d��|d��|d�|d���dS)Nr�r�iu'i�i7r�i�rir�i�z9.123i����i�r�i�r��C)rr�r�r�r/r0r1r,rGrPr�rBr�rCrFrrIrrJrrr	)rzr�r
r
r�test_conversions_from_int[	sVz'UsabilityTest.test_conversions_from_intN)r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr
rr
r
r
rr�cs*$*	Tg
-!/	pr�c@seZdZeZdS)�CUsabilityTestN)r�r�r�r_rr
r
r
rr�	src@seZdZeZdS)�PyUsabilityTestN)r�r�r�r�rr
r
r
rr�	src@s\eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�PythonAPItestscCsT|jj}|�t|tj��|�t|tj��|�|d�tj�|�	|d�tj�dS)Nr)
rr�r�
issubclass�numbers�Numberr�ZRealrZassertNotIsInstance)rzr�r
r
r�test_abc�	s
zPythonAPItests.test_abccCs��x�ttjd�D�]�}|jj}tjd}|jtjd<|d�}t�||�}t�|�}|�	||�t
�r�t
�d�}t�d�}t
tjd<t�||�}	ttjd<t�|	�}
|�|
tj�|�	|
|�ttjd<t�||�}t
tjd<t�|�}
|�|
t
j�|�	|
|�t
�d��
�}t�d��
�}t
tjd<t�||�}	ttjd<t�|	�}
|�|
tj�|�	|
|�ttjd<t�||�}t
tjd<t�|�}
|�|
t
j�|�	|
|�|tjd<qWdS)Nr�rz-3.141590000z-3.123e81723)r��pickle�HIGHEST_PROTOCOLrr��sys�modules�dumps�loadsr�r_r�rr�ZDecimalTuple)rz�protor��savedecimalrr�r�r�r�ZsxrZsyr
r
r�test_pickle�	sL















zPythonAPItests.test_picklecCs�|jj}x`tdd�D]R}d|d}|�t||��tt|���||�}|�t�}|�|t|��|�qW|�t	t|d��|�t	t|d��|�t
t|d��|�t
t|d��dS)	Ni����z%0.2fgY@z-nanr�rz-inf)rr�r�r�r�r
r
rir�r�r�)rzr�r�rrrr
r
r�test_int�	s
zPythonAPItests.test_intcCsp|jj}xbtdd�D]T}d|d}|�t||��tt|���||�}|�t�}|�|t�	|��|�qWdS)Ni���r z%0.2fgY@)
rr�r�r�r�r
r
rir�Ztrunc)rzr�r�rrrr
r
r�
test_trunc�	s
zPythonAPItests.test_trunccCs�|jj}Gdd�d|�}|�t||��|�d�}|�t|�|�|�t|�d�|�|jd�d}|�|�|�||��|�|�t	d���
��|�|�t	d�����|�|�t	d	�����|�t|�t	d���t|d
���|�t|�t	d���t|d���|�t|�t	d	���t|d���|�t
|jd
�xBtd�D]6}t�d�t��dd}|�|t	|�|����qBWdS)Nc@seZdZdd�ZdS)z1PythonAPItests.test_from_float.<locals>.MyDecimalcSs
d|_dS)Nr�)r�)rz�_r
r
rrv�	sz:PythonAPItests.test_from_float.<locals>.MyDecimal.__init__N)r�r�r�rvr
r
r
rr��	sr�g�������?z90.1000000000000000055511151231257827021181583404541015625r�ls\�&�5$3�|	rrz-infr�r�z	-Infinity�abcr	g{�G�z�?g@g�?)rr�rrryr�r�r�r�r
r=r:r�r�r�r�r)rzr�r�rZbigintr�r�r
r
r�test_from_float�	s.

zPythonAPItests.test_from_floatcCs�|jj}|jj}|jj}|dtd�}|�|�tj�|d��|dt	d�}|�|�tj�|d��|d|gd�}|�
||jtj�|�t|�d��d�|�t|�d��d	�|�t|�d
��d�dS)Nr�)rrz3.1415z3.1416)rrg�z
Decimal('-0')g�?zDecimal('1')r�z
Decimal('10'))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}|ddd�}|�|d��|d��|d��|�|d�j|d�td�|d��|j||d	�j|d
�|d�|�}|d�}|j||d
�td�}|�||d��dS)Ni��iay��)r�r�z7.335z.01z7.34)rz7.33Z10e99999Z1e100000)rz0.871831e800Z1e797)rr�rz	8.71E+799)rr�rrqr�rrir�)rzr�rrqr�rr�r
r
r�
test_quantize'
s"

zPythonAPItests.test_quantizecCs�|jj}|d�}|�|j|�|�|jd�|�|��|�|d�}|�t|�ttd���|�t	t
|dd�|�t	t
|dd�|�t	t
|dd�|�t	t
|d	d�dS)
Nz9.8182731e181273rr�r��realr�imag�	conjugate�__complex__)rr�r�r)r*r+�complexr
r�r�rF)rzr�r�r
r
r�test_complex?
szPythonAPItests.test_complexc	Cs|jj}|jj}|jj}|jj}|jj}|�}d|_d|_d|_|����}|�	�|�
|d|�d�|�
|d|d�d�|�
||dd�d�|�
||d�d�|�	�|j||d|d�|�|j
|�|�|j
|�|�	�|�
|d�j|d�d	�|j||d
�j|d�|�|j
|�|�|j
|�|�	�|�
|d�j|d�|d��|j||d�j|d�|�|j
|�|�|j
|�|�
|d�j|d�|d��|�
|d�j|d�d
�|�
|d�j|d�|d��|�
|d�j|d�|d��|�
|d�j|d�d�|�
|d�j|d�d�|�
|d�j|d�d�|�
|d�j|d�|d��|�
|d�j|dd�d�|�	�|j||d�j|d�|d�|�|j
|�|�|j
|�|�
|d�j|d�|d�|d��|�
|d�j|d�|d�|d��|�
|d�j|d �|d�|d ��|�
|d!�j|d"�|d�|d#��|�
|d!�j|d"�|d�|d��|�
|d�j|d$�|d�|d%��|�	�|j||d�j |d&�|d�|�|j
|�|�|j
|�|�
|d'�j!|d(�|d�|d)��|�
|d*�j"|d+�|d	d,�|d-��|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�|�|d�j,|d��|�|d�j-|d��|jt#|d�j.|d�|jt#|d�j/|d�|jt#|d�j0|d�|�
|d.�j1|d�d�|�
|d�j2|d�d�|�
|d�j3|d�d/�|�
|d0�j4|d�d0�|�
|d1�j5|d2�|d�d�|�
|d1�j6|d2�|d�d�|�
|d3�j7|d2�|d�d�|�
|d4�j8d|d�d�|�
|d4�j8d|d�d�|�	�|j||d4�j9d|d�|�|j
|�|�|j
|�|�
|d4�j:d|d�d�|jt#|j;d5|d�|jt#|d�j<|d�|�
|d��=�d�|jt#|d$�j>|d�|jt#|d$�j?|d�|jt#|d�j=d6d�|jt#|d�j=d6d7�WdQRXdS)8Nr�r�r)r)rr�rr�r�r�r�z0.7z-infr�z-0.9z9.73z1E+1Z9999i'z-2000i0���rTr�z0.0625z0.2r�)rr%r�rz0.01z0.0101z0.0z-0.3z0.02z-0.03z-0.0z-1z0.1Z1e10z9.99z1.5z-0.5z9.9z0.9)�thirdrr%z7E+1i����z
+Subnormalz0.21Z11rDZ01Z23g�������?r�)r�)@rr�rr�rqrtrr�r�r�r�r�rr�r�r�rrrDrErHr
rNrMrKr�r/r�rBr�rCrFrrIr	r�r8r9r:r;r=r?r>rAr<r@�adjustedr+�radixrr7r.rLr,rGrPrrrryr��	canonicalr3r4)rzr�rr�rqrtZxcr�r
r
r�test_named_parametersO
s�
""
"
"

z$PythonAPItests.test_named_parameterscCs�|j}|j}|j}|j}|j}|j}|j}|j}|j}	|j	}
|j
}|�t|t
��|�t||��|�t||��|�t|t��|�t||��|�t|t��|�t||
��|�t||	��|�t||��|�t||	��|�t||
��|�t||��|�t||��|�t||��|�t|	|��|�t|
|��|�t||��|�t|j|��|�t|j|��|�t|j|��|�t|jt��|�t|j|��dS)N)rr�rq�FloatOperationrrrtrwrvrsrurprr�ArithmeticErrorr��ZeroDivisionErrorZConversionSyntaxZDivisionImpossibleZDivisionUndefinedZInvalidContext)rzrr�rqr4rrrtrwrvrsrurpr
r
r�test_exception_hierarchy�
sBz'PythonAPItests.test_exception_hierarchyN)
r�r�r�rrr!r"r%r'r(r.r3r7r
r
r
rr�	s3 prc@seZdZeZdS)�CPythonAPItestsN)r�r�r�r_rr
r
r
rr8�
sr8c@seZdZeZdS)�PyPythonAPItestsN)r�r�r�r�rr
r
r
rr9�
sr9c@seZdZdd�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)��ContextAPItestsc
Cs�|jj}|jj}|jj}|jj}|�}|ddddddddd�}x�||gD]z}|�|jd�|�|jt�|�|j	d�|�|j
d�|�|jd�|�|jd�t
||dg�t
||d|||g�qHWdS)	N)rrr�r�rr+r�rri?Bi���r�rr�r)rrrqrrrtr�rrr r�r�rr+r)rzrrqrrrtr�r�r�r
r
rr
�
s"
zContextAPItests.test_none_argscCsvddl}|j��}x&tD]}|�|�|_|�|j|�qW|�d�}|�tt	|d|�|�d�}|�tt	|d|�dS)Nrr�rz	ROUND_UP)
r�rr�
RoundingModesr�rr�r�r�rF)rzr�r�Zrndrr
r
rr�s



z(ContextAPItests.test_from_legacy_stringscCs��x�ttjd�D�]�}|jj}tjd}|jtjd<|�}t�t�||��}|�	|j
|j
�|�	|j|j�|�	|j|j�|�	|j
|j
�|�	|j|j�|�	|j|j�|�	|j|j�|�	|j|j�tr�ttfttfgnttfg}�x�|D�]�\}}�x�tt�D�]|\}	}
�xntt|�D�]\\}}
�xNtt|�D�]<\}}
t�dd�}
t�dd�}t�dd�}t�d�}t�d�}|tjd<|j|
||t|	||t|d|�t|d|�d�}t�||�}|tjd<t�|�}|�||j�|�	|j
|
�|�	|j|�|�	|j|�|�	|j
t|	�|�	|j|�|�	|j|�t||dt|d|��t||d	t|d|���q>W�q$W�q
Wq�W|tjd<qWdS)
Nr�rri����rr�)rr�r�rrr+r�rr�r)r�rrrrrrrrr�rr�r�rrr+r�rr_r�r�r;r�r��	randrangerr)rzrrrr�r��combinationsZdumper�loaderZrir#�fiZtirr�r��capsr+rrr
r
rrsX





0zContextAPItests.test_picklecCsB|jj}|�|d�dd|d�dig�|�|d�dddig�dS)Nr�rg�?)r�r�)rr�ZassertInZassertNotIn)rzr�r
r
r�test_equality_with_other_typesNsz.ContextAPItests.test_equality_with_other_typescCs�|jj}|jj}|�}|��}|�t|�t|��|�t|j�t|j��|�t|j�t|j��t|j�	��}t|j�	��}|�
||�|�
|j|j�dS)N)rr�rrSr�r�r�rr]�keysr�)rzr�rr�rZk1Zk2r
r
r�	test_copyTszContextAPItests.test_copycCs"|jj}|�}|�tt|d�dS)NZ_clamp)rrr�r�r)rzrr�r
r
r�test__clampcszContextAPItests.test__clampcCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�z-1)rr�rr�r�r�r�)rzr�rr�rr
r
r�test_absnszContextAPItests.test_abscCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�)rr�rr`r�r�r�)rzr�rr�rr
r
r�test_addwszContextAPItests.test_addcCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�)rr�rr�r�r�r�)rzr�rr�rr
r
r�test_compare�szContextAPItests.test_comparecCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�)rr�rr/r�r�r�)rzr�rr�rr
r
r�test_compare_signal�sz#ContextAPItests.test_compare_signalcCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�)rr�rr0r�r�r�)rzr�rr�rr
r
r�test_compare_total�sz"ContextAPItests.test_compare_totalcCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�)rr�rr1r�r�r�)rzr�rr�rr
r
r�test_compare_total_mag�sz&ContextAPItests.test_compare_total_magcCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�z-1)rr�rr3r�r�r�)rzr�rr�rr
r
r�
test_copy_abs�szContextAPItests.test_copy_abscCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�z-1)rr�rr2r�r�r�)rzr�rr�rr
r
r�test_copy_decimal�sz!ContextAPItests.test_copy_decimalcCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�z-1)rr�rr4r�r�r�)rzr�rr�rr
r
r�test_copy_negate�sz ContextAPItests.test_copy_negatecCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�z-2)rr�rr5r�r�r�)rzr�rr�rr
r
rr��szContextAPItests.test_copy_signcCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�rr�r�r�r�)rzr�rr�rr
r
r�test_divide�szContextAPItests.test_dividecCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�rr6r�r�r�)rzr�rr�rr
r
r�test_divide_int�szContextAPItests.test_divide_intcCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�rrEr�r�r�)rzr�rr�rr
r
r�test_divmod�szContextAPItests.test_divmodcCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rr�r�r�r�)rzr�rr�rr
r
r�test_exp�szContextAPItests.test_expcCs^|jj}|jj}|�}|�|d�|d�|d��}|�|�ddd�|�|�|�|d�dd�|�|�|�d|d�d�|�|�|�dd|d��|�|�|�|d�|d�d�|�|�t|jddd�|�t|jddd�|�t|jddd�|�t|j|d�|d�d	�|�t|j|d
�|d�d�|�t|d�j|d�d	�|�t|d
�j|d�d�dS)
Nr�r�r�r�rN�4r�rz
not a decimalr�r�gZd;�O��?)rr�rr	r�r�r�)rzr�rr�rr
r
r�test_fmas(

zContextAPItests.test_fmacCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rr9r�r�r�)rzr�rr�rr
r
r�test_is_finite!szContextAPItests.test_is_finitecCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rr:r�r�r�)rzr�rr�rr
r
r�test_is_infinite*sz ContextAPItests.test_is_infinitecCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rr;r�r�r�)rzr�rr�rr
r
r�test_is_nan3szContextAPItests.test_is_nancCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rr<r�r�r�)rzr�rr�rr
r
r�test_is_normal<szContextAPItests.test_is_normalcCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rr=r�r�r�)rzr�rr�rr
r
r�test_is_qnanEszContextAPItests.test_is_qnancCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rr>r�r�r�)rzr�rr�rr
r
r�test_is_signedNszContextAPItests.test_is_signedcCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rr?r�r�r�)rzr�rr�rr
r
r�test_is_snanWszContextAPItests.test_is_snancCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rr@r�r�r�)rzr�rr�rr
r
r�test_is_subnormal`sz!ContextAPItests.test_is_subnormalcCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rrAr�r�r�)rzr�rr�rr
r
r�test_is_zeroiszContextAPItests.test_is_zerocCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rrr�r�r�)rzr�rr�rr
r
r�test_lnrszContextAPItests.test_lncCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rrr�r�r�)rzr�rr�rr
r
r�
test_log10{szContextAPItests.test_log10cCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rrr�r�r�)rzr�rr�rr
r
r�	test_logb�szContextAPItests.test_logbcCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�)rr�rr,r�r�r�)rzr�rr�rr
r
r�test_logical_and�sz ContextAPItests.test_logical_andcCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Ni�r�)rr�rr7r�r�r�)rzr�rr�rr
r
r�test_logical_invert�sz#ContextAPItests.test_logical_invertcCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�)rr�rrGr�r�r�)rzr�rr�rr
r
r�test_logical_or�szContextAPItests.test_logical_orcCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�)rr�rrPr�r�r�)rzr�rr�rr
r
r�test_logical_xor�sz ContextAPItests.test_logical_xorcCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�rr�r�r�r�)rzr�rr�rr
r
r�test_max�szContextAPItests.test_maxcCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�rrBr�r�r�)rzr�rr�rr
r
r�test_max_mag�szContextAPItests.test_max_magcCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�rr�r�r�r�)rzr�rr�rr
r
r�test_min�szContextAPItests.test_mincCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�rrCr�r�r�)rzr�rr�rr
r
r�test_min_mag�szContextAPItests.test_min_magcCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rZminusr�r�r�)rzr�rr�rr
r
r�
test_minus�szContextAPItests.test_minuscCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�rr�r�r�r�)rzr�rr�rr
r
r�
test_multiply�szContextAPItests.test_multiplycCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rrDr�r�r�)rzr�rr�rr
r
r�test_next_minus�szContextAPItests.test_next_minuscCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rrEr�r�r�)rzr�rr�rr
r
r�test_next_plus
szContextAPItests.test_next_pluscCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�rrFr�r�r�)rzr�rr�rr
r
r�test_next_toward
sz ContextAPItests.test_next_towardcCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rrHr�r�r�)rzr�rr�rr
r
r�test_normalize
szContextAPItests.test_normalizecCsn|jj}|jj}|�}|�|�d�|�|d���|�|�d�|�|d���|�|�d�|�|d���dS)Nr�ri���)rr�rr�r.)rzr�rr�r
r
r�test_number_class&
sz!ContextAPItests.test_number_classcCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�r�plusr�r�r�)rzr�rr�rr
r
r�	test_plus/
szContextAPItests.test_pluscCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�|�|d�|d��|�|�t|jdd�|�t|jdd�|�|jdddd�d�dS)	Nr�r�r�rRr�r�r�)�modulor�r)rr�r�powerr�r�r�)rzr�rr�rr
r
r�
test_power8
szContextAPItests.test_powercCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�rrr�r�r�)rzr�rr�rr
r
rr(F
szContextAPItests.test_quantizecCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�rZ	remainderr�r�r�)rzr�rr�rr
r
r�test_remainderR
szContextAPItests.test_remaindercCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�rrIr�r�r�)rzr�rr�rr
r
r�test_remainder_near^
sz#ContextAPItests.test_remainder_nearcCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�rrr�r�r�)rzr�rr�rr
r
r�test_rotatej
szContextAPItests.test_rotatecCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rrKr�r�r�)rzr�rr�rr
r
r�	test_sqrtv
szContextAPItests.test_sqrtcCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�rrJr�r�r�)rzr�rr�rr
r
r�test_same_quantum
sz!ContextAPItests.test_same_quantumcCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�rrr�r�r�)rzr�rr�rr
r
r�test_scaleb�
szContextAPItests.test_scalebcCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�rrr�r�r�)rzr�rr�rr
r
r�
test_shift�
szContextAPItests.test_shiftcCs�|jj}|jj}|�}|�|d�|d��}|�|�dd�|�|�|�|d�d�|�|�|�d|d��|�|�t|jdd�|�t|jdd�dS)Nr�r�r�r�)rr�r�subtractr�r�r�)rzr�rr�rr
r
r�
test_subtract�
szContextAPItests.test_subtractcCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rrLr�r�r�)rzr�rr�rr
r
r�test_to_eng_string�
sz"ContextAPItests.test_to_eng_stringcCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rrOr�r�r�)rzr�rr�rr
r
r�test_to_sci_string�
sz"ContextAPItests.test_to_sci_stringcCsJ|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�dS)Nr�rD)rr�rrNr�r�r�)rzr�rr�rr
r
r�test_to_integral_exact�
sz&ContextAPItests.test_to_integral_exactcCs\|jj}|jj}|�}|�|d��}|�|�d�|�|�t|jd�|�t|jdd�dS)Nr�rDr�)rr�rrMr�r�r�)rzr�rr�rr
r
r�test_to_integral_value�
sz&ContextAPItests.test_to_integral_valueN)Cr�r�r�r
r
r�rrArCrDrErFrGrHrIrJrKrLrMr�rNrOrPrQrSrTrUrVrWrXrYrZr[r\r]r^r_r`rarbrcrdrerfrgrhrirjrkrlrmrnrprsr(rtrurvrwrxryrzr|r}r~rr�r
r
r
rr:�
s~=																												r:c@seZdZeZdS)�CContextAPItestsN)r�r�r�r_rr
r
r
rr��
sr�c@seZdZeZdS)�PyContextAPItestsN)r�r�r�r�rr
r
r
rr��
sr�c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�ContextWithStatementc	Csb|jj}|jj}|�}|��}|�}WdQRX|�}|�||d�|�||d�|�||d�dS)Nz!did not restore context correctlyzdid not copy the contextz __enter__ returned wrong context)rrr�r�assertIsNot)rzrr��orig_ctx�	enter_ctx�set_ctx�	final_ctxr
r
r�test_localcontext�
sz&ContextWithStatement.test_localcontextc		Cs�|jj}|jj}|jj}|jj}|�}|dd�}||��}|�}WdQRX|�}|�||d�|�|j|jd�|�||d�|�||d�dS)Nrx)rz!did not restore context correctlyzdid not set correct contextzdid not copy the contextz __enter__ returned wrong context)rrrr�rr�rr�)	rzrrr�r��new_ctxr�r�r�r
r
r�test_localcontextarg�
s

z)ContextWithStatement.test_localcontextargc
Cs�|jj}|jj}|jj}|jj}|jj}|jj}|�}|��|dd�}|���}	|�|	j	|j	�|�|	j
|j
�d|	j
|<d|	_|�|jd�|�
||	jd�|�|	j	|�||��^}
|�|
j	|j	�|�|
j
|j
�|�
||
j|d�d�|�|
j	|�|�|
j	|�~
WdQRX|�|	j	|�~	WdQRX|�|jd�|�|j	|�|�|j	|�|�|j	|�|�|j	|�dS)Ni�)r�Ti����z0e-999z3.4e200r�)rr�rrr�rprtr�r�r�rr�r�r�r�rrrr�)rzr�rrr�rprtr�r�r�r�r
r
r�test_nested_with_statements�
s>


z0ContextWithStatement.test_nested_with_statementscCs\|jj}|��D}~|��0}~|��}~|��}~WdQRXWdQRXWdQRXWdQRXdS)N)rr�)rzr�r�r�r��c4r
r
r�test_with_statements_gc1sz-ContextWithStatement.test_with_statements_gc1cCsb|jj}|��J}||��6}~||�� }~||��
}~~WdQRXWdQRXWdQRXWdQRXdS)N)rr�)rzr�r�r�r�r�r
r
r�test_with_statements_gc2*s


z-ContextWithStatement.test_with_statements_gc2c
Cs"|jj}|jj}|jj}|jj}|���}~|dd�}||�||���}~|�|jd�~|dd�}||�~|�|�jd�|dd�}	||	�|�|�jd�||	��^}
~	|�|
jd�~
|dd�}||�~|�|�jd�|��}|�|jd�~WdQRXWdQRXWdQRXWdQRXdS)Nr�)rr�r�r�)rrr�rr$r�r)
rzrr�rr$r�Zn1r�Zn2Zn3r�Zn4r�r
r
r�test_with_statements_gc36s<





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�Wsr�c@seZdZeZdS)�PyContextWithStatementN)r�r�r�r�rr
r
r
rr�Ysr�c@s8eZdZdd�Zdd�Zedd��Zdd�Zd	d
�ZdS)�ContextFlagsc
s��jj}�jj}�jj}�jj}�jj}�jj}�jj}�fdd�}|dddtggd�}	|	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]�\}}
|	��||
�}dd�|	j��D�}x�|D]�}|	��x|D]}||	|��q"W||
�}t|�}x"|D]}||k�rL|�|��qLW|jtd
�dd�|	j��D�}|jtd
���||dd||f���||dd||f��qWq�WdS)Ncs2�jtkr$d|j|<|j|r.|�n
|�|�dS)NT)rr_r�rZ_raise_error)r�flag)rzr
r�raise_erroris



z7ContextFlags.test_flags_irrelevant.<locals>.raise_errorri���i@�T)rr�r�rrr�z100E-425000010r�z
1.23456789z
9.87654321cSsg|]\}}|r|�qSr
r
)r�kr�r
r
rr��sz6ContextFlags.test_flags_irrelevant.<locals>.<listcomp>)r�cSsg|]\}}|r|�qSr
r
)rr�r�r
r
rr��sz=operation produces different answers depending on flags set: zexpected %s, got %s.z9operation raises different flags depending on flags set: zexpected %s, got %s)rr�rrsrurwrprvr r-rKr`r�r{r�r�rr�r�r�r�r�)rzr�rrsrurwrprvr�rZ
operationsZflagsets�fnr�r�r��extra_flagsr�Znew_ansZexpected_flagsZ	new_flagsr
)rzr�test_flags_irrelevant^sN



z"ContextFlags.test_flags_irrelevantcCs2|jj}|jj}|jj}|�}|�|j|j�|�|j|j�|j|_|�|j|j�|�|j|j�d|j|<|j|_|�|j|j�|�|j|j�i}|�|j�|�||j�|�|j|�d||<|�||j�|�|j|�|di}|�||j�|�|j|�dg}|�||j�|�|j|�dS)NTFr�)	rrrsrur�r�rr��update)rzrrsrur�rr
r
r�test_flag_comparisons�s4
z"ContextFlags.test_flag_comparisonsc	Cs�|jj}|jj}|jj}|����}|�|j|�|��|�|d�d�|�|j	|�|��|�|�
d�d�|�|j	|�|��|�d�}|�|j	|�|�|d�|�|j	|�|��|�d�}|�|j	|�|�|d�|�|j	|�d|j|<|��|�
||d�|�|j	|�|��|�
||j
d�|�|j	|�|��|�d�}|�|j	|�|��|�d�}|�|j	|�WdQRXdS)Ng@T)rr�r4r�r�rr�r�rr�r�ryr&r�)rzr�r4r�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�	}|�}||��P}��|j��||dd�||dd�d|j�<||�d�||�d�WdQRXdS)NcsN|��t||�}|�kr*��|||�n��||�d���|j��dS)NT)r�rr�rrr�)rr�rr�signalr�)r4rzr
r�assert_attrs
z7ContextFlags.test_float_comparison.<locals>.assert_attrz0.25z3.0g�?g@z0.0z-0.0gg�r�z	-Infinityrz-infcsxdD]}��
�|||�qWxdD]}���|||�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)	N)r(r*)r)r+r,r-z0.1g�������?r�r)r
)r�r�r)r�r��big_d�big_f�inf_d�inf_f�	neg_inf_d�	neg_inf_f�
neg_zero_d�
neg_zero_f�small_d�small_f�zero_d�zero_fr
r�doits 

z0ContextFlags.test_float_comparison.<locals>.doitcs�|��td�d�g�}��t|�d���|j��|��|r\��|td�d�g�ntd�d�g�}��|j��|��d�d�dgk}��|j��|��d�d�dddik}��|j��dS)	NgY@z100.0r�g�?z10.0g$@rr�)r�r]r��lenrr�r��sorted)r�r�rr�)r�r4rzr
r�test_containers8sz;ContextFlags.test_float_comparison.<locals>.test_containers)r�T)N)N)N)rr�rr4r�r
r�r)rzrr�r�r�rr�r
)r�r4r�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|�|��d|j|<d|j|<|�	|j|�|�	|j|�dS)NT)
rr�rrsr4r�r�r�clear_trapsr)rzr�rrsr4rr
r
r�test_float_operation_defaultWs

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�gsr�c@seZdZeZdS)�PyContextFlagsN)r�r�r�r�rr
r
r
rr�isr�c@s eZdZdZdd�Zdd�ZdS)�SpecialContextszTest the context templates.c
Cs|jj}|jj}|jj}|jj}|jj}|jj}|jj}|jj}|jj	}	t
||d|||||	g�|���}
|j}|j}d}
zxyJd|_|_x8||fD],}||�|�}|�
||�|�|jd�q�WWn(tk
r�}z
|j}
Wdd}~XYnXWd||_||_||
�|
�r|
�XdS)Nri�)r�BasicContext�ExtendedContextrr$rqrrrtrwrprrSrr�r��	Exceptionr�)rzr�r�rr$rqrrrtrwrp�savecontextZbasic_context_precZextended_context_prec�ex�templater�r�r
r
r�test_context_templatesos:
z&SpecialContexts.test_context_templatesc
Cs&|jj}|jj}|jj}|jj}|jj}|jj}|jj}|jj}|�	|j
d�|�	|j
d�t||d|||g�|���}	|j
}
d}z�yR|�}|j
}
d|_
|�}|�	|j
|
�||�|�}|�
||�|�	|j
d�Wn*tk
�r}z
|j}Wdd}~XYnXWd|
|_
||	�|�r |�XdS)Nrri�)rr�r�r�rr$rqrrrtr�rrrSr�r�r�)rzr�r�r�rr$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�ls$r�c@seZdZeZdS)�CSpecialContextsN)r�r�r�r_rr
r
r
rr��sr�c@seZdZeZdS)�PySpecialContextsN)r�r�r�r�rr
r
r
rr��sr�c@seZdZdd�ZdS)�ContextInputValidationc
CsP|jj}|jj}|��}xNdD]F}t||d�|�t||�d�|�tt||d�|�t	t||d�qWt|dd�|�t|d�d�|�tt|dd�|�t	t|dd�|�t	t|d	d�|�t	t|d	d
�|�t	t|d	d�|�t	t|d	d�xHdD]@}|�tt||d�|�tt||d
�|�t	t||dd
dg�q�W|�t
t|dd�|�t	t|dg�|�tt|di�|�tt|dddi�xdD]}|�t
|j|��q�W|�t	t|d
�|�t	t|d
�|jt	|dd�|jt	|dd�|jt|d
d�|jt|dd�|jt|dgd�|jt|dgd�|jt	|dd�|jt	|dd�dS)N)rr�i?Br�r�r�i���r�)r�r�r�rrg�?)rr+r�r�r�rr�rrqr)rr�r�rrr+r�r)r)r+)rr�)r��Q)r)rr�)r�r)
rrr�rSrFr�rr�r�r�r��KeyError�__delattr__)rzrr�r�rr
r
r�test_invalid_context�sJ



z+ContextInputValidation.test_invalid_contextN)r�r�r�r�r
r
r
rr��sr�c@seZdZeZdS)�CContextInputValidationN)r�r�r�r_rr
r
r
rr��sr�c@seZdZeZdS)�PyContextInputValidationN)r�r�r�r�rr
r
r
rr�sr�c@seZdZdd�ZdS)�ContextSubclassingcs�|j��j}�j��j}�j}�j}�j}�j}�j}�j	}�j
}	G��fdd�d��}
��}|
�}x$dD]}
|�t||
�t||
��qjW|j
t|
fddi�|
dd�}|�|jd�|�
|	|j|d�d	�|j
t|
fd
di�|
tdd�}|�|jt�|�|�|d
��d�|j
t|
fddi�|
ddd�}|�|jd�|�|d�|d��}|�||d��x(|||||fD]}|�|j|��qrW|j
t|
fddi�|
ddd�}|�|jd�|�
||j|d�|d��|jtk�rx$|||fD]}|�|j|��q�W|j
t|
fddi�|
d	d�}|�|jd	�|�d�}|�|�|�d�|j
t|
fddi�|
ddd �}|�|jd�|�|d��}|�t|�d!�|j
t|
fd"di�|
||gd#�}x"||fD]}|�|j|��q�W|� �x"t!�D]}|�"|j|��q�W|j
t|
fd$di�|
||gd%�}x"||fD]}|�|j#|��q8W|�$�x"t!�D]}|�"|j#|��qdWdS)&NcseZdZd��fdd�	ZdS)z>ContextSubclassing.test_context_subclassing.<locals>.MyContextNc		s���|�|dk	r||_|dk	r&||_|dk	r4||_|dk	rB||_|dk	rP||_|dk	r^||_�dk	r�t�t�r��fdd�t	��D���|_
�dk	r�t�t�r��fdd�t	��D���|_dS)Ncsi|]}|�k|�qSr
r
)rr�)r�r
r�
<dictcomp>&sz[ContextSubclassing.test_context_subclassing.<locals>.MyContext.__init__.<locals>.<dictcomp>csi|]}|�k|�qSr
r
)rr�)rr
rr�*s)rvrrr�r�rr+rr�r�r�r)	rzrrr�r�rr+r�r)rr)r�rrrvs*


zGContextSubclassing.test_context_subclassing.<locals>.MyContext.__init__)NNNNNNNN)r�r�r�rvr
)rrr
r�	MyContextsr�)rrr�r�rr+r�rrr�r�)rZ9e2rr�XYZ)rrz9.9rr�r�)r�rz1e-99z2.234e-2000z0.0r�)r�rZ1e99z
2.234e2000r)rZ1E222z1e+222r+r��c)r+r�z!1.000000000000000000000000000E+99r�)r�r)r)%rr�rrprrrsrtrurvrwrqr�rr�r�rrr�rirror�r`rr�r�r_rr�rOr+r�r�r�r�rr�)rzr�rprrrsrtrurvrwrqr�r�rrr�r�r
)rrr�test_context_subclassings|



z+ContextSubclassing.test_context_subclassingN)r�r�r�r�r
r
r
rr�sr�c@seZdZeZdS)�CContextSubclassingN)r�r�r�r_rr
r
r
rr�qsr�c@seZdZeZdS)�PyContextSubclassingN)r�r�r�r�rr
r
r
rr�ssr�c@s$eZdZdd�Zdd�Zdd�ZdS)�CheckAttributescCs�|�tjtj�|�tjtj�|�tjtj�|�tjtj�|�tjdkpVtjdk�|�tjdkpptjdk�|�tj	tj	�|�t
t�t
t��dS)NTF)r�r_r�r�r|r�r�rr��__version__�dir)rzr
r
r�test_module_attributesysz&CheckAttributes.test_module_attributescCsJdd�tt���D�}dd�tt���D�}|�t|�t|�t��dS)NcSs"g|]}d|ks|�d�s|�qS)�__r#)r�)rrr
r
rr��sz;CheckAttributes.test_context_attributes.<locals>.<listcomp>cSs"g|]}d|ks|�d�s|�qS)r�r#)r�)rrr
r
rr��s)r�r_rr�r�r])rzr�r�r
r
r�test_context_attributes�sz'CheckAttributes.test_context_attributescCsNdd�tt�d��D�}dd�tt�d��D�}|�t|�t|�t��dS)NcSs"g|]}d|ks|�d�s|�qS)r�r#)r�)rrr
r
rr��sz;CheckAttributes.test_decimal_attributes.<locals>.<listcomp>rcSs"g|]}d|ks|�d�s|�qS)r�r#)r�)rrr
r
rr��s)r�r_r�r�r])rzr�r�r
r
r�test_decimal_attributes�sz'CheckAttributes.test_decimal_attributesN)r�r�r�r�r�r�r
r
r
rr�vsr�c@steZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)�CoveragecCsH|jj}|�|d���d�|�|d���d�|�|d���d�dS)NZ	1234e9999i'rrr)rr�r�r0)rzr�r
r
r�
test_adjusted�szCoverage.test_adjustedcCsL|jj}|jj}|d���}|�|d�|�}|�|d��}|�|d�dS)Nr)rr�rr2r�)rzr�rr�r�r
r
r�test_canonical�szCoverage.test_canonicalcCst|jj��}d|_d|_d|_t|_d|_d|_	x&t
|jD]}d|j|<d|j|<q<W|�
�}d}|�||�dS)Ni@�Ti���rr�Fz{Context(prec=425000000, rounding=ROUND_HALF_DOWN, Emin=-425000000, Emax=425000000, capitals=0, clamp=1, flags=[], traps=[]))rr�rSrr�r�rkrrr+r�r�r�__repr__r�)rzr�r�rr�r
r
r�test_context_repr�s
zCoverage.test_context_reprc	Cs|jj}|jj}|����}d|_d|_d|_|�t|d��d�|�|d�dd�|�|d�dd	�|�|d�d
d�|�|d��|d�d�d�|�	|d
��d
d��
�d�|�t|d�d	d
�d	�|�|d���d�|�	|d��
�d�|�	|d���d�|�|d���d�|�|d���d�|�|d���d	�|�|d���d�|�|d�d�|�|d�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����WdQRX|��`}d|_d d!}||�}|��}|�||�|��}|�||�|� |d��}|�||�WdQRXdS)"Nr�r�z-10r��7r�rDr�r�r�z1.2z0.01r�Tz1.01r�FZ20Z580r�r�rz2E+1z-1E+1z+Normalz-1z1.12345r�r�r�i'i�i�)!rr�r�rr�r�r�r�r	rr;�powr�r<r@rrrr7rDrErHr.rNrr8r9r?r>rAr3r4r5)rzr�r�r�r�r�rr
r
rr�s^

zCoverage.test_implicit_contextc	Cs�|jj}|jj}|jj}|jj}|����}t|d�d�\}}|�||d��|�||d��t|d�d�\}}|�|��o�|���d|j	|<t|d�d�\}}|�|��o�|���d|j	|<|�
�t|d�|d��\}}|�|��o�|���|�|j|�|�
�t|d�d	�\}}|�|���o2|���|�|j|�|�
�t|d
�d
�\}}|�|���ot|���|�|j|�d|j	|<|�
�t|d�d
�\}}|�|���o�|���|�|j|�o�|j|�WdQRXdS)NZ10912837129i�Z10901935Z194r�r�Frrr�)
rr�r�rqrrrEr�rr;rr�r�r:)rzr�r�rqrrr�r�rr
r
rrP
s@



zCoverage.test_divmodc	Cs�|jj}|jj}|jj}|jj}|���}d|_|��|�|d�d|d��|�|j	|�d|_d|_
d|_|��d|j|<|�|d�|d	�|d
��|�|j	|�WdQRXdS)Nr�z1.0rz1.00r�r�Fi'z0.5r)
rr�r�rtrurr�r�rr�r�r�r)rzr�r�rtrur�r
r
rrs6s 
zCoverage.test_powerc	Csj|jj}|jj}|jj}|��B}d|_d|_d|_d|j|<|d��|d��}|�	|�
��WdQRXdS)Nr�r�Fr�Z1e1)rr�r�rqrr�r�rrrr;)rzr�r�rqr�r�r
r
rr(Js
zCoverage.test_quantizecCs>|jj}|jj}|�}|�|d���d�|�|��d�dS)Nr�r�)rr�rr�r1)rzr�rr�r
r
r�
test_radixWs
zCoverage.test_radixcCs4|jj}x&dD]}|�t|d�|�d�t�qWdS)N)r1r4r7r:r'r=r?rAr�r�)rr�rrr�)rzr�rr
r
rrG_s
zCoverage.test_ropc	Cs�|jj}|jj}|���}d|_|�t|d����d�|�t|d����d�|�t|d��d��d�|�t|d	��d
��d�|�t|d	��d��d
�|�t|d�jd�|�t|d�jdd�WdQRXdS)Nrz9.99rDz9.99e-5r�z
1.23456789r�z1.23457z1.2345r�z1.2345000000i����z0E+10z1.23r�r�)	rr�r�rr�r��	__round__r�r�)rzr�r�r�r
r
r�
test_roundfszCoverage.test_roundcCs |j��}|�t|jdg�dS)Nr;)rrr�r�r�)rzr�r
r
r�test_create_decimalws
zCoverage.test_create_decimalc	Cs`|jj}|jj}|��@}d|_|dd�dd}|�t|�d�|�|��d�WdQRXdS)Ni'i�i�r�iSr�r�)rr�r�rr�r�r
)rzr�r�r�r�r
r
rr!{szCoverage.test_intcCsl|jj}|�}d|_dd}|�|�}|�||�|�|�}|�||�|�|d�}|�||�dS)Ni'i�i�r�)rrrr3r�r4r5)rzrr�r�r�r
r
rrC�s


zCoverage.test_copyN)r�r�r�r�r�r�rrPrsr(r�rGr�r�r!rCr
r
r
rr��sQ)

r�c@seZdZeZdS)�	CCoverageN)r�r�r�r_rr
r
r
rr��sr�c@seZdZeZdS)�
PyCoverageN)r�r�r�r�rr
r
r
rr��sr�c@seZdZdZdd�ZdS)�PyFunctionalityz!Extra functionality in decimal.pyc
CsRtj}tj}ddddddddd	d
g
}x(|D] \}}}|�t||�|�|�q*WdS)N)z.0ez1.0z1e+0)z#.0ez1.0z1.e+0)z.0fz1.0r�)z#.0fz1.0z1.)rOz1.1z1.1)z#gz1.1z1.1)z.0gr�r�)z#.0gr�z1.)z.0%z1.0z100%)z#.0%z1.0z100.%)r�r�r�r�rX)rzr�r�rrZrr�r
r
r�test_py_alternate_formatting�sz,PyFunctionality.test_py_alternate_formattingN)r�r�r�r�r�r
r
r
rr��sr�c@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�
PyWhiteboxz White box testing for decimal.pyc	Cs�tj}tj}|���}d|_|d�|d�}|�||d��|d�|d�}|�||d��|d�|d�}|d�|d	�}|�||d
��|d�|d	�}|dd
�|d	�}d|_|d�|d�}d|_|dd�|d�}WdQRXdS)Nr�iz-0.5z
0.00390625z-0.6z0.0012885819Z256e7l�o�
�z-0.0625z0.2Z152587890625e7r�ic
r�Z152587890625��r�iB)r�r�r�rr�)rzr�r�r�r�r
r
r�test_py_exact_power�s"zPyWhitebox.test_py_exact_powercs:tj}tj}tj}|��}tdd�ttD��|_||�|d��|d��|d��|d��d4�����fdd�	}|�����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)5Ncss|]}|dfVqdS)rNr
)rrr
r
rr�sz=PyWhitebox.test_py_immutability_operations.<locals>.<genexpr>z-25e55z33e+33Fcs�|rvtd|d����j�j����j�j����j�j����j�j����j�j����j�j�n@td|d����j�j����j�j����j�j�dS)Nzd1.z(d2)z())r�r��_sign�_int�_exp)Z	operationZuseOther)�b1�b2r~rrzr
r�checkSameDec�sz@PyWhitebox.test_py_immutability_operations.<locals>.checkSameDec�__abs__r0Tr&r,r-r*r(r+r)�	__float__r>r��__int__�	__trunc__r<r6�__neg__�__bool__�__pos__r@r1r'r�r?r=r7rAr4�__str__r3r9r0r�r�r�r�rHrrIrJrKrLr
)F)r�r�r�r$rSr!r�rr�r�r�r�)rzr�r�r$r�r�r
)r�r�r~rrzr�test_py_immutability_operations�st


























z*PyWhitebox.test_py_immutability_operationscCs>tj}|d�}||�}|�t|�d�|�t|�t|��dS)Nr�r�)r�r�r�r�r�r�)rzr�rr�r
r
r�test_py_decimal_ids
zPyWhitebox.test_py_decimal_idc	Cs@tj}tj}|��$}|d��dt�}|�|���WdQRXdS)Nr�r�)r�r�r�Z_rescalermrr;)rzr�r�r�r�r
r
r�test_py_rescale's
zPyWhitebox.test_py_rescalecCs tj}|�t|d�jdt�dS)Nz3.1234r)r�r�r�r�Z_roundrm)rzr�r
r
r�test_py__round0szPyWhitebox.test_py__roundN)	r�r�r�r�r�r�r�r�r�r
r
r
rr��sO	r�c@s4eZdZdZedd��Zedd��Zedd��ZdS)	�CFunctionalityzExtra functionality in _decimalcCstj}tj}tj}tj}dd�}||�}|�|jd�|�|jd�|�|jd�|||�||�}|�|jd�|�|jd�|�|jd�|||�||�}|�|jd	�|�|jd
�|�|jd�|||�|�	t
|d�|�	t|d
�|�	t|d�dS)NcSs.|�|jd�t||dg�t||dg�dS)Nr�rr�)r�r+r)rzrr
r
r�assert_restAsz7CFunctionality.test_c_ieee_context.<locals>.assert_restr��`i����r�i�i�����"ii�lr�i)r_�IEEEContext�	DECIMAL32�	DECIMAL64�
DECIMAL128r�rr�r�r�r�r�)rzr�r�rrr�r�r
r
r�test_c_ieee_context9s.


z"CFunctionality.test_c_ieee_contextcCs:tj}|tjtjd�}|�|jtj�|�|jtj�dS)N)r�r)r_rr(�
DecRoundedr��_flags�_traps)rzrr�r
r
r�test_c_context]szCFunctionality.test_c_contextcCstjtjtjtjtjtjtjtjtj	tj
tjtjtj
tjtjf}|�tjd�|�tjd�|�tjd�|�tjd�x$t|�D]\}}|�|d|>�q�W|�tjtjtjBtjBtjBtjBtj	Btj
B�|�tjtjtjB�|�tjtjtjBtjB�dS)Nr�r��ir�)r_r(�DecConversionSyntax�DecDivisionByZero�DecDivisionImpossible�DecDivisionUndefined�DecFpuError�
DecInexact�DecInvalidContext�DecInvalidOperation�DecMallocErrorZDecFloatOperation�DecOverflowr�DecSubnormal�DecUnderflowr�r�rrZIEEE_CONTEXT_MAX_BITSr��DecIEEEInvalidOperationZ	DecErrorsZDecTraps)rz�condr�r�r
r
r�test_constantses("

zCFunctionality.test_constantsN)r�r�r�r��requires_extra_functionalityrrrr
r
r
rr�6s$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 _decimalc	Cs�tj}tj}dd}dd}|��Z}d|_xLtd�D]@}t�||�}t�dd�}||}	||�||�}
|�|	|
�q4WWdQRXdS)Nr��#�$i@Br�i�i�)r_r�r�rr�r�r<r�)rzr�r�r�r�r�r�rr�r�r�r
r
r�test_bignum�szCWhitebox.test_bignumcCs|�ttjdd�dS)Nrr�)r�r�r_r�)rzr
r
r�test_invalid_construction�sz#CWhitebox.test_invalid_constructionc	Cs@tj}tj}tj}tj}||���|�||d�WdQRXdS)NZ1e9999999999999999999)r_r�rqrr�r�)rzr�rqrr�r
r
r�test_c_input_restriction�sz"CWhitebox.test_c_input_restrictioncCs�tj}tj}|��}d|_d|_d|_t|_d|_	d|_
x$ttD]}d|j|<d|j
|<qBWd|j|<d|j
|<|��}d}|�||�dS)Ni@�Ti���rr�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]))r_r�r4rSrr�r�rkrrr+r�r�rr�r�)rzr�r4r�r�rr�r
r
r�test_c_context_repr�s"


zCWhitebox.test_c_context_reprc
Cstj}tj}tj}tj}tj}tj}tj}tjdk}|�}	|�	t
|	jjdd�|�	t
|	j
jdd�|�	t|	jj|�|�	t|	j
j|�|�	tt|	ddg�|�	tt|	ddg�|�	t
t|	dddi�|�	t
t|	dddi�|	j��}
|
|=d	|
d
<|�	t
t|	d|
�|�	t
t|	d|
�|�r dnd}|�r.d
nd}x dD]}
|�	tt|	|
|��q8W|�	tt|	d|�|j	t||d�|j	t||d�|j	t||d�|j	t||dd�|j	t||dd�|j	t||dd�|j	t||dd�|j	t||dd�xrdD]j}
|�	tt|	|
|d�|�	tt|	|
|d�tjdk�r|�	tt|	|
|�|�	tt|	|
|d��qWtjdk�r�|�	tt|	d�|d�|�	tt|	d�|d�|�	tt|	d�|d�tjdk�rN|�	tt|	d�d�|�	tt|	d�d�|�	tt|	d�d�|�	tt|	d�d�|�	tt|	d�d�|�	tt|	d�d�xtdD]l}
|�	tt|	|
d�|�	tt|	|
d�|�	tt|	|
ddd g�|�rT|�	tt|	|
d!�|�	tt|	|
d"��qTW|�	ttd#t��|�	ttd$t��|�}|�	t|d%�||�dS)&Ni@�Ti!rr�r�rr�r�i�pr�l����i���l�N�Zoiʚ;)rr�r�)r)r�)r�r�)r+)r)rr�r�rr+�win32r}r~ri���?r�i9�)rr+r�llzwith localcontext("xyz"): passz-with localcontext(context=getcontext()): passr�)r_rrqrtr4r�rr$r�r�r�r��__setitem__rr��__delitem__r�rFrSr�r�platformr�execr)rzrrqrtr4r�rr$�HAVE_CONFIG_64r�r�int_maxZgt_max_emaxrZ
saved_contextr
r
r�test_c_context_errors�s�







zCWhitebox.test_c_context_errorscCs�|�tjtj�|�tjtj�|�tjtj�|�tjtj�|�tjtj�|�tjtj�|�tj	tj	�|�tj
tj
�dS)N)rr_rmr�rirhrjrlrkr rn)rzr
r
r�test_rounding_strings_interned/sz(CWhitebox.test_rounding_strings_internedc	Cs�tj}tj}tj}tj}tj}tj}tjdk}|�}|r<dnd}	|�t	t
|d|	d�|�t	t
|d|	d�tjdkr�|�t
t
|d|	�|�t
t
|d|	d�xndD]f}
|�t	t
||
|	d�|�t	t
||
|	d�tjdkr�|�tt
||
|	�|�tt
||
|	d�q�W|�t
t
|dd	�|�t
t
|dd�|�tt
|dddd
g�|�rx|�t
t
|dd�|�t
t
|dd�x2dD]*}
|�tt
||
d
�|�tt
||
d��q~WdS)Ni@�Tl����i����_allcrr�r�r)rrr�r�lli?Br�)r_rrqrtr�rr$r�r�r�rFrr"r�r�)rzrrqrtr�rr$r$r�r%rr
r
r�test_c_context_errors_extra:s:




z%CWhitebox.test_c_context_errors_extracCstj}tj}tj}tj}tj}tj}|��}d|_t	|_
d|_d|_d|_
d|_|�|jd�|�|j
t	�|�|jd�|�|jd�|�|j
d�|�|jd�|�|��d�|�|��d�tjdk�r|�d	�|�d	�|�d
�|�|jd	�|�|jd	�|�|jd
�dS)Nr�i�iH�r�ri'�i�i@�Ti�ɚ;i6e�)r_r�rprwrsrurvrSrrlrr�r�rr+r�ZEtinyZEtopr�r}r~r)rzr�rprwrsrurvr�r
r
r�test_c_valid_contextes8


zCWhitebox.test_c_valid_contextcCs4tj}|��}|�|jd�d|_|�|jd�dS)Nr�r)r_r�rSr�r()rzr�r�r
r
r�test_c_valid_context_extra�s
z$CWhitebox.test_c_valid_context_extrac	Cs�tj}tj}tj}tj}tj}tjdkr,dnd}|���}d|j|<|�||d�j	|d�|�||d�j	|�|�||d�j	t
|d��|�tj|d�j	t
|d��|�t|d�j	|d�|�t|d�j	|d�WdQRXdS)	Ni@�Tl����i���Tz1.23r�r�r�)r_r�rqr�r|r�r�rr�r�r�r�)rzr�rqr�r|r�r%r�r
r
r�test_c_round�s(
zCWhitebox.test_c_roundcCs�tj}tjdk}|�t|d�jdgd�|�t|d�jdd�|�t|d�jg�|�t|d�jd�|rndnd}|�t|d�jd	|�dS)
Ni@�Tr�z=10.10rz<>=10.10l����i���z
1.23456789z=%d.1)r_r�r�r�r�rYr�)rzr�r$�maxsizer
r
r�
test_c_format�s
zCWhitebox.test_c_formatc	CsPtj}tj}tj}|d�}|�|��d�|�t|jd�|�t|jdd�|�t|jd�|�|��d�|�t|jd�|�t|jdd�|�t|jd�|�|�	�d�|�t|j	d�|�t|j	dd�|�t|j	d�|��`}|d��t
�}|�||d��|d��	t
�}|�||d��d|j|<|�||d�j	t
�WdQRXdS)Nr�rDr�z99999999999999999999999999.9Z100000000000000000000000000Tz999.9)r_r�rsr�r�r
r�r�rMrNrmr)rzr�rsr�r�r�r
r
r�test_c_integral�s.
zCWhitebox.test_c_integralc	Cs>tj}tj}tj}tj}tj}|�|d���d�|�t	t
|d�dd�|�t	|d�jdd�|�t	|d�jd	dd�|�t	|d
�j
|d�g�|�t	|d
�j
|d�|��|�t	|d
�j
|d�d�|�t	|d
�j
|d�td
�|���J}|��|�t	|j|d�dd�|�t	|jd�|�t	|jd�|�t	|jdddd�|�t	|jdd	dd�|�t|�|d���d�|�|��d�d|j|<|�||d�jd�|�||jdd�|�|j|�|��d|j|<|�||d�jd�|�||jdd�|�|j|�d|j|<d|_|�|t
|d
�dd�WdQRXdS)Nz9.99e10z99.9E+9r�r�rNrr�r�r�z
1.23456789z	1e-100000r�i�r	r�Z200Tri�)r_r�rqrrrr�r�rLr�r�r�r.rJrrmr�r5r2r8rEr�r1rr&rr�r�r)rzr�rqrrrr�r�r
r
r�test_c_funcs�sT



zCWhitebox.test_c_funcscCs�tj}tj}|d�}x8dD]0}t||�}|jt|dd�|jt|ddd�qWx8dD]0}t||�}|jt|dd�|jt|ddd�qTW|jt|jdgd�|jt|jigd�|�t|jgg�|jt|jdgd�|jt|jigd�|�t|jgg�|jt|jdgd�|jt|jigd�|�t|jgg�|jt|j	dddd�|jt|j	ddddd�|jt|j
dgdd�|jt|j
dgdd	�|�t|j
dgg�|�}|jt|jdddd
�|jt|jdddd
�|jt|jdddd
�dS)NZ10001111111)
r�r<r@rrrr7rDrErHr.rKrLr�)r)r�r/r,rGr�rBr�rCrIrrr)rrr�r�)r)�mod)r_r�rrr�r�r
rMrNr	rrr)rzr�rr�r�funcr�r
r
r�test_va_args_exceptionss:



z!CWhitebox.test_va_args_exceptionscCsL|�tjjtjtjBtjBtjBtjB�|�tj	jtjtjBtjB�dS)N)
r�r_r�rrr	rrr(r�)rzr
r
r�test_c_context_templates@s z"CWhitebox.test_c_context_templatesc%sDtj}tj}tj}tj}tj}tj}tj}tj}tj	}	tj
}
tj}tj}tj
}
�fdd�}|��}��||jk�|��x|j��D]}d|j|<q�Wx|j��D]}��|�q�W|��x |j��D]\}}��|�q�W��|j�|����|j�d�d���|j�dd�d���t|jjddd���t|j�t|j��t�|j�}t�|j�}|j��}|� �||_!��|j|
�|��||_"��|j|�|� �|j��}d||<||_|||j�|��|j��}d||<||_|||j�|
tj|tj#|	tj$|tj%|tj&|tj'|tj(|tj
i}tj)tj*tj+tj,tjtj-tj.g}tt/t�}�xxt0|�D�]j}�x`t0|�D�]R}�xHt1D�]>}t2�3t/t|�}t2�3t/t|�}t2�4dd�}t2�4d	d
�}t2�4d
d�}t2�4d
d�}t2�4d
d�} t2�4d
d�}!|||||| |t5|�t5|�d�}��|j6|���|j7|���|j8|���|j9|���|j:| ���|j;|�d
}"x|D]}#|"||#O}"�qxW��|j!|"�d
}"x|D]}#|"||#O}"�q�W��|j"|"��q�W�q~W�qlWx0|D](}$|$|_!��|j!|
@�|||j��q�Wx0|D](}$|$|_"��|j"|
@�|||j��qWdS)
Ncs8x2|D]*}||kr"��||�q��||�qWdS)N)rr�)r�Zsignal_dictr�)rzr
r�assertIsExclusivelySet`s
z<CWhitebox.test_c_signal_dict.<locals>.assertIsExclusivelySetTr�r�rr�i'i���rr�)rrr�r�rr+r�r)<r_rr�rqrrrtrvrwrursrpr(rrrSrrr�rB�valuesrr�r�r�rr�r�r�r�r�	getsizeofr�r�rrrr
rrrr	r
rrrrrr�r�r;r�Zsampler<r�rrr�r�rr+)%rzrr�rqrrrtrvrwrursrpr(rrr5r�r�r�rrZ
IntSignalsZIntCondZlimrr�r�r�rrr�r�r+r@Zcrr�r�rr
)rzr�test_c_signal_dictLs�







 

zCWhitebox.test_c_signal_dictcs�tj�yddlm}Wntk
r4|�d�YnXdd�}d�fdd�	}d	|d
d
dg�d	d�}d|d
d
dg�d	d�}d|d
d
dg�dd�}|dkr�|�t|d|d�|�t|d|d�|�t|d|d�dS)Nr)r\zlocale.CHAR_MAX not availablecSsd�dd�|D��S)Nr�cSsg|]}t|��qSr
)r])rr�r
r
rr��szJCWhitebox.test_invalid_override.<locals>.make_grouping.<locals>.<listcomp>)r^)r_r
r
rr`�sz6CWhitebox.test_invalid_override.<locals>.make_groupingr�cs�|��||�S)N)rY)r�rbrZ)r�r
rrc�sz0CWhitebox.test_invalid_override.<locals>.get_fmtrU�)rerfrgZxxxxxr�rdZyyyyy�i90rO)Nr�)r_r�rir\rjrkr�r�)rzr\r`rcZinvalid_groupingZinvalid_dotZinvalid_sepr
)r�r�test_invalid_override�s*
zCWhitebox.test_invalid_overridec	Cs�tj}tj}tj}|��|}d|j|<dtj}|�|||�dtjd}|�|||�dtj}|�|||�dtjd}|�|||�WdQRXdS)NTz0e%dr�z1e%d)r_r�r�rqrrr-r�)rzr�r�rqr�r�r
r
r�test_exact_conversion�s


zCWhitebox.test_exact_conversionc	Cs�tj}tj}tj}tj}tj}|����}d|j|<d|j|<d|j|<ddtjf}|�	t
|�|��d�|�|||�ddtjf}|�||j|�|�|||�ddtjdf}|�	t
|�|��d�|�|||�ddtjdf}|�||j|�|�|||�ddtjdf}|�t
|j|�|�t
||�ddtjdf}|�t
|j|�|�t
||�d}|�	t
||��d	�d
}|�	t
||��d	�d}|�	t
||��d�WdQRXdS)
NTr�r
z
-0E+999999)rr�r�z-0E-1000007r�)r�r
r�z-sNaN)r�)rr�)r�)rr�r�z-sNaN1)r_r�r�rqrtrwrrr-r�r�r�r�r�)rzr�r�rqrtrwr�r�r
r
r�test_from_tuple
sB



zCWhitebox.test_from_tuplecCs�tj}tjdk}|�|d���d�|rZ|dd���}|dd���}|�||d�n0|dd���}|dd���}|�||d	�dS)
Ni@�Trr�i�i�r�����r�)r_r�r�r��
__sizeof__r�)rzr�r$r�r�r
r
r�test_sizeof=s
zCWhitebox.test_sizeofcs~tj}Gdd�dt�}Gdd�dt�}Gdd�dt��G�fdd�dt�}x.|||fD] }|�|�|d	��|�d	��qVWdS)
Nc@seZdZdd�Zdd�ZdS)z<CWhitebox.test_internal_use_of_overridden_methods.<locals>.XcSsdS)Nr�r
)rzr
r
rr�PszMCWhitebox.test_internal_use_of_overridden_methods.<locals>.X.as_integer_ratiocSs|S)Nr
)rzr
r
rr�RszDCWhitebox.test_internal_use_of_overridden_methods.<locals>.X.__abs__N)r�r�r�r�r�r
r
r
r�XOsrBc@seZdZdd�ZdS)z<CWhitebox.test_internal_use_of_overridden_methods.<locals>.YcSs
dgdS)Nr�r	r
)rzr
r
rr�VszDCWhitebox.test_internal_use_of_overridden_methods.<locals>.Y.__abs__N)r�r�r�r�r
r
r
r�YUsrCc@seZdZdd�ZdS)z<CWhitebox.test_internal_use_of_overridden_methods.<locals>.IcSs
dgdS)Nr�r	r
)rzr
r
r�
bit_lengthZszGCWhitebox.test_internal_use_of_overridden_methods.<locals>.I.bit_lengthN)r�r�r�rDr
r
r
r�IYsrEcs eZdZ�fdd�Zdd�ZdS)z<CWhitebox.test_internal_use_of_overridden_methods.<locals>.Zcs�d��d�fS)Nr�r
)rz)rEr
rr�^szMCWhitebox.test_internal_use_of_overridden_methods.<locals>.Z.as_integer_ratiocSs|S)Nr
)rzr
r
rr�`szDCWhitebox.test_internal_use_of_overridden_methods.<locals>.Z.__abs__N)r�r�r�r�r�r
)rEr
r�Z]srFgfffffFY@)r_r�r
r�r�ry)rzr�rBrCrFrr
)rEr�'test_internal_use_of_overridden_methodsKsz1CWhitebox.test_internal_use_of_overridden_methodsN)r�r�r�r�rrrrr&r'rr)r*r+r,r.r/r0r3r4r8r;r<r=rArGr
r
r
rr�s.e+&	;,%0rztest requires C versionc@s eZdZdZdd�Zdd�ZdS)�
SignatureTestzFunction signaturesc
Cs�x�tt�D]�}|�d�rq
tt|�}tt|�}|dksH|dksHt�|�r
t�|�}t�|�}t|j	�
��}dd�|j	�
�D�}|j||d|d�dd�|j	��D�}d	d�|j	�
�D�}	|d
kr
|j||	d|d�q
WdS)Nr#r�rcSsg|]}|�d�s|�qS)r#)r�)rr�r
r
rr�ysz5SignatureTest.test_inspect_module.<locals>.<listcomp>zparameter name mismatch in %s)�msgcSsg|]
}|j�qSr
)�kind)rr�r
r
rr�scSs$g|]}|d�d�s|dj�qS)rr#r�)r�rJ)rr�r
r
rr��sr$zparameter kind mismatch in %s)r�r�r�rr_�inspect�
isfunction�	signaturer��
parametersrBr�r6r)
rzr�p_func�c_func�p_sig�c_sig�c_names�p_names�c_kind�p_kindr
r
r�test_inspect_modulels$





z!SignatureTest.test_inspect_modulecstjj�tjj�tt�d�t�d�t�d�t�d�t�d�t�d�t�d�t�d�t�d�t�d�ddtjt��d�tt�d�t�d�t�d�t�d�t�d�t�d�t�d�ddtjt��d�i����fdd��dd	�������fd
d�}|d�|d
�dS)Nr�r�g�?)r%r/r�r�rrr�r�r�rq�numr�rr)r%r/rr�r�r�rqrXr�rrcstg}i}xb|j��D]T\}}|dkr&q|j�krD|��||�q|j�kr`�||||<qtd��qW||fS)Nrzzunexpected parameter kind)rNrrJr�r)�moduler�r��kwargs�nameZparam)�POS�POS_KWD�pdictr
r�mkargs�s

z0SignatureTest.test_inspect_types.<locals>.mkargscSs(|dkrdS|dkrdS|dkr$dS|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
)rr
r
r�tr�sz,SignatureTest.test_inspect_types.<locals>.trcs�tt|�}tt|�}�x�t|�D�]�}|�d�r2q t||�}t||�}t�|�r t�|�}t�|�}t|j	�
��}�fdd�|j	�
�D�}	�j|	|d|d�dd�|j	��D�}
dd�|j	��D�}��
|
d����
|d��|d	k�r�j|d
d�|
d
d�d|d�n�jt|�t|
�d|d��t|�\}}
yt|d�|�||
�Wn6tk
�r�}ztd
|||
f��Wdd}~XYnX�t|�\}}
yt|d�|�||
�Wq tk
�r�}ztd
|||
f��Wdd}~XYq Xq WdS)Nr#csg|]}�|��qSr
r
)rr�)r`r
rr��szBSignatureTest.test_inspect_types.<locals>.doit.<locals>.<listcomp>zparameter name mismatch in %s)rIcSsg|]
}|j�qSr
)rJ)rr�r
r
rr��scSsg|]
}|j�qSr
)rJ)rr�r
r
rr��srr�r�zparameter kind mismatch in %srzinvalid signature for %s: %s %s)rr�r_r�r�rKrLrMr�rNrBr�r6rr�r�r)ZtyZp_typeZc_typerrOrPrQrRrTrSrVrUr��kwds�err)r\r]r_rzr`r
rr��sB








$z.SignatureTest.test_inspect_types.<locals>.doitr�r)	rKZ_ParameterKindZPOSITIONAL_ONLYZPOSITIONAL_OR_KEYWORDr_r�rlrr�)rzr�r
)r\r]r_r^rzr`r�test_inspect_types�s@



/z SignatureTest.test_inspect_typesN)r�r�r�r�rWrcr
r
r
rrHgsrHr�r�c
Csvtt�tt�|dk	r|ntd�a|a|dkr6t}nttg}xzt	�
t�D]l}d|ksJ|�d�rbqJ|�
d�\}}|dk	r�||kr�qJ|fdd�}ttd||�ttd||�~~~~qJWzht|�|dk�r dd	lm}	tjd}
t�rttjd<tt||	d
�ttjd<tt|�|
tjd<Wdt�r8t�tt�t�tt�t�sXt�dt�ttjdk	�rptd��XdS)
z� Execute the tests.

    Runs all arithmetic tests if arith is True or if the "decimal" resource
    is enabled in regrtest.py
    Nrz.decTestrdcSs|�t|�S)N)r��	directory)rzr�r
r
rr�'r�ztest_main.<locals>.<lambda>Ztest_r)�IGNORE_EXCEPTION_DETAIL)Zoptionflagsz*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�listdirrdr�r�rFrZdoctestrerrrr$�ORIGINAL_CONTEXT�warnings�warn�UserWarning�orig_sys_decimalr)�arith�verbose�
todo_tests�debugZtest_classes�filename�head�tailZtesterrerr
r
r�	test_mainsH




ruz:test_decimal.py [--debug] [{--skip | test1 [test2 [...]]}]z--debugz-d�
store_truez2shows the test number and context before each test)�action�helpz--skipz-sz%skip over 90% of the arithmetic tests)rnro)rnrorprq)NNNN)�r�r�rgrr�rjrrSr�rriZtest.supportrrrrrrrr	r
r�rKr�r_r�rrmZ
cfractionsZ
pfractionsrr�rr�rBr#rprursrvrwrtrrrqr4r�rrmrirhrjrlrkr rnr;rir&ZTESTDATADIRr��argvr��__file__�path�dirname�curdirZtestdir�seprd�isdirr�r��hasattrZEXTRA_FUNCTIONALITYZ
skipUnlessrZskipIfZskip_if_extra_functionalityZTestCaser)r�r�r�rrrrHrIrJr{r|r}r�r�r�r�r�r�r�r�rrrr8r9r:r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrHrf�insertruZoptparseZOptionParserr�Z
add_option�
parse_args�optr��skiprqr
r
r
r�<module>sd



0

eWM)',-/Xm~
P>m
Ua	
7