This commit fixes a test exercising complex numbers creation, working around a deprecation introduced in CPython 3.14. Creating complex numbers using a complex number as the real part in the constructor is deprecated in CPython 3.14, but that construction method is still supported by MicroPython and covered by tests. To work around this, the specific constructor is extracted into its own test, providing an expected output file recorded using CPython 3.11. Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
144 lines
2.7 KiB
Python
144 lines
2.7 KiB
Python
# test basic complex number functionality
|
|
|
|
# constructor
|
|
print(complex(1))
|
|
print(complex(1.2))
|
|
print(complex(1.2j))
|
|
print(complex("j"))
|
|
print(complex("J"))
|
|
print(complex("1"))
|
|
print(complex("1.2"))
|
|
print(complex("1.2j"))
|
|
print(complex("1+j"))
|
|
print(complex("1+2j"))
|
|
print(complex("-1-2j"))
|
|
print(complex("-1+2j"))
|
|
print(complex("+1-2j"))
|
|
print(complex(" -1-2j "))
|
|
print(complex(" +1-2j "))
|
|
print(complex(" -1+2j "))
|
|
print(complex("nanj"))
|
|
print(complex("nan-infj"))
|
|
print(complex(1, 2))
|
|
|
|
# unary ops
|
|
print(bool(1j))
|
|
print(+(1j))
|
|
print(-(1 + 2j))
|
|
|
|
# binary ops
|
|
print(1j + False)
|
|
print(1j + True)
|
|
print(1j + 2)
|
|
print(1j + 2j)
|
|
print(1j - 2)
|
|
print(1j - 2j)
|
|
print(1j * 2)
|
|
print(1j * 2j)
|
|
print(1j / 2)
|
|
print((1j / 2j).real)
|
|
print(1j / (1 + 2j))
|
|
ans = 0j**0
|
|
print("%.5g %.5g" % (ans.real, ans.imag))
|
|
ans = 0j**1
|
|
print("%.5g %.5g" % (ans.real, ans.imag))
|
|
ans = 0j**0j
|
|
print("%.5g %.5g" % (ans.real, ans.imag))
|
|
ans = 1j**2.5
|
|
print("%.5g %.5g" % (ans.real, ans.imag))
|
|
ans = 1j**2.5j
|
|
print("%.5g %.5g" % (ans.real, ans.imag))
|
|
|
|
# comparison
|
|
print(1j == 1)
|
|
print(1j == 1j)
|
|
print(0 + 0j == False, 1 + 0j == True)
|
|
print(False == 0 + 0j, True == 1 + 0j)
|
|
|
|
# comparison of nan is special
|
|
nan = float("nan") * 1j
|
|
print(nan == 1j)
|
|
print(nan == nan)
|
|
|
|
# builtin abs
|
|
print(abs(1j))
|
|
print("%.5g" % abs(1j + 2))
|
|
|
|
# builtin hash
|
|
print(hash(1 + 0j))
|
|
print(type(hash(1j)))
|
|
|
|
# float on lhs should delegate to complex
|
|
print(1.2 + 3j)
|
|
|
|
# negative base and fractional power should create a complex
|
|
ans = (-1) ** 2.3
|
|
print("%.5g %.5g" % (ans.real, ans.imag))
|
|
ans = (-1.2) ** -3.4
|
|
print("%.5g %.5g" % (ans.real, ans.imag))
|
|
|
|
# check printing of inf/nan
|
|
print(float("nan") * 1j)
|
|
print(float("-nan") * 1j)
|
|
print(float("inf") * (1 + 1j))
|
|
print(float("-inf") * (1 + 1j))
|
|
|
|
# malformed complex strings
|
|
for test in ("1+2", "1j+2", "1+2j+3", "1+2+3j", "1 + 2j"):
|
|
try:
|
|
complex(test)
|
|
except ValueError:
|
|
print("ValueError", test)
|
|
|
|
# can't assign to attributes
|
|
try:
|
|
(1j).imag = 0
|
|
except AttributeError:
|
|
print("AttributeError")
|
|
|
|
# can't convert rhs to complex
|
|
try:
|
|
1j + []
|
|
except TypeError:
|
|
print("TypeError")
|
|
|
|
# unsupported unary op
|
|
try:
|
|
~(1j)
|
|
except TypeError:
|
|
print("TypeError")
|
|
|
|
# unsupported binary op
|
|
try:
|
|
1j // 2
|
|
except TypeError:
|
|
print("TypeError")
|
|
|
|
# unsupported binary op
|
|
try:
|
|
1j < 2j
|
|
except TypeError:
|
|
print("TypeError")
|
|
|
|
# small int on LHS, complex on RHS, unsupported op
|
|
try:
|
|
print(1 | 1j)
|
|
except TypeError:
|
|
print("TypeError")
|
|
|
|
# zero division
|
|
try:
|
|
1j / 0
|
|
except ZeroDivisionError:
|
|
print("ZeroDivisionError")
|
|
|
|
# zero division via power
|
|
try:
|
|
0j**-1
|
|
except ZeroDivisionError:
|
|
print("ZeroDivisionError")
|
|
try:
|
|
0j**1j
|
|
except ZeroDivisionError:
|
|
print("ZeroDivisionError")
|