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
83695596
Commit
83695596
authored
Sep 13, 2014
by
Damien George
Browse files
py: Fix build error when float disabled; add test for divmod.
parent
8594ce22
Changes
3
Hide whitespace changes
Inline
Side-by-side
py/builtin.c
View file @
83695596
...
...
@@ -247,14 +247,16 @@ STATIC mp_obj_t mp_builtin_divmod(mp_obj_t o1_in, mp_obj_t o2_in) {
mp_int_t
i1
=
MP_OBJ_SMALL_INT_VALUE
(
o1_in
);
mp_int_t
i2
=
MP_OBJ_SMALL_INT_VALUE
(
o2_in
);
if
(
i2
==
0
)
{
#if MICROPY_PY_BUILTINS_FLOAT
zero_division_error:
#endif
nlr_raise
(
mp_obj_new_exception_msg
(
&
mp_type_ZeroDivisionError
,
"division by zero"
));
}
mp_obj_t
args
[
2
];
args
[
0
]
=
MP_OBJ_NEW_SMALL_INT
(
i1
/
i2
);
args
[
1
]
=
MP_OBJ_NEW_SMALL_INT
(
i1
%
i2
);
return
mp_obj_new_tuple
(
2
,
args
);
#if MICROPY_PY_BUILTINS_FLOAT
#if MICROPY_PY_BUILTINS_FLOAT
}
else
if
(
MP_OBJ_IS_TYPE
(
o1_in
,
&
mp_type_float
)
||
MP_OBJ_IS_TYPE
(
o2_in
,
&
mp_type_float
))
{
mp_float_t
f1
=
mp_obj_get_float
(
o1_in
);
mp_float_t
f2
=
mp_obj_get_float
(
o2_in
);
...
...
@@ -267,7 +269,7 @@ STATIC mp_obj_t mp_builtin_divmod(mp_obj_t o1_in, mp_obj_t o2_in) {
mp_obj_new_float
(
f2
),
};
return
mp_obj_new_tuple
(
2
,
tuple
);
#endif
#endif
}
else
{
nlr_raise
(
mp_obj_new_exception_msg_varg
(
&
mp_type_TypeError
,
"unsupported operand type(s) for divmod(): '%s' and '%s'"
,
mp_obj_get_type_str
(
o1_in
),
mp_obj_get_type_str
(
o2_in
)));
}
...
...
tests/float/float_divmod.py
0 → 100644
View file @
83695596
# test floating point floor divide and modulus
# it has some tricky corner cases
def
test
(
x
,
y
):
div
,
mod
=
divmod
(
x
,
y
)
print
(
'%.8f %.8f %.8f %.8f'
%
(
x
//
y
,
x
%
y
,
div
,
mod
))
print
(
div
==
x
//
y
,
mod
==
x
%
y
,
abs
(
div
*
y
+
mod
-
x
)
<
1e-15
)
test
(
1.23456
,
0.7
)
test
(
-
1.23456
,
0.7
)
test
(
1.23456
,
-
0.7
)
test
(
-
1.23456
,
-
0.7
)
a
=
1.23456
b
=
0.7
test
(
a
,
b
)
test
(
a
,
-
b
)
test
(
-
a
,
b
)
test
(
-
a
,
-
b
)
for
i
in
range
(
25
):
x
=
(
i
-
12.5
)
/
6
for
j
in
range
(
25
):
y
=
(
j
-
12.5
)
/
6
test
(
x
,
y
)
tests/float/float_divmod_relaxed.py
0 → 100644
View file @
83695596
# test floating point floor divide and modulus
# it has some tricky corner cases
# pyboard has 32-bit floating point and gives different (but still
# correct) answers for certain combinations of divmod arguments.
def
test
(
x
,
y
):
div
,
mod
=
divmod
(
x
,
y
)
print
(
div
==
x
//
y
,
mod
==
x
%
y
,
abs
(
div
*
y
+
mod
-
x
)
<
1e-6
)
test
(
1.23456
,
0.7
)
test
(
-
1.23456
,
0.7
)
test
(
1.23456
,
-
0.7
)
test
(
-
1.23456
,
-
0.7
)
a
=
1.23456
b
=
0.7
test
(
a
,
b
)
test
(
a
,
-
b
)
test
(
-
a
,
b
)
test
(
-
a
,
-
b
)
for
i
in
range
(
25
):
x
=
(
i
-
12.5
)
/
6
for
j
in
range
(
25
):
y
=
(
j
-
12.5
)
/
6
test
(
x
,
y
)
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