From 4c02e54298b0f955c5d60023310b724baa890d67 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Thu, 1 Oct 2015 17:57:36 +0100
Subject: [PATCH] py/mpz: Raise NotImplError instead of failing assertion.

---
 py/mpz.c                        |  9 ++++++---
 tests/misc/non_compliant.py     | 18 ++++++++++++++++++
 tests/misc/non_compliant.py.exp |  3 +++
 3 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/py/mpz.c b/py/mpz.c
index 3bd309041..e7d9972e0 100644
--- a/py/mpz.c
+++ b/py/mpz.c
@@ -29,6 +29,9 @@
 
 #include "py/mpz.h"
 
+// this is only needed for mp_not_implemented, which should eventually be removed
+#include "py/runtime.h"
+
 #if MICROPY_LONGINT_IMPL == MICROPY_LONGINT_IMPL_MPZ
 
 #define DIG_SIZE (MPZ_DIG_SIZE)
@@ -1108,7 +1111,7 @@ void mpz_and_inpl(mpz_t *dest, const mpz_t *lhs, const mpz_t *rhs) {
             dest->neg = 0;
         } else {
             // TODO both args are negative
-            assert(0);
+            mp_not_implemented("bignum and with negative args");
         }
     } else {
         // args have different sign
@@ -1141,7 +1144,7 @@ void mpz_or_inpl(mpz_t *dest, const mpz_t *lhs, const mpz_t *rhs) {
     } else {
         mpz_need_dig(dest, lhs->len);
         // TODO
-        assert(0);
+        mp_not_implemented("bignum or with negative args");
 //        dest->len = mpn_or_neg(dest->dig, lhs->dig, lhs->len, rhs->dig, rhs->len);
     }
 
@@ -1164,7 +1167,7 @@ void mpz_xor_inpl(mpz_t *dest, const mpz_t *lhs, const mpz_t *rhs) {
     } else {
         mpz_need_dig(dest, lhs->len);
         // TODO
-        assert(0);
+        mp_not_implemented("bignum xor with negative args");
 //        dest->len = mpn_xor_neg(dest->dig, lhs->dig, lhs->len, rhs->dig, rhs->len);
     }
 
diff --git a/tests/misc/non_compliant.py b/tests/misc/non_compliant.py
index de8457906..0cf462abb 100644
--- a/tests/misc/non_compliant.py
+++ b/tests/misc/non_compliant.py
@@ -69,3 +69,21 @@ try:
     b'123'[0:3:2]
 except NotImplementedError:
     print('NotImplementedError')
+
+# mpz and with both args negative
+try:
+    -(1<<70) & -2
+except NotImplementedError:
+    print('NotImplementedError')
+
+# mpz or with args opposite sign
+try:
+    -(1<<70) | 2
+except NotImplementedError:
+    print('NotImplementedError')
+
+# mpz xor with args opposite sign
+try:
+    -(1<<70) ^ 2
+except NotImplementedError:
+    print('NotImplementedError')
diff --git a/tests/misc/non_compliant.py.exp b/tests/misc/non_compliant.py.exp
index 28b1470d7..5937ccb2f 100644
--- a/tests/misc/non_compliant.py.exp
+++ b/tests/misc/non_compliant.py.exp
@@ -9,3 +9,6 @@ NotImplementedError
 NotImplementedError
 NotImplementedError
 NotImplementedError
+NotImplementedError
+NotImplementedError
+NotImplementedError
-- 
GitLab