add more tests and remove debug code
This commit is contained in:
parent
3270fb4be6
commit
3e4ed25138
@ -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);
|
return MP_OBJ_NEW_SMALL_INT(0);
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
// TODO allow string as arg and parse it
|
|
||||||
return MP_OBJ_NEW_SMALL_INT(mp_obj_get_int(args[0]));
|
return MP_OBJ_NEW_SMALL_INT(mp_obj_get_int(args[0]));
|
||||||
|
|
||||||
case 2:
|
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]));
|
return MP_OBJ_NEW_SMALL_INT(mp_obj_get_int_base(args[1], args[0]));
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -2,9 +2,7 @@
|
|||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "mpconfig.h"
|
#include "mpconfig.h"
|
||||||
@ -21,8 +19,7 @@ long strtonum(const char *restrict s, int base) {
|
|||||||
|
|
||||||
// check radix base
|
// check radix base
|
||||||
if ((base != 0 && base < 2) || base > 36) {
|
if ((base != 0 && base < 2) || base > 36) {
|
||||||
printf("ValueError: int() arg 2 must be >=2 and <= 36\n");
|
nlr_jump(mp_obj_new_exception_msg(MP_QSTR_ValueError, "ValueError: int() arg 2 must be >=2 and <= 36"));
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
// skip surrounded whitespace
|
// skip surrounded whitespace
|
||||||
while (isspace((c = *(p++))));
|
while (isspace((c = *(p++))));
|
||||||
@ -87,75 +84,8 @@ done:
|
|||||||
|
|
||||||
value_error:
|
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));
|
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) */
|
#else /* defined(UNIX) */
|
||||||
|
|
||||||
long strtonum(const char *restrict s, int base) {
|
long strtonum(const char *restrict s, int base) {
|
||||||
|
@ -9,10 +9,13 @@ print(int('-0'))
|
|||||||
print(int('1'))
|
print(int('1'))
|
||||||
print(int('+1'))
|
print(int('+1'))
|
||||||
print(int('-1'))
|
print(int('-1'))
|
||||||
|
print(int('01'))
|
||||||
print(int('9'))
|
print(int('9'))
|
||||||
print(int('10'))
|
print(int('10'))
|
||||||
print(int('+10'))
|
print(int('+10'))
|
||||||
print(int('-10'))
|
print(int('-10'))
|
||||||
|
print(int('12'))
|
||||||
|
print(int('-12'))
|
||||||
print(int('99'))
|
print(int('99'))
|
||||||
print(int('100'))
|
print(int('100'))
|
||||||
print(int('314'))
|
print(int('314'))
|
||||||
@ -22,12 +25,26 @@ print(int(' \t\t 314 \t\t '))
|
|||||||
print(int(' 1 '))
|
print(int(' 1 '))
|
||||||
print(int(' -3 '))
|
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('0o123', 0))
|
||||||
|
print(int('8388607'))
|
||||||
print(int('0x123', 16))
|
print(int('0x123', 16))
|
||||||
print(int('0X123', 16))
|
print(int('0X123', 16))
|
||||||
|
print(int('0o123', 8))
|
||||||
print(int('0O123', 8))
|
print(int('0O123', 8))
|
||||||
|
print(int('0123', 8))
|
||||||
|
print(int('0b100', 2))
|
||||||
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):
|
def test(value, base):
|
||||||
@ -37,6 +54,8 @@ def test(value, base):
|
|||||||
print('ValueError')
|
print('ValueError')
|
||||||
|
|
||||||
|
|
||||||
|
test('x', 0)
|
||||||
|
test('1x', 0)
|
||||||
test(' 1x', 0)
|
test(' 1x', 0)
|
||||||
test(' 1' + chr(2) + ' ', 0)
|
test(' 1' + chr(2) + ' ', 0)
|
||||||
test('', 0)
|
test('', 0)
|
||||||
@ -52,3 +71,4 @@ test('0b', 0)
|
|||||||
test('0b2', 2)
|
test('0b2', 2)
|
||||||
test('0o8', 8)
|
test('0o8', 8)
|
||||||
test('0xg', 16)
|
test('0xg', 16)
|
||||||
|
test('1 1', 16)
|
||||||
|
Loading…
Reference in New Issue
Block a user