From 9437c99244f73bd65d1fcb8d1354e5a3323fab70 Mon Sep 17 00:00:00 2001 From: faze-geek Date: Mon, 26 Feb 2024 22:03:47 +0530 Subject: [PATCH] Fix round for floating inputs --- src/pocketpy.cpp | 6 ++++-- tests/70_builtins.py | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/pocketpy.cpp b/src/pocketpy.cpp index 6dbfa6bc..49c22bcd 100644 --- a/src/pocketpy.cpp +++ b/src/pocketpy.cpp @@ -135,11 +135,13 @@ void init_builtins(VM* _vm) { return VAR(MappingProxy(mod)); }); - _vm->bind(_vm->builtins, "round(x, ndigits=0)", [](VM* vm, ArgsView args) { + _vm->bind(_vm->builtins, "round(x, ndigits=None)", [](VM* vm, ArgsView args) { f64 x = CAST(f64, args[0]); + if(args[1] == vm->None) return x >= 0 ? VAR((i64)(x + 0.5)) : VAR((i64)(x - 0.5)); int ndigits = CAST(int, args[1]); if(ndigits == 0){ - return x >= 0 ? VAR((i64)(x + 0.5)) : VAR((i64)(x - 0.5)); + if(is_int(args[0])) return x >= 0 ? VAR((i64)(x + 0.5)) : VAR((i64)(x - 0.5)); + else return x >= 0 ? VAR(f64((i64)(x + 0.5))) : VAR(f64((i64)(x - 0.5))); } if(ndigits < 0) vm->ValueError("ndigits should be non-negative"); if(x >= 0){ diff --git a/tests/70_builtins.py b/tests/70_builtins.py index ed703c5f..212061e5 100644 --- a/tests/70_builtins.py +++ b/tests/70_builtins.py @@ -2,6 +2,10 @@ assert round(23.2) == 23 assert round(23.8) == 24 assert round(-23.2) == -23 assert round(-23.8) == -24 +assert round(23.2, 0) == 23.0 +assert round(23.8, 0) == 24.0 +assert round(-23.2, 0) == -23.0 +assert round(-23.8, 0) == -24.0 # round with precision assert round(23.2, 1) == 23.2 assert round(23.8, 1) == 23.8