Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
micropython/tests/float/complex1.py
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
142 lines (123 sloc)
2.64 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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("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") |