diff options
-rw-r--r-- | py/objint.c | 2 | ||||
-rw-r--r-- | py/strtonum.c | 72 | ||||
-rw-r--r-- | tests/basics/tests/int1.py | 22 |
3 files changed, 22 insertions, 74 deletions
diff --git a/py/objint.c b/py/objint.c index e5351ce3a1..bd0926840b 100644 --- a/py/objint.c +++ b/py/objint.c @@ -19,11 +19,9 @@ static mp_obj_t int_make_new(mp_obj_t type_in, int n_args, const mp_obj_t *args) return MP_OBJ_NEW_SMALL_INT(0); case 1: - // TODO allow string as arg and parse it return MP_OBJ_NEW_SMALL_INT(mp_obj_get_int(args[0])); case 2: - // TODO make args[0] and args[1] correct return MP_OBJ_NEW_SMALL_INT(mp_obj_get_int_base(args[1], args[0])); default: diff --git a/py/strtonum.c b/py/strtonum.c index d322f6d8d5..109ea1123b 100644 --- a/py/strtonum.c +++ b/py/strtonum.c @@ -2,9 +2,7 @@ #include <ctype.h> #include <errno.h> -#include <stdio.h> #include <stdlib.h> -#include <string.h> #include "misc.h" #include "mpconfig.h" @@ -21,8 +19,7 @@ long strtonum(const char *restrict s, int base) { // check radix base if ((base != 0 && base < 2) || base > 36) { - printf("ValueError: int() arg 2 must be >=2 and <= 36\n"); - return 0; + nlr_jump(mp_obj_new_exception_msg(MP_QSTR_ValueError, "ValueError: int() arg 2 must be >=2 and <= 36")); } // skip surrounded whitespace while (isspace((c = *(p++)))); @@ -87,75 +84,8 @@ done: value_error: nlr_jump(mp_obj_new_exception_msg_2_args(MP_QSTR_ValueError, "invalid literal for int() with base %d: '%s'", (void*)(machine_uint_t)base, s)); - //printf("invalid literal for int() with base %d: '%s'\n", base, s); - //return 0; } -/* -int main(void) { - printf(" 0 %ld\n", strtonum("0", 0)); - printf(" 1 %ld\n", strtonum("1", 0)); - printf(" 1 %ld\n", strtonum("+1", 0)); - printf(" -1 %ld\n", strtonum("-1", 0)); - printf(" 0 %ld\n", strtonum("+0", 0)); - printf(" 0 %ld\n", strtonum("-0", 0)); - printf(" 1 %ld\n", strtonum("01", 0)); - printf(" 9 %ld\n", strtonum("9", 0)); - printf(" 10 %ld\n", strtonum("10", 0)); - printf(" 10 %ld\n", strtonum("+10", 0)); - printf("-10 %ld\n", strtonum("-10", 0)); - printf(" 12 %ld\n", strtonum("12", 0)); - printf("-12 %ld\n", strtonum("-12", 0)); - printf(" 99 %ld\n", strtonum("99", 0)); - printf("100 %ld\n", strtonum("100", 0)); - printf("314 %ld\n", strtonum("314", 0)); - printf("314 %ld\n", strtonum(" 314", 0)); - printf("314 %ld\n", strtonum("314 ", 0)); - printf("314 %ld\n", strtonum(" \t\t 314 \t\t ", 0)); - printf(" 1 %ld\n", strtonum(" 1 ", 0)); - printf(" -3 %ld\n", strtonum(" -3 ", 0)); - printf(" 83 %ld\n", strtonum("0o123", 0)); - printf(" 18 %ld\n", strtonum("0x12", 0)); - printf(" 10 %ld\n", strtonum("0o12", 0)); - printf(" 10 %ld\n", strtonum("0o12", 0)); - printf(" 10 %ld\n", strtonum(" \t 0o12", 0)); - printf(" 10 %ld\n", strtonum("0o12 \t ", 0)); - printf(" 10 %ld\n", strtonum("0O12", 0)); - printf(" 5 %ld\n", strtonum("0b101", 0)); - printf(" 5 %ld\n", strtonum("0b101", 0)); - - printf(" 0 %ld\n", strtonum("0", 10)); - printf(" 1 %ld\n", strtonum("1", 10)); - printf(" 1 %ld\n", strtonum(" \t 1 \t ", 10)); - printf(" 11 %ld\n", strtonum("11", 10)); - printf(" 17 %ld\n", strtonum("11", 16)); - printf(" 9 %ld\n", strtonum("11", 8)); - printf(" 3 %ld\n", strtonum("11", 2)); - printf(" 37 %ld\n", strtonum("11", 36)); - printf("4294967296 %ld\n", strtonum("4294967296", 0)); - - printf("%ld\n", strtonum("x", 0)); - printf("%ld\n", strtonum("1x", 0)); - printf("%ld\n", strtonum(" 1x", 0)); - printf("%ld\n", strtonum(" 1\02 ", 0)); - printf("%ld\n", strtonum("", 0)); - printf("%ld\n", strtonum(" ", 0)); - printf("%ld\n", strtonum(" \t\t ", 0)); - printf("%ld\n", strtonum("0x", 0)); - printf("%ld\n", strtonum("0x", 16)); - printf("%ld\n", strtonum("0o", 0)); - printf("%ld\n", strtonum("0o", 8)); - printf("%ld\n", strtonum("0b", 0)); - printf("%ld\n", strtonum("0b", 2)); - printf("%ld\n", strtonum("0b2", 2)); - printf("%ld\n", strtonum("0o8", 8)); - printf("%ld\n", strtonum("0xg", 16)); - - printf("%ld\n", strtonum("1 1", 0)); - printf("%ld\n", strtonum("18446744073709551616", 0)); -} -*/ - #else /* defined(UNIX) */ long strtonum(const char *restrict s, int base) { diff --git a/tests/basics/tests/int1.py b/tests/basics/tests/int1.py index 6f3e3f272c..4ce0f9e70c 100644 --- a/tests/basics/tests/int1.py +++ b/tests/basics/tests/int1.py @@ -9,10 +9,13 @@ print(int('-0')) print(int('1')) print(int('+1')) print(int('-1')) +print(int('01')) print(int('9')) print(int('10')) print(int('+10')) print(int('-10')) +print(int('12')) +print(int('-12')) print(int('99')) print(int('100')) print(int('314')) @@ -22,12 +25,26 @@ print(int(' \t\t 314 \t\t ')) print(int(' 1 ')) print(int(' -3 ')) -print(int('10', 16)) +print(int('0', 10)) +print(int('1', 10)) +print(int(' \t 1 \t ', 10)) +print(int('11', 10)) +print(int('11', 16)) +print(int('11', 8)) +print(int('11', 2)) +print(int('11', 36)) print(int('0o123', 0)) +print(int('8388607')) print(int('0x123', 16)) print(int('0X123', 16)) +print(int('0o123', 8)) print(int('0O123', 8)) +print(int('0123', 8)) +print(int('0b100', 2)) print(int('0B100', 2)) +print(int('0100', 2)) +print(int(' \t 0o12', 8)) +print(int('0o12 \t ', 8)) def test(value, base): @@ -37,6 +54,8 @@ def test(value, base): print('ValueError') +test('x', 0) +test('1x', 0) test(' 1x', 0) test(' 1' + chr(2) + ' ', 0) test('', 0) @@ -52,3 +71,4 @@ test('0b', 0) test('0b2', 2) test('0o8', 8) test('0xg', 16) +test('1 1', 16) |