Skip to content

Commit

Permalink
More tests
Browse files Browse the repository at this point in the history
  • Loading branch information
skirpichev committed Nov 15, 2023
1 parent 3f4c96e commit daf4b6f
Showing 1 changed file with 40 additions and 1 deletion.
41 changes: 40 additions & 1 deletion Lib/test/test_capi/test_number.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import unittest
import sys
import warnings

from test.support import import_helper
Expand Down Expand Up @@ -129,8 +130,32 @@ def test_power(self):
# Test PyNumber_Power()
power = _testcapi.number_power

self.assertEqual(power(4, 3, None), pow(4, 3))
class IntSubclass(int):
pass

class IntSubclass2(int):
def __new__(cls, value):
obj = super().__new__(cls)
obj.value = value
return obj

def __rpow__(self, other, mod=None):
return self.value

self.assertEqual(power(4, 3, NULL), pow(4, 3))
self.assertEqual(power(0.5, 2, NULL), pow(0.5, 2))
self.assertEqual(power(2, -1.0, NULL), pow(2, -1.0))
self.assertEqual(power(4, 11, 5), pow(4, 11, 5))
self.assertEqual(power(4, IntSubclass(11), NULL), pow(4, 11))
self.assertEqual(power(4, IntSubclass2(11), NULL), 11)
self.assertEqual(power(4, IntSubclass2(NotImplemented), NULL), 1)

self.assertRaises(TypeError, power, "spam", 42, NULL)
self.assertRaises(TypeError, power, object(), 42, NULL)
self.assertRaises(TypeError, power, 42, "spam", NULL)
self.assertRaises(TypeError, power, 42, object(), NULL)
self.assertRaises(TypeError, power, 1, 2, "spam")
self.assertRaises(TypeError, power, 1, 2, object())

# CRASHES power(NULL, 42)
# CRASHES power(42, NULL)
Expand Down Expand Up @@ -190,6 +215,20 @@ def test_rshift(self):

self.assertEqual(rshift(5, 3), 5 >> 3)

# RHS implements __rrshift__ but returns NotImplemented
with self.assertRaises(TypeError) as context:
print >> 42
self.assertIn('Did you mean "print(<message>, '
'file=<output_stream>)"?', str(context.exception))

# Test stream redirection hint is specific to print
with self.assertRaises(TypeError) as context:
max >> sys.stderr
self.assertNotIn('Did you mean ', str(context.exception))

with self.assertRaises(TypeError) as context:
1 >> "spam"

# CRASHES rshift(NULL, 1)
# CRASHES rshift(1, NULL)

Expand Down

0 comments on commit daf4b6f

Please sign in to comment.