From bbb08431f3c45d94c1e6aa0762b8f13ccce1fe8e Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Thu, 8 Feb 2018 14:35:43 +1100
Subject: [PATCH] py/objfloat: Fix case of raising 0 to -infinity.

It was raising an exception but it should return infinity.
---
 py/objfloat.c                    |  2 +-
 tests/float/builtin_float_pow.py | 11 +++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)
 create mode 100644 tests/float/builtin_float_pow.py

diff --git a/py/objfloat.c b/py/objfloat.c
index 75212a4d2..e4d5a6570 100644
--- a/py/objfloat.c
+++ b/py/objfloat.c
@@ -293,7 +293,7 @@ mp_obj_t mp_obj_float_binary_op(mp_binary_op_t op, mp_float_t lhs_val, mp_obj_t
             break;
         case MP_BINARY_OP_POWER:
         case MP_BINARY_OP_INPLACE_POWER:
-            if (lhs_val == 0 && rhs_val < 0) {
+            if (lhs_val == 0 && rhs_val < 0 && !isinf(rhs_val)) {
                 goto zero_division_error;
             }
             if (lhs_val < 0 && rhs_val != MICROPY_FLOAT_C_FUN(floor)(rhs_val)) {
diff --git a/tests/float/builtin_float_pow.py b/tests/float/builtin_float_pow.py
new file mode 100644
index 000000000..2de1b4817
--- /dev/null
+++ b/tests/float/builtin_float_pow.py
@@ -0,0 +1,11 @@
+# test builtin pow function with float args
+
+print(pow(0.0, 0.0))
+print(pow(0, 1.0))
+print(pow(1.0, 1))
+print(pow(2.0, 3.0))
+print(pow(2.0, -4.0))
+
+print(pow(0.0, float('inf')))
+print(pow(0.0, float('-inf')))
+print(pow(0.0, float('nan')))
-- 
GitLab