diff --git a/tests/snippets/numbers.py b/tests/snippets/numbers.py index 01d8b815b6..71fedca4dd 100644 --- a/tests/snippets/numbers.py +++ b/tests/snippets/numbers.py @@ -18,3 +18,7 @@ class A(int): assert int(0).__invert__() == -1 assert int(-3).__invert__() == 2 assert int(4).__invert__() == -5 + +assert int(0).__ceil__() == 0 +assert int(-3).__ceil__() == -3 +assert int(4).__ceil__() == 4 diff --git a/vm/src/obj/objint.rs b/vm/src/obj/objint.rs index 0837410231..a4998a9afb 100644 --- a/vm/src/obj/objint.rs +++ b/vm/src/obj/objint.rs @@ -96,6 +96,12 @@ fn int_bool(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { Ok(vm.ctx.new_bool(result)) } +fn int_ceil(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { + arg_check!(vm, args, required = [(zelf, Some(vm.ctx.int_type()))]); + let result = BigInt::from_pyobj(zelf); + Ok(vm.ctx.new_int(result)) +} + fn int_invert(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { arg_check!(vm, args, required = [(zelf, Some(vm.ctx.int_type()))]); @@ -556,6 +562,7 @@ Base 0 means to interpret the base from the string as an integer literal. context.set_attr(&int_type, "__truediv__", context.new_rustfunc(int_truediv)); context.set_attr(&int_type, "__xor__", context.new_rustfunc(int_xor)); context.set_attr(&int_type, "__bool__", context.new_rustfunc(int_bool)); + context.set_attr(&int_type, "__ceil__", context.new_rustfunc(int_ceil)); context.set_attr(&int_type, "__invert__", context.new_rustfunc(int_invert)); context.set_attr( &int_type,