Test gmpy2 Subtraction
======================

Test all code in the file gmpy2_sub.c.

>>> import gmpy2 as gmpy2
>>> from gmpy2 import mpz, xmpz, mpq, mpfr, mpc
>>> from supportclasses import *
>>> from decimal import Decimal as D
>>> from fractions import Fraction as F
>>> a = mpz(123)
>>> b = mpz(456)
>>> c = 12345678901234567890

Test integer operations
-----------------------

>>> a-1
mpz(122)
>>> a-(-1)
mpz(124)
>>> 1-a
mpz(-122)
>>> (-1)-a
mpz(-124)
>>> print(a-c)
-12345678901234567767
>>> print(c-a)
12345678901234567767
>>> print(a-(-c))
12345678901234568013
>>> print((-c)-a)
-12345678901234568013
>>> a-b
mpz(-333)
>>> b-a
mpz(333)
>>> a-(-b)
mpz(579)
>>> (-b)-a
mpz(-579)
>>> a-z
mpz(121)
>>> gmpy2.sub(2,1)
mpz(1)
>>> ctx=gmpy2.context()
>>> ctx.sub(a,b) == a-b
True
>>> ctx.sub(c,c) == c-c
True
>>> ctx.sub(1, 1)
mpz(0)
>>> ctx.sub(a, 1)
mpz(122)
>>> ctx.sub(1, a)
mpz(-122)
>>> ctx.sub(a, mpq(0))
mpq(123,1)
>>> ctx.sub(a, mpfr(0))
mpfr('123.0')
>>> ctx.sub(a, mpc(0))
mpc('123.0+0.0j')
>>> ctx.sub(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ** message detail varies **
>>> ctx.sub(1,2,3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ** message detail varies **
>>> a-'b'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ** message detail varies **
>>> 'b'-a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ** message detail varies **
>>> 1
1

Test rational operations
------------------------

>>> mpq(1,2) - F(3,2)
mpq(-1,1)
>>> F(1,2) - mpq(3,2)
mpq(-1,1)
>>> mpq(1,2) - mpq(3,2)
mpq(-1,1)
>>> mpq(1,2) - 0
mpq(1,2)
>>> mpq(1,2) - mpz(1)
mpq(-1,2)
>>> mpq(1,2) + (-1)
mpq(-1,2)
>>> 1 - mpq(1,2)
mpq(1,2)
>>> mpz(1) - mpq(1,2)
mpq(1,2)
>>> mpq(1,2) - mpz(1)
mpq(-1,2)
>>> mpq(1,1) - mpc(0)
mpc('1.0+0.0j')
>>> mpc(0) - mpq(1,1)
mpc('-1.0+0.0j')
>>> mpq(1,2) - z
mpq(-3,2)
>>> mpq(1,2) - q
mpq(-1,1)

>>> ctx=gmpy2.context()
>>> ctx.sub(mpq(1,2), mpq(3,2))
mpq(-1,1)
>>> ctx.sub(mpq(1,2), F(3,2))
mpq(-1,1)
>>> ctx.sub(F(1,2), mpq(3,2))
mpq(-1,1)
>>> ctx.sub(F(1,2), F(3,2))
mpq(-1,1)
>>> ctx.sub(1,'a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ** message detail varies **
>>> mpq(1,2) - 'a'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ** message detail varies **
>>> 'a' - mpq(1,2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ** message detail varies **
>>> 1
1

Test real operations
--------------------

>>> mpfr(10) - 1
mpfr('9.0')
>>> 10 - mpfr(1)
mpfr('9.0')
>>> mpfr(10) - mpz(1)
mpfr('9.0')
>>> mpz(10) - mpfr(1)
mpfr('9.0')
>>> mpfr(10) - mpfr(1)
mpfr('9.0')
>>> mpfr(10) - mpq(1,1)
mpfr('9.0')
>>> mpq(10,1) - mpfr(1)
mpfr('9.0')
>>> mpfr(10) - F(1,1)
mpfr('9.0')
>>> F(10,1) - mpfr(1)
mpfr('9.0')
>>> mpfr(10) - 1.0
mpfr('9.0')
>>> 10.0 - mpfr(1)
mpfr('9.0')
>>> mpfr(0) - (1 << 100) == mpfr('-1p100', base=2)
True
>>> (1 << 100) - mpfr(0) == mpfr('1p100', base=2)
True
>>> mpfr(10) - z
mpfr('8.0')
>>> mpfr(10) - q
mpfr('8.5')
>>> mpfr(10) - r
mpfr('8.5')

Test complex operations
-----------------------
>>> mpc(1,2) - 'a'
Traceback (most recent call last):
  ...
TypeError:
>>> mpfr(1) - mpc(1,2)
mpc('0.0-2.0j')
>>> mpc(1,2) - mpfr(1)
mpc('0.0+2.0j')
>>> mpc(1,2) - 1+0j
mpc('0.0+2.0j')
>>> 1+0j - mpc(1,2)
mpc('0.0-2.0j')
>>> mpc(1,2) - z
mpc('-1.0+2.0j')
>>> mpc(1,2) - q
mpc('-0.5+2.0j')
>>> mpc(1,2) - r
mpc('-0.5+2.0j')
>>> mpc(1,2) - cx
mpc('-41.0-65.0j')
