summaryrefslogtreecommitdiff
path: root/tests/basics/class_notimpl.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/basics/class_notimpl.py')
-rw-r--r--tests/basics/class_notimpl.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/tests/basics/class_notimpl.py b/tests/basics/class_notimpl.py
new file mode 100644
index 000000000..7fd8166f9
--- /dev/null
+++ b/tests/basics/class_notimpl.py
@@ -0,0 +1,50 @@
+# Test that returning of NotImplemented from binary op methods leads to
+# TypeError.
+try:
+ NotImplemented
+except NameError:
+ print("SKIP")
+ raise SystemExit
+
+class C:
+ def __init__(self, value):
+ self.value = value
+
+ def __str__(self):
+ return "C(%s)" % self.value
+
+ def __add__(self, rhs):
+ print(self, '+', rhs)
+ return NotImplemented
+
+ def __sub__(self, rhs):
+ print(self, '-', rhs)
+ return NotImplemented
+
+ def __lt__(self, rhs):
+ print(self, '<', rhs)
+ return NotImplemented
+
+ def __neg__(self):
+ print('-', self)
+ return NotImplemented
+
+c = C(0)
+
+try:
+ c + 1
+except TypeError:
+ print("TypeError")
+
+try:
+ c - 2
+except TypeError:
+ print("TypeError")
+
+try:
+ c < 1
+except TypeError:
+ print("TypeError")
+
+# NotImplemented isn't handled specially in unary methods
+print(-c)