Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
6fd4b36b
Commit
6fd4b36b
authored
Jan 02, 2015
by
Damien George
Browse files
py: Raise exception if trying to convert inf/nan to int.
parent
6e0b6d02
Changes
3
Hide whitespace changes
Inline
Side-by-side
py/mpz.c
View file @
6fd4b36b
...
...
@@ -711,16 +711,9 @@ typedef uint32_t mp_float_int_t;
// value == 0 || value < 1
mpz_init_zero
(
z
);
}
else
if
(
u
.
p
.
exp
==
((
1
<<
EXP_SZ
)
-
1
))
{
// inf or NaN
#if 0
// TODO: this probably isn't the right place to throw an exception
if(u.p.frc == 0)
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_OverflowError, "cannot convert float infinity to integer"));
else
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "cannot convert float NaN to integer"));
#else
// u.p.frc == 0 indicates inf, else NaN
// should be handled by caller
mpz_init_zero
(
z
);
#endif
}
else
{
const
int
adj_exp
=
(
int
)
u
.
p
.
exp
-
((
1
<<
(
EXP_SZ
-
1
))
-
1
);
if
(
adj_exp
<
0
)
{
...
...
py/objint_mpz.c
View file @
6fd4b36b
...
...
@@ -298,9 +298,16 @@ mp_obj_t mp_obj_new_int_from_uint(mp_uint_t value) {
#if MICROPY_PY_BUILTINS_FLOAT
mp_obj_t
mp_obj_new_int_from_float
(
mp_float_t
val
)
{
mp_obj_int_t
*
o
=
mp_obj_int_new_mpz
();
mpz_set_from_float
(
&
o
->
mpz
,
val
);
return
o
;
int
cl
=
fpclassify
(
val
);
if
(
cl
==
FP_INFINITE
)
{
nlr_raise
(
mp_obj_new_exception_msg_varg
(
&
mp_type_OverflowError
,
"can't convert inf to int"
));
}
else
if
(
cl
==
FP_NAN
)
{
nlr_raise
(
mp_obj_new_exception_msg_varg
(
&
mp_type_ValueError
,
"can't convert NaN to int"
));
}
else
{
mp_obj_int_t
*
o
=
mp_obj_int_new_mpz
();
mpz_set_from_float
(
&
o
->
mpz
,
val
);
return
o
;
}
}
#endif
...
...
tests/float/float2int.py
View file @
6fd4b36b
...
...
@@ -22,3 +22,15 @@ for i in range(0,23):
print
(
'fail: 10**%u was %u digits long'
%
(
i
,
digcnt
));
testpass
=
False
print
(
"power of 10 test: %s"
%
(
testpass
and
'passed'
or
'failed'
))
# test inf conversion
try
:
int
(
float
(
'inf'
))
except
OverflowError
:
print
(
"OverflowError"
)
# test nan conversion
try
:
int
(
float
(
'nan'
))
except
ValueError
:
print
(
"ValueError"
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment