|
3 | 3 | import operator |
4 | 4 | import pickle |
5 | 5 | import doctest |
| 6 | +import platform |
6 | 7 |
|
7 | 8 | from flint.utils.flint_exceptions import DomainError |
8 | 9 |
|
|
11 | 12 | if sys.version_info[0] >= 3: |
12 | 13 | long = int |
13 | 14 |
|
| 15 | +PYPY = platform.python_implementation() == "PyPy" |
| 16 | + |
14 | 17 | ctx = flint.ctx |
15 | 18 |
|
16 | 19 | def raises(f, exception): |
@@ -141,13 +144,17 @@ def test_fmpz(): |
141 | 144 | for a, b, c, ab_mod_c in pow_mod_examples: |
142 | 145 | assert pow(a, b, c) == ab_mod_c |
143 | 146 | assert pow(flint.fmpz(a), b, c) == ab_mod_c |
144 | | - assert pow(a, flint.fmpz(b), c) == ab_mod_c |
145 | | - assert pow(a, b, flint.fmpz(c)) == ab_mod_c |
146 | 147 | assert pow(flint.fmpz(a), flint.fmpz(b), c) == ab_mod_c |
147 | 148 | assert pow(flint.fmpz(a), b, flint.fmpz(c)) == ab_mod_c |
148 | | - assert pow(a, flint.fmpz(b), flint.fmpz(c)) == ab_mod_c |
149 | 149 | assert pow(flint.fmpz(a), flint.fmpz(b), flint.fmpz(c)) == ab_mod_c |
150 | 150 |
|
| 151 | + # 3-arg pow cannot be made to work with fmpz on PyPy |
| 152 | + # https://github.com/flintlib/python-flint/issues/74 |
| 153 | + if not PYPY: |
| 154 | + assert pow(a, flint.fmpz(b), c) == ab_mod_c |
| 155 | + assert pow(a, b, flint.fmpz(c)) == ab_mod_c |
| 156 | + assert pow(a, flint.fmpz(b), flint.fmpz(c)) == ab_mod_c |
| 157 | + |
151 | 158 | assert raises(lambda: pow(flint.fmpz(2), 2, 0), ValueError) |
152 | 159 | # XXX: Handle negative modulus like int? |
153 | 160 | assert raises(lambda: pow(flint.fmpz(2), 2, -1), ValueError) |
|
0 commit comments