[pypy-commit] pypy default: be a lot more systematic about testing the rbigint.int_* variants. This

cfbolz pypy.commits at gmail.com
Sun Feb 4 07:53:04 EST 2018


Author: Carl Friedrich Bolz-Tereick <cfbolz at gmx.de>
Branch: 
Changeset: r93747:f225421c6b26
Date: 2018-02-03 23:22 +0100
http://bitbucket.org/pypy/pypy/changeset/f225421c6b26/

Log:	be a lot more systematic about testing the rbigint.int_* variants.
	This increases test coverage

diff --git a/rpython/rlib/test/test_rbigint.py b/rpython/rlib/test/test_rbigint.py
--- a/rpython/rlib/test/test_rbigint.py
+++ b/rpython/rlib/test/test_rbigint.py
@@ -17,15 +17,31 @@
 
 from hypothesis import given, strategies
 
+def gen_signs(l):
+    for s in l:
+        if s == 0:
+            yield s
+        else:
+            yield s
+            yield -s
+
 long_vals_not_too_big = range(17) + [
-        37, 50,
+        37, 39, 50,
         127, 128, 129, 511, 512, 513, sys.maxint, sys.maxint + 1,
+        12345678901234567890L,
         123456789123456789000000L,
-        ]
+]
 
 long_vals = long_vals_not_too_big + [
         1 << 100, 3 ** 10000]
 
+int_vals = range(33) + [
+        1000,
+        0x11111111, 0x11111112, 8888,
+        9999, sys.maxint, 2 ** 19, 2 ** 18 - 1
+]
+signed_int_vals = list(gen_signs(int_vals)) + [-sys.maxint-1]
+
 class TestRLong(object):
     def test_simple(self):
         for op1 in [-2, -1, 0, 1, 2, 50]:
@@ -121,12 +137,14 @@
                 rl_op2 = rbigint.fromlong(op2)
                 r1 = rl_op1.mod(rl_op2)
                 r2 = op1 % op2
-                print op1, op2
+
                 assert r1.tolong() == r2
 
     def test_int_mod(self):
         for x in gen_signs(long_vals):
-            for y in gen_signs([1, 2, 4, 8, 8888, sys.maxint, 2 ** 19, 2 ** 18 - 1]):
+            for y in signed_int_vals:
+                if not y:
+                    continue
                 op1 = rbigint.fromlong(x)
                 r1 = op1.int_mod(y)
                 r2 = x % y
@@ -158,13 +176,6 @@
         assert not (a1 == a3)
 
 
-def gen_signs(l):
-    for s in l:
-        if s == 0:
-            yield s
-        else:
-            yield s
-            yield -s
 
 def bigint(lst, sign):
     for digit in lst:
@@ -266,7 +277,7 @@
 
     def test_int_add(self):
         for x in gen_signs(long_vals):
-            for y in gen_signs([0, 1, 9999, sys.maxint, 2 ** 19, 2 ** 18 - 1]):
+            for y in signed_int_vals:
                 f1 = rbigint.fromlong(x)
                 result = f1.int_add(y)
                 assert result.tolong() == x + y
@@ -283,7 +294,7 @@
 
     def test_int_sub(self):
         for x in gen_signs([0, 123456789123456789000000L, 1 << 100, 3 ** 10000]):
-            for y in gen_signs([0, 1, 8888, sys.maxint, 2 ** 19, 2 ** 18 - 1]):
+            for y in signed_int_vals:
                 f1 = rbigint.fromlong(x)
                 result = f1.int_sub(y)
                 assert result.tolong() == x - y
@@ -304,8 +315,8 @@
             assert result.tolong() == x * x
 
     def test_int_mul(self):
-        for x in gen_signs([39, 128, 111111111, 123456789123456789000000L, 1 << 100, 3 ** 10000]):
-            for y in gen_signs([0, 1, 8888, sys.maxint, 2 ** 19, 2 ** 18 - 1]):
+        for x in gen_signs(long_vals):
+            for y in signed_int_vals:
                 f1 = rbigint.fromlong(x)
                 result = f1.int_mul(y)
                 assert result.tolong() == x * y
@@ -394,14 +405,14 @@
 
     def test_int_comparison(self):
         for x in gen_signs(long_vals):
-            for y in gen_signs([0, 1, 0x11111111, 0x11111112, 8888, sys.maxint, 2 ** 19, 2 ** 18 - 1]):
+            for y in signed_int_vals:
                 f1 = rbigint.fromlong(x)
-                assert (x < y) ==  f1.int_lt(y)
-                assert (x <= y) ==  f1.int_le(y)
-                assert (x > y) ==  f1.int_gt(y)
-                assert (x >= y) ==  f1.int_ge(y)
-                assert (x == y) ==  f1.int_eq(y)
-                assert (x != y) ==  f1.int_ne(y)
+                assert (x < y) == f1.int_lt(y)
+                assert (x <= y) == f1.int_le(y)
+                assert (x > y) == f1.int_gt(y)
+                assert (x >= y) == f1.int_ge(y)
+                assert (x == y) == f1.int_eq(y)
+                assert (x != y) == f1.int_ne(y)
 
     def test_order(self):
         f6 = rbigint.fromint(6)


More information about the pypy-commit mailing list