diff options
author | Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> | 2024-03-26 09:13:32 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-26 09:13:32 (GMT) |
commit | 771902c257372e6c4df1ead4e8c46308561db7a7 (patch) | |
tree | cb579ba4a8ad869e7002862ed3090e849d3339a2 | |
parent | ea9a296fce2f786b4cf43c7924e5de01061f27ca (diff) | |
download | cpython-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.py | 47 |
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 |