Skip to content

Commit 248d362

Browse files
committed
reduce sizes of calculated numbers to not hang on cpython, include expected result in test data
1 parent 09a7152 commit 248d362

File tree

1 file changed

+76
-70
lines changed

1 file changed

+76
-70
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_binary_arithmetic.py

Lines changed: 76 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -299,73 +299,79 @@ def test_pow():
299299
# (0xffffffffffffffff >> 63) is used to produce a non-narrowed int
300300
assert 2**(0xffffffffffffffff >> 63) == 2
301301

302-
# try:
303-
# 2 ** (2**128)
304-
# except ArithmeticError:
305-
# assert True
306-
# else:
307-
# assert False
308-
309-
# assert 2 ** -(2**128) == 0.0
310-
311-
# class X(float):
312-
# def __rpow__(self, other):
313-
# return 42
314-
315-
# assert 2 ** X() == 42
316-
317-
# try:
318-
# 2.0 .__pow__(2, 2)
319-
# except TypeError as e:
320-
# assert True
321-
# else:
322-
# assert False
323-
324-
# try:
325-
# 2.0 .__pow__(2.0, 2.0)
326-
# except TypeError as e:
327-
# assert True
328-
# else:
329-
# assert False
330-
331-
# assert 2 ** 2.0 == 4.0
332-
333-
# assert 2 .__pow__("a") == NotImplemented
334-
# assert 2 .__pow__("a", 2) == NotImplemented
335-
# assert 2 .__pow__(2**30, 2**128) == 0
336-
337-
# # crafted to try specializations
338-
# def mypow(a, b, c):
339-
# return a.__pow__(b, c)
340-
341-
# values = [
342-
# [1, 2, None], # long
343-
# [1, 128, None], # BigInteger
344-
# [1, -2, None], # double result
345-
# [1, 0xffffffffffffffffffffffffffffffff & 0x8000, None], # narrow to long
346-
# [2, 0xffffffffffffffffffffffffffffffff & 0x8000, None], # cannot narrow
347-
# [2, -(0xffffffffffffffffffffffffffffffff & 0x8000), None], # double result
348-
# [2**128, 0, None], # narrow to long
349-
# [2**128, 1, None], # cannot narrow
350-
# [2**128, -2, None], # double
351-
# [2**128, 0xffffffffffffffffffffffffffffffff & 0x8000, None], # large
352-
# [2**128, -(0xffffffffffffffffffffffffffffffff & 0x8000), None], # double result
353-
# [1, 2, 3], # fast path
354-
# [2, 2**30, 2**128], # generic
355-
# ] + []
356-
357-
# if sys.version_info.minor >= 8:
358-
# values += [
359-
# [1, -2, 3], # fast path double
360-
# ]
361-
362-
# for args in values:
363-
# assert mypow(*args) == pow(*args), f"{args} -> {mypow(*args)} == {pow(*args)}"
364-
365-
# def mypow_rev(a, b, c):
366-
# return a.__pow__(b, c)
367-
368-
# for args in reversed(values):
369-
# assert mypow_rev(*args) == pow(*args), f"{args} -> {mypow(*args)} == {pow(*args)}"
370-
371-
# assert 2**1.0 == 2.0
302+
if sys.implementation.name == "graalpython":
303+
try:
304+
2 ** (2**128)
305+
except ArithmeticError:
306+
assert True
307+
else:
308+
assert False
309+
310+
assert 2 ** -(2**128) == 0.0
311+
312+
class X(float):
313+
def __rpow__(self, other):
314+
return 42
315+
316+
assert 2 ** X() == 42
317+
318+
try:
319+
2.0 .__pow__(2, 2)
320+
except TypeError as e:
321+
assert True
322+
else:
323+
assert False
324+
325+
try:
326+
2.0 .__pow__(2.0, 2.0)
327+
except TypeError as e:
328+
assert True
329+
else:
330+
assert False
331+
332+
assert 2 ** 2.0 == 4.0
333+
334+
assert 2 .__pow__("a") == NotImplemented
335+
assert 2 .__pow__("a", 2) == NotImplemented
336+
assert 2 .__pow__(2**30, 2**128) == 0
337+
338+
# crafted to try specializations
339+
def mypow(a, b, c):
340+
return a.__pow__(b, c)
341+
342+
values = [
343+
[1, 2, None, 1], # long
344+
[1, 128, None, 1], # BigInteger
345+
[1, -2, None, 1.0], # double result
346+
[1, 0xffffffffffffffffffffffffffffffff & 0x80, None, 1], # narrow to long
347+
[2, 0xffffffffffffffffffffffffffffffff & 0x80, None, 340282366920938463463374607431768211456], # cannot narrow
348+
[2, -(0xffffffffffffffffffffffffffffffff & 0x80), None, 2.938735877055719e-39], # double result
349+
[2**128, 0, None, 1], # narrow to long
350+
[2**128, 1, None, 340282366920938463463374607431768211456], # cannot narrow
351+
[2**128, -2, None, 8.636168555094445e-78], # double
352+
[2**128, 0xffffffffffffffffffffffffffffffff & 0x2, None, 115792089237316195423570985008687907853269984665640564039457584007913129639936], # large
353+
[2**128, -(0xffffffffffffffffffffffffffffffff & 0x8), None, 5.562684646268003e-309], # double result
354+
[1, 2, 3, 1], # fast path
355+
[2, 2**30, 2**128, 0], # generic
356+
] + []
357+
358+
if sys.version_info.minor >= 8:
359+
values += [
360+
[1, -2, 3, 1], # fast path double
361+
[1, 2, -3, -2], # negative mod
362+
[1, -2, -3, -2], # negative mod and negative right
363+
[1, -2**128, 3, 1], # mod and large negative right
364+
[1, -2**128, -3, -2], # negative mod and large negative right
365+
[1, -2**128, -2**64, -18446744073709551615], # large negative mod and large negative right
366+
]
367+
368+
for args in values:
369+
assert mypow(*args[:-1]) == args[-1], "%r -> %r == %r" % (args, mypow(*args[:-1]), args[-1])
370+
371+
def mypow_rev(a, b, c):
372+
return a.__pow__(b, c)
373+
374+
for args in reversed(values):
375+
assert mypow_rev(*args[:-1]) == args[-1], "%r -> %r == %r" % (args, mypow(*args[:-1]), args[-1])
376+
377+
assert 2**1.0 == 2.0

0 commit comments

Comments
 (0)