Test mpc elementary operations
------------------------------

>>> import gmpy2 as G
>>> from gmpy2 import mpz, mpq, mpfr, mpc
>>> from fractions import Fraction as F
>>> from decimal import Decimal as D
>>> a = mpz(123)
>>> b = mpz(456)
>>> c = 12345678901234567890
>>> af = mpfr("12.34")
>>> bf = mpfr("45.67")
>>> aq = mpq(3,11)
>>> bq = mpq(17,2)
>>> aj = mpc(1+2j)
>>> bj = mpc(4+5j)

Test addition
-------------

>>> aj + bj
mpc('5.0+7.0j')
>>> bj + aj
mpc('5.0+7.0j')
>>> aj + a
mpc('124.0+2.0j')
>>> a + aj
mpc('124.0+2.0j')
>>> aj + 1
mpc('2.0+2.0j')
>>> 1 + aj
mpc('2.0+2.0j')
>>> aj + 0
mpc('1.0+2.0j')
>>> 0 + aj
mpc('1.0+2.0j')
>>> -1 + aj
mpc('0.0+2.0j')
>>> aj - 1
mpc('0.0+2.0j')
>>> aj + 1.2 == 2.2 + 2j
True

Test subtraction
----------------

>>> aj - bj
mpc('-3.0-3.0j')
>>> bj - aj
mpc('3.0+3.0j')
>>> aj - a
mpc('-122.0+2.0j')
>>> a - aj
mpc('122.0-2.0j')
>>> aj - 1
mpc('0.0+2.0j')
>>> 1 - aj
mpc('0.0-2.0j')
>>> 0 - aj
mpc('-1.0-2.0j')
>>> aj - 0
mpc('1.0+2.0j')
>>> aj - -1
mpc('2.0+2.0j')
>>> -1 - aj
mpc('-2.0-2.0j')
>>> aj - 1.2 == (1+2j) - 1.2
True

Test multiplication
-------------------

>>> aj * bj
mpc('-6.0+13.0j')
>>> bj * aj
mpc('-6.0+13.0j')
>>> aj * a
mpc('123.0+246.0j')
>>> a * aj
mpc('123.0+246.0j')
>>> aj * -1
mpc('-1.0-2.0j')
>>> aj * (0.0+1j)
mpc('-2.0+1.0j')

Test division
-------------

>>> aj / bj
mpc('0.34146341463414637+0.073170731707317069j')
>>> aj // bj
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't take floor of complex number.
>>> aj / a
mpc('0.008130081300813009+0.016260162601626018j')
>>> a / aj
mpc('24.600000000000001-49.200000000000003j')
>>> aj / 0
mpc('inf+infj')

Test modulo
-----------

>>> aj % bj
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't mod complex numbers
>>> aj % a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't mod complex numbers
>>> a % aj
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't mod complex numbers
>>> divmod(aj, bj)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't take floor or mod of complex number.

Test operations involving NaN/Inf
---------------------------------

>>> aj + float('inf')
mpc('inf+2.0j')
>>> aj + float('-inf')
mpc('-inf+2.0j')
>>> aj + float('nan')
mpc('nan+2.0j')
>>> float('inf') - aj
mpc('inf-2.0j')
>>> aj - float('inf')
mpc('-inf+2.0j')
>>> aj - float('-inf')
mpc('inf+2.0j')
>>> aj - float('nan')
mpc('nan+2.0j')
>>> aj * float('inf')
mpc('inf+infj')
>>> aj * float('-inf')
mpc('-inf-infj')
>>> aj * float('nan')
mpc('nan+nanj')
>>> mpc(0,0) * float('inf')
mpc('nan+nanj')
>>> mpc(0,0) * float('-inf')
mpc('nan+nanj')
>>> mpc(0,0) * float('nan')
mpc('nan+nanj')
>>> aj / float('inf')
mpc('0.0+0.0j')
>>> aj / float('-inf')
mpc('-0.0-0.0j')
>>> float('inf') / aj
mpc('inf-infj')
>>> float('-inf') / aj
mpc('-inf+infj')

Test is_XXX
-----------

>>> G.is_zero(mpc("0+0j"))
True
>>> G.is_zero(mpc("1+0j"))
False
>>> G.is_zero(mpc("1+1j"))
False
>>> G.is_zero(mpc("0+1j"))
False
>>> G.is_nan(mpc("nan+1j"))
True
>>> G.is_nan(mpc("1+nanj"))
True
>>> G.is_nan(mpc("nan+nanj"))
True
>>> G.is_nan(mpc("1+1j"))
False
>>> G.is_infinite(mpc("inf+1j"))
True
>>> G.is_infinite(mpc("-inf+1j"))
True
>>> G.is_infinite(mpc("1+infj"))
True
>>> G.is_infinite(mpc("1-infj"))
True
>>> G.is_infinite(mpc("inf-infj"))
True
>>> G.is_infinite(mpc("1+1j"))
False
>>> G.is_finite(mpc("0+0j"))
True
>>> G.is_finite(mpc("nan+0j"))
False
>>> G.is_finite(mpc("0+nanj"))
False
>>> G.is_finite(mpc("0+infj"))
False
>>> G.is_finite(mpc("inf+3j"))
False

Test mpc misc
-------------
>>> c=mpc('67+87j', precision=70)
>>> c.precision
(70, 70)
>>> c.real.precision
70
>>> c.imag.precision
70
>>> c = mpc('42e56+42.909j', precision=(45,300))
>>> c.precision
(45, 300)
>>> c.real.precision
45
>>> c.imag.precision
300
>>> x = mpc("1.3142123+4.3e-1001j", precision=(70,37))
>>> mpc(x.real, x.imag, precision=(70,37)) == x
True
