From a9dc9b8f6dc29d842f0a7427cc3cf068ae1cfbea Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Tue, 27 Jan 2015 17:47:38 +0000
Subject: [PATCH] py: Fix comparison of minus-zero long int.

---
 py/mpz.c                        |  4 ++++
 tests/basics/int_big_zeroone.py | 14 ++++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/py/mpz.c b/py/mpz.c
index c0a3d4b0b..a056a6e8a 100644
--- a/py/mpz.c
+++ b/py/mpz.c
@@ -820,6 +820,10 @@ bool mpz_is_even(const mpz_t *z) {
 }
 
 int mpz_cmp(const mpz_t *z1, const mpz_t *z2) {
+    // to catch comparison of -0 with +0
+    if (z1->len == 0 && z2->len == 0) {
+        return 0;
+    }
     int cmp = (int)z2->neg - (int)z1->neg;
     if (cmp != 0) {
         return cmp;
diff --git a/tests/basics/int_big_zeroone.py b/tests/basics/int_big_zeroone.py
index e467714bd..7e0b7a720 100644
--- a/tests/basics/int_big_zeroone.py
+++ b/tests/basics/int_big_zeroone.py
@@ -12,3 +12,17 @@ print([-c for c in cases])
 print([~c for c in cases])
 print([c >> 1 for c in cases])
 print([c << 1 for c in cases])
+
+# comparison of 0/-0/+0
+print(long_zero == 0)
+print(long_neg_zero == 0)
+print(long_one - 1 == 0)
+print(long_neg_one + 1 == 0)
+print(long_zero < 1)
+print(long_zero < -1)
+print(long_zero > 1)
+print(long_zero > -1)
+print(long_neg_zero < 1)
+print(long_neg_zero < -1)
+print(long_neg_zero > 1)
+print(long_neg_zero > -1)
-- 
GitLab