summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHugo van Kemenade <1324225+hugovk@users.noreply.github.com>2024-03-26 09:13:32 (GMT)
committerGitHub <noreply@github.com>2024-03-26 09:13:32 (GMT)
commit771902c257372e6c4df1ead4e8c46308561db7a7 (patch)
treecb579ba4a8ad869e7002862ed3090e849d3339a2
parentea9a296fce2f786b4cf43c7924e5de01061f27ca (diff)
downloadcpython-771902c257372e6c4df1ead4e8c46308561db7a7.zip
cpython-771902c257372e6c4df1ead4e8c46308561db7a7.tar.gz
cpython-771902c257372e6c4df1ead4e8c46308561db7a7.tar.bz2
gh-83845: Add tests for operator module (#115883)
Co-authored-by: Karthikeyan Singaravelan <tir.karthi@gmail.com>
-rw-r--r--Lib/test/test_operator.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/Lib/test/test_operator.py b/Lib/test/test_operator.py
index 1db738d..0d34d67 100644
--- a/Lib/test/test_operator.py
+++ b/Lib/test/test_operator.py
@@ -1,6 +1,8 @@
import unittest
import pickle
import sys
+from decimal import Decimal
+from fractions import Fraction
from test import support
from test.support import import_helper
@@ -508,6 +510,44 @@ class OperatorTestCase:
self.assertEqual(operator.ixor (c, 5), "ixor")
self.assertEqual(operator.iconcat (c, c), "iadd")
+ def test_iconcat_without_getitem(self):
+ operator = self.module
+
+ msg = "'int' object can't be concatenated"
+ with self.assertRaisesRegex(TypeError, msg):
+ operator.iconcat(1, 0.5)
+
+ def test_index(self):
+ operator = self.module
+ class X:
+ def __index__(self):
+ return 1
+
+ self.assertEqual(operator.index(X()), 1)
+ self.assertEqual(operator.index(0), 0)
+ self.assertEqual(operator.index(1), 1)
+ self.assertEqual(operator.index(2), 2)
+ with self.assertRaises((AttributeError, TypeError)):
+ operator.index(1.5)
+ with self.assertRaises((AttributeError, TypeError)):
+ operator.index(Fraction(3, 7))
+ with self.assertRaises((AttributeError, TypeError)):
+ operator.index(Decimal(1))
+ with self.assertRaises((AttributeError, TypeError)):
+ operator.index(None)
+
+ def test_not_(self):
+ operator = self.module
+ class C:
+ def __bool__(self):
+ raise SyntaxError
+ self.assertRaises(TypeError, operator.not_)
+ self.assertRaises(SyntaxError, operator.not_, C())
+ self.assertFalse(operator.not_(5))
+ self.assertFalse(operator.not_([0]))
+ self.assertTrue(operator.not_(0))
+ self.assertTrue(operator.not_([]))
+
def test_length_hint(self):
operator = self.module
class X(object):
@@ -533,6 +573,13 @@ class OperatorTestCase:
with self.assertRaises(LookupError):
operator.length_hint(X(LookupError))
+ class Y: pass
+
+ msg = "'str' object cannot be interpreted as an integer"
+ with self.assertRaisesRegex(TypeError, msg):
+ operator.length_hint(X(2), "abc")
+ self.assertEqual(operator.length_hint(Y(), 10), 10)
+
def test_call(self):
operator = self.module