From 12e6de0503996e4a6e70bf96a949672f4d1564cb Mon Sep 17 00:00:00 2001 From: Nathan Date: Tue, 5 Feb 2019 20:59:41 -0600 Subject: [PATCH] repr() of complex numbers is compliant with cpython --- tests/snippets/basic_types.py | 3 +++ vm/src/obj/objcomplex.rs | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/snippets/basic_types.py b/tests/snippets/basic_types.py index 1298c4ed3..006669b3f 100644 --- a/tests/snippets/basic_types.py +++ b/tests/snippets/basic_types.py @@ -44,6 +44,9 @@ assert int() == 0 a = complex(2, 4) assert type(a) is complex assert type(a + a) is complex +assert repr(a) == '(2+4j)' +a = 10j +assert repr(a) == '10j' a = 1 assert a.conjugate() == a diff --git a/vm/src/obj/objcomplex.rs b/vm/src/obj/objcomplex.rs index 7c4c54990..bc624d50f 100644 --- a/vm/src/obj/objcomplex.rs +++ b/vm/src/obj/objcomplex.rs @@ -85,5 +85,10 @@ fn complex_conjugate(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { fn complex_repr(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { arg_check!(vm, args, required = [(obj, Some(vm.ctx.complex_type()))]); let v = get_value(obj); - Ok(vm.new_str(v.to_string())) + let repr = if v.re == 0. { + format!("{}j", v.im) + } else { + format!("({}+{}j)", v.re, v.im) + }; + Ok(vm.new_str(repr)) }