summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/modules/IcePy/Types.cpp2
-rw-r--r--python/test/Ice/operations/Twoways.py7
2 files changed, 8 insertions, 1 deletions
diff --git a/python/modules/IcePy/Types.cpp b/python/modules/IcePy/Types.cpp
index ea749bad672..45579378801 100644
--- a/python/modules/IcePy/Types.cpp
+++ b/python/modules/IcePy/Types.cpp
@@ -726,7 +726,7 @@ IcePy::PrimitiveInfo::validate(PyObject* p)
{
// Ensure double does not exceed maximum float value before casting
double val = PyFloat_AsDouble(p);
- return val <= numeric_limits<float>::max() && val >= -numeric_limits<float>::max();
+ return (val <= numeric_limits<float>::max() && val >= -numeric_limits<float>::max()) || !isfinite(val);
}
break;
diff --git a/python/test/Ice/operations/Twoways.py b/python/test/Ice/operations/Twoways.py
index 1299a375d7a..f02109756ed 100644
--- a/python/test/Ice/operations/Twoways.py
+++ b/python/test/Ice/operations/Twoways.py
@@ -141,6 +141,13 @@ def twoways(communicator, p):
r, f, d = p.opFloatDouble(3.402823466E38, 0.0)
r, f, d = p.opFloatDouble(-3.402823466E38, 0.0)
+ for val in ('inf', '-inf'):
+ r, f, d = p.opFloatDouble(float(val), float(val))
+ test(math.isinf(r) and math.isinf(f) and math.isinf(d))
+ for val in ('nan', '-nan'):
+ r, f, d = p.opFloatDouble(float(val), float(val))
+ test(math.isnan(r) and math.isnan(f) and math.isnan(d))
+
try:
r, f, d = p.opFloatDouble(3.402823466E38*2, 0.0)
test(False)