diff options
| author | Damien George <damien@micropython.org> | 2022-06-21 23:45:27 +1000 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2022-06-23 11:46:47 +1000 |
| commit | 61ce260ff73b1191a9190c8cac7a7a1bd5b2f274 (patch) | |
| tree | 10420f6c4f2bc59f24031d17de28690f41c40e38 | |
| parent | 0172292762649db91f588107b2163ab6449dc7ca (diff) | |
py/parsenum: Fix parsing of complex "j" and also "nanj", "infj".
Prior to this commit, complex("j") would return 0j, and complex("nanj")
would return nan+0j. This commit makes sure "j" is tested for after
parsing the number (nan, inf or a decimal), and also supports the case of
"j" on its own.
Signed-off-by: Damien George <damien@micropython.org>
| -rw-r--r-- | py/parsenum.c | 12 | ||||
| -rw-r--r-- | tests/float/complex1.py | 5 |
2 files changed, 14 insertions, 3 deletions
diff --git a/py/parsenum.c b/py/parsenum.c index 848a7732d..b90dfaaaf 100644 --- a/py/parsenum.c +++ b/py/parsenum.c @@ -291,9 +291,6 @@ parse_start: if (str == top) { goto value_error; } - } else if (allow_imag && (dig | 0x20) == 'j') { - real_imag_state |= REAL_IMAG_STATE_HAVE_IMAG; - break; } else if (dig == '_') { continue; } else { @@ -327,6 +324,15 @@ parse_start: } } + if (allow_imag && str < top && (*str | 0x20) == 'j') { + if (str == str_val_start) { + // Convert "j" to "1j". + dec_val = 1; + } + ++str; + real_imag_state |= REAL_IMAG_STATE_HAVE_IMAG; + } + // negate value if needed if (dec_neg) { dec_val = -dec_val; diff --git a/tests/float/complex1.py b/tests/float/complex1.py index feede0eab..f4107a139 100644 --- a/tests/float/complex1.py +++ b/tests/float/complex1.py @@ -4,14 +4,19 @@ 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)) |
