mirror of
https://github.com/micropython/micropython.git
synced 2025-07-21 04:51:12 +02:00
Some checks failed
JavaScript code lint and formatting with Biome / eslint (push) Has been cancelled
Check code formatting / code-formatting (push) Has been cancelled
Check spelling with codespell / codespell (push) Has been cancelled
Build docs / build (push) Has been cancelled
Check examples / embedding (push) Has been cancelled
Package mpremote / build (push) Has been cancelled
.mpy file format and tools / test (push) Has been cancelled
Build ports metadata / build (push) Has been cancelled
alif port / build_alif (alif_ae3_build) (push) Has been cancelled
cc3200 port / build (push) Has been cancelled
esp32 port / build_idf (esp32_build_cmod_spiram_s2) (push) Has been cancelled
esp32 port / build_idf (esp32_build_s3_c3) (push) Has been cancelled
esp8266 port / build (push) Has been cancelled
mimxrt port / build (push) Has been cancelled
nrf port / build (push) Has been cancelled
powerpc port / build (push) Has been cancelled
qemu port / build_and_test_arm (bigendian) (push) Has been cancelled
qemu port / build_and_test_arm (sabrelite) (push) Has been cancelled
qemu port / build_and_test_arm (thumb) (push) Has been cancelled
qemu port / build_and_test_rv32 (push) Has been cancelled
renesas-ra port / build_renesas_ra_board (push) Has been cancelled
rp2 port / build (push) Has been cancelled
samd port / build (push) Has been cancelled
stm32 port / build_stm32 (stm32_misc_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_nucleo_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_pyb_build) (push) Has been cancelled
unix port / minimal (push) Has been cancelled
unix port / reproducible (push) Has been cancelled
unix port / standard (push) Has been cancelled
unix port / standard_v2 (push) Has been cancelled
unix port / coverage (push) Has been cancelled
unix port / coverage_32bit (push) Has been cancelled
unix port / nanbox (push) Has been cancelled
unix port / float (push) Has been cancelled
unix port / stackless_clang (push) Has been cancelled
unix port / float_clang (push) Has been cancelled
unix port / settrace (push) Has been cancelled
unix port / settrace_stackless (push) Has been cancelled
unix port / macos (push) Has been cancelled
unix port / qemu_mips (push) Has been cancelled
unix port / qemu_arm (push) Has been cancelled
unix port / qemu_riscv64 (push) Has been cancelled
webassembly port / build (push) Has been cancelled
windows port / build-vs (Debug, x64, windows-2022, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Debug, x64, windows-latest, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Debug, x86, windows-2022, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Debug, x86, windows-latest, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-2019, dev, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-2019, standard, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-2022, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-2022, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-latest, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-latest, standard, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-2019, dev, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-2019, standard, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-2022, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-2022, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-latest, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-latest, standard, 2017, [15, 16)) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, dev) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, standard) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, dev) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, standard) (push) Has been cancelled
windows port / cross-build-on-linux (push) Has been cancelled
zephyr port / build (push) Has been cancelled
Python code lint and formatting with ruff / ruff (push) Has been cancelled
If a complex literal had a negative real part and a positive imaginary part, it was not parsed properly because the imaginary part also came out negative. Includes a test of complex parsing, which fails without this fix. Co-authored-by: ComplexSymbol <141301057+ComplexSymbol@users.noreply.github.com> Signed-off-by: Jeff Epler <jepler@gmail.com>
145 lines
2.7 KiB
Python
145 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))
|
|
print(complex(1j, 2j))
|
|
|
|
# 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")
|